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

AnyLogic中实现货架随机选3个Box并批量调度AGV的问题

AnyLogic AGV随机选取3个Box解决方案

一、AGV依次前往不同货架取3个随机Box

  • 筛选随机Box并记录位置
    在AGV任务触发时(比如AGV空闲时的触发代码),用randomSample()函数从货架的Agent集合里随机选3个目标Box。同时给Box添加Location类型参数storageLocation,在Box放入货架时通过rack.getLocation(box)赋值,固定其货架位置:

    List<Box> availableBoxes = rack.getAgents().stream().filter(b -> !b.isPicked).collect(Collectors.toList());
    if(availableBoxes.size() >=3){
        List<Box> selectedBoxes = randomSample(availableBoxes, 3);
        selectedBoxes.forEach(b -> b.isPicked = true);
    }
    
  • AGV顺序执行取货任务
    在AGV的任务序列中,循环遍历selectedBoxes列表,依次添加rackPick任务,每个任务指定对应Box的storageLocation和目标Agent。取完第三个Box后,直接添加moveTo任务前往卸货区,完成卸货操作。

二、同一货架位置批量取3个随机Box(解决rackPick无法拾取批量Agent问题)

  • 调整批量时机:原问题出在提前批量Agent导致其脱离货架,需先取货再批量。
  • 具体步骤:
    1. 用randomSample()从目标货架位置的Agent中选3个(若该位置数量不足,可随机选多个位置凑数)。
    2. AGV依次执行rackPick任务取出这3个Box,将它们送入临时Hold块。
    3. 设置Hold块的批量触发条件为agentCount() == 3,批量完成后触发AGV将这批Box运往卸货区。

关键注意事项

  • 给Box添加isPicked布尔标记,避免重复选取已被取走的Agent。
  • 提前判断货架剩余Agent数量,若不足3个可调整取货数量或跳过任务,防止randomSample()抛出异常。
  • AGV任务序列中要同步更新Box的状态,确保后续逻辑不会冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:52:05