java - Choco 解算器旧类

标签 java solver choco

我找到了使用 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/

相关文章:

python - 在 Python 中求解 6 个非线性方程组时出现问题

java - C# 中 Choco 的类似库

java - choco 中的复杂变量

java - MongoDB如何使用Java驱动程序计算数组元素

java - 在运行时设置序列化属性

java - Maven 嵌套依赖项不可访问

java - 全屏阶段在 JavaFX 2.1 中无法正常工作?

r - R中的glm()与Excel中逻辑回归的手动实现之间的结果不一致

java - 用 choco 对一个约束中的多个变量求和

c# - Microsoft Solver Foundation 为简单的 ILP 给出了错误的答案