...

вторник, 11 июня 2013 г.

Wolfram-Math-in-Logistics: Маятниковые маршруты

LogoКак и обещал в своём прошлом посте (тут), что в случае если он будет «принят», я продолжаю цикл статей об использовании Wolfram Mathematica для решения небольших прикладных задач в логистике. Жаль только читатели поскупились на комментарии.

Сегодня мы рассмотрим маятниковые маршруты. Мы будем преследовать две цели: с одной стороны рассмотрим три вида маятниковых маршрутов, а именно маятниковый маршрут с холостым обратным пробегом, с не полностью груженым обратным пробегом, с полностью груженым обратным пробегом, и их технико-эксплуатационные показатели, с другой рассмотрим как можно автоматизировать расчёт этих показателей, дабы избавить себя от излишнего вбивания чисел в калькулятор. Трудно сказать насколько такая автоматизация эффективна и полезна, но работать над этим было по крайней мере интересно.

Под катом много картинок, но не бойтесь, их общий вес около 640 КБ. Как говорил один советский летчик-космонавт «Поехали!».



Думаю все понимают что такое маршруты и почему они называются маятниковыми. Всем будут понятны показатели этих маршрутов: длина маршрута, груженный пробег, холостой пробег и тп. Единственное, что может вызвать непонимание это определения оборота и ездки, где:


  • оборот автомобиля — законченный цикл движения, т.е. движение от начального до конечного пункта и обратно;

  • ездка — цикл транспортного процесса, т.е. движение от начального до конечного пункта.




Маятниковый маршрут с обратным холостым пробегом




Первым делом необходимо взглянуть на схематическое изображение подобного маршрута, чтобы иметь представление о том, с чем имеем дело. Для этого построим граф. Граф, он же Graph в Mathematica, идеально подходит для такого рода задачи, когда нужно отобразить несколько грузопунктов и соединить их линиями, длина которых нам сейчас не важна.


Хорошо, но совершенно не ясно где какой грузопункт и не ясно что значат эти стрелки. При помощи EdgeLabels и VertexLabels, названия которых говорят сами за себя, добавим текст в наш граф.



Уже лучше, но внешне выглядит не похоже на маятниковый маршрут, пора изменить это. Параметр GraphLayout с значением CircularEmbedding позволяет нам «закрутить» граф.



ImagePadding необходим для того, что бы весь текст помещался в рамки отображения графа. Отлично, остаётся только добавить красок и навести марафет.



Теперь, когда у нас перед глазами образец, рассчитаем показатели данного вида маршрута.


Дано




Решение



1. Определяем время оборота автомобиля на маршруте, ч:


2. Определяем количество оборотов за время работы автомобиля на маршруте:


3. Определяем возможную массу груза, перевозимую автомобилем за день, т:


4. Определяем необходимое количество автомобилей для перевозки 320т. груза:


5. Определяем коэффициент использования пробега:


Маятниковый маршрут с не полностью груженым обратным пробегом




Попробуем нарисовать граф. Почему попробуем? Потому что мне так и не удалось довести его до такого состояния, когда автоматически выводится граф в готовом виде. И только при помощи рук возможно отобразить его в необходимом виде. Что имеем:


Надеюсь что более продвинутые в Wolfram Mathematica пользователи помогут мне получить необходимый результат.


Дано




Решение



1. Определяем время оборота автомобиля, ч:


2. Определяем количество оборотов:


3. Определяем количество ездок:


4. Определяем производительность автомобиля, т:


5. Определяем необходимое количество автомобилей:


6. Определяем коэффициент использования пробега за 1 оборот:


Маятниковый маршрут с полностью груженым обратным пробегом




С построением этого графа проблем не возникло:


Дано




Решение



1. Определяем время оборота автомобиля, ч:


2. Определяем количество оборотов и ездок:


3. Объём перевозки груза, т:


4. Необходимое количество автомобилей для перевозки грузов:


5. Определяем коэффициент использования пробега за один день:


Автоматизация расчёта показателей маятниковых маршрутов




Проделано не мало работы, но какой в ней смысл, если большая часть формул считается на калькуляторе за полминуты? Поэтому мы не остановимся на достигнутом и пойдём дальше. Мы создадим интерфейс, который будет за нас считать все показатели, наше дело только «скормить» ему исходные данные.

Начнём с простого, а именно с поля ввода (оно же и поле вывода результата):


Отлично, но непонятно что следует вводить или что выводится в этом поле. При помощи Row создаём строку, состоящую уже из нескольких элементов:



Поле вывода будет соответственно содержать в себе некую расчётную формулу, например:



Скомпонуем несколько таких полей для ввода и вывода:



Я думаю в структуре компоновки легко разобраться. Множество Row выстраиваются в колонки Column. Сами строки чередуются с описанием для них, простые строки. Style позволяет присвоить тексту какой-нибудь цвет, вроде Brown, Gray и тп. Результат выглядит так:



Упакуем всю структуру сначала в Panel, чтобы получить рамку, а затем ещё и в Style, чтобы получить возможность изменять оформление полей, а точнее их размер:



Но и это не всё. Всю полученную структуру помещаем в DynamicModule[{Локальные переменные}, Deploy[]]. Очевидно, что это позволит нам создать набор локальных переменных, полностью изолировать структуру от любых расчётов вне её. Такая структура будет легко переносима или легко импортируется из одного блокнота в другой. Результат:



Окончательный внешний вид



Автопоказатели для маятникового маршрута с обратным холостым пробегом



Исходный код




Внешний вид


Автопоказатели для маятникового маршрута с не полностью груженым обратным пробегом



Исходный код




Внешний вид


Автопоказатели для маятникового маршрута с полностью груженым обратным пробегом



Исходный код




Внешний вид


Используемая литература



Неруш Ю. М. Логистика: учеб. — 4-е изд., перераб. и доп. — М.: ТК Велби, H54 Изд-во Проспект, 2008 — 520 с.

ISBN 978-5-482-01995-5

Рекомендую купить, например, здесь: OZON.ru
Исходники



Проект в виде репы на GitHub — Wolfram-Math-in-Logistics

Буду очень рад видеть ваши вопросы, рекомендации и возможно форки.
Подборка ссылок



This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Комментариев нет:

Отправить комментарий