Anylogic, захватить ресурс из пула на определенных условиях

Вопрос уже был задан, и на него был дан ответ, см. Anylogic - динамическая спецификация ресурсов для захвата < / а>. Но несколько троллей в stackoverflow попросили меня снова задать тот же вопрос, не смотря на это ... - поскольку этот вопрос рассматривается как ответ, а не вопрос.

Anylogic 8.7.2.
Я создаю пул ресурсов myworkers.
Тип агента workers.
Откройте агент workers и добавьте переменную offloadBay (или параметр, не имеет значения), INT, default value 0. В основном я использую блок seize, чтобы захватить 4 ресурса из этого пула, но они должны соответствовать условию offloadBay == 0. В блоке захвата выбираю Customise resource choice == true ; Recource choice condition = (unit.offloadBay == 0). При запуске проекта я получаю сообщение об ошибке - offloadBay не может быть разрешен или не является полем.

Похоже, что ссылка на ключевое слово unit на самом деле не ссылается на ресурсную единицу - ни один из unit's параметров, переменных, функций и т. Д. Не может быть вызван при ссылке на unit.

Посоветуйте, пожалуйста, что я делаю не так? В качестве альтернативы, как мне выбрать ресурс из ResourcePool на основе определенного условия или свойства ресурса? (демонстрационный проект может быть предоставлен по запросу, пожалуйста, посоветуйте, куда отправить)


person Cecil    schedule 27.12.2020    source источник


Ответы (1)


Попробуйте принудительно указать тип ресурса. Это происходит потому, что вы находитесь в блоке захвата, и когда вы используете unit, вы можете ссылаться на разные типы агентов ресурсов. Не все из них могут иметь переменную offloadBay. Итак, используйте:

((Рабочий) юнит) .offloadBay == 0

person Emile Zankoul    schedule 27.12.2020
comment
Эмиль, это не сработает. Anylogic теперь отвечает двумя ошибками: offloadBay cannot be resolved or is not a field и Incompatible operand type Workers and int. - person Cecil; 27.12.2020
comment
Ошибка Несовместимый тип операнда Workers и int появляется, когда две стороны == имеют разный тип. Это говорит вам, что 0 имеет тип int, а все, что находится на другой стороне, имеет тип Workers. Можете ли вы скопировать и вставить то, что именно вы написали в условии выбора ресурса? - person Emile Zankoul; 27.12.2020
comment
Я думаю, вы написали Workers вместо Worker. - person Emile Zankoul; 27.12.2020
comment
Подожди минутку, пожалуйста - ты немного быстр на меня ... тем не менее, я очень благодарен за скорость твоего ответа !! У меня был (Workers)unit.offloadBay - кажется, требуется набор дополнительных скобок? тестирование на данный момент - person Cecil; 27.12.2020
comment
Это да !! Требуются дополнительные скобки ((Workers)unit).offloadBay - тестировал несколько уровней, работает отлично !! Спасибо Эмиль, ты звезда !! - person Cecil; 27.12.2020