如何在AnyLogic中判断代理是否处于Wait模块?代码首行报错求助
修正AnyLogic代码第一行的错误
你的代码第一行错误在于wait1.getAgent(AGENT)返回的是Agent对象实例,而非布尔值,不能直接和true做相等判断。针对你的业务逻辑,这里有对应的修正方案:
核心修正逻辑
如果你的需求是判断当前AGENT是否处于wait1的等待队列中,直接使用AnyLogic Wait模块自带的contains()方法即可,这是最贴合你业务场景的写法:
if(wait1.contains(AGENT)){
修正后的完整代码
同时还修复了原代码中双层循环重复释放代理的逻辑问题(原逻辑会把符合条件的Pallet重复释放OrderSize次),调整为释放前OrderSize个符合条件的代理,并增加索引越界防护:
if(wait1.contains(AGENT)){ List<Pallet> pallet = findAll(wait1, p -> p.ProductType.equals(NutritionPowder)); if(pallet.size() >= OrderSize){ for(int i=0; i<OrderSize; i++){ if(i < pallet.size()){ // 避免索引越界 wait1.free(pallet.get(i)); } } } else{ create_Create(1, HOUR, OrderSize, AGENT); } traceln("False is dynamic"); traceln(pallet.size() + "Size"); traceln("Order Size is: " + OrderSize); } // else 无需处理
内容的提问来源于stack exchange,提问作者Jahidul Hasan Razib
相关产品推荐
相关产品推荐

