Динамическая регулировка скорости поступления в источник

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

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

Сегмент модели довольно прост: Источник -> Выбрать выход (решение о поломке) -> true: продолжить производство; false: задержка (ремонт машины) -> продолжить производство.

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

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

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

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


person never_stop_learning    schedule 17.10.2018    source источник


Ответы (3)


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

person Felipe    schedule 17.10.2018

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

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

rate фактически является параметром (в смысле AnyLogic) блока Source. (Все блоки моделирования процессов AnyLogic сами по себе являются агентами, разработанными AnyLogic, то есть с параметрами, переменными и т. Д.)

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

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

person Stuart Rossiter    schedule 19.10.2018
comment
Я использовал source.set_rate (5), но он устанавливает его в секунды. Есть ли способ определить его в единицах времени моделирования. Другими словами, если я 5 в час, есть ли способ сделать source.set_rate (5, hours) или что-то подобное. - person user2103050; 28.01.2019

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

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

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

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

person Mohammad Hasan N.    schedule 17.10.2018