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

如何将CPLEX的3D决策变量按指定矩阵格式写入Excel?

可以实现,调整变量导出的结构即可,以下是两种可行方案:

方案一:构造二维数组映射目标格式

通过将3D决策变量转换为K × (L×T)的二维数组,直接导出成Excel的行列对应格式。

修改后的.mod文件

int K = 15;
int L = 2;
int T = 6;

range k = 1..K;
range l = 1..L;
range t = 1..T;
// 定义列范围:对应L×T=12列
range cols = 1..(L*T);

dvar X[k][l][t];

subject to {
    // 你的约束条件
}

// 将3D变量转成二维数组:每行对应一个k,每列对应(l,t)的组合
float exportData[k][cols] = [k][(l-1)*T + t] X[k][l][t] | k in k, l in l, t in t;

修改后的.dat文件

SheetConnection Test ("Thesis.xlsx");
// 导出到Output工作表的C2到N16区域(15行12列)
exportData to SheetWrite(Test,"Output!C2:N16");

说明:(l-1)*T + t将l和t的组合转换为列索引,比如l=1时t从1到6对应第1-6列,l=2时t从1到6对应第7-12列,正好匹配12列的需求。

方案二:直接映射Excel单元格(无需修改.mod)

如果不想改动模型文件,可以在.dat中通过循环计算每个变量对应的Excel单元格位置,直接写入。

修改后的.dat文件

SheetConnection Test ("Thesis.xlsx");

// 遍历所有变量,计算对应的单元格位置并写入
for (k in k, l in l, t in t) {
    let col = 3 + (l-1)*T + (t-1); // C列是第3列,计算列偏移
    let row = 2 + (k-1); // 从第2行开始,计算行偏移
    X[k][l][t] to SheetWrite(Test, "Output!" + CellName(row, col));
}

说明:CellName(row, col)会自动将行号列号转换为Excel的单元格名称(比如row=2, col=3对应C2),最终所有变量会按K为行、L×T为列的格式排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:25:21