在 Anylogic 中创建资源 dynamically/programmatically
Creating resources dynamically/programmatically in Anylogic
基本上,我有以下问题:我必须在 Anylogic 中对几家医院的专科进行建模,并分析当其中一个专科关闭时会发生什么。
问题是医院专业的组合数量非常多(大约1000),所以我正在寻找一种方法来做到这一点"dynamically/programmatically"。
换句话说,我正在寻找一种无需在 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
你可以看到我已经创建了一堆资源池和调度,但是我已经手动.
我也尝试过 copy/paste 一些资源池,但是没有办法更改资源池的名称。我也看到了 Java API 但我还没有找到解决方案。
方法一:
最简单的方法是使用参数变化实验,并创建一个简单的模型,您只需定义具有资源池容量的参数。
这样你就可以 运行 连续、同时进行大量实验。
然而,这需要一个模型来处理医院专业组合之间的差异。因为我不知道你问题的每一个细节,所以我不确定这是可能的。但我会尝试使用这种方法,因为这通常更容易、更快捷。
方法二:
另一种方式,可能更符合您正在尝试的方式。
- 如果您在 ResourcePool 的
Advanced
下查看。你应该看到一个
select 的选项:Single agent
和 Population of agents
。
SelectPopulation of agents
。这会将其更改为资源池数组。还有selectinitial empty
- 在启动过程中,您可以根据需要使用代码创建代理:
add_NameOfMyResourcepool( ... parameters ...)
- 要使用资源池,您必须 select 要使用的资源。这是通过将参数
Resource sets
更改为动态参数并写入:{{NameOfMyResourcepool.get(index_of_resource_you_want)}}
来完成的
基本上,我有以下问题:我必须在 Anylogic 中对几家医院的专科进行建模,并分析当其中一个专科关闭时会发生什么。
问题是医院专业的组合数量非常多(大约1000),所以我正在寻找一种方法来做到这一点"dynamically/programmatically"。
换句话说,我正在寻找一种无需在 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
你可以看到我已经创建了一堆资源池和调度,但是我已经手动.
我也尝试过 copy/paste 一些资源池,但是没有办法更改资源池的名称。我也看到了 Java API 但我还没有找到解决方案。
方法一:
最简单的方法是使用参数变化实验,并创建一个简单的模型,您只需定义具有资源池容量的参数。
这样你就可以 运行 连续、同时进行大量实验。
然而,这需要一个模型来处理医院专业组合之间的差异。因为我不知道你问题的每一个细节,所以我不确定这是可能的。但我会尝试使用这种方法,因为这通常更容易、更快捷。
方法二:
另一种方式,可能更符合您正在尝试的方式。
- 如果您在 ResourcePool 的
Advanced
下查看。你应该看到一个 select 的选项:Single agent
和Population of agents
。
SelectPopulation of agents
。这会将其更改为资源池数组。还有selectinitial empty
- 在启动过程中,您可以根据需要使用代码创建代理:
add_NameOfMyResourcepool( ... parameters ...)
- 要使用资源池,您必须 select 要使用的资源。这是通过将参数
Resource sets
更改为动态参数并写入:{{NameOfMyResourcepool.get(index_of_resource_you_want)}}
来完成的