Моя модель minizinc работает нормально, но мне нужно преобразовать ее в код Java, поэтому я использовал choco для этого. Проблема, с которой я столкнулся прямо сейчас, заключается в том, что механизм, с которым работает minizinc, отличается от choco. Я написал ограничения, которые использовал в minizinc, точно в choco, но это не сработало.
Предположим, что :
Модель minizinc это:
array[sub_set] of var cl_set: cl_id;
constraint alldifferent(cl_id);
constraint forall(i in sub_set) ( sub_cap[i] <= cl_cap[cl_id[i]]);
код choco:
cl_id = VF.boundedArray("", sub_sz, 0, cl_sz - 1, solver);
solver.post(ICF.alldifferent(cl_id));
for (int i = 0; i < sub_sz; i++) {
Constraint a = ICF.arithm(VF.fixed(cl_cap[cl_id[i].getValue()], solver), ">=", sub_cap[i]);
solver.post(a);
}
- Cl_cap - это массив int.
cl_id[i].getValue()
всегда равен 0, потому что он получает нижнюю границу домена и ограничение не применяется к cl_id
Что мне делать, чтобы ограничение choco работало так же, как minizinc?