作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找到了使用 choco 求解器求解幻方程序的代码:
public static void main(String[] args) {
int n = 4;
System.out.println("Magic Square Problem with n = " + n);
Problem myPb = new Problem();
IntVar[] vars = new IntVar[n * n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
vars[i * n + j] = myPb.makeEnumIntVar("C" + i + "_" + j, 1, n * n);
}
IntVar sum = myPb.makeEnumIntVar("S", 1, n * n * (n * n + 1) / 2);
myPb.post(myPb.eq(sum, n * (n*n + 1) / 2));
for (int i = 0; i < n * n; i++)
for (int j = 0; j < i; j++)
myPb.post(myPb.neq(vars[i], vars[j]));
int[] coeffs = new int[n];
for (int i = 0; i < n; i++) {
coeffs[i] = 1;
}
for (int i = 0; i < n; i++) {
IntVar[] col = new IntVar[n];
IntVar[] row = new IntVar[n];
for (int j = 0; j < n; j++) {
col[j] = vars[i * n + j];
row[j] = vars[j * n + i];
}
myPb.post(myPb.eq(myPb.scalar(coeffs, row), sum));
myPb.post(myPb.eq(myPb.scalar(coeffs, col), sum));
myPb.solve();
}
但是“Problem”类似乎已被“Model”类取代。使用 Model.intVar 而不是 Problem.makeEnumIntVar 是否正确?当前替代 Problem.neq、Problem.eq 和 Problem.scalar 的函数是什么?
最佳答案
看起来您那里有一些已弃用的代码。表达式
Problem.scalar and Problem.eq
可以表示为
int capacity = 34; // max capacity
int[] volumes = new int[]{7, 5, 3};
// Problem.scalar
model.scalar(new IntVar[]{obj1, obj2, obj3}, volumes, "=", capacity).post();
// Problem.eq
model.arithm(obj1, "=", obj2).post();
上面的代码例如表达了标量积等于容量并且obj1必须等于obj2的约束。
进一步阅读和资源:
在这里您可以找到带有一些示例代码的最新教程: choco tutorial
最后您还可以在 github 上查看测试用例:https://github.com/chocoteam/choco-solver/tree/master/src/test/java/org/chocosolver/solver
尤其是变量和表达式的测试可能会让您感兴趣。
更多代码示例可以在这里找到: more code samples
关于java - Choco 解算器旧类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533057/
我是一名优秀的程序员,十分优秀!