多个解决方案
对多个解决方案
通过调用,可以在一个对象中获得多个解运行
与语法
[x, fval exitflag、输出manymins] =(…);
manymins
是解对象的向量;看到GlobalOptimSolution
.的manymins
向量按照目标函数值的顺序,从最低(最好)到最高(最差)。每个解决方案对象包含以下属性(字段):
有几种方法可以检查解决方案对象的向量:
在MATLAB®工作空间浏览器。双击解决方案对象,然后在Variables编辑器中双击结果显示。
使用点符号。
GlobalOptimSolution
属性是大写。使用适当的大小写来访问属性。例如,要查找函数值的向量,输入:
(manymins fcnvals =。Fval] fcnvals = -1.0316 -0.2155 0
的第一个元素的最小函数值的所有起始点组成的单元格数组
manymins
),输入:smallX0 = manymins(1)。X0
画出一些字段值。例如,查看结果的范围
Fval
,输入:直方图([manymins.Fval], 10)
这将产生计算函数值的直方图。(该图显示的直方图与前面几张图不同。)
改变不同解的定义
在获得多个局部解决方案后,您可能会发现,您的公差不合适。你可能会有比你想要的更多的局部解决方案,它们之间的距离太近了。或者你可以得到比你想要的更少的解GlobalSearch
或MultiStart
把太多的溶液聚集在一起。
为了处理这种情况,在不同的公差下再次运行求解器。的XTolerance
而且FunctionTolerance
公差决定了求解器如何将其输出分组到GlobalOptimSolution
向量。这些公差是性能GlobalSearch
或MultiStart
对象。
例如,假设您想使用有效集
算法在fmincon
解决问题使用MultiStart运行的示例.进一步假设你想要有公差0.01
对于这两个XTolerance
而且FunctionTolerance
.的运行
方法将目标函数值在内的局部解分组FunctionTolerance
彼此的,而其中也小于XTolerance
彼此分开。获取方法:
% %设置随机流以获得完全相同的输出% rng(14,'twister') ms = MultiStart('FunctionTolerance',0.01,'XTolerance',0.01);选择= optimoptions (@fmincon、“算法”、“有效集”);sixmin = @ (x) (4 * x (1) ^ 2 - 2.1 * (1) ^ 4 + x(1) ^ 6/3……+ x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4;问题= createOptimProblem (fmincon, x0,[1、2],…sixmin“客观”,“磅”,[3 3],乌兰巴托,3,3,…“选项”,选择);[xminm, fminm flagm、outptm someminsm] =运行(女士,问题,50);MultiStart从所有起始点完成运行。所有50次本地求解器运行都带有一个正的本地求解器出口标志。 someminsm someminsm = 1x5 GlobalOptimSolution Properties: X Fval Exitflag Output X0
在这种情况下,MultiStart
生成五个不同的解决方案。这里的“不同”是指两个解在目标函数值或位置上的距离大于0.01。