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

仿真实验页Before simulation run阶段访问Equipment代理内部参数方法

从AnyLogic实验页访问非主代理Equipment的参数方案

你在实验页无法直接使用root.XXX访问的核心原因是:实验页上下文的root指向实验对象本身,而非仿真运行时的主代理实例,需要先获取当前仿真的主代理入口再向下访问,根据Equipment的存放位置有三种常用实现方式:

  • 若Equipment是主代理(默认类名为Main)下的单个实例/群体
    在「Before simulation run」代码块中先通过引擎获取主代理实例,再直接访问对应Equipment:
    // 获取当前仿真的主代理实例,若你自定义了主代理类名,将Main替换为你的类名即可
    Main mainRoot = (Main) getEngine().getRoot();
    // 访问主代理下的单个Equipment实例(假设变量名为equipment)
    double targetParam = mainRoot.equipment.yourParameterName;
    // 如果是主代理下的Equipment群体(假设群体变量名为equipments),可按索引取对应个体
    double firstEqParam = mainRoot.equipments.get(0).yourParameterName;
    
  • 若Equipment嵌套在其他非主代理的内部
    从主代理实例开始逐层向下访问到Equipment所在层级即可,示例:Equipment存放在主代理下的Workshop群体第一个个体的内部:
    Main mainRoot = (Main) getEngine().getRoot();
    Equipment targetEq = mainRoot.workshopPopulation.get(0).equipment;
    // 读取参数
    int runDuration = targetEq.runDuration;
    
  • 若你不清楚Equipment的具体存放路径,可全局检索所有Equipment类型实例
    使用AnyLogic内置的全局查找方法直接获取所有该类型的代理:
    // 检索当前仿真中所有Equipment类型的实例
    List<Equipment> allEquipments = findAll(Equipment.class);
    // 遍历筛选你需要的实例读取参数
    for (Equipment eq : allEquipments) {
        if (eq.eqId.equals("target_001")) {
            System.out.println(eq.yourParameterName);
        }
    }
    

注意:「Before simulation run」阶段所有仿真代理实例已完成初始化,上述代码不会出现实例未创建的空指针问题,只要你模型中确实创建了对应Equipment实例即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:15:04