更改选项
如何确定要更改哪些选项
运行全局求解器后,您可能需要更改一些全局或局部选项。要确定要更改哪些选项,指导原则是:
要影响局部求解器,请设置局部求解器选项。
要影响起点或解集,请更改
problem
结构体,或设置全局求解器对象属性。
例如,要获得:
更多局部极小值-设置全局求解器对象属性。
更快的局部求解器迭代-设置局部求解器选项。
对于将局部解视为相同的不同容差(以获得更多或更少的局部解)-设置全局求解器对象属性。
在命令行上显示不同的信息 - 决定是否要从局部求解器(设置局部求解器选项)或全局信息(设置全局求解器对象属性)进行迭代显示。
不同的边界,用于检查不同的区域 - 在
problem
结构体中设置边界。
选择问题选项的示例
要在仅满足不等式约束的点处启动局部求解器,请将全局求解器对象中的
StartPointsToRun
属性设置为'bounds-ineqs'
。此设置可以加速您的解,因为局部求解器不必尝试寻找满足这些约束的点。然而,由于全局求解器可以拒绝许多起点,因此该设置可能导致局部求解器运行次数大大减少。有关示例,请参阅 仅使用可行的起点进行优化。要使用
fmincon
interior-point
算法,请将局部求解器Algorithm
选项设置为'interior-point'
。有关如何执行此操作的示例,请参阅 更新问题选项的示例。为了使您的局部求解器具有不同的边界,请在
problem
结构体中设置边界。通过设置边界来检查不同的区域。要查看每个具有正局部退出标志的解,请将全局求解器对象中的
XTolerance
属性设置为0
。有关如何执行此操作的示例,请参阅 更改全局选项。
更改局部求解器选项
有多种方法可以更改局部选项的值:
使用圆点表示法和
optimoptions
更新值。语法为problem.options = optimoptions(problem.options,'Parameter',value,...);
您还可以完全替换局部选项:
problem.options = optimoptions(@solvername,'Parameter',value,...);
在一个局部选项上使用圆点表示法。语法为
problem.options.Parameter = newvalue;
重新创建整个问题结构体。有关详细信息,请参阅创建问题结构体。
更新问题选项的示例
创建问题结构体:
problem = createOptimProblem('fmincon','x0',[-1 2], ... 'objective',@rosenboth);
将问题设置为在
fmincon
中使用sqp
算法:problem.options.Algorithm = 'sqp';
更新问题以使用目标函数中的梯度,使
FunctionTolerance
值为1e-8
,使XTolerance
值为1e-7
:problem.options = optimoptions(problem.options,'GradObj','on', ... 'FunctionTolerance',1e-8,'XTolerance',1e-7);
更改全局选项
有多种方法可以改变 GlobalSearch
或 MultiStart
对象的特征:
使用圆点表示法。例如,假设您有一个默认的
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
要将
ms
更改为使其XTolerance
值等于1e-3
,请更新XTolerance
字段:ms.XTolerance = 1e-3
ms = MultiStart with properties: UseParallel: 0 Display: 'final' FunctionTolerance: 1.0000e-06 MaxTime: Inf OutputFcn: [] PlotFcn: [] StartPointsToRun: 'all' XTolerance: 1.0000e-03
从当前设置开始重建对象。例如,将
ms
中的FunctionTolerance
字段设置为1e-3
,同时保留XTolerance
的非默认值:ms = MultiStart(ms,'FunctionTolerance',1e-3)
ms = MultiStart with properties: UseParallel: 0 Display: 'final' FunctionTolerance: 1.0000e-03 MaxTime: Inf OutputFcn: [] PlotFcn: [] StartPointsToRun: 'all' XTolerance: 1.0000e-03
将
GlobalSearch
对象转换为MultiStart
对象,或反之亦然。例如,使用上例中的ms
对象,创建一个具有相同值XTolerance
和FunctionTolerance
的GlobalSearch
对象: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: 1.0000e-03 MaxTime: Inf OutputFcn: [] PlotFcn: [] StartPointsToRun: 'all' XTolerance: 1.0000e-03