如何在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
相关产品推荐
相关产品推荐

