Apache Commons Math通常是开始在 Java 中进行数值计算的好地方。最好通过示例学习用法,查看API 文档和各种类和方法的单元测试源代码。
正如您所指出的,用户指南中引用的优化类已被弃用。它们仍然可以被调用,但最终它们当然会从库中被淘汰。由于我不知道的原因,正在进行的优化开发现在是在optim而不是优化子包中进行的。
对于单变量函数(局部最优)最小化,Apache Commons Math提供了Brent方法的实现。的单元测试中概述了用法BrentOptimizer
,我从中复制了以下摘录:
@Test
public void testSinMin() {
UnivariateFunction f = new Sin();
UnivariateOptimizer optimizer = new BrentOptimizer(1e-10, 1e-14);
Assert.assertEquals(3 * Math.PI / 2,
optimizer.optimize(new MaxEval(200),
new UnivariateObjectiveFunction(f),
GoalType.MINIMIZE,
new SearchInterval(4, 5)).getPoint(), 1e-8);
Assert.assertTrue(optimizer.getEvaluations() <= 50);
Assert.assertEquals(200, optimizer.getMaxEvaluations());
...
}