2014-12-28 4 views
0

문제를 해결하기 위해 choco API를 사용하고 있습니다. 내가 필요한 것은 1. 이 코드에 동일한 내 모든 변수의 합을 제약 조건을 코딩 행의 합이 1과 동일 유지입니다 :제약 choco

IntegerVariable[][] rows; 
int n; //number of rows 
for(int i=0; i<n; i++) 
model.addConstraint(eq(sum(rows[i], 1)); 

하지만 난의 합을 유지하는 코드를 프로그래밍되어 필요 모든 요소의 행렬 (행의 합)이 1이되고 각 행의 합이 1이 아님.

답변

1

올바르게 이해하면 전체 행렬의 합계가 1과 같아야합니다.

그런 다음 ArrayList ("all")를 사용하여 모든 IntegerVariables를 하나의 목록으로 수집 한 다음 "all"에 제약 조건을 추가 할 수 있습니다. 예가 완전하지 않습니다 (예 : 열의 수는 n 열이고 0/1 행렬이라고 가정합니다. 여기에 한 예가 있습니다 :

// ... 
ArrayList<IntegerVariable> all = new ArrayList<IntegerVariable>(); 
int n = 5; // number of rows and columns 
IntegerVariable[][] rows = new IntegerVariable[n][n]; 
for(int i = 0; i < n; i++) { 
    for(int j = 0; j < n; j++) { 
    rows[i][j] = makeIntVar("rows["+i+","+j+"]", 0, 1); 
    all.add(rows[i][j]); 
    } 
} 
// convert ArrayList all to an array 
model.addConstraint(eq(sum(all.toArray(new IntegerVariable[1])),1)); 
// ... 
+0

hakank – HiddenDroid

+0

"sum"은 어디에서 왔습니까? 나는 그것을위한 수입품을 찾아내는 것처럼 보인다. –