如何按指定条件筛选距离货车第二近的Agent(仓库)
按条件选取货车第二近仓库的实现方法
核心思路
要选到符合要求的第二近仓库,按顺序做3个环节的处理即可:
- 先从所有仓库Agent里筛选出满足判定条件的有效仓库,比如库存单位数值大于0
- 把所有有效仓库按照和当前货车位置的距离从小到大排序
- 跳过排序后排在第一位的最近仓库,取接下来的第一个对象,就是符合要求的第二近仓库
可直接复用的实现命令
以下是仿真建模场景下通用的Java流实现代码,适配绝大多数Agent类建模工具的语法要求:
// 注意替换对应场景的对象名、类名、距离计算方法 // 示例假设:货车实例名为truck,仓库类名为Warehouse,库存属性名为stockUnits Warehouse targetWarehouse = findAll(Warehouse.class, w -> w.stockUnits > 0) // 按到货车的距离升序排列,直线距离用distanceTo,路网距离替换成对应路网距离计算函数即可 .sorted(Comparator.comparingDouble(w -> truck.distanceTo(w))) .skip(1) // 跳过距离最近的1个有效仓库 .findFirst() .orElse(null); // 当符合条件的仓库不足2个时返回空,避免运行报错
注意事项
- 必须先做条件筛选再排序,如果先排序再筛选,会把库存为0的无效仓库算入排序位次,导致最终选中的仓库不符合要求
- 如果需要调整判定规则,直接修改箭头函数里的判断逻辑即可,比如要增加「仓库处于可调度状态」的要求,就把判断条件写成
w -> w.stockUnits > 0 && w.isAvailable()- 如果需要按路网实际行驶距离而非直线距离计算远近,把排序逻辑里的距离计算方法替换成对应路网环境提供的距离计算接口即可
内容的提问来源于stack exchange,提问作者Alfonso
相关产品推荐
相关产品推荐

