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

如何在CPLEX主方法中将迭代求解结果写入Excel表格?

CPLEX迭代求解结果写入Excel的技术方案

问题背景

项目中模型的ForecastMultiplier变量需动态调整(取值范围0.8~1.3,步长0.1),需将每次CPLEX迭代的求解结果写入Excel表格。当前主方法代码如下,计划通过SheetWrite函数实现需求:

当前主方法代码

main { 
    var source = new IloOplModelSource ("CS4.mod");
    var def = new IloOplModelDefinition(source);

    for (var k = 0.8; k <= 1.3; k += 0.1)
    { 
        var modelInstance = new IloOplModel(def, cplex);
        var data = new IloOplDataSource("CS4.dat"); 
        modelInstance.addDataSource(data); 
        var data2= new IloOplDataElements(); 
        data2.ForecastMultiplier=k;
        modelInstance.addDataSource(data2);
        modelInstance.generate();
        cplex.solve();
        writeln("For The scenario:" + k +", Optimal solution: " + modelInstance.x);
        modelInstance.end()
    }
}

初步思路代码

DataName to SheetWrite(ConnectionName, “Sheet!xx:xx”);

技术实现方案

要实现结果写入Excel,需完成Excel连接建立、表头初始化、迭代数据写入、资源释放四个核心步骤,以下是整合后的完整代码:

main { 
    var source = new IloOplModelSource ("CS4.mod");
    var def = new IloOplModelDefinition(source);
    
    // 1. 建立Excel连接,指定目标文件路径
    var excelConn = new IloOplConnection("output_results.xlsx");
    // 2. 写入表头(第一行)
    "ForecastMultiplier" to SheetWrite(excelConn, "Sheet1!A1");
    "Optimal Solution" to SheetWrite(excelConn, "Sheet1!B1");
    
    var row = 2; // 从第二行开始写入数据
    for (var k = 0.8; k <= 1.3; k += 0.1)
    { 
        var modelInstance = new IloOplModel(def, cplex);
        var data = new IloOplDataSource("CS4.dat"); 
        modelInstance.addDataSource(data); 
        var data2= new IloOplDataElements(); 
        data2.ForecastMultiplier=k;
        modelInstance.addDataSource(data2);
        modelInstance.generate();
        
        if (cplex.solve()) { // 判断求解是否成功
            // 3. 将当前迭代的参数和结果写入对应单元格
            k to SheetWrite(excelConn, "Sheet1!A" + row);
            modelInstance.x to SheetWrite(excelConn, "Sheet1!B" + row);
            writeln("For The scenario:" + k +", Optimal solution: " + modelInstance.x);
            row++; // 行号自增,准备下一行写入
        } else {
            writeln("Scenario " + k + " solving failed!");
        }
        
        modelInstance.end();
    }
    
    // 4. 关闭Excel连接,释放资源
    excelConn.close();
}

关键说明

  • Excel连接:通过IloOplConnection创建与目标Excel文件的连接,文件不存在时会自动创建。
  • 单元格定位:通过Sheet1!A" + row的方式动态指定写入位置,确保每次迭代结果写入新行。
  • 求解判断:增加cplex.solve()的判断,避免求解失败时写入无效数据。
  • 资源释放:迭代结束后必须调用close()关闭Excel连接,防止文件占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:50:02