2017-03-29 6 views
0

는 다음과 같은 목적 함수입니다 : enter image description hereGurobi에서 다음과 같은 목적 함수를 작성하는 방법은 무엇입니까?

나는 다음과 같은 자바 코드가 있습니다

// Create list of variables 
List<GRBVar> varList = new ArrayList<>(); 

// Set objective: maximize log(p) * x 
GRBLinExpr expr = new GRBLinExpr(); 

int counter = 0; 

for(Map.Entry<String, Double[]> entry: probabilityLevels.entrySet()) { 

    Double[] probs = entry.getValue(); 

    for (Double prob: probs) { 
     GRBVar x = model.addVar(0.0, 1.0, 0.0, GRB.BINARY, "x" + counter); 
     expr.addTerm(Math.log(prob), x); 
     varList.add(x); 
    } 
} 

model.setObjective(expr, GRB.MAXIMIZE); 

업데이트 코드를

+0

의사 결정 변수 또는 데이터입니까? z는 위 첨자 또는 지수입니까? –

+0

z 위 첨자는 지수가 아니며 p는 한정사 일 뿐이며 알려진 값을 갖는 변수입니다. 나는 x의 값이 p가 선택되었는지 아닌지를 결정할 것이기 때문에 유일한 결정 변수가 x라고 믿는다. 또한, p가 때때로 0 일 수 있다는 것을 알았습니다. 이는 로그가 -Infinity라는 것을 의미합니다. 이것은 MIP 해석기를 실행 한 후에 결과를 엉망으로 만듭니다. p의 계산이 잘못되었거나 해결자가이 값을 처리하는 데 사용할 수있는 기능이 있습니까? – Andrei

답변

2

귀하의 루프는 올바른 보이지만, 당신이 하나를 만들 GRBVar x, j, k 및 z의 각 조합에 대해 하나의 GRBVar를 만드는 대신. 이러한 GRBVar 객체를 모두 저장하는 데이터 구조를 만들어 j, k 및 z의 조합을 반복 할 때 만들어야합니다.

+0

코드를 지금 업데이트했지만 이전 주석에서 언급 한 것과 같은 문제가 계속 발생합니다. – Andrei

+0

Gurobi와 같은 LP/MIP 해석기에서 +/- Infinity 값으로 작업 할 수있는 방법이 없습니다. –