栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Java Apache Math中使用SimplexSolver或SimplexOptimizer?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Java Apache Math中使用SimplexSolver或SimplexOptimizer?

确实,优化器可能很难使用:许多参数,其中不同类型的优化器需要不同的组合,并且它们都隐藏在所

OptimizationData
接收的通用数组中。除非您开始将代码与它们所引用的论文相匹配,否则您将很难从中获得任何结果。

我还想偶尔使用一些求解器/优化器,对我来说,可靠的,有效的“示例”的主要来源是这些类的 单元测试
,它们通常非常复杂,并且涵盖很多情况。例如,关于

SimplexOptimizer
,您可能想看看
org/apache/commons/math4/optim/nonlinear/scalar/noderiv/
包含测试类
SimplexOptimizerMultiDirectionalTest.java
和的测试用例
SimplexOptimizerNelderMeadTest.java


(对不起,也许这不是您期望或希望的,但是…当我试图弄清楚

OptimizationData
这些优化器实际需要哪些时,我发现这些测试非常有帮助…)

编辑

仅供参考,是一个完整的示例,该示例摘自以下基本单元测试之一:

import java.util.Arrays;import org.apache.commons.math3.analysis.MultivariateFunction;import org.apache.commons.math3.optim.InitialGuess;import org.apache.commons.math3.optim.Maxeval;import org.apache.commons.math3.optim.PointValuePair;import org.apache.commons.math3.optim.nonlinear.scalar.GoalType;import org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction;import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.NelderMeadSimplex;import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer;import org.apache.commons.math3.util.FastMath;public class SimplexOptimizerExample{    public static void main(String[] args)    {        SimplexOptimizer optimizer = new SimplexOptimizer(1e-10, 1e-30);        final FourExtrema fourExtrema = new FourExtrema();        final PointValuePair optimum = optimizer.optimize(     new Maxeval(100),      new ObjectiveFunction(fourExtrema),      GoalType.MINIMIZE,      new InitialGuess(new double[]{ -3, 0 }),      new NelderMeadSimplex(new double[]{ 0.2, 0.2 }));        System.out.println(Arrays.toString(optimum.getPoint()) + " : " + optimum.getSecond());    }    private static class FourExtrema implements MultivariateFunction    {        // The following function has 4 local extrema.        final double xM = -3.841947088256863675365;        final double yM = -1.391745200270734924416;        final double xP = 0.2286682237349059125691;        final double yP = -yM;        final double valueXmYm = 0.2373295333134216789769; // Local maximum.        final double valueXmYp = -valueXmYm; // Local minimum.        final double valueXpYm = -0.7290400707055187115322; // Global minimum.        final double valueXpYp = -valueXpYm; // Global maximum.        public double value(double[] variables)        { final double x = variables[0]; final double y = variables[1]; return (x == 0 || y == 0) ? 0 : FastMath.atan(x)     * FastMath.atan(x + 2) * FastMath.atan(y) * FastMath.atan(y)     / (x * y);        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号