MultiStart
寻找多个局部极小值
说明
MultiStart
对象包含影响 run
如何重复运行局部求解器以生成 GlobalOptimSolution
对象的属性(选项)。运行时,求解器尝试从各个点开始寻找问题的多个局部解。
创建对象
属性
命令窗口的显示级别,指定为以下字符向量或字符串之一:
'final'
–run
完成后报告摘要结果。'iter'
- 除了最终摘要之外,还报告初始fmincon
运行后、第 1 阶段后、每 200 个起始点后以及每次fmincon
运行后的结果。'off'
- 无显示。
示例: 'iter'
数据类型: char
| string
认为解相等的函数值的容差,指定为非负标量。如果两个解彼此之间的相对距离在 XTolerance
以内,并且目标函数值彼此之间的相对差异在 FunctionTolerance
以内,则求解器认为这两个解相同。如果两个条件都不满足,求解器会将解报告为不同的。将 FunctionTolerance
设置为 0
以获取每次局部求解器运行的结果。将 FunctionTolerance
设置为更大的值以获得更少的结果。有关 GlobalSearch
的详细信息,请参阅当 fmincon 运行时 中的更新解集。有关 MultiStart
的详细信息,请参阅 创建 GlobalOptimSolution 对象。
示例: 1e-4
数据类型: double
报告求解器进度或暂停求解器,指定为函数句柄或函数句柄的元胞数组。每次局部求解器调用后,输出函数都会运行。它们也会在全局求解器启动和结束时运行。使用 OutputFcn 中描述的语法编写输出函数。请参阅 自定义 GlobalSearch 输出函数。
内置的 @savelocalsolutions
输出函数将所有局部解保存到基础工作区中的 localSolTable
变量中。该输出函数保存了不可行局部解以及可行的局部解。有关示例,请参阅 收集所有局部解。
数据类型: cell
| function_handle
绘制求解器进度,指定为函数句柄或函数句柄的元胞数组。每次局部求解器调用后,绘图函数都会运行。它们也会在全局求解器启动和结束时运行。使用 OutputFcn 中描述的语法编写绘图函数。
有两个内置绘图函数:
@gsplotbestf
绘制最佳目标函数值。@gsplotfunccount
绘制函数计算的次数。
请参阅 MultiStart 绘图函数。
示例: @gsplotbestf
数据类型: cell
| function_handle
运行的起点,指定为:
'all'
- 运行所有起点。'bounds'
- 仅运行满足边界的起点。'bounds-ineqs'
- 仅运行满足边界和不等式约束的起点。
示例: 'bounds'
仅运行满足所有边界的点。
数据类型: char
| string
将局部求解器调用分发到多个处理器,指定为 false
或 true
。
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])
为了寻找全局最小值,请使用 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
对象,其 FunctionTolerance
为 1e-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 算法。
扩展功能
要并行运行,请将 'UseParallel'
选项设置为 true
。
options = optimoptions('
solvername
','UseParallel',true)
有关详细信息,请参阅如何在 Global Optimization Toolbox 中使用并行处理。
版本历史记录
在 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)