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

如何从ResourcePool中选取距离指定工位最近的可用资源

AnyLogic资源池最近资源调度解决方案

核心实现方法

无需依赖GIS模块,通过类型强转+评分排序即可实现,操作步骤如下:

方法1:使用「Unit with top rating」配置(最简便,推荐)

你之前配置不生效的核心原因是两点:没有对unit做类型强转、距离参照对象错误,正确配置如下:

  • 进入Service/Station模块的Resource selection配置栏,下拉选择Unit with top rating
  • 在Rating输入框中填入代码:
    -((Operario)unit).distanceTo(agent)

规则说明:

  • ((Operario)unit)是将默认的Agent类型资源单元强转为你自定义的Operario类型,才能调用位置计算方法
  • 加负号是因为AnyLogic会优先调度评分最高的资源,距离越小负数值越大,刚好符合最近优先的逻辑
  • 如果需要以工位固定位置为参照,将代码中的agent(指当前进入模块的物料实体)替换为工位对应的节点对象即可,例如stationNode1

方法2:通过Customize resource choice实现

如果你需要叠加其他筛选规则,可以用自定义资源选择条件,操作如下:

  1. 在请求资源的模块(如Service)的On enter动作中,先计算当前所有空闲工人到目标位置的最小距离,存为临时变量:
// 示例:resourcePool1为你的工人资源池对象,agent为物料/工位参照对象
double minWorkerDistance = Collections.min(
    findAll(resourcePool1.idle(), unit -> ((Operario)unit).distanceTo(agent))
);
  1. 进入Customize resource choice配置栏,在Resource choice condition输入框中填入:
    ((Operario)unit).distanceTo(agent) == minWorkerDistance

常见问题排查

  • 若报语法错误,优先检查类型强转的括号是否完整,((Operario)unit)的两层括号不能省略
  • 若调度逻辑不符合预期,可在Rating代码处加打印日志验证距离计算是否正确:traceln(((Operario)unit).distanceTo(agent));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:30:01