主要内容

多个解决方案

对多个解决方案

通过调用,可以在一个对象中获得多个解运行与语法

[x, fval exitflag、输出manymins] =(…);

manymins是解对象的向量;看到GlobalOptimSolution.的manymins向量按照目标函数值的顺序,从最低(最好)到最高(最差)。每个解决方案对象包含以下属性(字段):

  • X-局部最小值

  • Fval-目标函数的值X

  • Exitflag-本地解算器的退出标志(描述在本地解算器函数参考页面:fminconexitflagfminuncexitflaglsqcurvefitexitflag,或lsqnonlinexitflag

  • 输出本地求解器的输出结构(在本地求解器函数参考页面中描述:fmincon输出fminunc输出lsqcurvefit输出,或lsqnonlin输出

  • X0-指向解决点的起始点单元数组X

有几种方法可以检查解决方案对象的向量:

  • 在MATLAB®工作空间浏览器。双击解决方案对象,然后在Variables编辑器中双击结果显示。

  • 使用点符号。GlobalOptimSolution属性是大写。使用适当的大小写来访问属性。

    例如,要查找函数值的向量,输入:

    (manymins fcnvals =。Fval] fcnvals = -1.0316 -0.2155 0

    的第一个元素的最小函数值的所有起始点组成的单元格数组manymins),输入:

    smallX0 = manymins(1)。X0
  • 画出一些字段值。例如,查看结果的范围Fval,输入:

    直方图([manymins.Fval], 10)

    这将产生计算函数值的直方图。(该图显示的直方图与前面几张图不同。)

改变不同解的定义

在获得多个局部解决方案后,您可能会发现,您的公差不合适。你可能会有比你想要的更多的局部解决方案,它们之间的距离太近了。或者你可以得到比你想要的更少的解GlobalSearchMultiStart把太多的溶液聚集在一起。

为了处理这种情况,在不同的公差下再次运行求解器。的XTolerance而且FunctionTolerance公差决定了求解器如何将其输出分组到GlobalOptimSolution向量。这些公差是性能GlobalSearchMultiStart对象。

例如,假设您想使用有效集算法在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。

相关的话题

Baidu
map