模拟退火选项

在命令行中设置模拟退火选项

通过创建选择权使用最佳选择功能如下:

options = optimoptions(@simulannealbnd,'Param1',value1,'Param2',value2,…);

中的字段名列出了本节中的每个选项选择权. 例如初始温度指的是相应的字段选择权

绘图选项

打印选项使您能够在模拟退火解算器运行时打印其数据。

绘图间隔指定连续调用plot函数之间的迭代次数。

调用时显示绘图的步骤同时退火在命令行中,设置绘图仪领域的选择权作为绘图函数的内置绘图函数名称或句柄。可以指定以下任一绘图:

  • “saplotbestf”绘制最佳目标函数值。

  • “saplotbestx”画出当前最好的点。

  • “saplotf”绘制当前函数值。

  • “saplotx”绘制当前点。

  • “saplotstopping”绘制停止标准级别。

  • “萨普洛特温度”绘制每次迭代时的温度。

  • @我的乐趣打印自定义打印函数,其中myfun是函数的名称。看见情节功能的结构查询语法说明。

例如,要显示最佳目标图,请设置选择权如下

选项= optimoptions (@simulannealbnd ' PlotFcn ', ' saplotbestf ');

要显示多个绘图,请使用单元格数组语法

options=optimoptions(@simulannealbnd,'PlotFcn',{@plotfun1,@plotfun2,…});

在哪里@plotfun1,@plotfun2等是绘图函数的函数句柄。

如果指定了多个绘图功能,则所有绘图都将在同一窗口中显示为子绘图。右键单击任何子绘图可在单独的图形窗口中获得更大的版本。

情节功能的结构

plot函数的第一行有这样的形式

函数停止=绘图乐趣(选项、值、标志)

函数的输入参数是

  • 选择权-使用创建的选项最佳选择

  • 最优值-结构,其中包含有关解算器当前状态的信息。该结构包含以下字段:

    • x-当前点

    • 未来值-目标函数在x处的值

    • bestx-到目前为止找到的最佳点

    • 兽性-最佳点的目标函数值

    • 温度——当前温度

    • 迭代——当前迭代

    • funccount-功能评估的数量

    • t0-算法开始时间

    • K-退火参数

  • 旗帜-调用plot函数的当前状态。的可能值旗帜

    • “init”-初始化状态

    • “国际热核实验堆”——迭代状态

    • “完成”——最终状态

输出参数停止提供在当前迭代中停止算法的方法。停止可以有以下值:

  • 错误的-算法继续进行下一次迭代。

  • 真正的—算法在当前迭代结束。

温度选项

温度选项指定在算法过程中每次迭代时如何降低温度。

  • 初始温度—算法开始时的初始温度。默认值是One hundred.. 初始温度可以是与相同长度的向量x,未知量的向量。同时退火将标量初始温度展开为向量。

  • TemperatureFcn—更新温度时间表。让K表示退火参数。(退火参数与重新退火之前的迭代次数相同。)选项包括:

    • “温度经验”-温度等于初始温度*0.95^K. 这是默认设置。

    • “温度表”-温度等于InitialTemperature /K

    • “温度波尔茨”-温度等于InitialTemperature / ln (K)

    • @我的乐趣-使用自定义函数,myfun,以更新温度。语法为:

      温度=myfun(最佳值、选项)

      在哪里最优值是中描述的结构情节功能的结构选择权是用最佳选择,或包含默认选项(如果未创建任何选项)。这两个参数都与退火参数有关optimValues.k和温度optimValues.temperature向量的长度是否等于当前点的元素个数x. 例如,函数温度场是:

      温度=选项。初始温度。/optimValues.k;

算法设置

算法设置定义了算法的特定参数,用于在每次迭代时生成新的点。

可指定的参数同时退火是:

  • 数据类型-要在目标函数中使用的数据类型。选择:

    • “双人”(默认)-类型为的向量双重的

    • “自定义”—其他数据类型。你必须提供“自定义”退火函数。不能使用混合函数。

  • AnnealingFcn-用于为下一次迭代生成新点的函数。这些选择包括:

    • “annealingfast”-台阶具有长度和温度,方向均匀随机。这是默认设置。

    • “annealingboltz”-步长为温度的平方根,方向均匀随机。

    • @我的乐趣-使用自定义退火算法,myfun. 语法是:

      newx = myfun (optimValues问题)
      在哪里最优值是中描述的结构输出函数的结构,问题是包含以下信息的结构:

      • 客观的:目标函数的句柄

      • x0:起点

      • nvar:决策变量的数量

      • :决策变量的下限

      • 乌兰巴托:决策变量的上限

      例如,当前位置为optimValues.x,当前目标函数值为问题.目标(optimValues.x)

      您可以通过修改saannealingfcontemplate.m文件要使所有迭代保持在范围内,请调用自定义退火函数萨哈诺动物作为最后的命令。

  • 再神经-重新退火前接受的点数。默认值为One hundred.

  • 接受-用于确定是否接受新点的函数。这些选择包括:

    • “接受A”—模拟退火验收函数,默认值。如果新的目标函数值小于旧的目标函数值,则总是接受新的点。否则,新点被随机接受,其概率取决于目标函数值的差值和当前温度。接受概率为

      1. 1. + 经验值 ( Δ 最大值 ( T ) ) ,

      其中Δ =新目标-旧目标,和T是当前温度。因为Δ和T是正的,接受的概率在0到1/2之间。温度越低,接受概率越小。此外,Δ越大,接受概率越小。

    • @我的乐趣-自定义接受功能,myfun. 语法是:

      acceptpoint=myfun(optimValues、newx、newfval);
      在哪里最优值是中描述的结构输出函数的结构,newx是否对该点进行验收评估,以及纽弗瓦尔目标函数是否在newx接受点是布尔值吗真正的接受newx,错误的拒绝newx

混合功能选项

混合函数是在解算器迭代期间或迭代结束时运行的另一个最小化函数。杂交区间指定间隔(如果不是)从不终止)此时调用混合函数。可以使用HybridFcn选择。的选择是:

  • []-没有混合功能。

  • “fminsearch”-使用MATLAB®函数fminsearch执行无约束最小化。

  • “模式搜索”-使用模式搜索执行有约束或无约束的最小化。

  • “fminunc”-使用优化工具箱™ 作用fminunc执行无约束最小化。

  • “fmincon”-使用优化工具箱函数fmincon执行约束最小化。

笔记

确保您的混合函数接受您的问题约束。否则,同时退火抛出一个错误。

您可以为混合功能设置单独的选项。使用optimset对于fminsearch,或最佳选择对于fmincon,模式搜索,或fminunc. 例如:

hybridopts=optimoptions('fminunc','Display','iter','Algorithm','quasi-newton');
将混合动力选项包括在同时退火 选择权详情如下:
选择= optimoptions (@simulannealbnd选项,HybridFcn, {@fminunc, hybridopts});
hybridopts必须在你设置之前存在选择权

看见遗传算法中的混合方案举个例子。看见何时使用混合功能

停止条件选项

停止条件确定导致算法终止的原因。您可以指定以下选项:

  • 功能公差-该算法一直运行,直到目标函数的平均值在史泰利特林迭代次数小于功能公差. 默认值为1 e-6

  • 最大迭代次数—当迭代次数超过最大迭代次数时,算法停止。您可以将最大迭代次数指定为正整数或InfInf是默认值。

  • 最大函数求值指定目标函数的最大求值次数。如果函数求值次数超过最大函数求值次数,则算法停止。允许的最大值为3000*个变量

  • MaxTime指定停止之前算法运行的最长时间(以秒为单位)。

  • 客观限度-如果最佳目标函数值小于,则该算法停止客观限度

输出功能选项

输出函数是算法在每次迭代时调用的函数。默认值是没有输出函数,[]。必须首先使用中描述的语法创建输出函数输出函数的结构

使用优化应用程序:

  • 指定输出函数@我的乐趣哪里myfun是函数的名称。

  • 要在输出函数中传递额外参数,请使用匿名函数(优化工具箱)。

  • 对于多个输出函数,输入输出函数句柄的单元格数组:{@myfun1, @myfun2,…}

在命令行中:

  • 选择= optimoptions (@simulannealbnd OutputFcn, @myfun);

  • 对于多个输出函数,输入函数句柄的单元格数组:

    选择= optimoptions (@simulannealbnd OutputFcn, {@myfun1, @myfun2,…});

要查看可用于编写自己的输出函数的模板,请输入

编辑saoutputfcntemplate

在MATLAB命令行。

输出函数的结构

输出函数具有以下调用语法。

[stop,options,optchanged]=myfun(选项,优化值,标志)

该函数有以下输入参数:

  • 选择权-使用创建的选项最佳选择

  • 最优值-结构,其中包含有关解算器当前状态的信息。该结构包含以下字段:

    • x-当前点

    • 未来值-目标函数在x处的值

    • bestx-到目前为止找到的最佳点

    • 兽性-最佳点的目标函数值

    • 温度-当前温度,矢量长度与x

    • 迭代——当前迭代

    • funccount-功能评估的数量

    • t0-算法开始时间

    • K-退火参数,长度等于x

  • 旗帜-调用输出函数的当前状态。的可能值旗帜

    • “init”-初始化状态

    • “国际热核实验堆”——迭代状态

    • “完成”——最终状态

传递额外的参数(最优化工具箱)解释如何为输出函数提供附加参数。

输出函数返回以下参数:

  • 停止-提供在当前迭代中停止算法的方法。停止可以有以下值:

    • 错误的-算法继续进行下一次迭代。

    • 真正的—算法在当前迭代结束。

  • 选择权—输出函数修改的选项。

  • 选择更改-一个布尔标志,指示对进行了更改选择权.这个必须设置为真正的如果选项发生更改。

显示选项

使用显示选项指定算法运行时命令行上显示的信息量。可用选项包括

  • —无回显信息。的默认值选择权从优化应用程序导出。

  • iter—每次迭代都会显示信息。

  • 诊断-信息会在每次迭代时显示。此外,诊断会列出一些问题信息以及从默认值更改的选项。

  • 最终的—显示停止原因。这是使用创建的选项的默认值最佳选择

二者都iter诊断显示以下信息:

  • 迭代——迭代数

  • f-count-目标函数评估的累积次数

  • 最佳f(x)-最佳目标函数值

  • 电流f(x)-当前目标函数值

  • 平均温度-平均温度函数值