AnyLogic中如何通过节点位置检测修改行人agent的position变量
实现方法
你可以通过追踪agent位置判断所处节点状态,进而修改内置变量,具体操作如下:
步骤1:选择变量更新触发方式
二选一即可:
- 写入行人智能体的状态图动作:适合位置变动伴随明确状态跳转的场景
- 写入主模型的循环事件:设置合理的执行间隔(如0.5秒/次),满足实时检测需求
步骤2:写入赋值逻辑
如果是对单个行人赋值,直接在行人智能体内写入以下代码:
// 初始默认值 position = "None"; // 判断是否在绿色节点内 if (nodeGreen.contains(getX(), getY())) { position = "Green"; } // 判断是否在红色节点内 else if (nodeRed.contains(getX(), getY())) { position = "Red"; }
如果是在主模型层批量更新所有行人的position变量,用遍历写法:
for (Pedestrian ped : getPeds()) { ped.position = "None"; if (nodeGreen.contains(ped.getX(), ped.getY())) { ped.position = "Green"; } else if (nodeRed.contains(ped.getX(), ped.getY())) { ped.position = "Red"; } }
补充说明
你找到的nodeGreen.getPeds(),p->node.contains(p.getX(),p.getY())是用于过滤指定节点内行人群的语法,不需要用这套逻辑实现你的需求,直接调用节点的contains()方法判断坐标即可,逻辑更简洁。
内容的提问来源于stack exchange,提问作者Peter B-S
相关产品推荐
相关产品推荐

