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

SEIR与行人混合仿真中如何复制已有智能体状态机到pedSource新生成智能体

解决方案

方案1:直接复用已有智能体(优先推荐,完全避免状态重置)

你不需要通过pedSource生成新智能体,直接将存储在personasEnCasa中的已有智能体注入到行人流程中即可,所有状态机状态、倒计时参数都可以完整保留,操作步骤如下:

  1. 打开pedSource的属性面板,将生成模式修改为Manual call of inject(),关闭自动生成逻辑,由你自己控制智能体注入时机。
  2. 替换原有pedSource出口的代码为以下逻辑:
// 判断当前区域内人数未达上限,且有可复用的智能体
if (personasEnCasa.size() > 0 && (personasEnCasa.size() + personasEnSuper.size()) <= poblacionMaxima) {
    Persona p = randomFrom(personasEnCasa);
    // 直接将已有智能体注入行人流程
    pedSource.inject(p);
    // 更新智能体所属的存储结构
    personasEnCasa.remove(p);
    personasEnSuper.add(p);
}
  1. 后续智能体离开仿真区域时,不要调用destroy()方法销毁,仅将其从personasEnSuper和行人环境中移除,加入personasEnCasa即可,所有属性都会完整保留。

方案2:全属性拷贝给新生成的智能体

如果你不想改动现有pedSource自动生成逻辑,也可以在新智能体生成时,将待复用智能体的所有相关属性完整拷贝到新智能体上,代码示例如下:

if (personasEnCasa.size() + personasEnSuper.size() <= poblacionMaxima) {
    Persona p = randomFrom(personasEnCasa);
    // 拷贝状态机当前状态
    ped.statechart.setState(p.statechart.getState());
    // 拷贝所有和SEIR状态关联的自定义参数,需根据你实际的变量名调整
    ped.tiempoRestanteRecuperacion = p.tiempoRestanteRecuperacion;
    ped.tiempoRestanteExposicion = p.tiempoRestanteExposicion;
    ped.esAsintomatico = p.esAsintomatico;
    // 其他你定义的和智能体状态相关的参数均需要在此处补充拷贝
    // 更新存储结构,销毁已完成拷贝的旧智能体
    personasEnCasa.remove(p);
    p.destroy();
    personasEnSuper.add(ped);
}

注意该方案必须完整拷贝所有和智能体状态相关的变量,遗漏任意参数都会导致状态异常,因此更推荐使用方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:48:03