主要内容

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

GlobalSearch

求全局最小值

说明

GlobalSearch 对象包含影响 run 如何重复运行局部求解器以生成 GlobalOptimSolution 对象的属性(选项)。运行时,求解器尝试找到具有最低目标函数值的解。

创建对象

描述

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

示例

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

示例

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

示例

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

示例

属性

全部展开

盆地半径减少因子,指定为从 01 的标量。当连续 MaxWaitCycle 个起点进入盆地后,盆地半径减小。盆地半径减小了 1 倍 – BasinRadiusFactor

BasinRadiusFactor 设置为 0 以禁用盆地半径的更新。

示例: 0.5

数据类型: double

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

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

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

  • 'off' - 无显示。

示例: 'iter'

数据类型: char | string

用于确定试验点是否位于现有吸引盆的乘数,指定为非负标量。有关详细信息,请参阅检查第 2 阶段试验点以查看 fmincon 是否运行

示例: 0.5

数据类型: double

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

示例: 1e-4

数据类型: double

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

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

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

数据类型: double

算法控制参数,指定为正整数。

  • 如果 MaxWaitCycle 个连续试验点的观测罚函数至少为惩罚阈值,则提高惩罚阈值(请参阅 PenaltyThresholdFactor)。

  • 如果 MaxWaitCycle 个连续试验点位于盆地中,则更新该盆地的半径(请参阅 BasinRadiusFactor)。

示例: 40

数据类型: double

第 1 阶段点的数量,指定为正整数。有关详细信息,请参阅获取第一阶段起点,运行

示例: 1000

数据类型: double

潜在起点的数量,指定为正整数。

示例: 3e4

数据类型: double

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

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

数据类型: cell | function_handle

增加惩罚阈值,指定为正标量。有关详细信息,请参阅对较大计数器值的反应

示例: 0.4

数据类型: double

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

有两个内置绘图函数:

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

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

请参阅 MultiStart 绘图函数

示例: @gsplotbestf

数据类型: cell | function_handle

运行的起点,指定为:

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

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

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

GlobalSearch 仅在 StartPointsToRun 算法的第 2 阶段(主循环)检查 GlobalSearch 属性。有关详细信息,请参阅GlobalSearch 算法

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

数据类型: char | string

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

示例: 2e-4

数据类型: double

对象函数

run运行多启动求解器

示例

全部折叠

创建一个具有多个局部极小值的优化问题,并尝试使用 GlobalSearch 找到全局最小值。目标是六峰驼峰问题(请参阅运行求解器)。

rng default % For reproducibility
gs = GlobalSearch;
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]);
x = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 8 local solver runs converged with a positive local solver exit flag.
x = 1×2

   -0.0898    0.7127

您可以使用以下语法在调用 x 时请求 run 处的目标函数值:

[x,fval] = run(gs,problem)

但是,如果您忽略了请求 fval,您仍然可以计算 x 处的目标函数值。

fval = sixmin(x)
fval = 
-1.0316

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

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.

为了搜索全局最小值,请使用 GlobalSearch fmincon 算法运行 'sqp'

rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
    fun,'x0',3,'lb',-5,'ub',5,'options',opts);
gs = GlobalSearch;
[x,f] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 23 local solver runs converged with a positive local solver exit flag.
x = 
-0.3080
f = 
-3.9032

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

ms = MultiStart('FunctionTolerance',2e-4,'UseParallel',true)
ms = 
  MultiStart with properties:

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

创建一个使用 GlobalSearch 中可用属性的 ms 对象。

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

             NumTrialPoints: 1000
          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

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

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

gs = GlobalSearch('FunctionTolerance',1e-4)
gs = 
  GlobalSearch with properties:

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

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

gs = GlobalSearch(gs,'XTolerance',1e-3,'StartPointsToRun','bounds')
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

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

gs.MaxTime = 1800
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: 1800
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

算法

有关该算法的详细描述,请参阅GlobalSearch 算法。Ugray 等人 [1] 描述了该算法以及生成试验点的散射搜索方法。

参考

[1] Ugray, Zsolt, Leon Lasdon, John Plummer, Fred Glover, James Kelly, and Rafael Martí. Scatter Search and Local NLP Solvers: A Multistart Framework for Global Optimization. INFORMS Journal on Computing, Vol. 19, No. 3, 2007, pp. 328–340.

版本历史记录

在 R2010a 中推出

全部展开