wait.free()释放多个Patient Agent而非单个的技术问题求助
问题说明
我设置了一个每30分钟触发一次的event,调用function检查wait1里的Patient Agent是否满足释放条件。
事件代码如下,原本是想遍历wait1里的所有Agent:
if (wait1.size() > 0){ for (int i = 0; i < wait1.size(); i++) function(wait1.get(i)); }
对应的function逻辑:
- 判断当前是否为上午时段,若
SurgeonMorning空闲,就把符合条件的Patient从wait1转到selectOutput3,后续执行seize占用医生。 - 再判断是否为下午时段,若
SurgeonAfternoon空闲,同样转移对应Patient并执行seize。
现在的问题:
本来应该只有满足条件且对应外科医生空闲的Patient才会被释放,但实际只要多个Patient符合同一条件,就会被同时放出来。但系统里只有1个SurgeonMorning和1个SurgeonAfternoon,只要有一个Patient占用医生,就不能再放其他患者了。
解决办法
核心是找到第一个符合条件的患者并释放后,立刻停止遍历,别继续检查后面的患者。
- 先修改
function,让它返回布尔值:成功释放患者(医生被占用)就返回true,没释放就返回false。 - 然后修改事件的循环代码:
if (wait1.size() > 0){ for (int i = 0; i < wait1.size(); i++){ boolean released = function(wait1.get(i)); if(released){ break; // 放了一个就停,别继续循环 } } }
另外也可以换个更直接的写法:不用遍历所有患者,直接从wait1里挑出第一个符合条件的,只处理这一个,从根源避免多患者同时释放的问题。
内容的提问来源于stack exchange,提问作者NickA
相关产品推荐
相关产品推荐

