类 CMAESOptimizer
java.lang.Object
org.hipparchus.optim.BaseOptimizer<PointValuePair>
org.hipparchus.optim.BaseMultivariateOptimizer<PointValuePair>
org.hipparchus.optim.nonlinear.scalar.MultivariateOptimizer
org.hipparchus.optim.nonlinear.scalar.noderiv.CMAESOptimizer
用于非线性、非凸、非光滑、全局函数最小化的主动协方差矩阵适应进化策略(CMA-ES)的实现。
CMA-Evolution Strategy(CMA-ES)是一种可靠的随机优化方法,应用于当基于导数的方法(例如拟牛顿BFGS或共轭梯度)由于目标函数的崎岖搜索景观(例如噪声、局部最优、异常值等)而失败时。像拟牛顿方法一样,CMA-ES学习并应用于基础搜索空间的可变度量。与拟牛顿方法不同,CMA-ES既不估计也不使用梯度,因此在找到良好或接近最优解方面更加可靠。
一般来说,在光滑的目标函数上,CMA-ES比BFGS慢大约十倍(计算目标函数评估,不提供梯度)。对于最多\(n=10\)个变量,无导数的单纯形直接搜索方法(Nelder和Mead)可能更快,但比CMA-ES可靠性要低得多。
CMA-ES特别适用于非可分离和/或条件糟糕的问题。要观察CMA相对于传统进化策略的优势,通常需要大约\(30 n\)个函数评估。在困难问题上,完整的优化(单次运行)预计需要大约\(30 n\)到\(300 n^2\)个函数评估。
此实现是从CMA-ES算法的Matlab版本(在模块cmaes.m
版本3.51中实现)翻译和调整而来。
有关更多信息,请参考以下链接:
-
嵌套类概要
修饰符和类型类说明static class
种群大小。static class
输入sigma值。 -
字段概要
从类继承的字段 org.hipparchus.optim.BaseOptimizer
evaluations
-
构造器概要
构造器说明CMAESOptimizer
(int maxIterations, double stopFitness, boolean isActiveCMA, int diagonalOnly, int checkFeasableCount, RandomGenerator random, boolean generateStatistics, ConvergenceChecker<PointValuePair> checker) 简单构造函数。 -
方法概要
修饰符和类型方法说明protected PointValuePair
执行优化算法的主要部分。获取D矩阵的历史记录。获取适应度值的历史记录。获取均值矩阵的历史记录。获取sigma值的历史记录。optimize
(OptimizationData... optData) 存储数据并执行优化。protected void
parseOptimizationData
(OptimizationData... optData) 扫描表征问题的(必需和可选)优化数据列表。从类继承的方法 org.hipparchus.optim.nonlinear.scalar.MultivariateOptimizer
computeObjectiveValue, getGoalType
从类继承的方法 org.hipparchus.optim.BaseMultivariateOptimizer
getLowerBound, getStartPoint, getUpperBound
从类继承的方法 org.hipparchus.optim.BaseOptimizer
getConvergenceChecker, getEvaluations, getIterations, getMaxEvaluations, getMaxIterations, incrementEvaluationCount, incrementIterationCount, optimize
-
构造器详细资料
-
CMAESOptimizer
public CMAESOptimizer(int maxIterations, double stopFitness, boolean isActiveCMA, int diagonalOnly, int checkFeasableCount, RandomGenerator random, boolean generateStatistics, ConvergenceChecker<PointValuePair> checker) 简单构造函数。- 参数:
-
maxIterations
- 最大迭代次数。 -
stopFitness
- 如果目标函数值小于stopFitness
,是否停止。 -
isActiveCMA
- 选择协方差矩阵更新方法。 -
diagonalOnly
- 初始迭代次数,协方差矩阵保持对角线的次数。 -
checkFeasableCount
- 确定在超出边界时新生成随机目标变量的频率。 -
random
- 随机生成器。 -
generateStatistics
- 是否收集统计数据。 -
checker
- 收敛检查器。
-
-
方法详细资料
-
getStatisticsSigmaHistory
获取sigma值的历史记录。- 返回:
- sigma值的历史记录
-
getStatisticsMeanHistory
获取均值矩阵的历史记录。- 返回:
- 均值矩阵的历史记录
-
getStatisticsFitnessHistory
获取适应度值的历史记录。- 返回:
- 适应度值的历史记录
-
getStatisticsDHistory
获取D矩阵的历史记录。- 返回:
- D矩阵的历史记录
-
optimize
public PointValuePair optimize(OptimizationData... optData) throws MathIllegalArgumentException, MathIllegalStateException 存储数据并执行优化。当多次调用该方法时,只有在参数列表中实际存在时才会覆盖实例数据:当未指定时,上一次调用中设置的数据将保留(因此在后续调用中是可选的)。
重要提示:子类必须覆盖
BaseOptimizer.parseOptimizationData(OptimizationData[])
如果它们需要注册自己的选项;但是,它们还必须在该方法中调用super.parseOptimizationData(optData)
。- 覆盖:
-
optimize
在类中MultivariateOptimizer
- 参数:
-
optData
- 优化数据。除了在MultivariateOptimizer
中记录的数据外,此方法还将注册以下数据: - 返回:
- 满足收敛标准的点/值对。
- 抛出:
-
MathIllegalStateException
- 如果超过最大评估次数。 -
MathIllegalArgumentException
- 如果初始猜测、目标和权重参数的维度不一致。
-
doOptimize
执行优化算法的主要部分。- 指定者:
-
doOptimize
在类中BaseOptimizer<PointValuePair>
- 返回:
- 给出目标函数的最优值的点/值对。
-
parseOptimizationData
扫描表征问题的(必需和可选)优化数据列表。- 覆盖:
-
parseOptimizationData
在类中MultivariateOptimizer
- 参数:
-
optData
- 优化数据。将查找以下数据:
-