You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于AnyLogic智能体的排序算法需求:按par_serialNumber同步释放

大型板材切割订单完工时间同步方案(AnyLogic)

方案一:Wait块+全局映射计数器

  • 核心逻辑:用全局映射表跟踪每个订单的小板材到达数量,等同序列号的小板材全部到齐后,批量释放并记录完工时间。
  • 操作步骤:
    1. 模型全局变量里定义两个映射表:
      // 记录各订单已到达末端的小板材数
      HashMap<String, Integer> arrivedSheetCount = new HashMap<>();
      // 记录各订单的总小板材切割数
      HashMap<String, Integer> totalSheetPerOrder = new HashMap<>();
      
      (切割前在Split块的on exit事件里提前存入总数量,比如totalSheetPerOrder.put(agent.par_serialNumber, 4);,数字对应实际切割的小板材数量)
    2. 在模型末端的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);
      }
      
    3. Wait块设置为Wait indefinitely,由代码手动控制释放时机。

方案二:Pickup/Dropoff+虚拟智能体

  • 核心逻辑:给每个原板材订单绑定一个虚拟智能体,小板材到达末端时“认领”对应虚拟体,等所有小板材都完成认领后,触发订单完工时间记录。
  • 操作步骤:
    1. 创建虚拟智能体类型(比如命名OrderVirtual),添加参数:par_serialNumber、totalSheets(总切割数)、arrivedSheets(已到达数)。
    2. 在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);
      
    3. 小板材到末端后,加Pickup块,设置:
      • Pickup agent type选择OrderVirtual
      • Matching condition写:agent.par_serialNumber.equals(pickupAgent.par_serialNumber)
    4. 在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);
      }
      
    5. 小板材完成Pickup后可继续后续流程,虚拟体的状态直接对应订单的完工状态。

内容的提问来源于stack exchange,提问作者user20346372

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:55:20