通常,Apache Commons Math是开始使用Java进行数值计算的好地方。通过示例,通过查看API文档以及各种类和方法的@L_301_3@,可以最佳地了解用法。
正如您已经指出的,不建议使用用户指南中引用的优化类。仍然可以调用它们,但是最终它们当然会从库中淘汰。由于我不知道的原因,正在进行的优化开发现在是在优化中 而不是 优化 子程序包中进行的。
为了最小化单变量(局部最优), 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());
...
}