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

AnyLogic运行时能否通过代码动态创建仿真元素?

AnyLogic运行时动态修改模型结构的实现方案

一、运行时动态创建仿真元素的可行性

完全可以通过AnyLogic内部代码在运行时直接创建、修改仿真元素,无需重启模型。比如点击按钮生成新Queue的场景,可直接在按钮的On click事件中编写代码实现:

// 创建新Queue实例,指定所属Agent(这里以Main为例)和唯一标识
Queue dynamicQueue = new Queue(this, "dynamic_queue_" + System.currentTimeMillis());
// 设置Queue的位置(可选,可视化场景需要)
dynamicQueue.setLocation(200 + new Random().nextInt(100), 300);
// 将元素添加到模型引擎中,使其生效
getEngine().add(dynamicQueue);

二、工厂数字孪生场景的落地思路

针对读取配置表自动创建、连接元素并实现无人值守更新的需求,可按以下步骤实现:

  1. 读取配置参数
    用AnyLogic内置的readExcel()方法或Database组件读取配置表,表结构需包含:元素类型(如delay/queue)、延迟时间、输入源标识、输出目标标识、唯一ID等核心字段。
  2. 动态创建元素
    根据配置表中的元素类型,通过代码实例化对应组件:
    // 示例:根据类型创建Delay或Queue
    Agent newElement = null;
    if(elementType.equals("delay")){
        Delay dynamicDelay = new Delay(this, "dynamic_delay_" + id);
        dynamicDelay.setDelayTime(delayTime);
        newElement = dynamicDelay;
    } else if(elementType.equals("queue")){
        newElement = new Queue(this, "dynamic_queue_" + id);
    }
    // 添加到模型引擎使其生效
    getEngine().add(newElement);
    
  3. 自动连接元素
    通过配置表中的输入/输出标识,找到对应的源元素和目标元素,调用connect()方法完成连接:
    // 假设sourceAgent和targetAgent是从配置表匹配到的已存在元素
    sourceAgent.connect(newElement);
    newElement.connect(targetAgent);
    
  4. 无人值守监测更新
    用AnyLogic的Timer组件或定时触发的Event,定期轮询配置表的变化:
    • 检测到新增元素:执行上述创建、连接逻辑
    • 检测到元素参数变更:直接修改对应实例的属性(如dynamicDelay.setDelayTime(newDelayTime))
    • 检测到元素删除:调用getEngine().remove(targetElement)清理元素

三、关键注意事项

  • 动态创建的元素必须指定正确的所属Agent(如Main、自定义Agent),否则无法正常运行
  • 需维护动态元素的引用(比如用HashMap<String, Agent>存储ID和元素实例),方便后续修改、连接或删除
  • 高频更新场景要注意内存管理,及时清理无用元素避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:46:01