我尝试对表达式Sum_j (1-(Sum_i z[i][j])) * c[i][j]
建模,其中z[i][j]
是obj函数的布尔变量。我试着通过建模作为数组的每一列的表达式,然后是一个表示1-sum of collumns等等。像sum(prod(sum(1,negative(sum_j)),c[ij]))
这样的东西。但没有成功。我想要一点帮助。感谢
[edit]我的目标函数是“Sum_i Sum_j c [ij] * z [ij] + Sum_j(1-(Sum_i z [i] [j]))* uc [j]”,其中z(ij )是决策变量,其他是已知的。我的问题是我试图将表达式分解为更小的子表达式。所以事后我想以某种方式合并他们。
IloNumExpr[] colexpr = new IloLinearNumExpr[commuters];
IloNumExpr[] colexpr2 = new IloLinearNumExpr[commuters];
IloNumExpr[] colprod = new IloLinearNumExpr[commuters];
IloNumExpr[] firstpart = new IloLinearNumExpr[commuters];
IloNumExpr[] finalobj = new IloLinearNumExpr[commuters];
IloNumExpr[] obj = new IloLinearNumExpr[commuters];
//1st part of objective
for(int i=0; i<2; i++){
for(int j=0; j<4;j++){
firstpart[j] = cplex.prod(dr[i][j], z[i][j]);
}
}
//2nd part of objective
for(int j=0;j<4;j++){
for (int i=0;i<2;i++){
cplex.sum(colexpr[j],1);
}
colexpr2[j] = cplex.sum(1,cplex.negative(colexpr[j]));
}
for(int j=0;j<4;j++){
colprod[j] = cplex.prod(colexpr2[j],costs[j]);
}
//trying to merge 1st and 2nd part of objective function
for(int j=0;j<4;j++){
finalobj[j]= cplex.sum(firstpart[j],colprod[j]);
}
for(int j=0; j<4;j++){
//obj[j].addTerm(1.0,finalobj[j]);
cplex.addMaximize(finalobj[j]);
}
让我感到困惑的部分是如何传递一个表达式数组列的总和,以及如何合并两个表达式并将其传递给cplex.addMaximize。很多时候,由于IloNumVar和IlolinearNumVar,我得到编译器错误ArrayStoreException。