Anylogic多类型Agent共用同一队列时的出队优先级设置方法
AnyLogic 多类Agent汇入单队列的优先级配置方案
全程不需要复杂逻辑开发,按以下3步配置即可实现「1类Agent出队优先级>2类>3类」的排序规则:
- 第一步:给不同类Agent打优先级标识
两种实现方式二选一即可:- 方式1(推荐,逻辑更清晰):在你的Agent类型中新增一个整型参数,命名为
priorityLevel。分别点开3个Source模块的属性面板,在「生成新Agent时执行」的代码框中给对应类别的Agent赋值:- 生成1类Agent的Source:填写
agent.priorityLevel = 1; - 生成2类Agent的Source:填写
agent.priorityLevel = 2; - 生成3类Agent的Source:填写
agent.priorityLevel = 3;
- 生成1类Agent的Source:填写
- 方式2(无需新增参数):如果3类Agent本身是3个独立的自定义Agent类,可以跳过加参数的步骤,后续直接在队列配置中判断Agent类即可。
- 方式1(推荐,逻辑更清晰):在你的Agent类型中新增一个整型参数,命名为
- 第二步:修改Queue模块的排队规则
点开三类Agent共同汇入的Queue模块属性面板,找到「排队规则」(对应英文版本的Queue discipline)配置项,把默认的FIFO(先进先出)改成基于优先级排序。 - 第三步:填写优先级判断表达式
在排队规则下方的优先级表达式输入框中,对应第一步选择的标识方式填写代码:- 用方式1打标识的,直接填
agent.priorityLevel - 用方式2判断类的,填如下判断代码:
注意把agent instanceof AgentType1 ? 1 : (agent instanceof AgentType2 ? 2 : 3)AgentType1/AgentType2替换成你自己模型里1类、2类Agent的实际类名。
- 用方式1打标识的,直接填
关键规则说明:AnyLogic的优先级队列默认逻辑是表达式返回值越小,Agent出队优先级越高,所以给最高优先级的1类Agent赋值1、最低的3类赋值3,刚好匹配排序要求,不需要额外做数值反转。配置完成后运行模型,队列同时存在多类Agent时会永远优先放行优先级最高的1类,其次是2类,最后是3类;同类别Agent之间仍然按到达先后顺序放行,完全符合需求。
内容的提问来源于stack exchange,提问作者Giovanna
相关产品推荐
相关产品推荐

