2017-05-08 2 views
0

: 나는 합계가 내 모델을 가지고 수행하고사용 결정 변수 Gurobi 자바 보통 Gurobi의 자바 인터페이스에 내가 예를 들어이와 모델에 변수를 추가하여 모델을 생성

for (int i = 0; i < n; i++){ 
    for (int j = 0; j < n; j++) { 
     XobjectiveCoef = distance(i, j); 
     X[i][j] = model.addVar(0.0, 1.0, XobjectiveCoef, GRB.BINARY, "x" + String.valueOf(i) + "_" + String.valueOf(j)); 

    } 
} 

모든 X가에 걸쳐 i와 j, 그리고 나는 이런 식으로 뭔가에 원하는 제약에 X[i][j]을 사용할 수 있습니다 : 이제

for (int j = 0; j < n; j++) { 
    GRBLinExpr expr = new GRBLinExpr(); 
    for (int i = 0; i < n; i++){ 
     expr.addTerm(1.0, X[i][j]); 
    } 
    model.addConstr(expr, GRB.EQUAL, 1.0, "Name_of_constraint"); 
} 

내가 무엇을 찾고, 단지 제약 조건이 아니라 의사 결정 변수를 사용하는 방법입니다 모델 정의에서. GRBLinExpraddVar을 사용할 수 있는지 확인했지만 그렇지 않은 것은 아닙니다.

감사

답변

0

당신은 GRBLinExpr를 생성하고 재사용 할 수 있습니다. 예를 들어 :

model.addConstr(expr, GRB.EQUAL, 1.0, "ct1"); 
expr.addTerm(1.0, Y); 
expr.addTerm(1.0, Z). 
model.addConstr(expr, GRB.GREATER_EQUAL, 2.0, "ct2"); 

이 나 새 GRBVar 개체를 만드는 것보다 더 효율적으로 될 수도 있고 그렇지 않을 수도 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 expr을 재사용 할 수 있다고 확신하지만, 나는 답을 얻지 못한다. 모델 정의에없는 경우 어디에서 어떻게 Y와 Z를 만듭니 까? (따라서 model.addVar (...)로 생성하지 않음)? –

+0

Y와 Z는 새로운 변수입니다. 이 예에서는 단순히 expr이라는 GRBLinExpr을 다시 사용할 수 있음을 보여줍니다. –

+0

예를 들어 주셔서 감사합니다. 그러나 주요 질문과 의견에서 볼 수 있듯이 문제는 표현식을 재사용하는 것이 아니라 목표 변수에 추가하지 않고 의사 결정 변수를 만드는 문제입니다. 새 GRBVar 생성자를 사용할 수 없으므로 model.addVar (...)를 실행해야합니다. 하지만 model.addVar (...)을 호출하면이 변수가 목적 함수에 추가됩니다. 나 맞아? –