Main Content

本页采用了机器翻译。点击此处可查看英文原文。

多个解

关于多个解

您可以通过以下语法调用 run 来获得对象中的多个解

[x,fval,exitflag,output,manymins] = run(...);

manymins 是解对象的向量;请参阅 GlobalOptimSolutionmanymins 向量按目标函数值的顺序排列,从最低(最好)到最高(最差)。每个解对象包含以下属性(字段):

  • X - 局部最小值

  • Fval - X 处的目标函数值

  • Exitflag -局部求解器的退出标志(在局部求解器函数参考页中描述:fmincon exitflagfminunc exitflaglsqcurvefit exitflag lsqnonlin exitflag

  • Output -局部求解器的输出结构体(在局部求解器函数参考页中描述:fmincon outputfminunc outputlsqcurvefit output lsqnonlin output

  • X0 - 通向解点 X 的起点元胞数组

注意

manymins 仅包含与正局部局部求解器退出标志相对应的那些解。如果您想要收集所有局部解(而不仅仅是与正退出标志相对应的解决方案),请使用 @savelocalsolutions 输出函数。请参阅 GlobalSearch 和 MultiStart 的输出函数

有多种方法可以检查解对象的向量:

  • 在 MATLAB® 工作区浏览器中。双击解对象,然后双击变量编辑器中的结果显示。

  • 使用圆点表示法。GlobalOptimSolution 属性是大写的。使用适当的大写字母来访问属性。

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

    fcnvals = [manymins.Fval]
    fcnvals =
       -1.0316   -0.2155         0

    要获取导致最低函数值(manymins 的第一个元素)的所有起点的元胞数组,请输入:

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

    histogram([manymins.Fval],10)

    这将生成计算函数值的直方图。(该图显示的直方图与前几个图的示例不同。)

改变不同解决方案的定义

在获得多个局部解后,您可能会发现您的容差并不合适。您可能会得到比您想要的更多的局部解,而且这些解决方案之间的间隔太近了。或者您可能拥有比您想要的更少的解,其中 GlobalSearchMultiStart 将太多解聚集在一起。

为了处理这种情况,请使用不同的容差再次运行求解器。XToleranceFunctionTolerance 容差决定了求解器如何将其输出分组到 GlobalOptimSolution 向量中。这些容差是 GlobalSearchMultiStart 对象的属性。

例如,假设您想使用 fmincon 中的 active-set 算法来解决 使用 MultiStart 的运行的示例 中的问题。进一步假设您希望 XToleranceFunctionTolerance 均具有 0.01 的容差。run 方法将目标函数值彼此相差 FunctionTolerance 以内且彼此相距小于 XTolerance 的局部解分组。为了获得解:

% Set the random stream to get exactly the same output
% rng(14,'twister')
ms = MultiStart('FunctionTolerance',0.01,'XTolerance',0.01);
opts = optimoptions(@fmincon,'Algorithm','active-set');
sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ...
    + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);
problem = createOptimProblem('fmincon','x0',[-1,2],...
    'objective',sixmin,'lb',[-3,-3],'ub',[3,3],...
    'options',opts);
[xminm,fminm,flagm,outptm,someminsm] = run(ms,problem,50);
MultiStart completed the runs from all start points.

All 50 local solver runs converged with a
positive local solver exit flag.
someminsm
someminsm = 

  1x5 GlobalOptimSolution

  Properties:
    X
    Fval
    Exitflag
    Output
    X0

在这种情况下,MultiStart 生成了五个不同的解。这里的“不同”意味着解在目标函数值或位置上相差超过 0.01。

相关主题