1
votes

Basically, I have the following problem: I have to model specialties of several hospitals in Anylogic, and analize what happens when one of more specialties are closed.

The problem is that the number of combinations of hospital-specialty is very high (around 1000), so i'm searching for a way to do it "dynamically/programmatically".

In other words, I'm searching for a way to create automatically a resourcePool (and a Schedule attached to it), without the need to create the resource in Anylogic MANUALLY. For example, something like this

//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
   }
}

Furthermore, in this picture I have several specialties (they are modeled as resourcePool, because the capacity and the delay time are essential for the problem I have to model)

An example of the modeled problem

You can see that I have created a bunch of resourcePools and Schedules, but I have done this manually.

I have also tried to copy/paste some resourcePools, but there is no way to change the name of a resourcePool. I have also seen the Java API but I have not found a solution.

1
does the schedule vary between the different specialeties? if so what is the difference? - Nikolaj Klitlund Børty
Yes, the schedule vary beetween specialties. There is no fixed difference beetween them. For example, one specialty may have capacity 10 and another one 150. The important thing is to use schedules to keep track of their maximum capacities. - Eugene
are you only using it to manage the capacities? or are you also using them to define working hours? - Nikolaj Klitlund Børty
Only to define the overall capacities. - Eugene

1 Answers

1
votes

Method one:
The easiest way is to use the Parameter variation experiment, and create a simple model where you only have to define the Parameter with the capacity of your resourcePool.
that way you can run a lot of experiments in a row, and simultaneously.
This demands, however, a model that can handle the variations between your combinations of hospital-specialty. Since i don't know every details of your problem i'm not sure it is possible. But I would try to use this method since this is usually way easier and faster.

Method two:
Another way and probably more along what you are trying.

  1. If you look under Advanced of your ResourcePool. You should see an option to select either: Single agent and Population of agents.
    Select Population of agents. this will change it into an array of resourcepools. Also select initial empty
  2. During start-up you can create the agent just as you want with the code:
    add_NameOfMyResourcepool( ... parameters ...)
  3. to use the resourcepool, you have to select which you want to use. This is done by changing the parameter Resource sets to a dynamic parameter and write: {{NameOfMyResourcepool.get(index_of_resource_you_want)}}