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

Anylogic行人库仿真场景下如何计算所有行人两两之间的距离

AnyLogic行人间距批量计算实现方案

操作步骤

  • 第一步:调用默认全局行人群体获取活跃行人
    AnyLogic行人库模型会自动创建名为ped的代理群体,所有未被Ped Sink销毁的活跃行人都存在该群体中,可直接调用,无需额外配置。如果自定义过行人群体名称,替换为你设置的群体名即可。
  • 第二步:添加周期触发事件
    拖入一个Event组件,触发模式设置为按周期,周期值填1,单位选择秒,后续所有计算逻辑都写在该事件的「动作」代码块中。
  • 第三步:编写无重复两两距离计算代码
    使用双层嵌套循环遍历行人群体,外层循环到倒数第二个行人,内层循环从外层当前索引的下一位开始遍历,避免同一对行人重复计算、也排除自身和自身的无效匹配,参考代码如下:
// 获取当前所有活跃行人
List<Ped> currentPeds = ped;

// 外层遍历
for(int i = 0; i < currentPeds.size() - 1; i++){
    Ped ped1 = currentPeds.get(i);
    // 内层遍历从i+1开始,避免重复计算
    for(int j = i + 1; j < currentPeds.size(); j++){
        Ped ped2 = currentPeds.get(j);
        // 调用AnyLogic内置距离计算方法,也可自行通过getX()、getY()计算欧氏距离
        double dist = distance(ped1, ped2);
        // 筛选间距小于1m的组合
        if(dist < 1){
            // 此处补充你的统计逻辑,比如计数、输出日志、写入数据集等
            traceln(time() + "s:行人" + ped1.getId() + " 与行人" + ped2.getId() + " 间距为" + round(dist, 2) + "m");
        }
    }
}

补充说明

  • 若需要自行通过坐标计算距离,可替换distance(ped1, ped2)为Math.hypot(ped1.getX() - ped2.getX(), ped1.getY() - ped2.getY()),计算结果和内置方法完全一致。
  • 如果模拟场景行人数量超过500,建议先做空间网格分区,仅计算同网格和相邻网格内的行人间距,可大幅降低计算开销,避免模型卡顿。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:54:05