Я пытаюсь смоделировать ограничение в cplex, которое имеет структуру IF-THEN. В 2d-массиве (m x m + n) я хочу, чтобы sum_ofRows (m строк) было 1, тогда sum_ofColumns (m columns) должно быть 0. В cplex java api структура IF-THEN принимает в качестве аргументов два ограничения cplex.ifThen (Iloconstraint arg0, Iloonstraint arg2). 1) как я могу создать ограничение, не добавляя его в модель, то есть не использовать cplex.addEq (1, variable), а сохранить его где-нибудь в качестве ограничения? 2) у нас есть выражение, а затем мы добавляем проверку на равенство или неравенство, и оно автоматически добавляется в модель, я прав?
for(int i=0; i<m; i++){
drArrRow[i] = cplex.linearNumExpr();
for(int j=0; j<m;j++){
drArrRow[i].addTerm(1, x[i][j]);
}
cplex.addEq(1, drArrRow[i]);
}
//second part "then"
for(int j=0; j<m; j++){
drArrCol[j] = cplex.linearNumExpr();
for(int i=0; i<m;i++){
drArrCol[i].addTerm(1, x[i][j]);
}
cplex.addEq(1, drArrCol[j]);
}
//cplex.ifThen(constraint, constraint);
//Here i got stuck
Спасибо!
Это правильный ответ ??
IloLinearNumExpr[] drArrCol= new IloLinearNumExpr[m];
IloLinearNumExpr[] drArrRow= new IloLinearNumExpr[m];
IloConstraint[] drColConstr= new IloConstraint[m];
IloConstraint[] drRowConstr= new IloConstraint[m];
// first part "if"
for(int i=0; i<m; i++){
drArrRow[i] = cplex.linearNumExpr();
for(int j=0; j<m;j++){
drArrRow[i].addTerm(1, x[i][j]);
}
drColConstr[i] = cplex.eq(1, drArrRow[i]);
}
//second part "then"
for(int j=0; j<m; j++){
drArrCol[j] = cplex.linearNumExpr();
for(int i=0; i<m;i++){
drArrCol[j].addTerm(1, x[i][j]);
}
drRowConstr[j] = cplex.eq(1, drArrRow[j]);
}
//end of 3 constraint
for(int i=0; i<m; i++){
cplex.ifThen(drRowConstr[i], drColConstr[i]);
}