Этап 4. Организация связи агентов Storage и Truck
Для того чтобы детали, производимые в агенте Storage, попали в гру-
зовик, нужно связать агента Storage с агентом Truck. Для этого в аген-
те Truck нужно поместить элемент enter и связать его с элементом exit
агента Storage.
Перейдите в агент Truck, перетащите элемент enter на рабочее поле
агента и задайте ему имя enter_detal1. В свойствах элемента enter_detal1
в разделе Специфические задайте тип агента Detal.
108
Лабораторная работа № 6
Повторите операцию и создайте вход enter_detal2 с типом агента
Detal2
.
Перетащите значок Грузовик из библиотеки Картинки на рабочее
поле агента Truck. Для связи с агентами нужен элемент Порт из агент-
ной библиотеки. Перетащите элемент Порт из агентной библиотеки
и дайте ему имя port_Detal1_truck. Повторите операцию и создайте порт
port_Detal2_truck
(рис. 6.7).
Рис. 6.7. Добавление портов для деталей второго типа
Перейдите в агент Storage и поместите в нем значок Склад из би-
блиотеки Картинки, а также 2 элемента Порт из агентной библиотеки.
Назовите их элементы — port_Detal1 и port_Detal2. Соедините их с эле-
ментами Detal1 и Detal2 (рис. 6.8).
Рис. 6.8. Соединение портов в агенте Storage
109
Создание смешанной агентно-дискретно-событийной модели
Перейдите в агент main. Соедините порты так, как показано
на рис. 6.9.
Рис. 6.9. Соединение портов в агенте main
Если мешают двойные надписи, то выделите порт и зайдите в свой-
ства. В них уберите галочку с пункта Отображать имя (рис. 6.10).
Рис. 6.10. Убрать двойные подписи
Далее, в выходных портах агента Storage нужно прописать, к како-
му входу должны уйти агенты.
Перейдите в агент Storage.
Агенты (детали) должны попасть в грузовик, который находится
на складе, т. е. имеет состояние atStorage. Поэтому нужно сначала най-
110
Лабораторная работа № 6
ти грузовик в состоянии atStorage, а затем отправить агентов-детали
в него. Для поиска грузовика, находящегося на складе, нужно напи-
сать функцию.
Перетащите элемент Функция из агентной библиотеки на рабочее
поле агента Storage и задайте его свойства так, как показано на рис. 6.11.
Рис. 6.11. Функция Find_Truck_at_Storage
Функция имеет имя Find_Truck_at_Storage и возвращает грузовик.
В теле функции в первой строке объявляется переменная типа грузо-
вик (Truck), в которую будет записан найденный грузовик. Пока гру-
зовик не найден, в эту переменную записано значение null. В следую-
щей строке начинается цикл, который проходит по всем грузовикам
коллекции trucks, находящейся в главном агенте (агент main). Поэто-
му счетчик цикла меняется от 0 до размеров коллекции trucks. Размер
коллекции дает функция size(), которая является стандартной (уже
написана разработчиками AnyLogic) для коллекций. Поскольку кол-
111
Создание смешанной агентно-дискретно-событийной модели
лекция trucks находится в главном агенте, то сначала идет обращение
к агенту main, потом через точку обращаемся к коллекции, а потом че-
рез точку обращаемся к функции коллекции. В первой строке цикла
в переменную t записываем очередной грузовик из коллекции. Грузо-
вик получаем с помощью стандартной функции get(), которая возвра-
щает элемент коллекции с указанным в скобках индексом. Далее про-
веряем, находится ли грузовик в состоянии atStorage: если да, то это
нужный нам грузовик и мы его записываем в переменную t; если нет,
то в переменную t записываем null. В конце функции возвращаем най-
денный грузовик.
Теперь, имея функцию, можно отправить детали в нужный грузовик.
Выделите выход exit_Detal1 и задайте в его свойствах действие, ко-
торое отправит детали первого типа во вход для них в агенте Truck, как
это показано на рис. 6.12.
Рис. 6.12. Свойства выхода exit_Detal1
В действиях на выходе сначала проверяется, нашелся ли грузовик
(если функция Find_Truck_at_Storage() что-то вернула), затем во вход
найденного грузовика отправляется деталь с помощью стандартной
функции take().
Теперь повторите операцию для выхода exit_Detal2 и добавьте в его
свойства действие, показанное на рис. 6.13.
112
Лабораторная работа № 6
Рис. 6.13. Добавление действия к элементу exit2
Достарыңызбен бөлісу: |