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

AnyLogic调用pedWait.free()释放等待行人及吸引点排序实现咨询

free() 传参报错解决

你遇到的报错是因为传入了Pedestrian(行人类型)作为参数,pedWait.free() 方法要求传入具体的某一个处于等待状态的行人代理实例,而非类型本身。

无优先级需求时的最简调用代码(直接放在source块的「到达前」动作中即可):

// 先判断等候室还有等待的行人,避免空指针报错
if (pedWait.size() > 0) {
    // 取出等候室中第一个等待的行人并释放
    pedWait.free(pedWait.getAgents().get(0));
}

按吸引点顺序释放的实现方案
  • 第一步:预定义排序规则,给所有等候室关联的吸引点按你需要的释放顺序编号,优先级越高编号越小,比如优先释放的吸引点编为1,次之为2,依此类推。
  • 第二步:给行人代理新增参数,在行人代理的类型定义中,新增一个int类型的变量attractorOrder,用于存储该行人当前所在吸引点的编号。
  • 第三步:赋值排序字段,在行人进入pedWait块的前一个动作(比如pedGoTo的on enter,或者pedWait的on enter动作)中,给行人的attractorOrder赋值为他所前往的吸引点的编号。
  • 第四步:修改source块的「到达前」动作代码,每次释放前先排序再取最高优先级的行人:
if (pedWait.size() > 0) {
    // 按吸引点编号升序排序,取优先级最高的行人
    List<Pedestrian> sortedWaitingPeds = sort(pedWait.getAgents(), ped -> ped.attractorOrder);
    pedWait.free(sortedWaitingPeds.get(0));
}

如果你的吸引点已经保存在一个有序集合(比如List类型的myAttractors)中,可以不用额外给行人加变量,直接通过吸引点在集合中的索引排序:

if (pedWait.size() > 0) {
    List<Pedestrian> sortedWaitingPeds = sort(pedWait.getAgents(), 
        ped -> myAttractors.indexOf(ped.getTargetAttractor()));
    pedWait.free(sortedWaitingPeds.get(0));
}

内容的提问来源于stack exchange,提问作者w-.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:06