AnyLogic中零件二次加工及优先级调度的仿真建模求助
AnyLogic生产流程仿真最优实现方案
1. 实体类型定义
创建自定义Agent(命名为Part),添加枚举类型属性partType,枚举值包含PART1、PART2、PART3,用于区分不同阶段的工件。
2. 核心组件配置与逻辑实现
步骤1:Source输出Part1
- 拖拽
Source组件到画布,设置实体类型为Part。 - 在Source的
On exit事件中添加代码:agent.partType = PartType.PART1; - 根据需求设置实体生成速率、数量等参数。
步骤2&3:Machine1加工Part1生成Part2并送入Queue1
- 拖拽
Machine组件(命名为Machine1)和Queue组件(命名为Queue1)到画布,连接Source→Machine1→Queue1。 - 在
Machine1的On finish processing事件中添加代码,完成工件类型转换:if(agent.partType == PartType.PART1){ agent.partType = PartType.PART2; }
步骤4:Queue1中Part2优先送回Machine1加工
- 拖拽
SelectOutput组件到画布,连接Queue1→SelectOutput。 - 给
SelectOutput的第一个分支设置过滤条件:agent.partType == PartType.PART2,将此分支连接到Machine1的输入端。 - 启用
Machine1的优先级调度:- 选中
Machine1,在右侧属性面板找到Priority based on agent并勾选。 - 设置优先级表达式:
agent.partType == PartType.PART2 ? 2 : 1(数值越高优先级越高,确保PART2优先于PART1)。 - 将
Machine1的内部队列类型改为Priority queue,确保等待加工的工件按优先级排序。
- 选中
步骤5&6:Part3流向Sink
- 给
SelectOutput的第二个分支设置过滤条件:agent.partType == PartType.PART3,将此分支连接到Sink组件。 - 在
Machine1的On finish processing事件中补充代码,处理PART2到PART3的转换:if(agent.partType == PartType.PART2){ agent.partType = PartType.PART3; } - 加工完成的PART3会流入
Queue1,随后被SelectOutput分流到Sink。
3. 关键验证点
- 运行模型时,观察
Queue1中PART2是否优先被Machine1拉取加工。 - 确认PART3不会进入
Machine1,只会流向Sink。 - 检查
Machine1的加工队列,确认PART2始终排在PART1之前。
内容的提问来源于stack exchange,提问作者Vinayak Mulye
相关产品推荐
相关产品推荐

