我试图在JAVA中重现fzero的MATLAB函数的结果。 在搜索之后,我找到了库JOM(Java Optimization Modeler)。 我写了一个非常简单的程序,以测试它的效率,我无法找到正确的值,我使用一个非常简单的评估函数:x - 100,目标是最小化它。我想知道我的代码是错误的还是你可以建议我另一个库做得更好? 下面的代码发现最佳解决方案是0.0,我期待100。
/* Create the optimization problem object */
OptimizationProblem op = new OptimizationProblem();
op.addDecisionVariable("x", false, new int[] { 1 , 1 }, 0 , Double.MAX_VALUE);
/* Sets the objective function */
op.setObjectiveFunction("minimize", "x-100");
op.solve("ipopt");
if (!op.solutionIsOptimal ()) throw new RuntimeException ("An optimal solution was not found");
System.out.println (op.getPrimalSolution("x").toValue());
System.out.println("Total cost obtained: " + op.getOptimalCost());
答案 0 :(得分:1)
我认为这里有一个问题,你没有。如果再考虑一下,你会发现在等于[0,Double.MAX_VALUE)的区间中,等式的最小值确实为0.0。这是因为函数单调递增并以其最小值-100开始。要求解方程,您需要最小化绝对值。
但是,您要解决的功能是否会在您尝试解决的时间间隔内持续解决?在这种情况下,我建议你使用Newtons method,它们已被证明具有良好的方程求解性能。如果你有一个想要求解的方程的函数(例如f(x)= x-100),那么该方法可以很容易地实现。可以使用不同的近似值找到导数,其中一些可以在wikipedia上找到。