我的 minizinc 模型运行良好,但我需要将其转换为 Java 代码,所以我使用 choco 来完成。我现在面临的问题是 minizinc 炒锅的机制与 choco 不同。我在 choco 中写了我在 minizinc 中使用的约束,但它没有用。
假设:
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]]);
巧克力代码是:
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 相同的方式工作?