Создание ресурсов динамически / программно в Anylogic

По сути, у меня следующая проблема: мне нужно смоделировать специальности нескольких больниц в Anylogic и проанализировать, что происходит, когда одна или несколько специальностей закрываются.

Проблема в том, что количество комбинаций «больница-специальность» очень велико (около 1000), поэтому я ищу способ сделать это «динамически / программно».

Другими словами, Я ищу способ автоматически создать пул ресурсов (и прикрепленное к нему расписание) без необходимости создавать ресурс в Anylogic ВРУЧНУЮ. Например, что-то вроде этого

//An arraylist of names of hospitals
for (String hospitalCode : hospitals) { 
  for(String specialtyCode : specialtiesCodes) {
      ResourcePool res = new ResourcePool();
      res.setName(hospitalCode + "_" + specialtyCode);
      Schedule schedule = new Schedule();

      //Set the type of the schedule along with other parameters. This will be used 
      //to set the capacity of the resourcePool res
      schedule.setParameters(type, capacity, ...); 

      res.attachSchedule(schedule); //Connects the schedule to the resource

      schedule.create();
      res.create() //Creates the resources in the Main panel of Anylogic
   }
}

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

Пример смоделированной проблемы

Как видите, я создал несколько пулов ресурсов и расписаний, но сделал это вручную.

Я также пытался скопировать / вставить некоторые пулы ресурсов, но нет возможности изменить имя пула ресурсов. Я также видел Java API, но не нашел решения.


person Eugene    schedule 10.03.2017    source источник
comment
график различается в зависимости от модели? если да, то в чем разница?   -  person Nikolaj Klitlund Børty    schedule 11.03.2017
comment
Да, расписание варьируется в зависимости от специальности. Между ними нет фиксированной разницы. Например, одна специальность может иметь вместимость 10, а другая - 150 человек. Важно использовать графики для отслеживания их максимальной вместимости.   -  person Eugene    schedule 11.03.2017
comment
вы используете его только для управления мощностями? или вы также используете их для определения рабочего времени?   -  person Nikolaj Klitlund Børty    schedule 12.03.2017
comment
Только для определения общих мощностей.   -  person Eugene    schedule 12.03.2017


Ответы (1)


Метод 1:
Самый простой способ - использовать эксперимент с изменением параметров и создать простую модель, в которой вам нужно только определить параметр с учетом емкости вашего пула ресурсов.
таким образом вы можете проводить множество экспериментов в ряд, и одновременно.
Это требует, однако, модели, которая могла бы справиться с различиями между вашими комбинациями специализации больницы. Поскольку я не знаю всех деталей вашей проблемы, я не уверен, что это возможно. Но я бы попытался использовать этот метод, поскольку это обычно проще и быстрее.

Метод 2:
Другой способ и, возможно, больше того, что вы пытаетесь сделать.

  1. Если вы посмотрите под Advanced вашего ResourcePool. Вы должны увидеть возможность выбора: Single agent и Population of agents.
    Выберите Population of agents. это превратит его в массив пулов ресурсов. Также выберите initial empty
  2. Во время запуска вы можете создать агент так, как хотите, с помощью кода:
    add_NameOfMyResourcepool( ... parameters ...)
  3. чтобы использовать пул ресурсов, вы должны выбрать, какой из них вы хотите использовать. Это делается путем изменения параметра Resource sets на динамический параметр и записи: {{NameOfMyResourcepool.get(index_of_resource_you_want)}}
person Nikolaj Klitlund Børty    schedule 13.03.2017
comment
Реализовал решение по второму методу. Это немного сложно сделать, но похоже, что это работает. Спасибо! - person Eugene; 31.03.2017