GlobalSearch
求全局最小值
说明
GlobalSearch 对象包含影响 run 如何重复运行局部求解器以生成 GlobalOptimSolution 对象的属性(选项)。运行时,求解器尝试找到具有最低目标函数值的解。
创建对象
语法
属性
盆地半径减少因子,指定为从 0 到 1 的标量。当连续 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
算法控制参数,指定为正整数。
如果
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])

为了搜索全局最小值,请使用 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 对象,其 FunctionTolerance 为 1e-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 中推出内置的 @savelocalsolutions 输出函数将所有局部解保存到基础工作区中的 localSolTable 变量中。该输出函数保存了不可行局部解以及可行的局部解。
输出函数和绘图函数中的 optimValues 结构体 现在包含 constrviolation 字段,该字段具有最大约束违反。如果不存在约束违规,则此值为 0。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)