cplex java api建模1-sum_j 2d数组

时间:2014-07-31 23:50:23

标签: java cplex

我尝试对表达式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。

0 个答案:

没有答案