主要内容

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

MultiStart

寻找多个局部极小值

说明

MultiStart 对象包含影响 run 如何重复运行局部求解器以生成 GlobalOptimSolution 对象的属性(选项)。运行时,求解器尝试从各个点开始寻找问题的多个局部解。

创建对象

描述

ms = MultiStart 创建 ms,一个 MultiStart 求解器,其属性设置为默认值。

示例

ms = MultiStart(Name,Value) 使用名称-值对设置属性。

示例

ms = MultiStart(oldMS,Name,Value) 创建 oldMS MultiStart 求解器的副本,并使用名称-值对设置属性。

示例

ms = MultiStart(gs) 创建 ms(一个 MultiStart 求解器),其具有来自 gs GlobalSearch 求解器的通用参数值。

示例

属性

全部展开

命令窗口的显示级别,指定为以下字符向量或字符串之一:

  • 'final'run 完成后报告摘要结果。

  • 'iter' - 除了最终摘要之外,还报告初始 fmincon 运行后、第 1 阶段后、每 200 个起始点后以及每次 fmincon 运行后的结果。

  • 'off' - 无显示。

示例: 'iter'

数据类型: char | string

认为解相等的函数值的容差,指定为非负标量。如果两个解彼此之间的相对距离在 XTolerance 以内,并且目标函数值彼此之间的相对差异在 FunctionTolerance 以内,则求解器认为这两个解相同。如果两个条件都不满足,求解器会将解报告为不同的。将 FunctionTolerance 设置为 0 以获取每次局部求解器运行的结果。将 FunctionTolerance 设置为更大的值以获得更少的结果。有关 GlobalSearch 的详细信息,请参阅当 fmincon 运行时 中的更新解集。有关 MultiStart 的详细信息,请参阅 创建 GlobalOptimSolution 对象

示例: 1e-4

数据类型: double

MultiStart 运行的最长时间(以秒为单位),指定为正标量。以 tictoc 为衡量标准,MultiStart 及其局部求解器在运行开始后经过 MaxTime 秒后停止。

MaxTime 在运行期间不会中断局部求解器,因此总时间可以超过 MaxTime

示例: 180 秒后,局部求解器调用第一次完成时,180 停止求解器。

数据类型: double

报告求解器进度或暂停求解器,指定为函数句柄或函数句柄的元胞数组。每次局部求解器调用后,输出函数都会运行。它们也会在全局求解器启动和结束时运行。使用 OutputFcn 中描述的语法编写输出函数。请参阅 自定义 GlobalSearch 输出函数

内置的 @savelocalsolutions 输出函数将所有局部解保存到基础工作区中的 localSolTable 变量中。该输出函数保存了不可行局部解以及可行的局部解。有关示例,请参阅 收集所有局部解

数据类型: cell | function_handle

绘制求解器进度,指定为函数句柄或函数句柄的元胞数组。每次局部求解器调用后,绘图函数都会运行。它们也会在全局求解器启动和结束时运行。使用 OutputFcn 中描述的语法编写绘图函数。

有两个内置绘图函数:

  • @gsplotbestf 绘制最佳目标函数值。

  • @gsplotfunccount 绘制函数计算的次数。

请参阅 MultiStart 绘图函数

示例: @gsplotbestf

数据类型: cell | function_handle

运行的起点,指定为:

  • 'all' - 运行所有起点。

  • 'bounds' - 仅运行满足边界的起点。

  • 'bounds-ineqs' - 仅运行满足边界和不等式约束的起点。

示例: 'bounds' 仅运行满足所有边界的点。

数据类型: char | string

将局部求解器调用分发到多个处理器,指定为 falsetrue

  • false - 不要并行运行。

  • true - 将局部求解器调用分发到多个处理器。

示例: true

数据类型: logical

考虑解相等时的距离容差,指定为非负标量。如果两个解彼此之间的相对距离在 XTolerance 以内,并且目标函数值彼此之间的相对差异在 FunctionTolerance 以内,则求解器认为这两个解相同。如果两个条件都不满足,求解器会将解报告为不同的。将 XTolerance 设置为 0 以获取每次局部求解器运行的结果。将 XTolerance 设置为更大的值以获得更少的结果。有关 GlobalSearch 的详细信息,请参阅当 fmincon 运行时 中的更新解集。有关 MultiStart 的详细信息,请参阅 创建 GlobalOptimSolution 对象

示例: 2e-4

数据类型: double

对象函数

run运行多启动求解器

示例

全部折叠

考虑一个具有多个局部极小值的函数。

fun = @(x) x.^2 + 4*sin(5*x);
fplot(fun,[-5,5])

Figure contains an axes object. The axes object contains an object of type functionline.

为了寻找全局最小值,请使用 MultiStart fmincon 算法对问题的 20 个实例运行 'sqp'

rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
    fun,'x0',3,'lb',-5,'ub',5,'options',opts);
ms = MultiStart;
[x,f] = run(ms,problem,20)
MultiStart completed the runs from all start points. 

All 20 local solver runs converged with a positive local solver exitflag.
x = 
-0.3080
f = 
-3.9032

创建一个具有默认属性的 MultiStart 对象。

ms = MultiStart
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 1.0000e-06
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'all'
           XTolerance: 1.0000e-06

创建一个容差比默认值更宽松的 MultiStart 对象,这样求解器就会返回更少的彼此接近的解。此外,让 MultiStart 仅运行相对于边界和不等式约束可行的初始点。

ms = MultiStart('FunctionTolerance',2e-4,'XTolerance',5e-3,...
    'StartPointsToRun','bounds-ineqs')
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 2.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds-ineqs'
           XTolerance: 0.0050

创建一个非默认的 GlobalSearch 对象。

gs = GlobalSearch('FunctionTolerance',2e-4,'NumTrialPoints',2000)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 2000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 2.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'all'
                 XTolerance: 1.0000e-06

创建一个使用 MultiStart 中可用属性的 gs 对象。

ms = MultiStart(gs)
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 2.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'all'
           XTolerance: 1.0000e-06

ms 具有与 FunctionTolerance 相同的非默认值 gs。但是 ms 不使用 NumTrialPoints 属性。

创建一个 MultiStart 对象,其 FunctionTolerance1e-4

ms = MultiStart('FunctionTolerance',1e-4)
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 1.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'all'
           XTolerance: 1.0000e-06

XTolerance 属性更新为 1e-3,将 StartPointsToRun 属性更新为 'bounds'

ms = MultiStart(ms,'XTolerance',1e-3,'StartPointsToRun','bounds')
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 1.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds'
           XTolerance: 1.0000e-03

您还可以使用圆点表示法一次更新一个属性。

ms.MaxTime = 1800
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 1.0000e-04
              MaxTime: 1800
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds'
           XTolerance: 1.0000e-03

算法

有关该算法的详细描述,请参阅MultiStart 算法

扩展功能

全部展开

版本历史记录

在 R2010a 中推出

全部展开