Файл: Лабораторная работа Разработка модели внутризаводской логистики.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.12.2023

Просмотров: 32

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лабораторная работа № Разработка модели внутризаводской логистики
З
адача смоделировать внутризаводскую логистику между складами заготовок, цехом сборки и складом готовой продукции. У цеха есть свой парк грузовиков, которые доставляют детали для сборки или продукцию на склады. Детали доставляются в цех сборки, если их запас в цехе стал менее 10 штук. Продукция вывозится из цеха разв час.
Этап 1. Создание агентов модели
Создайте новую модель и назовите ее Logistic (рис. 2.1). Задайте единицы модельного времени — минуты.
Рис. 2.1. Создание новой модели
Лабораторная работа № В этой работе будет использован агентный подход. Все инструменты, необходимые для агентного подхода, находятся в библиотеке Агент на вкладке Палитра (рис. Рис. 2.2. Библиотека Агент
Задание агента Перейдите в библиотеку и перетащите компонент Агент на рабочее поле модели (рис. 2.3).
Разработка модели внутризаводской логистики Рис. 2.3. Компонент Агент
Откроется мастер создания агентов. Поскольку все склады и цех будут в единственном экземпляре, то мы будем создавать Единственного агента. Выберите Я создаю единственного агента на первом шаге Мастера (рис. Рис. 2.4. Первый шаг мастера создания агента Storage
Лабораторная работа № На втором шаге мастера задайте имя создаваемого агента Storage рис. Рис. 2.5. Второй шаг мастера создания агента На третьем шаге мастера задайте анимацию агента (рис. Рис. 2.6. Третий шаг мастера создания агента Storage
Разработка модели внутризаводской логистики Наследующем шаге мастера (рис. 2.7) задайте параметры агента, а именно переменную для хранения количества деталей на складе — number_of_detal
. Поскольку детали измеряются целыми числами, то тип этой переменной Рис. 2.7. Четвертый шаг мастера создания агента Нажмите кнопку Готово — на рабочем поле появится агент Storage рис. Рис. 2.8. Агент Storage на рабочем поле модели
Задание агента Теперь создайте агента Storage_Production. Для этого перетащите элемент Агент на рабочее поле модели и пройдите шаги мастера с 1 по 4, задав имя агента (Storage_Production) и его анимацию (Склад 1). На втором шаге мастера будет предложен выбор между созданием нового типа агента и использованием существующего. Выберите новый тип агента. В результате на рабочем поле будут два агента Storage ирис Лабораторная работа № Рис. 2.9. Агенты Storage и Storage_Production на рабочем поле модели
Задание популяции агентов Теперь нужно создать множество агентов для моделирования грузовиков. Перетащите элемент Агент и на первом шаге мастера создания агента выберите Популяция агентов (рис. Рис. 2.10. Первый шаг мастера создания агентов truck
Разработка модели внутризаводской логистики На втором шаге мастера выберите новый тип агента. На третьем шаге мастера задайте имя агента Truck. При этом одновременно будет создана популяция с именем trucks. На четвертом шаге выберите анимацию агента (рис. Рис. 2.11. Задание анимации агента На пятом шаге ничего ненужно задавать. Нашестом шаге задайте объем популяции — 5 грузовиков. Нажмите кнопку Готово. Должно получиться три агента на рабочем поле (рис. Создание агента Создайте агент Plant. Для этого перетащите элемент Агент на рабочее поле модели и на первом шаге Мастера выберите Создать единственного агента. На втором шаге необходимо создать новый тип агента. На третьем шаге задайте имя агента Plant. На четвертом выберите анимацию (рис. 2.13).
Лабораторная работа № Рис. 2.12. Агенты на рабочем поле
Рис. 2.13. Задание анимации агента Plant
Разработка модели внутризаводской логистики На пятом шаге мастера создайте переменную, в которой будет храниться количество деталей в цехе — number_of_detal_in_plant, типа Рис. 2.14. Задание параметров агента Нажмите кнопку Готово. Должно быть также, как на рис. Рис. 2.15. Результаты этапа 1
Лабораторная работа № Этап 2. Размещение агентов в пространстве модели
Агенты после их создания находятся в пространстве модели там, куда их поместили. Разместим их по координатам модельного пространства. Склад с деталями находится в точке с координатами X = 100,
Y = 200. Склад готовой продукции — X = 1000, Y = 400. Сам цех —
X = 300, Y = Для расстановки всех агентов по их координатам напишем функцию. Для создания функции используется элемент Функция (рис. Рис. 2.16. Элемент Функция
Перетащите его на рабочее поле модели и перейдите в его свойства. В первом разделе свойств задайте имя функции — Set. Далее, поскольку эта функция не должна ничего считать, а должна просто расставить по координатам наших агентов, отметьте пункт Действие (рис. Рис. 2.17. Задание функции Далее, нужно написать тело функции, те. ту программу, которую она будет выполнять. Для этого перейдите в раздел свойств Тело функции и наберите представленный на рис. 2.18 код.
В этом коде идет обращение к функции SetXY (X, Y) агентов storage, storage_Production
, plant и каждого агента из популяции trukcs. Функция) ставит агента в указанные в аргументах функции координаты Разработка модели внутризаводской логистики Рис. 2.18. Тело функции Для того чтобы функция запустилась на выполнение, ее нужно вызвать. Организуем ее вызов при запуске главного агента main. Для этого откройте агент main (рис. 2.19) и щелкните на свободном в модели месте так, чтобы ни один из элементов агента main не был выделен.
Рис. 2.19. Агент Перейдите в свойства агента main ив разделе Действия агента в пункте При запуске вызовите функцию set () (рис. 2.20). Обратите внимание, что после set () нужно поставить знак Запустите модель на выполнение (рис. 2.21).
Лабораторная работа № Рис. 2.20. Вызов функции set (Рис. 2.21. Расположение агентов в модели
Этап 3. Моделирование производства деталей на складе
На складе производятся детали с интенсивностью 5 штук в час. Для моделирования их производства в упрощенном виде, те. будем просто моделировать увеличение количества деталей на 5 штук в час, перейдите в агент storage. В этом агенте уже сеть параметр number_of_detal, который содержит количество деталей на складе (рис. Увеличение количества деталей на складе зададим с помощью элемента Событие. Этот элемент запускает на выполнение либо заданную функцию, либо заданный в нем код
Разработка модели внутризаводской логистики
Рис. 2.22. Окно агента storage Рис. 2.23. Элемент Событие
Перетащите элемент Событие на рабочее поле агента storage и зайдите в свойства элемента Событие (рис. Рис. 2.24. Свойства элемента Задайте имя события — detal_production, тип события — С заданной интенсивностью и Интенсивность 1 разв час. Это значит, что событие будет выполняться разв час. В разделе Действие задайте увеличение параметра number_of_detal на 5 штук. Значит, разв час параметр number_of_detal будет увеличиваться на Запустите модель на выполнение и вовремя работы модели зайдите в агент storage (рис. 2.25).
Лабораторная работа № Рис. 2.25. Переход в агент storage вовремя выполнения моделирования
Рис. 2.26. Агент storage вовремя выполнения моделирования
Как видно из рис. 2.26, событие запускается и параметр number_of_
detal растет.
Этап 4. Моделирование расхода деталей в цехе
Расход деталей в цехе промоделируем также с помощью элемента
Событие
Перейдите в агент plant. В нем уже есть параметр number_of_detal_
in_plant
. Добавим событие, которое будет уменьшать этот параметр на 4 штуки в час. Для этого перетащите элемент Событие на рабочее поле агента plant и задайте его свойства (рис. Запустите модель и зайдите в агент plant. Значение параметра number_of_detal_in_plant должно уменьшаться
Разработка модели внутризаводской логистики Рис. 2.27. Свойства события Этап 5. Моделирование производства изделий в цехе
Для отображения количества произведенных в цехе изделий создадим параметр number_of_izdeliya в агенте plant. Для этого перетащите элемент Параметр на рабочее поле агента plant и задайте его свойства имя параметра и его тип) также, как на рис. Рис. 2.28. Задание параметра number_of_izdeliya
Лабораторная работа № Производство изделий смоделируем путем увеличения параметра number_of_izdeliya на 5 штук в час с помощью элемента Событие. Для этого перетащите элемент Событие на рабочее поле агента plant и задайте его свойства также, как показано на рис. Рис. 2.29. Свойства события Запустите модель и перейдите в агент plant. Значение параметра number_of_izdeliay должно расти.
Этап 6. Моделирование движения грузовика с деталями от цеха к складу
Перейдите в агент Truck. Добавьте в него параметр order типа int. Для этого перетащите элемент Параметр на рабочее поле агента Truck и задайте его параметры также, как на рис. Грузовик в модели может быть в трех состояниях находиться в цехе, находиться на складе, ехать на склад. Для моделирования состояний грузовика используется диаграмма состояний. Все инструменты для ее построения находятся в библиотеке Диаграмма состояний вкладки Палитра (рис. 2.31).
Разработка модели внутризаводской логистики Рис. 2.30. Свойства параметра Рис. 2.31. Библиотека Диаграмма состояний
Перетащите на рабочее поле агента Truck элемент Начало диаграммы состояний и 3 элемента Состояние, дайте им имена и соедините их элементами Переход также, как показано на рис. 2.32.
Лабораторная работа № Рис. 2.32. Диаграмма состояний агента Зайдите в свойства перехода из состояния atPlant в состояние atStorage и задайте их, как показано на рис. Рис. 2.33. Свойства перехода из состояния atPlant в состояние Этот переход будет срабатывать, когда агент Truck получит сообщение. При срабатывании перехода агент Truck перей-
Разработка модели внутризаводской логистики дет в состояние atStorage и выполнит действие, прописанное в разделе Действие, а именно поедет к месту склада. Задать сообщение, при котором будет срабатывать переход, можно любое.
Задайте свойства перехода из состояния atStorage в состояние movingToPlant так, как показано на рис. Рис. 2.34. Свойства перехода из состояния atStorage в состояние Этот переход срабатывает сразу, как только агент прибывает на склад. При этом агент Truck переходит в состояние movingToPlant и выполняются действия, прописанные в разделе Действие, а именно параметр order становится равным количеству деталей на складе и грузовик уезжает в цех.
Задайте свойства перехода из состояния movingToPlant в состояние atPlant так, как показано на рис. Рис. 2.35. Свойства перехода из состояния movingToPlant в состояние atPlant
Лабораторная работа № Этот переход срабатывает сразу, как только агент начинает движение в цех. При этом агент Truck переходит в состояние atPlant ивы- полняются действия, прописанные в разделе Действие, а именно все содержимое параметра order переписывается в параметр number_of_
detal_in_plant агента Plant, асам параметр order обнуляется. Таким образом моделируется доставка деталей со склада в цех.
Задайте скорость движения грузовика 5 км в час, зайдя в свойства агента Truck (рис. Рис. 2.36. Задание скорости движения грузовиков
Этап 7. Моделирование поиска свободного грузовика в цехе
Нам нужно найти в цехе свободный грузовик. Для этого перейдите в агент Грузовик является свободным, если находится в цехе. В модели это состояние грузовика обозначено как atPlant. Для того чтобы найти свободный грузовик, нужно перебрать все грузовики коллекции trucks агента Main и найти такие, которые находятся в состоянии atPlant. Первый найденный и будет нужным нам грузовиком.
Ради разнообразия для написания функции поиска свободного грузовика воспользуемся инструментом Диаграмма действий. Такой инструмент находится в библиотеке Диаграмма действий панели Палитра (рис. 2.37).
Разработка модели внутризаводской логистики Рис. 2.37. Библиотека Диаграмма действий
Перетащите элемент Диаграмма действий на рабочее поле агента
Plant
(рис. Рис. 2.38. Начало диаграммы действий
Перейдите в свойства диаграммы действий и задайте их, как показано на рис. 2.39. В свойствах задается имя функции Find_truck и тип возвращаемого значения — Truck. Это значит, что функция должна найти свободный грузовик, который в модели представлен агентом
Truck
, те. типом данных Truck. Если функция не найдет грузовик, то она вернет Null.
Лабораторная работа № Рис. 2.39. Свойства функции Теперь перетащите элемент Локальная переменная так, чтобы появилась зеленая точка между началом и концом диаграммы (рис. Должно получиться так, как показано на рис. Рис. 2.40. Вставка элемента Локальная переменная
Рис. 2.41. Результат вставки элемента Локальная переменная в диаграмму действий
Задайте свойства элемента Локальная переменная так, как показано на рис. 2.42.
Разработка модели внутризаводской логистики Рис. 2.42. Свойства элемента Локальная переменная
Таким образом была создана локальная переменная для сохранения найденного грузовика.
Поскольку надо организовать поиск по всей популяции грузовиков, то нужен цикл, проверяющий каждый грузовик. Перетащите элемент Цикли вставьте его между локальной переменной и концом диаграммы (рис. Рис. 2.43. Вставка цикла по коллекции
Задайте свойства цикла так, как показано на рис. Здесь задается начало и конец цикла. Цикл начинается с первого элемента коллекции и идет до последнего элемента.
Перетащите элемент Код и вставьте его между циклом и концом диаграммы так, как показано на рис. 2.45.
Лабораторная работа № Рис. 2.44. Свойства цикла
Рис. 2.45. Результат вставки элемента Код
Задайте свойства элемента Код так, как показано на рис. В свойствах в переменную t записывается очередной грузовик из коллекции.
Перетащите элемент Решение и вставьте его между элементами Код и концом диаграммы (рис. Задайте свойства элемента Решение так, как показано на рис. 2.48.
Разработка модели внутризаводской логистики Рис. 2.46. Свойства элемента Код
Рис. 2.47. Вставка элемента Решение
Лабораторная работа № Рис. 2.48. Свойства элемента Решение
В свойствах задано условие проверки, а именно состояние элемента (те. грузовика. Для красоты вводится метка, на которой написано само условие Рис. 2.49. Окончательный вид функции Find_truck
Разработка модели внутризаводской логистики Перетащите элемент Вернуть значение в ветку false и введите в его свойствах null. В элемент Вернуть значение по ветке true введите t рис. 2.49). Это означает, что если грузовик находится в состоянии atPlant
, то функция вернет его значение а если грузовик находится в любом другом состоянии, то функция вернет значение Этап 8. Моделирование отправки грузовика из цеха за деталями на склад
Теперь нужно найденный свободный грузовик отправить на склад за деталями. Для этого используем функцию. В функции будет вызываться функция Find_truck. И, если грузовик будет найден и число деталей будет меньше 5, грузовику будет посылаться сообщение, по которому он стартует на склад.
Перетащите элемент Функция на рабочее поле агента Plant и задайте его свойства так, как показано на рис. Рис. 2.50. Свойства функции detal_deliver
Лабораторная работа № Для вызова функции используется событие, запускаемое каждую минуту. Перетащите элемент Событие и задайте его свойства так, как показано на рис. Рис. 2.51. Свойства события
Запустите модель. Грузовики должны ездить от склада к цеху и обратно. Количество деталей в цехе должно пополняться (рис. Рис. 2.52. Работа модели
Разработка модели внутризаводской логистики Этап 9. Моделирование доставки готовой продукции из цеха на склад
Для доставки готовых изделий на склад готовой продукции используется грузовик большего объема, чем грузовики для доставки на склад деталей. Для него создадим отдельный агент Для этого перейдите в агент main и перетащите элемент Агент на рабочее поле модели. На первом шаге мастера выберите пункт Создать единственного агента. На втором шаге — создать новый тип агента. На третьем шаге задайте имя агента Lorry. На четвертом — выберите анимацию (фура. На пятом шаге создайте параметр агента order типа int. Перейдите в агента Грузовик в модели может быть в трех состояниях находиться в цехе, находиться на складе готовой продукции и ехать на склад. Промоделируем все эти состояния с помощью диаграммы состояний. Постройте диаграмму состояний из трех состояний, просто перетаскивая элементы из библиотеки Диаграмма состояний. Соедините состояния переходами так, как показано на рис. Рис. 2.53. Диаграмма состояний агента Зайдите в свойства перехода из состояния atPlant в состояние atStorage_Production и задайте их так, как на рис. 2.54.
Лабораторная работа № Рис. 2.54. Свойства перехода из состояния atPlant в состояние Такой переход будет происходить при получении сообщения
“to_storage_production”
агентом Lorry. При этом агент начнет движение к агенту storage_Production ив переменную order агента Lorry запишется количество произведенной в цехе продукции.
Выделите переход из состояния atStorage_Production в состояние movingToPlant
. Перейдите в его свойства и задайте их так, как показано на рис. Рис. 2.55. Свойства перехода из состояния atStorage_Production в состояние Такой переход будет происходить сразу после прибытия агента Lorry на склад готовой продукции, причем содержимое переменной order агента Lorry будет записываться в параметр production агента storage_
Production
. После этого грузовик отправляется к цеху
Разработка модели внутризаводской логистики Выделите переход из состояния movingToPlant в состояние atPlant и перейдите в его свойства. Задайте свойства перехода, как показано на рис. Рис. 2.56. Свойства перехода из состояния movingToPlant в состояние Такой переход сработает, когда агент начнет движение в цех. При этом содержимое его параметра order обнулится.
Поскольку грузовик не всегда находится в цехе, в агенте Plant нужно организовать функцию для определения того, свободен ли грузовик в агенте Plant. Назовем ее isFree и построим с помощью Диаграммы действий. Перейдите в агент Plant. С помощью элементов библиотеки Диаграмма действий постройте функцию isFree так, как показано на рис. Рис. 2.57. Функция isFree
Лабораторная работа № Выделите начальный элемент диаграммы и задайте свойства функции так, как показано на рис. Рис. 2.58. Свойства функции Данная функция будет возвращать истину, если грузовик свободен, и ложь, если он занят.
Выделите элемент Решение и задайте его свойства так, как показано на рис. Рис. 2.59. Свойства элемента Решение
В элементе Решение проверяется информация о нахождении грузовика (агент Lorry) в состоянии atPlant, те. он находится в цехе. Если грузовик в цехе, то он свободен
Разработка модели внутризаводской логистики Отправкой грузовика на склад готовой продукции будет заниматься функция izdeliya агента Plant. Перетащите элемент Функция из агент- ной библиотеки и задайте его свойства так, как показано на рис. Рис. 2.60. Свойства функции В этой функции грузовик записывается в виде переменной t. Далее, если в цехе есть готовая продукция (параметр number_of_izdeliya>0) и есть свободный грузовик (функция isFree () возвращает истину, то грузовику посылается сообщение “to_storage_production” ион отправляется на склад готовой продукции.
Для активации этой функции используется событие izdeliya_deliver. Перетащите элемент Событие из агентной библиотеки на рабочее поле агента Plant и задайте его свойства так, как показано на рис. Такое событие будет происходить 10 раз за час, и каждый раз будет вызываться функция Запустите модель. От цеха должны двигаться грузовики на склад деталей и на склад готовой продукции (рис. 2.62).
Лабораторная работа № Рис. 2.61. Свойства события Рис. 2.62. Работа конечной модели