我有一个简单的优化问题,我正在寻找Java软件。
Apache数学优化软件看起来就像我想要的那样,但我找不到适合我需要的文档(这些需求对初学者/非数学专业人士有用!)
有没有人知道一个有效的,简单的例子?
如果有帮助,问题是我想找到max r where
r1 = s1 * m1
r2 = s2 * m2
并且存在一些用于定义变量之间关系的约束和公式。 Excel解算器适用于此问题。我让LPSolve运行得很好,但这个问题需要s和m的乘法,所以我理解LPSolve无法帮助,因为这会使问题变得非线性。
答案 0 :(得分:1)
我最近将无衍生的非线性约束优化代码COBYLA2移植到Java。由于它没有明确依赖于导数,因此对于较大的问题,该算法可能需要相当多的迭代。尽管如此,您仍然可以使用非线性目标函数和(可能的)非线性约束来表达您的问题。
您可以阅读更多相关信息并从here下载源代码。
答案 1 :(得分:0)
我不知道一个简单的基于Java的NLP求解器。 (我确实在 Apache Math Works 中找到了二次编程(QP)的示例,但由于您要求使用非数学专业示例,因此它不符合条件。)
我有两条建议可以解决你的非线性程序:
1 .. Excel 的Solver
确实能够解决非线性问题。 (不要使用LPSOLVE。)实际上,NLP是Solver中的默认模式。
以下是使用Excel解决NLP的两个链接:示例1 - Step by step Solver walk-through that covers NLP和 示例2 - A General Neural network example in Excel
同样对于Excel,我喜欢Paul Jensen(utexas) ORMM Add-in's 。 他有一个名为 Teach NLP 的模块。他的书中的 Chapter 10 涉及NLP,可以在他的网站上找到。
2 ..如果您打算进行一些数据分析,那么我建议您花几个小时下载并学习R 的基础知识。
R有numerous packages and libraries for optimization。 optim()
和nlme
是解决非线性程序的相关因素。
为了完整起见,我提及 SAS , MATLAB 和 CPLEX 作为其他选项。如果您可以访问其中任何一个,那么他们在解决非线性程序方面都做得很好。
希望这些指针有所帮助。