基于AnyLogic智能体的排序算法需求:按par_serialNumber同步释放
大型板材切割订单完工时间同步方案(AnyLogic)
方案一:Wait块+全局映射计数器
- 核心逻辑:用全局映射表跟踪每个订单的小板材到达数量,等同序列号的小板材全部到齐后,批量释放并记录完工时间。
- 操作步骤:
- 模型全局变量里定义两个映射表:
(切割前在Split块的// 记录各订单已到达末端的小板材数 HashMap<String, Integer> arrivedSheetCount = new HashMap<>(); // 记录各订单的总小板材切割数 HashMap<String, Integer> totalSheetPerOrder = new HashMap<>();on exit事件里提前存入总数量,比如totalSheetPerOrder.put(agent.par_serialNumber, 4);,数字对应实际切割的小板材数量) - 在模型末端的Wait块前,用Event块(或直接写在Wait块的
on enter事件)处理:String serial = agent.par_serialNumber; // 更新当前订单的已到达数量 int currentCount = arrivedSheetCount.getOrDefault(serial, 0) + 1; arrivedSheetCount.put(serial, currentCount); // 判断是否所有小板材都已到达 if (currentCount == totalSheetPerOrder.get(serial)) { // 释放该订单下所有等待的小板材 for (Agent a : waitBlock.getAgents()) { if (a.par_serialNumber.equals(serial)) { waitBlock.release(a); } } // 记录订单完工时间,可存入全局映射或日志 double orderFinishTime = time(); // 清理计数器,避免内存冗余 arrivedSheetCount.remove(serial); totalSheetPerOrder.remove(serial); } else { // 未到齐,保持等待 waitBlock.hold(agent); } - Wait块设置为
Wait indefinitely,由代码手动控制释放时机。
- 模型全局变量里定义两个映射表:
方案二:Pickup/Dropoff+虚拟智能体
- 核心逻辑:给每个原板材订单绑定一个虚拟智能体,小板材到达末端时“认领”对应虚拟体,等所有小板材都完成认领后,触发订单完工时间记录。
- 操作步骤:
- 创建虚拟智能体类型(比如命名
OrderVirtual),添加参数:par_serialNumber、totalSheets(总切割数)、arrivedSheets(已到达数)。 - 在Split块切割前,生成对应虚拟体并存入全局映射:
OrderVirtual virtualAgent = add_OrderVirtual(); virtualAgent.par_serialNumber = agent.par_serialNumber; virtualAgent.totalSheets = 4; // 对应切割数量 virtualAgent.arrivedSheets = 0; // 全局映射表:HashMap<String, OrderVirtual> orderVirtualMap = new HashMap<>(); orderVirtualMap.put(agent.par_serialNumber, virtualAgent); - 小板材到末端后,加Pickup块,设置:
Pickup agent type选择OrderVirtualMatching condition写:agent.par_serialNumber.equals(pickupAgent.par_serialNumber)
- 在Pickup块的
on pickup事件里更新计数并判断:OrderVirtual virtual = (OrderVirtual)pickupAgent; virtual.arrivedSheets++; if (virtual.arrivedSheets == virtual.totalSheets) { // 所有小板材到齐,记录完工时间 double finishTime = time(); // 可在这里做后续处理,比如写入报表 // 清理虚拟体和映射 remove_OrderVirtual(virtual); orderVirtualMap.remove(virtual.par_serialNumber); } - 小板材完成Pickup后可继续后续流程,虚拟体的状态直接对应订单的完工状态。
- 创建虚拟智能体类型(比如命名
内容的提问来源于stack exchange,提问作者user20346372
相关产品推荐
相关产品推荐

