AnyLogic中如何修改sortAscending筛选出的指定Agent的布尔变量?
问题分析与修正方案
你的代码存在三个关键逻辑错误,导致所有Agent的willDoSomething被设为true:
- 排序方向错误:
sortAscending是按预算升序排序,得到的是预算从低到高的Agent列表,你需要的是预算最高的前3个,应该用降序排序(比如对应框架的sortDescending方法)。 - 筛选范围错误:
subList(0,1)只截取了排序后的第一个Agent,而你需要的是前3个,应该写成subList(0,3)。 - 循环对象错误:你遍历的是
main.bidders整个群体,而非筛选出来的前3个Agent列表ags,所以所有Agent的变量都被修改了。
修正后的代码示例
// 按预算降序排序,取前3个Agent List<Bidder> ags = sortDescending(main.bidders, m -> m.budget).subList(0, 3); // 先将所有Agent的该变量初始化设为false(按需选择) for(Bidder m : main.bidders){ m.willDoSomething = false; } // 仅给筛选出的前3个Agent设为true for(Bidder m : ags){ m.willDoSomething = true; }
额外注意:代码里的m.Budget和你描述的budget参数大小写不一致,确认变量名是否匹配,避免因大小写问题导致排序逻辑失效。
内容的提问来源于stack exchange,提问作者Jahidul Hasan Razib
相关产品推荐
相关产品推荐

