替代优化选项
算法控制
要控制替代优化算法,请使用以下选项。
ConstraintTolerance-约束容差不作为停止条件。它用于确定非线性约束的可行性。当max(fun(x).Ineq) <= ConstraintTolerance时,容差得到满足,否则违反容差。默认值为1e-3。InitialPoints- 用两种方式之一指定初始点。矩阵-矩阵的每一行代表一个初始点。每行的长度与边界
lb或ub中的元素数量相同。行数是任意的。surrogateopt使用所有行来构造初始替代。如果行数少于MinSurrogatePoints,则surrogateopt生成剩余的初始点。surrogateopt在每个初始点评估目标函数。结构体 - 该结构体包含字段
X以及可选的字段Fval和Ineq。X字段包含一个矩阵,其中每一行代表一个初始点。Fval字段包含一个向量,表示X中每个点的目标函数值。传递Fval可以为求解器节省时间,因为否则求解器会在每个初始点评估目标函数值。Ineq字段包含一个包含非线性不等式约束值的矩阵。Ineq的每一行代表一个初始点,每一列代表该点的一个非线性约束函数值。传递Ineq可以为求解器节省时间,因为否则求解器会评估每个初始点的约束函数值。
MinSurrogatePoints- 用于构建替代的初始点的数量。值越大,完成的替代越准确,但完成替代所需的时间也越多。每次切换到随机代阶段后,surrogateopt都会创建此数量的随机点。请参阅 替代优化算法。当
BatchUpdateInterval> 1 时,用于创建替代的最小随机样本点数是MinSurrogatePoints和BatchUpdateInterval中较大者。MinSampleDistance- 此选项控制算法的两个方面。在估计替代值的最小值的阶段,该算法会生成随机点来评估替代。如果这些点中的任何一个比
MinSampleDistance更靠近任何先前已评估目标函数值的点,则surrogateopt会丢弃新生成的点并且不对其进行评估。如果
surrogateopt丢弃所有随机点,那么它就不会尝试最小化替代,而是切换到随机代阶段。如果surrogateoptplot绘图函数正在运行,那么它会用蓝色垂直线标记此开关。
BatchUpdateInterval- 此选项控制算法的三个方面:替代更新之前的函数计算次数。
向量化评估中要传递的点数。当
UseVectorized是true时,surrogateopt传递一个大小为BatchUpdateInterval×nvar的矩阵,其中nvar是问题变量的数量。矩阵的每一行代表一个评估点。对于最后一次迭代(导致MaxFunctionEvaluations函数计算的迭代),如果MaxFunctionEvaluations不是BatchUpdateInterval的整数倍,则surrogateopt传递行数少于BatchUpdateInterval的矩阵。当
BatchUpdateInterval> 1 时,用于创建替代的最小随机样本点数是MinSurrogatePoints和BatchUpdateInterval中较大者。
每批评估完成后,输出函数和绘图函数都会更新。
有关详细信息,请参阅替代优化算法。
停止条件
通常,仅当算法达到您在求解器选项中设置的限制时才会停止。此外,绘图函数或输出函数可以停止求解器。
| 停止选项 | 停止测试 | 退出标志 |
|---|---|---|
MaxFunctionEvaluations | 求解器完成 | 0 |
MaxTime | 求解器在优化开始后达到 MaxTime 秒后停止,以 tic / toc 为衡量标准。求解器不会中断正在进行的函数评估,因此实际计算时间可能超过 MaxTime。 | 0 |
ObjectiveLimit | 如果可行点的目标函数值小于 ObjectiveLimit,求解器停止。 | 1 |
OutputFcn 或 PlotFcn | OutputFcn 或 PlotFcn 可以停止迭代。 | -1 |
界限 lb 和 ub | 如果 lb 中的条目超出 ub 中的相应条目,求解器将停止,因为边界不一致。 | -2 |
命令行显示
设置 Display 选项来控制 surrogateopt 返回到命令行的内容。
'final'- 仅返回退出消息。这是默认行为。'iter'- 返回迭代显示。'off'或等效的'none'- 没有命令行显示。
通过迭代显示,求解器以表格形式返回以下信息。
F-count-函数计算的次数Time(s)-求解器启动以来的时间(秒数)Best Fval- 获得的最低目标函数值Current Fval- 最新的目标函数值Trial Type- 给出评估点的算法,random或adaptive。有关详细信息,请参阅替代优化算法。
当目标函数返回非线性约束时,Best Fval 和 Current Fval 的迭代显示会发生变化。相反,标题是 Best 和 Current,每个标题显示两列 (Fval, Infeas)。
当某个点可行时,
surrogateopt显示函数值,而-则显示为不可行性。当某个点不可行时,
surrogateopt显示所有非线性约束函数中最大的不可行性(一个正数),并显示-作为函数值。一旦
surrogateopt找到可行点,Best列中的后续条目将仅显示找到的最小函数值,并将-显示为最佳不可行性。
通过迭代显示,求解器还会在表之前返回问题信息:
变量的数目
目标函数的类型(标量或无)
不等式的数量
输出函数
输出函数可以停止求解器或在每次迭代时执行计算。要包含输出函数,请将 OutputFcn 选项设置为 @myoutputfcn,其中 myoutputfcn 是具有下一段所述语法的函数。此语法与 Optimization Toolbox™ 输出函数相同,但 x 和 optimValues 参量的含义不同。有关这些输出函数的信息,请参阅 输出函数和绘图函数语法。有关输出函数的示例,请请参阅 使用 surrogateopt 进行最佳组件选择。
输出函数的语法是:
stop = outfun(x,optimValues,state)
surrogateopt 在每次迭代时将 x、optimValues 和 state 的值传递给输出函数(在本例中为 outfun)。输出函数返回 stop,一个布尔值(true 或 false),指示是否停止 surrogateopt。
x- 输入参量x是迄今为止找到的最佳点,即目标函数值最低的点。optimValues— 此输入参量是一个包含以下字段的结构体。有关这些字段的更多信息,请参阅 替代优化算法。
optimValues 结构体
| 字段名称 | 内容 |
|---|---|
constrviolation | 最佳点的最大约束违反,max(optimValues.ineq) |
currentConstrviolation | 当前点的最大约束违反,max(optimValues.currentIneq) |
currentFlag | 当前点是如何创建的。
|
currentFval | 当前点的目标函数值 |
currentIneq | 当前点的约束违反向量,fun(currentX).Ineq |
currentX | 当前点 |
elapsedtime | 求解器启动以来的时间(秒数) |
flag | 如何创造最佳点
|
funccount | 目标函数评估总数 |
fval | 遇到的最低目标函数值 |
incumbentConstrviolation | 现任点的最大约束违反值,max(optimValues.incumbentIneq) |
incumbentIneq | 现任点的约束违反向量,fun(incumbentX).Ineq |
incumbentFlag | 如何创建现任点
|
incumbentFval | 当前点的目标函数值 |
incumbentX | 现任点,即自上次相移至随机采样以来找到的最佳点 |
ineq | 最佳点的约束向量约束,fun(x).Ineq |
iteration | 已完成的迭代次数。等于 |
surrogateReset | 布尔值,表示当前迭代重置模型并切换到随机采样 |
surrogateResetCount |
|
state- 此输入参量是算法的状态,指定为以下值之一。'init'- 算法在第一次迭代之前处于初始状态。当算法处于此状态时,您可以设置绘图坐标区或其他数据结构或打开文件。注意
当
state为'init'时,输入参量x和optimValues.fval为空([]),因为surrogateopt是为耗时的目标函数设计的,因此在调用初始化步骤之前不会评估目标函数。'iter'- 该算法刚刚评估了目标函数。当算法处于这种状态时,您可以执行大多数计算并查看大多数显示。'done'- 算法执行了其最终的目标函数评估。当算法处于这种状态时,您可以关闭文件、完成绘图或以其他方式准备让surrogateopt停止。
绘图函数
绘图函数显示每次迭代的信息。您可以通过点击图上的按钮来暂停或停止求解器。要包含绘图函数,请将 PlotFcn 选项设置为函数名称、函数句柄、或者函数名称或句柄的元胞数组以绘制函数。四个内置绘图函数是:
'optimplotfvalconstr'(默认)-将找到的最佳可行目标函数值绘制为线图。如果没有目标函数,则将最大非线性约束违反绘制为线图。该图用一种颜色显示不可行点,用另一种颜色显示可行点。
如果没有目标函数,则图标题将显示可行解的数量。
'optimplotfval'- 显示最佳函数值。'optimplotx'- 以条形图形式显示找到的最佳点。'surrogateoptplot'- 显示当前目标函数值、最佳函数值以及有关算法阶段的信息。请参阅 解释 surrogateoptplot。
您可以使用 输出函数 的语法编写自定义绘图函数。例如,通过在 MATLAB® 命令行输入 surrogateoptplot 来检查 type surrogateoptplot 的代码。
注意
绘图函数不支持 subplot 语句,因为绘图函数框架管理轴。要指定多个子图,请编写单独的绘图函数,并将其作为元胞数组传递给求解器:
options = optimoptions("solvername",PlotFcn={@plot1,@plot2,@plot3});输出函数支持 subplot,因此您可以使用输出函数代替绘图函数,在一个函数中包含多个绘图。
并行计算
当将 UseParallel 选项设置为 true 时,surrogateopt 将并行计算。并行计算需要 Parallel Computing Toolbox™ 许可证。有关详细信息,请参阅替代优化算法。
您不能同时指定 UseParallel = true 和 UseVectorized = true。如果将两者都设置为 true,则求解器将忽略 UseVectorized 并尝试使用并行池进行并行计算(如果可能)。
向量化计算
当您将 UseVectorized 选项设置为 true 时,surrogateopt 会将矩阵传递给目标函数。矩阵的每一行代表一个需要评估的点。该矩阵有 options.BatchUpdateInterval 行;然而,在最后的迭代中,矩阵可以有更少的行。使用此选项进行自定义并行计算,如 并行优化 Simulink 模型 所示。
您不能同时指定 UseParallel = true 和 UseVectorized = true。如果将两者都设置为 true,则求解器将忽略 UseVectorized 并尝试使用并行池进行并行计算(如果可能)。
检查点文件
当您使用 CheckpointFile 选项设置检查点文件的名称时,surrogateopt 会在每次迭代后将数据写入文件(只要自上次写入数据以来至少已过去 10 秒或这是最后一次写入),这使该函数能够从当前状态恢复优化。重新启动时,surrogateopt 不会在之前评估的点处评估目标函数值。
检查点文件可以是文件路径(例如 "C:\Documents\MATLAB\check1.mat")或文件名(例如 'checkpoint1June2019.mat')。如果指定文件名而没有路径,surrogateopt 会将检查点文件保存在当前文件夹中。
恢复优化时只能更改以下选项:
BatchUpdateIntervalCheckpointFileDisplayMaxFunctionEvaluationsMaxTimeMinSurrogatePointsObjectiveLimitOutputFcnPlotFcnUseParallelUseVectorized
要从检查点文件恢复优化,请调用 surrogateopt 并将文件名作为第一个参量。
[x,fval,exitflag,output] = surrogateopt('check1.mat')要使用新选项恢复优化,请将新选项作为第二个参量。
opts = optimoptions(options,'MaxFunctionEvaluations',500); [x,fval,exitflag,output] = surrogateopt('check1.mat',opts)
在重新启动期间,surrogateopt 根据原始函数计算运行任何输出函数和绘图函数。例如,您可以根据已经运行的优化创建不同的图。请参阅 使用检查点文件。
注意
surrogateopt 没有在检查点文件中保存状态的所有细节。因此,后续迭代可能与求解器在检查点状态不停止的情况下进行的迭代不同。
警告
不要从使用不同 MATLAB 版本创建的检查点文件恢复 surrogateopt。surrogateopt 可能会引发错误或产生不一致的结果。