Java 求解带约束的多变量方程-Choco

Java 求解带约束的多变量方程-Choco,java,equation-solving,choco,Java,Equation Solving,Choco,我想解一个非线性多变量方程,离散值如下: x*y + z + t - 10 = 0 有限制: 10 < x < 100 10 < x < 100 10

我想解一个非线性多变量方程,离散值如下:

x*y + z + t - 10 = 0
有限制:

10 < x < 100
10 < x < 100
10
等等

我正试图用Choco library来做这件事,但我有点迷路了。 我发现这个代码:

    // 1. Create a Solver
    Solver solver = new Solver("my first problem");
    // 2. Create variables through the variable factory
    IntVar x = VariableFactory.bounded("X", 0, 5, solver);
    IntVar y = VariableFactory.bounded("Y", 0, 5, solver);
    // 3. Create and post constraints by using constraint factories
    solver.post(IntConstraintFactory.arithm(x, "+", y, "<", 5));
    // 4. Define the search strategy
    solver.set(IntStrategyFactory.lexico_LB(x, y));
    // 5. Launch the resolution process
    solver.findSolution();
    //6. Print search statistics
    Chatterbox.printStatistics(solver);
//1。创建一个解算器
解算器=新解算器(“我的第一个问题”);
// 2. 通过变量工厂创建变量
IntVar x=VariableFactory.bounded(“x”,0,5,解算器);
IntVar y=VariableFactory.bounded(“y”,0,5,解算器);
// 3. 使用约束工厂创建和发布约束

solver.post(IntConstraintFactory.arithm(x,“+”,y,“我以前没有使用过这个库,但是也许你应该把你的方程当作一个约束?

是的,更准确地说,你应该把方程分解成几个约束:

10 < x < 100
10 < x < 100
变成

// x*y = a 
IntVar a = VF.bounded("x*y",-25,25,solver);
solver.post(ICF.times(x,y,a); 
// a+z+t=10
IntVar cst = VF.fixed(10,solver);
solver.post(ICF.sum(new IntVar[]{a,z,t},cst)); 
最好的


请与我们联系,以获取有关Choco Solver的更多支持:www.cosling.com

您是对的。我需要了解如何显示用于解方程的变量值。不幸的是,约束格式是固定的。如果您可以制作一个以字符串格式的方程作为输入的方法,这将非常有用。您提到的方式非常简单很难管理你事先不知道其格式的方程式。事实上,有一个扩展可以做到这一点:看看测试,看看它是如何工作的。我还没有使用过它,所以我对任何反馈都很感兴趣。最好的,@Jean GuillaumeFages有一个活跃的Choco社区吗?我正在使用Choco开发一个库,但我是新手我发现这真的很难继续。官方页面上的论坛已经死了。有什么地方我可以找到指南吗?你是新来的Choco Solver还是Constraint Programming(CP)?CP非常复杂,如果没有良好的理论背景,你无法掌握一个求解器。如果你正在为你的图书馆寻求专业支持,我的公司提供关于Choco和CP的培训、开发和支持。请随时与我们联系。社区论坛()主要针对特定(技术)问题关于Choco的问题,意味着您需要对您的CP模型应该是什么有一个好的想法。