在Anylogic中动态/编程创建资源

时间:2017-03-10 14:41:47

标签: java simulation agent anylogic

基本上,我有以下问题:我必须对Anylogic的几家医院的专业进行建模,并分析当一个或多个专业关闭时会发生什么。

问题是医院专业的组合数量非常高(大约1000),所以我正在寻找一种“动态/编程”的方法。

换句话说,我正在寻找一种自动创建resourcePool(以及附加到它的Schedule)的方法,而无需在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,因为容量和延迟时间对我必须建模的问题至关重要)

An example of the modeled problem

您可以看到我创建了一堆resourcePools和Schedules,但我已经手动

我还试图复制/粘贴一些resourcePools,但是没有办法更改resourcePool的名称。我也看过Java API,但我还没有找到解决方案。

1 个答案:

答案 0 :(得分:0)

方法一:
最简单的方法是使用参数变化实验,并创建一个简单的模型,您只需要使用resourcePool的容量定义参数。
这样你就可以连续进行大量的实验,同时进行。
然而,这需要一个能够处理医院专业组合之间差异的模型。由于我不了解您问题的每个细节,因此我不确定是否可行。但我会尝试使用这种方法,因为这通常更容易,更快。

方法二:
另一种方式,可能更多的是你正在尝试。

  1. 如果您查看ResourcePool的Advanced下面。你应该看到一个 选项可以选择:Single agentPopulation of agents
    选择Population of agents。这会将其更改为资源池数组。同时选择initial empty
  2. 在启动期间,您可以根据需要使用代码创建代理:
    add_NameOfMyResourcepool( ... parameters ...)
  3. 要使用资源池,您必须选择要使用的资源。这是通过将参数Resource sets更改为动态参数并写入:{{NameOfMyResourcepool.get(index_of_resource_you_want)}}
  4. 来完成的