简体   繁体   中英

Choco solver old class

I found this code for solving the magic square program with the choco solver:

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();
}    

But the class 'Problem' seems to have been replaced with the 'Model' class. Is it correct to use Model.intVar instead of Problem.makeEnumIntVar? What would be the current function that replaces Problem.neq, Problem.eq and Problem.scalar?

It looks like you have some deprecated code there. The expressions

Problem.scalar and Problem.eq

can be expressed as

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(); 

The above code for example expresses the constraint that the scalar product is equal to capacity and that obj1 must be equal to obj2 .

Further reading and resources:

Here you will find the latests tutorial with some sample code: choco tutorial

Finally you can also check out the Testcases at github: https://github.com/chocoteam/choco-solver/tree/master/src/test/java/org/chocosolver/solver

Especially the tests for variables and expression might be interesting for you.

Some more code examples can be found here: more code samples

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM