Java ApacheCommonsMath3:构建模型时始终获取无界解决方案异常

Java ApacheCommonsMath3:构建模型时始终获取无界解决方案异常,java,apache,mathematical-optimization,linear-programming,apache-commons-math,Java,Apache,Mathematical Optimization,Linear Programming,Apache Commons Math,我想用apache的commons math 3解决以下模型: maximize: 30x + 40y s.t. x+y <= 240; 2x+y <= 320; x,y>=0; 最大化:30x+40y s、 t.x+y从未使用过该库,但文档告诉您: 公共非负约束(布尔限制) 参数: 受限-如果为真,则所有变量必须为正 而你做的恰恰相反: NonNegativeConstraint nonNegativeConstraint = new NegativeConstraint(

我想用apache的commons math 3解决以下模型:

maximize: 30x + 40y
s.t. x+y <= 240; 2x+y <= 320; x,y>=0;
最大化:30x+40y

s、 t.x+y从未使用过该库,但文档告诉您:

公共非负约束(布尔限制)

参数:

受限-如果为真,则所有变量必须为正

而你做的恰恰相反:

NonNegativeConstraint nonNegativeConstraint = new NegativeConstraint(false);

阅读文档时,我强烈倾向于整数编程不受支持。

从未使用过该库,但文档告诉您:

公共非负约束(布尔限制)

参数:

受限-如果为真,则所有变量必须为正

而你做的恰恰相反:

NonNegativeConstraint nonNegativeConstraint = new NegativeConstraint(false);

阅读文档,我强烈倾向于整数编程不受支持。

您错误地配置了非负约束,如果您想要x,您应该将“true”传递给它的构造函数,如果您想要x,y都是正的

您错误地配置了非负约束,如果您想要x,您应该将“true”传递给它的构造函数,你们两个都是积极的

啊,这解决了问题,谢谢!所以在我之前的解决方案中,我说过:“每个决策变量都可以是负的和正的”,而不是“每个决策变量都必须是0或正的”。因此,有无界解的值是有意义的。我正在寻找一个好的优化库。如果它是开源的,那就太好了。在我的研究中,我只使用了商业工具IBMILOGCPLEX,这非常好。Choco CP Solver是一个很好的替代方案,但它不支持双解(仅支持整数和二进制)。你有一个很好的选择吗?从技术上讲,你说:
不添加任何非负性约束
。与假设变量一起,默认情况下是免费的(可能隐藏在文档的某个地方),它按预期工作。但请记住,这种假设通常是不同的。示例:几乎所有基于内点法的解算器(不是您的库)都采用理论设计,只允许使用非负变量(自然形式和自由变量需要特别注意;)。自由和非自由(M)IP解算器之间存在巨大差距(特别是当涉及二进制/整数时;在纯LP的情况下,大多数情况下这很容易解决)。忽略Choco和co(这是一种完全不同的方法;主要解决不同的问题),我对免费解算器的评价是:CBC>GLPK>LPsolve,其中GLPK和LPsolve的文档比现在更好!备注:当我玩Choco时,我看到有rational支持(或称之为浮动),但安装起来很麻烦。但请记住,CP与MIP非常不同。尤其是优化目标非常困难。感谢您提供的详细信息!我也看过SCIP解算器。所有这些解算器都是用C(++)编写的,有什么特殊原因吗?希望将其用作java api。通常,它可以与本机库等一起使用。但是,如果没有来自核心java的这些依赖关系,使用它将是非常好的。(1)C(++)是高性能计算领域的主流语言(以及一些Fortran;但较新的项目通常不会使用F)。这有很多原因,但手动内存管理可能是更重要的原因之一。(2)SCIP是开源的,但不是免费的!我想说它可能甚至比CBC更好,但好吧,不是出于商业目的。(3)实现语言和API是两个不同的东西。商业解决方案都是C(++)(可能是一些F),但可能有10种语言的接口,包括Java、Python……可能有一种开源解决方案的Java bases API。啊,这解决了问题,谢谢!所以在我之前的解决方案中,我说过:“每个决策变量都可以是负的和正的”,而不是“每个决策变量都必须是0或正的”。因此,有无限的解决方案值是有道理的。我正在寻找一个好的优化库。如果它是开源的,那就太好了。在我的研究中,我只使用过商业工具ibm ilog cplex,这很好。Choco CP Solver是一个很好的替代方案,但它不支持双解(仅支持整数和二进制).你有一个很好的选择吗?从技术上讲,你说:
不添加任何非负性约束
。加上假设变量,默认情况下是免费的(可能隐藏在文档的某个地方)它按预期工作。但请记住,这种假设通常是不同的。例如:几乎所有基于内点法(而不是您的库)的解算器都采用理论设计,只允许非负变量(自然形式和自由变量需要特别注意;)。自由和非自由(M)之间存在巨大的差距IP解算器(特别是当涉及二进制/整数时;在纯LP情况下,这在大多数情况下很容易解决)。忽略Choco和co(这是一种完全不同的方法;主要解决不同的问题),我对免费解算器的评价是:CBC>GLPK>LPsolve,其中GLPK和LPsolve的文档比现在更好!备注:当我玩Choco时,我看到有rational支持(或称之为浮动),但安装起来很麻烦。但请记住,CP与MIP非常不同。尤其是优化目标非常困难。感谢您提供的详细信息!我也看过SCIP解算器。所有这些解算器都是用C(++)编写的,有什么特殊原因吗?希望将其用作java api。通常,它可以与本机库等一起使用。但是,如果没有来自核心java的这些依赖关系,使用它将是非常好的。(1)C(++)是高性能计算领域的主流语言(以及一些Fortran;但较新的项目通常不会使用F)。这有很多原因,但手动内存管理可能是更重要的原因之一。(2)SCIP是开源的,但不是免费的!我想说它可能甚至比CBC更好,但不是出于商业目的。(3)实现语言和API是两回事