CPLEX 中的分段线性规划

Piecewise linear programming in CPLEX

我在 CPLEX 中构建运输成本表达式时遇到问题。特别是,它是 material 流量的分段线性函数,反映了规模经济。考虑从工厂到仓库的运输成本,我们将 T[f][j][m] 和 Qf1[f][j][m][r] 表示为从工厂 j 运输家庭 f 产品的基准运输成本到仓库 m 和产品系列 f material 的流量分别从工厂 j 到仓库 m。 r 代表流所属的范围。这是代码

sum(f in Fa, j in Pl, m in Wh, r in ra)
piecewise(t in 1..NbPieces-1)  {Coef[t]*T[f][j][m] -> Breakpoint[t]; Coef[NbPieces]*T[f][j][m]} Qf1[f][j][m][r];

这是我的 .dat 文件

 NbPieces=4;
 Coef=[1, 0.95, 0.89, 0.8];
 Breakpoint=[40, 100, 1000];

但是,程序无法提取表达式。有人可以帮我解决这个错误吗?

编辑:谢谢,Alex Fleischer!我修好了上面的那个。然而,最优解仍然没有实现。我想我确实犯了其他错误。当我添加约束以确保每个产品系列中的产品流量之和必须等于该产品系列从一个阶段到另一个阶段的流量时,我不确定是否正确。

这是我的约束代码,Q2 是产品 i 从仓库 m 到配送中心 k 的流量,Qf2 是产品系列 f 从仓库 m 到配送中心 k 的流量。系列 1 包括产品 1-6、10。系列 2:7-9,系列 3:11-14。

  forall (i in pr, m in Wh, k in DC)
    sum(i in pr:i<=6 || i==10) Q2[i][m][k] == sum(r in ra,f in Fa:f==1)Qf2[f][m][k][r];
  forall (i in pr, m in Wh, k in DC)
    sum(i in pr:i<=9 || i>=7) Q2[i][m][k] == sum(r in ra,f in Fa:f==2)Qf2[f][m][k][r];
  forall (i in pr, m in Wh, k in DC)
    sum(i in pr:i>=11) Q2[i][m][k] == sum(r in ra,f in Fa:f==3)Qf2[f][m][k][r];

你有越界错误,但如果你改变

sum(f in Fa, k in DC, l in CZ, r in ra) 
piecewise(t in 1..NbPieces-1) {Coef[t]*T3[f][k][l] -> Breakpoint[t]; Coef[NbPieces]*T3[f][k][l]} Qf2[f][k][l][r];

进入

sum(f in Fa, k in DC, l in CZ, r in ra) 
piecewise(t in 1..NbPieces-1) {Coef[t]*T3[f][k][l] -> Breakpoint[t]; Coef[NbPieces]*T3[f][k][l]} Qf3[f][k][l][r];

然后就可以了。你确定这里有 Qf2 吗? Qf3 工作正常