#location #anylogic #agent
#Расположение #anylogic #агент
Вопрос:
Моя модель — это базовая модель складской ситуации. Грузовики входят в модель, захватываются пустым ресурсом погрузочной платформы и затем разгружаются вилочными погрузчиками. Местоположение грузовых автомобилей (загрузочный отсек 1, загрузочный отсек 2 и т.д.) Определяется доступным ресурсом, Который подвергается изъятию. Затем в моем блоке «переместить в» отмечена опция «переместить в местоположение захваченного ресурса». В этом случае грузовая половина модели работает так, как ожидалось.
Половина с загрузчиком немного сложнее. Мне посоветовали внедрить агенты поддонов в модель вместо того, чтобы отделять их от входящих грузовиков. Проблема в том, что я не могу указать местоположение агентов на определенном ресурсе.
Как я могу сохранить местоположение недавно припаркованного грузовика (погрузочный отсек 1, погрузочный отсек 2 и т.д.) В переменной, А затем вызвать ту же переменную, чтобы ввести агенты в это местоположение? Узлы, которые действуют как загрузочные отсеки, являются домашним расположением определенных ресурсов (загрузочных отсеков).
Когда я сохраняю местоположение (varAgentLocation = getNetworkNode();) Я должен установить тип переменной на тип «пользовательский» (INode), чтобы аннулировать ошибки. Если я ввожу «varAgentLocation» в поле location источника, я получаю сообщение об ошибке, указывающее, что типы не совпадают (INode и InitialLocationType)
Комментарии:
1. К каким типам объектов относятся ваши загрузочные отсеки? Используйте это как тип для вашей переменной и создавайте экземпляр, когда ваши грузовики прибудут туда, и создавайте агентов для поддонов…
2. Что вы имеете в виду под типом объекта? Это всего лишь пул ресурсов. Мои грузовики и поддоны являются агентами.
3. Если это ResourcePools, задайте тип переменной ResourcePool (выберите «Другое» и введите его с помощью code-complete)
Ответ №1:
Использование домашних местоположений для ваших (неподвижных) ресурсов загрузочного отсека не требуется.
Просто используйте их как пользовательские типы агентов ресурсов (например, тип агента LoadingBay
, а не ванильный Agent
) с Node
параметром type, который вы устанавливаете при запуске модели в качестве соответствующих узлов разметки пространства. (Вам нужно, чтобы пул ресурсов добавлял агентов ресурсов в пользовательскую (изначально пустую) совокупность LoadingBay
, которую вы создали заранее; это позволяет вам затем перебирать агенты ресурсов при запуске модели для настройки любых параметров и т.д. для них.)
Тогда, вероятно, наиболее последовательным способом является
-
Скопируйте это значение в переменную внутри вашего
Truck
агента с помощью действия по захвату вашегоSeize
блока. -
Создайте своих
Pallet
агентов со ссылкой наTruck
агента, от которого они исходили (в переменной или параметре). Существуют различные варианты проектирования для того, существуют ли поддоны заранее (где вы могли бы использоватьUnbatch
блок для их «освобождения») или вы создаете их на лету. -
Когда вы вводите агенты поддонов, скажем, в
Source
блок, установите так, чтобы узел прибытия (который может быть динамическим выражением) получал соответствующий узел от «родительского» агента грузовика (например, что-то вродеagent.arrivalTruck.loadingBayNode
).
Комментарии:
1. Лучший ответ на все! Спасибо, Стюарт!
2. Просто для уточнения, допустим, у меня есть совокупность ресурсов, как бы вы перебрали их и проверили, например, доступны ли они и какова их позиция? Где будут размещены эти команды, чтобы гарантировать, что цикл постоянно вызывается?
3. Просто выполните стандартный цикл Java foreach (например,
for (LoadingBay bay : popLoadingBays) { // Do stuff }
. В этом случае вам нужен цикл только один раз при запуске модели; не уверен, где, по вашему мнению, цикл должен был бы «постоянно вызываться»?