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
Достарыңызбен бөлісу: