AnyLogic技术求助:按编号为Agent分配指定Resource Pool
AnyLogic 按Agent编号分配对应资源池实现步骤
1. 给Agent添加编号参数
- 打开你的Agent类型(自定义或默认Agent)的属性面板,添加一个整数类型参数,命名为
resourceGroupId,用于存储1-24的分组编号。
2. 在Source出口分配1-24编号
- 打开Source的属性面板,找到「On exit」事件(Agent生成并离开Source时触发)。
- 在事件中写入代码:
- 若要随机分配(每个编号概率均等):
agent.resourceGroupId = uniform_discr(1, 24); - 若要按顺序循环分配(第1个Agent=1,第2个=2…第24个=24,第25个回到1):
agent.resourceGroupId = (source.getOutputCount() - 1) % 24 + 1;
- 若要随机分配(每个编号概率均等):
3. Service Block根据编号绑定对应资源池
前置准备
先创建24个Resource Pool,命名为pool1、pool2…pool24,分别对应编号1-24。
动态绑定资源池(两种方法)
方法一:直接条件判断(适合少量资源池)
- 打开Service Block的「Resources」选项卡,选择「Use specified resource units」,点击「Edit」。
- 点击「Add」→ 选择「Resource pool (dynamic)」。
- 在「Pool」输入框中写入条件判断代码:
agent.resourceGroupId == 1 ? pool1 : agent.resourceGroupId == 2 ? pool2 : agent.resourceGroupId == 3 ? pool3 : // ... 依次写全到24 pool24
方法二:数组批量绑定(高效简洁)
- 在Main的「Properties」→「Parameters」中,添加一个
ResourcePool[]类型的参数,命名为resourcePools,赋值为:new ResourcePool[]{pool1, pool2, pool3, ..., pool24} - 回到Service Block的资源选择窗口,选择「Resource pool (dynamic)」,在「Pool」输入框中写入:
(注:数组索引从0开始,所以用resourcePools[agent.resourceGroupId - 1]resourceGroupId - 1对应到数组的第n个元素)
注意事项
- 确保
resourceGroupId的取值范围始终是1-24,避免数组越界或条件判断遗漏。 - 根据模型需求设置每个Resource Pool的容量,防止资源不足导致Agent阻塞排队。
内容的提问来源于stack exchange,提问作者Elis
相关产品推荐
相关产品推荐

