JAVA를 통해 Choco Solver로 다차원 배낭 문제를 구현하려고합니다. 제 아이디어는 2 개의 배낭에 3 개의 아이템을 할당하는 것입니다.Choco Solver로 배낭에서 아이템 할당
내 제품의 무게와 배낭 한도 : int [] itemWeight = {2, 2, 2}; int [] knapsackLimit = {4, 4};
그리고 내 결정 변수는 3 가지 항목이 {0, 1} 사이의 배낭을가집니다. int [] itemAllocation = {1, 1, 0};
나는 초코 솔버를 사용하여이 문제를 썼다 :Model model = new Model("KnapsackProblem");
// Allocation variable
IntVar[] x = new IntVar[3];
for (int i = 0; i < itemNumber; i++) {
x[i] = model.intVar("x"+i, 0, knapsackNumber-1);
}
// Knapsack capacities variables
IntVar[] limitVar = new IntVar[knapsackNumber];
for (int i = 0; i < knapsackNumber; i++) {
limit[i] = model.intVar(knapsackLimit[i]);
}
IntVar[] itemWeightVar = new IntVar[itemNumber];
for (int i = 0; i < itemNumber; i++) {
itemWeightVar[i] = model.intVar(0, 2);
model.element(itemWeightVar[i], itemWeight,x[i]);
}
// Limit Cosntraints
for (int i = 0; i < knapsackNumber; i++) {
model.sum(itemWeightVar, "<=", limit[x[i].getValue()]);
}
model.getSolver().solve();
불행하게도,이 방법이 작동하지 않습니다. 나는 항상 다음과 같은 할당을 얻습니다 : [x0 = 0, x1 = 0, x2 = 0]
미리 감사드립니다.
최저
는 답변 주셔서 감사합니다. 코코라는 Choco Solver의 새로운 이름인가요? – AkrogAmes당신은 환영합니다. No Cosling은 우리 회사의 이름이지만 Choco Solver에 대한 전문적인 지원을 제공합니다. –