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

AnyLogic Cloud参数变异实验替代方案开发技术问询

AnyLogic Cloud 参数变异实验替代实现方案

问题1:循环代码的位置与语法

循环逻辑**必须写在Simulation Page的按钮点击事件(onClick)**中,因为需要用户主动触发批次仿真,而非页面加载时自动执行。

具体语法示例(基于Java):
首先在Simulation Page中定义结果存储结构,然后在按钮点击事件里实现循环调用主模型:

// Simulation Page内定义结果存储类
class SimResult {
    Dataset data;
    double numResult;
    String strResult;
    SimResult(Dataset d, double n, String s) {
        data = d;
        numResult = n;
        strResult = s;
    }
}

// 全局变量存储所有仿真结果
List<SimResult> allResults = new ArrayList<>();

// 按钮的onClick事件代码
allResults.clear();

// 定义要测试的参数组合(可根据需求动态生成)
List<Object[]> paramList = Arrays.asList(
    new Object[]{"场景A", 0.3},
    new Object[]{"场景B", 0.7},
    new Object[]{"场景C", 1.0}
);

// 循环执行每个参数组合
for (Object[] params : paramList) {
    String inputStr = (String) params[0];
    double inputDouble = (double) params[1];
    
    // 创建主模型实例
    MainModel mainModel = new MainModel();
    // 隐藏主模型窗口
    mainModel.setVisible(false);
    
    // 传入参数(主模型需提前定义公共变量)
    mainModel.inputStr = inputStr;
    mainModel.inputDouble = inputDouble;
    
    // 运行仿真(阻塞式,确保顺序执行)
    mainModel.runSimulation();
    
    // 收集输出结果(主模型需提前定义公共输出变量)
    Dataset outputData = mainModel.outputDataset;
    double outputNum = mainModel.outputDouble;
    String outputStr = mainModel.outputString;
    
    // 存入结果集合
    allResults.add(new SimResult(outputData, outputNum, outputStr));
    
    // 释放模型资源,避免内存泄漏
    mainModel.dispose();
}

// 结果展示:将allResults中的数据填充到Simulation Page的表格、图表等组件
// 示例:填充表格
resultTable.clearRows();
for (SimResult res : allResults) {
    resultTable.addRow(res.strResult, res.numResult, res.data.getRowCount());
}

问题2:隐藏主模型窗口并顺序运行

在创建主模型实例后,调用mainModel.setVisible(false)即可完全隐藏主模型窗口。同时,runSimulation()方法是阻塞式的——它会等待当前仿真完全结束后才执行下一次循环,天然满足顺序运行的需求,用户只需等待批次完成即可。


对应需求的具体实现

a. 不展示主模型

除了上述setVisible(false)的设置,还可以在主模型的onStartup事件中添加getEngine().setVisible(false),双重确保窗口不会弹出。

b. 点击按钮后顺序运行

如上述代码所示,循环写在按钮点击事件中,runSimulation()的阻塞特性会保证仿真按顺序执行,用户点击按钮后只需等待所有仿真完成即可。

c. 传入字符串与double参数

在主模型中定义公共变量:

// 主模型中的公共输入变量
public String inputStr;
public double inputDouble;

在Simulation Page的循环中直接为这些变量赋值即可完成参数传递。

d. 收集Dataset、double与字符串输出

同样在主模型中定义公共输出变量,并在仿真结束时赋值:

// 主模型中的公共输出变量
public Dataset outputDataset;
public double outputDouble;
public String outputString;

// 主模型的onEnd事件(仿真结束时触发)
public void onEnd() {
    // 替换为你的仿真逻辑计算结果
    outputDataset = yourGeneratedDataset;
    outputDouble = yourCalculatedValue;
    outputString = yourResultLabel;
}

在Simulation Page的循环中,仿真运行完成后直接读取这些变量即可收集结果。


补充:AnyLogic Cloud 参数变异实验上传技巧

目前AnyLogic Cloud确实不支持直接上传Parameter Variation实验,但可以通过以下方式间接实现:

  1. 将参数变异的参数列表存入主模型的Dataset中,在主模型启动时自动循环执行所有参数组合,结果存入全局Dataset,最后在Simulation Page展示。
  2. 使用AnyLogic Cloud的Batch Run功能:上传通用仿真模型后,在Cloud控制台配置参数矩阵,批量运行并汇总结果(需确保模型支持从Cloud接收参数输入)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:25:44