2016-12-07 3 views
1

Можно ли выполнить симуляцию в будущем в AnyLogic? частности:AnyLogic: Посмотрите вперед моделирования

  1. Моделирование до времени T.
  2. Использование 2 значений переменной, моделировать для обоих значений до Т + т параллельно.
  3. Оцените состояние системы при T + t, выберите значение переменной, которое приведет к повышению производительности.
  4. Продолжить симуляцию с помощью T, используя выбранное значение для переменной.

Это основная функциональность, которую я пытаюсь реализовать. Значения переменных могут быть взяты из дерева решений, что не должно влиять на реализацию.

Пожалуйста, дайте мне знать, если кто-то сделал что-то подобное.

ответ

2

Да, это возможно с помощью некоторого кода Java. Вы можете:

  1. Приостановить родительский эксперимент, сохранить моментальный снимок в момент времени T;
  2. Создайте два новых эксперимента из родительского эксперимента;
  3. Загрузить снимки в двух новых экспериментах;
  4. Продолжить выполнение обоих экспериментов до времени T + t;
  5. Отправить уведомление родительскому эксперименту, сравнить результаты, присвоить лучшее значение и продолжить моделирование.

Некоторые пункты могут быть сделаны вручную с помощью элементов управления пользовательского интерфейса или кодом, а некоторые - только по коду.

+0

Я мог найти способ, который нужно вызвать для приостановки, сохранения и загрузки снимков. Можете ли вы посоветовать мне метод runTillTime() и связь между двумя экспериментами? –

+0

«Использование двух значений переменной, имитирующей оба значения до T + t параллельно», также означает, что вам нужно беспокоиться о разработке модели, чтобы изменения в этом среднем периоде были «чистыми» (возможно, с использованием функциональных возможностей смены из параметров AnyLogic, чтобы «сцепить» любые эффекты изменения этой переменной). Это может быть хорошо в зависимости от вашей функциональности модели. –

+0

@SwapRenushe, запустить до времени T + t: 'getEngine(). RunFast (time() + constant);'. Экспериментальное сообщение: поскольку вы создаете экземпляр эксперимента из другого эксперимента, просто сохраните ссылку на новый эксперимент в родительском эксперименте. Вы можете получить свой агент верхнего уровня и всех его членов с чем-то вроде: '((Main) getEngine(). GetRoot())' –

Смежные вопросы