GlobalSearch 和 MultiStart 属性(选项)
如何设置属性
要创建具有非默认属性的 GlobalSearch
或 MultiStart
对象,请使用名称-值对。例如,要创建具有迭代显示且仅从边界和不等式相关的可行点运行的 GlobalSearch
对象,请输入
gs = GlobalSearch("Display","iter", ... "StartPointsToRun","bounds-ineqs");
要设置现有 GlobalSearch
或 MultiStart
对象的属性,请使用圆点表示法。例如,如果 ms
是 MultiStart
对象,并且您想要将 Display
属性设置为 "iter"
,请输入
ms.Display = "iter";
要同时设置现有对象的多个属性,请使用带有名称值参量的构造函数(GlobalSearch
或 MultiStart
)。例如,要将 Display
属性设置为 "iter"
并将 MaxTime
属性为 100
,请输入
ms = MultiStart(ms,Display="iter",MaxTime=100);
有关设置属性的更多信息,请参阅 更改全局选项。
两个对象的属性
您可以从 MultiStart
对象创建 GlobalSearch
对象,反之亦然。
从现有对象创建新对象的语法是:
ms = MultiStart(gs); or gs = GlobalSearch(ms);
新对象包含旧对象所适用的属性。本节描述这些共享属性:
显示
Display
属性的值为:
"final"
(默认)- 最后一次求解器运行后,将结果汇总到命令行。"off"
- 命令行没有输出。"iter"
- 每次局部求解器运行后将结果汇总到命令行。
FunctionTolerance
FunctionTolerance
属性描述了两个目标函数值必须接近到何种程度,求解器才会将它们视为相同,从而创建局部解的向量。将 FunctionTolerance
设置为 0
以获取每次局部求解器运行的结果。将 FunctionTolerance
设置为更大的值以获得更少的结果。
如果两个解彼此相距在 XTolerance
距离以内,并且目标函数值彼此相距在 FunctionTolerance
以内,则求解器认为这两个解相同。如果两个条件都不满足,求解器会将解报告为不同的。容差是相对的,不是绝对的。有关详细信息,请参阅 当 fmincon 运行时 了解 GlobalSearch
,以及 创建 GlobalOptimSolution 对象 了解 MultiStart
。
MaxTime
MaxTime
属性描述了求解器自开始运行以来的秒数容差。当解算器看到自运行开始以来已经过去了 MaxTime
秒时,它就会停止。时间指的是挂钟,而不是处理器周期。默认值为 Inf
。
OutputFcn
OutputFcn
属性指示全局求解器在每个局部求解器运行完成后运行一个或多个输出函数。当全局求解器启动和结束时,输出函数也会运行。包含以适当语法编写的输出函数的句柄,或包含此类句柄的元胞数组。默认值为空条目 ([]
)。有一个内置输出函数可以收集找到的所有局部解。要使用它,请设置求解器参数 OutputFcn=@savelocalsolutions
。请参阅 GlobalSearch 和 MultiStart 的输出函数。
输出函数的语法是:
stop = outFcn(optimValues,state)
stop
是布尔值。当true
时,算法停止。当false
时,算法继续。注意
局部求解器可以具有输出函数。当局部求解器输出函数导致局部求解器运行停止时,全局求解器不一定会停止。如果您希望在这种情况下停止全局求解器,请让全局求解器输出函数在
optimValues.localsolution.exitflag=-1
时停止。optimValues
是一个结构体,如 optimValues 结构体 中所述。state
是全局算法的当前状态:"init"
-全局求解器尚未调用局部求解器。optimValues
结构体中的字段为空,除了localrunindex
(即0
)和funccount
(包含目标和约束函数计算的次数)。"iter"
- 每次局部求解器运行后,全局求解器都会调用输出函数。"done"
-全局求解器已完成调用局部求解器。optimValues
中的字段通常具有与最终输出函数调用 (state
="iter"
) 中的字段相同的值。但是,GlobalSearch
的optimValues.funccount
值可能大于最后一次使用"iter"
的函数调用中的值,因为GlobalSearch
算法可能执行了一些不属于局部求解器的函数计算。有关详细信息,请参阅GlobalSearch 算法。
有关使用输出函数的示例,请参阅 自定义 GlobalSearch 输出函数。
注意
当 MultiStart
将 UseParallel
选项设置为 true
且 parpool
处于打开状态时,输出和绘图函数不会运行。
optimValues
结构体. optimValues
结构体包含以下字段:
bestx
- 当前最佳点bestfval
-bestx
处的目标函数值constrviolation
- 最大约束违反。零表示没有违反约束。funccount
-函数计算总数localrunindex
-局部求解器运行的索引localsolution
- 包含局部求解器调用部分输出的结构体:X
、Fval
和Exitflag
PlotFcn
PlotFcn
属性指示全局求解器在每个局部求解器运行完成后运行一个或多个绘图函数。包含用适当语法编写的绘图函数的句柄,或包含此类句柄的元胞数组。默认值为空条目 ([]
)。
绘图函数的语法与输出函数的语法相同。有关详细信息,请参阅OutputFcn。
全局求解器有两个预定义的绘图函数:
@gsplotbestf
绘制最佳目标函数值。@gsplotfunccount
绘制函数计算的次数。
有关使用绘图函数的示例,请参阅 MultiStart 绘图函数。
如果指定多个绘图函数,则所有绘图都会作为子绘图出现在同一个窗口中。右键点击任意子图可在单独的图形窗口中获取更大版本。
注意
当 MultiStart
将 UseParallel
选项设置为 true
且 parpool
处于打开状态时,输出和绘图函数不会运行。
注意
绘图函数不支持 subplot
语句,因为绘图函数框架管理轴。要指定多个子图,请编写单独的绘图函数,并将其作为元胞数组传递给求解器:
options = optimoptions("solvername",PlotFcn={@plot1,@plot2,@plot3});
输出函数支持 subplot
,因此您可以使用输出函数代替绘图函数,在一个函数中包含多个绘图。
StartPointsToRun
StartPointsToRun
属性指示求解器排除某些运行的起点:
all
- 接受所有起点。bounds
- 拒绝不满足边界的起点。bounds-ineqs
- 拒绝不满足边界或不等式约束的起点。
XTolerance
XTolerance
属性描述了两个点必须距离有多近,求解器才会将它们视为相同,从而创建局部解的向量。将 XTolerance
设置为 0
以获取每次局部求解器运行的结果。将 XTolerance
设置为更大的值以获得更少的结果。求解器使用 norm
(欧几里得距离)计算一对点之间的距离。
如果两个解彼此相距在 XTolerance
距离以内,并且目标函数值彼此相距在 FunctionTolerance
以内,则求解器认为这两个解相同。如果两个条件都不满足,求解器会将解报告为不同的。容差是相对的,不是绝对的。有关详细信息,请参阅 当 fmincon 运行时 了解 GlobalSearch
,以及 创建 GlobalOptimSolution 对象 了解 MultiStart
。
GlobalSearch 属性
NumTrialPoints
除了 x0
之外,还要从 problem
结构体中检查潜在起点的数量。GlobalSearch
仅运行通过多项测试的潜在起点。有关详细信息,请参阅GlobalSearch 算法。
默认值:1000
NumStageOnePoints
第 1 阶段的起点数量。有关详细信息,请参阅获取第一阶段起点,运行。
默认值:200
MaxWaitCycle
算法中几个点出现的正整数容差。
如果
MaxWaitCycle
个连续试验点的观测罚函数至少为惩罚阈值,则提高惩罚阈值(请参阅 PenaltyThresholdFactor)。如果
MaxWaitCycle
个连续试验点位于盆地中,则更新该盆地的半径(请参阅 BasinRadiusFactor)。
默认值:20
BasinRadiusFactor
当连续 MaxWaitCycle
个起点进入盆地后,盆地半径减小。盆地半径减小了 1– BasinRadiusFactor
。
默认值:0.2
DistanceThresholdFactor
用于确定试验点是否位于现有吸引盆的乘数。有关详细信息,请参阅检查第 2 阶段试验点以查看 fmincon 是否运行。默认值:0.75
PenaltyThresholdFactor
确定惩罚阈值的增加。有关详细信息,请参阅对较大计数器值的反应。
默认值:0.2
MultiStart 属性
s
UseParallel
属性决定求解器是否将起点分发给多个处理器:
false
(默认)- 不并行运行。true
- 并行运行。
为了使求解器并行运行,您必须使用 parpool
设置并行环境。有关详细信息,请参阅如何在 Global Optimization Toolbox 中使用并行处理。