使用巧克力解算器求解方程

时间:2016-02-28 22:01:00

标签: java api constraints smt choco

我正在寻找一种在Choco Solver上编码数学方程的方法。 我看到有一种编码约束的方法,如:

x + y< 9

但我正在尝试编码类似

的内容

3x + 4y< 9

其中x和y是int vars。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我也是Choco的新手,但我可以解决这个问题。

为此,您可以使用约束scalar(请参阅docs)。

首先,您只需要在两个x变量中定义yIntVar。您可以使用VariableFactory.boundedVariable.enumerated。当您只想使用具有下限和上限的域时,它们非常相似,但差异在user guide中进行了解释。

然后你需要用方程的系数定义一个数组,在本例中为{ 3, 4 }

以下是您的操作方法:

Solver solver = new Solver();

IntVar x = VariableFactory.bounded("x", 0, 50, solver);
IntVar y = VariableFactory.bounded("y", 0, 50, solver);

int[] coefficients = new int[]{ 3, 4 };

solver.post(IntConstraintFactory.scalar(new IntVar[]{ x,  y }, coefficients, "<", VariableFactory.fixed(9, solver)));

if (solver.findSolution()) {
    do {
        System.out.println("x = " + x.getValue() + ", y = " + y.getValue());
    } while (solver.nextSolution());
} else {
    System.out.println("The equation has no solutions.");
}