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

如何自动多次运行CPLEX(OPL)求解同一模型并计算平均运行时间?

问题分析与解决方法

原代码存在两个核心问题:

  • 重复累加了两次同一求解时间,导致最终平均值计算错误。
  • 每次循环调用thisOplModel.generate()重复生成模型,且CPLEX在第一次求解后会保留解状态,后续调用solve()会直接返回已有最优解,不会重新执行完整求解流程,因此看起来只完成了一次求解。

修正后的代码

main {
    var totalRT = 0;
    // 仅生成一次模型(模型和数据固定,无需重复生成)
    thisOplModel.generate();
    var model = thisOplModel.model;

    for (var i = 0; i < 10; i++) {
        // 每次创建新的CPLEX实例,确保从头开始求解
        var cplex = new IloCplex(model);
        cplex.solve();

        var currentRT = cplex.getSolvedTime();
        totalRT += currentRT;
        writeln("第", i+1, "次求解时间: ", currentRT);

        // 销毁CPLEX实例,释放资源
        cplex.end();
    }

    var avgRT = totalRT / 10;
    writeln("平均求解时间: ", avgRT);
}

关键修改说明

  • 将thisOplModel.generate()移到循环外部:模型和数据固定,只需生成一次,避免重复生成带来的内存开销和状态干扰。
  • 每次循环创建新的IloCplex实例:确保每次求解都是独立的全新流程,不受之前求解状态的影响,保证10次求解都完整执行。
  • 修正求解时间累加逻辑:仅累加一次当前求解时间,避免计算错误。
  • 每次求解后销毁CPLEX实例:及时释放资源,避免内存占用过高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:35:26