Динамическая настройка скорости поступления в источник - PullRequest
0 голосов
/ 17 октября 2018

Основная идея проблемы моделирования - поломка производственного станка.

Я хотел бы смоделировать это, установив частоту прибытия (просто число прибытий в секунду) на ноль (Source.rate = 0).После того, как машина отремонтирована, скорость поступления снова устанавливается на фактическое значение (например, Source.rate = 5).В то время как первая команда выполняет свою работу, вторая, похоже, не имеет никакого эффекта, т.е. новые агенты не создаются.

Сегмент модели довольно прост: Source -> Select Output (решение о разбивке) -> true: продолжить производство;false: задержка (ремонт машины) -> включиться в работу.

Source.rate = 0 вызывается на выходном порте (ложь) «пробоя» и Source.rate = 5 на выходном порте «ремонта».

https://i.stack.imgur.com/hqGoI.png

Конечно, эта проблема может быть смоделирована по-другому (например, с помощью удержания с отключенным «принудительным нажатием»), однако мне не ясно, почему мой подход не позволяетРабота.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Вместо использования source.rate=5; используйте source.set_rate(5);

0 голосов
/ 19 октября 2018

Чтобы расширить ответ Фелипе с объяснением:

Вместо использования source.rate = 5;use source.set_rate (5);

rate фактически является параметром (в смысле AnyLogic) блока Source.(Все блоки моделирования процессов AnyLogic сами по себе являются агентами, разработанными AnyLogic, и, таким образом, с помощью параметров, переменных и т.также у всех есть set_<parameter name> метод (функция), который действительно должен всегда использоваться вместо этого, потому что это вызывает любую внутреннюю логику при изменении для этого параметра .Только эта запускаемая логика (внутренняя по отношению к блоку Source) заставляет Source правильно «переоценивать» скорость.

(Вы можете использовать логику при изменении параметров в своем собственноммодели и должны делать это, когда изменение параметра требует некоторых «корректировок» для остальной части модели, т. е. в ситуациях, когда изменение не «просто работает» из-за того, что другие биты модели читают новое значение послеизменить точку.)

0 голосов
/ 17 октября 2018

Я не знаю, почему ваша модель не работает (может быть, вам нужна более подробная информация о вашей модели), но простое решение, которое я тестировал и работало, выглядит следующим образом:

Вы можете установитьисточник "Тип прибытия" для "вызовов функции inject ()", добавьте событие в вашу модель и установите его "Тип триггера" на "Скорость" и установите его значение скорости на 5. Затем в коде действия события используйте нижекод:

if(yourCondition)
{
    source.inject(1);
}

Надеюсь, это поможет вам.

...