AnyLogic中机器组Agent Population的产品调度问题咨询
解决Agent Population中机器的产品调度问题
核心思路
利用Agent Population的索引匹配或属性筛选,将Product Agent精准发送到对应ID的Machine Agent中。
具体实现步骤
1. 对齐Machine与Product的ID属性
- 在Machine Agent的参数中添加
machineId整数属性,创建Machine Population时,为每台机器分配唯一ID(比如从1开始递增)。 - 若批量创建机器,可在Population的「Initialization」逻辑里用索引赋值:
machineId = index + 1(Population索引从0开始,+1让ID从1起)。
2. 实现精准调度的两种方法
完成可用性检查后,任选以下一种方式发送Product:
方式一:索引直接定位(效率优先)
因为Population索引从0开始,若Product的targetMachineId为1,对应Population索引为targetMachineId - 1,直接调用代码发送:
// 假设Machine Population名称为machinePopulation Machine targetMachine = machinePopulation.get(product.targetMachineId - 1); targetMachine.enter.take(product);
方式二:属性筛选(灵活适配非连续ID)
如果机器ID不连续,用筛选逻辑找到匹配机器:
Machine targetMachine = machinePopulation.findFirst(m -> m.machineId == product.targetMachineId); if(targetMachine != null) { targetMachine.enter.take(product); }
3. 验证机器内部流程
确保Machine Agent内的Enter块设置为「Accept any agent」,让Product能顺利进入后续的Queue、Delay、Exit环节。
内容的提问来源于stack exchange,提问作者niels984
相关产品推荐
相关产品推荐

