模拟退火选项

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

通过创建一个指定的选项选项对象使用optimoptions功能如下:

选项= optimoptions(@ simulannealbnd, '参数1',值1, '参数2',值2,...);

在本节中每个选项是由它的字段名称中列出选项。例如,InitialTemperature指的是对应的场选项

图解选项

绘图选项,您可以在运行时从模拟退火求解绘制数据。

PlotInterval指定连续调用的绘图功能之间的迭代次数。

要拨打电话时显示一个阴谋simulannealbnd在命令行,设置PlotFcn现场选项是一个内置的绘图功能名称或句柄绘图功能。您可以指定任何以下地块:

  • 'saplotbestf'绘制最好的目标函数值。

  • 'saplotbestx'地块目前最好的点。

  • 'saplotf'绘制当前函数值。

  • 'saplotx'绘制当前点。

  • 'saplotstopping'地块停止标准水平。

  • 'saplottemperature'绘制在每次迭代时的温度。

  • @myfun绘制自定义绘图功能,其中myfun是你的函数的名称。看到绘图函数的构造的语法的描述。

例如,要显示的最佳目标情节,集选项如下

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

要显示多条曲线,使用该单元阵列的语法

选项= optimoptions(@ simulannealbnd, 'PlotFcn',{@ plotfun1,@ plotfun2,...});

哪里@ plotfun1@ plotfun2,等等都是函数处理的情节功能。

如果指定了一个以上的绘图功能,所有的情节出现在同一个窗口次要情节。右键单击任何次要情节,以获得在一个单独的窗口图形的放大版本。

绘图函数的构造

曲线函数的第一行的形式

功能停止= plotfun(选项,optimvalues,标志)

输入函数的自变量是

  • 选项- 选项使用创建optimoptions

  • optimvalues- 包含有关求解器的当前状态的信息结构。该结构包含以下字段:

    • X- 当前点

    • FVAL- x处的目标函数值

    • bestx- 最佳点迄今发现

    • bestfval- 在最佳点的目标函数值

    • 温度- 当前温度

    • 迭代- 当前迭代

    • funccount- 评价次数

    • T0- 启动时间算法

    • ķ- 退火参数

  • - 其中绘图功能被称为当前状态。对于可能的值

    • '在里面'- 初始化状态

    • 'ITER'- 迭代状态

    • “完成”- 最终状态

输出参数提供了一种在当前迭代停止算法。可以有以下值:

  • - 该算法继续到下一个迭代。

  • 真正- 在当前迭代算法终止。

温度选项

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

  • InitialTemperature- 在算法开始初始温度。默认值是100。初始温度可以是具有相同的长度作为矢量X,未知量的向量。simulannealbnd膨胀的标量的初始温度到载体中。

  • TemperatureFcn- 使用函数来更新温度时间表。让ķ表示退火参数。(退火参数是相同的迭代次数,直到再退火。)的选项是:

    • 'temperatureexp'- 该温度等于InitialTemperature * 0.95 ^ķ。这是默认的。

    • 'temperaturefast'- 该温度等于InitialTemperature /ķ

    • 'temperatureboltz'- 该温度等于InitialTemperature / LN(ķ

    • @myfun- 使用自定义功能,myfun,更新温度。语法是:

      温度= myfun(optimValues,选项)

      哪里optimValues是这样的结构,说明绘图函数的构造选项要么与创建optimoptions,或由默认选项,如果你没有创建任何选项。无论是退火参数optimValues.k和温度optimValues.temperature与长度的矢量等于当前点的元素的数量X。例如,该功能temperaturefast是:

      温度= options.InitialTemperature./optimValues.k;

算法设置

算法设置定义在每次迭代中产生新的点使用的算法的特定参数。

可以为指定的参数simulannealbnd是:

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

    • '双'(默认) - 型的载体

    • “自定义”- 任何其他数据类型。你必须提供一个“自定义”退火功能。你不能使用混合功能。

  • AnnealingFcn- 功能用于生成下一次迭代的新点。选项包括:

    • 'annealingfast'- 步骤具有长度温度,用方向均匀随机的。这是默认的。

    • 'annealingboltz'- 步骤具有温度的长度平方根,与方向上均匀地随机。

    • @myfun- 使用自定义退火算法,myfun。语法是:

      下一页末= myfun(optimValues,问题)
      哪里optimValues是这样的结构,说明输出函数的结构问题是包含以下信息的结构:

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

      • X0:起点

      • NVAR:决策变量的数量

      • :下限的决策变量

      • UB:上界决策变量

      例如,当前位置是optimValues.x以及当前目标函数值是problem.objective(optimValues.x)

      您可以通过修改编写自定义的目标函数saannealingfcntemplate.m文件。为了使范围内的所有迭代,有您的自定义退火函数调用sahonorbounds作为最终的命令。

  • ReannealInterval- 点数再退火之前接受。默认值是100

  • AcceptanceFcn- 功能用来确定一个新的点是否被接受。选项包括:

    • 'acceptancesa'- 模拟退火受理功能,默认。如果新的目标函数值小于旧的,新的点总是被接受。否则,新的点是随机接受了根据在目标函数值之差和当前温度的概率。验收概率

      1 1 + EXP Δ 最大 Ť

      其中Δ=新的目标 - 老目标,Ť是当前温度。由于两个Δ和Ť是正的,接受的概率为0和1/2之间。较小的温度导致较小的接受概率。此外,较大的Δ导致较小的接受概率。

    • @myfun- 自定义功能验收,myfun。语法是:

      acceptpoint = myfun(optimValues,下一页末,newfval);
      哪里optimValues是这样的结构,说明输出函数的结构下一页末被评估为接受的地步,和newfval是在目标函数下一页末acceptpoint是一个布尔,具有值真正接受下一页末拒绝下一页末

混合功能选项

一种混合功能是另一种最小化函数,过程中或在求解器的迭代结束运行。HybridInterval指定的时间间隔(如果不是决不要么结束),在该混合函数被调用。您可以使用指定一个混合功能HybridFcn选项。选项包括:

  • []- 无混合功能。

  • 'fminsearch'- 使用MATLAB®功能fminsearch执行无约束最小化。

  • 'patternsearch'- 使用patternsearch执行约束或无约束极小化。

  • 'fminunc'- 使用优化工具箱™功能fminunc执行无约束最小化。

  • 'fmincon'- 使用优化工具箱功能fmincon执行约束最小化。

注意

确保您的混合功能接受你的问题的制约。除此以外,simulannealbnd抛出一个错误。

您可以设置为混合功能不同的选项。采用optimset对于fminsearch, 要么optimoptions对于fminconpatternsearch, 要么fminunc。例如:

hybridopts = optimoptions( 'fminunc', '显示', 'ITER', '算法', '准牛顿');
包括在混合选项simulannealbnd 选项如下:
选项= optimoptions(@ simulannealbnd,期权, 'HybridFcn',{@ fminunc,hybridopts});
hybridopts必须存在你之前设置选项

看到混合方案在遗传算法的一个例子。看到当使用混合功能

停止条件选项

停止准则确定是什么原因导致了算法终止。您可以指定以下选项:

  • FunctionTolerance- 该算法运行,直到目标函数的值的平均变化StallIterLim迭代次数小于FunctionTolerance。默认值是1E-6

  • MaxIterations- 如果迭代次数超过迭代这个最大数量的算法停止。您可以指定迭代的最大数量为正整数或天道酬勤天道酬勤是默认的。

  • MaxFunctionEvaluations指定目标函数评估的最大数量。如果函数评估的次数超过功能评估的最大数量的算法停止。允许的最大值为3000个* numberofvariables

  • MAXTIME指定停止前的算法运行在几秒钟的最长时间。

  • ObjectiveLimit- 该算法停止,如果最佳目标函数值小于ObjectiveLimit

输出功能选项

输出功能函数,该算法要求在每次迭代。默认值是没有任何输出功能,[]。你必须首先创建使用说明中的语法的输出功能输出函数的结构

采用优化的应用程序:

  • 指定输出功能@myfun,其中myfun是你的函数的名称。

  • 为了将额外的参数输出功能,用途匿名函数(优化工具箱)。

  • 对于多输出功能,输入输出功能的手柄的单元阵列:{@ myfun1,@ myfun2,...}

在命令行:

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

  • 对于多输出功能,输入功能把手的单元阵列:

    选项= optimoptions(@ simulannealbnd, 'OutputFcn',{@ myfun1,@ myfun2,...});

要查看模板,你可以用它来写自己的输出功能,输入

编辑saoutputfcntemplate

在MATLAB命令行。

输出函数的结构

输出功能具有以下调用语法。

[停车,期权,optchanged] = myfun(选项,optimvalues,标志)

该功能具有以下输入参数:

  • 选项- 选项使用创建optimoptions

  • optimvalues- 包含有关求解器的当前状态的信息结构。该结构包含以下字段:

    • X- 当前点

    • FVAL- x处的目标函数值

    • bestx- 最佳点迄今发现

    • bestfval- 在最佳点的目标函数值

    • 温度- 当前温度,矢量的长度相同X

    • 迭代- 当前迭代

    • funccount- 评价次数

    • T0- 启动时间算法

    • ķ- 退火参数,矢量的长度相同X

  • - 其中,所述输出功能被称为当前状态。对于可能的值

    • '在里面'- 初始化状态

    • 'ITER'- 迭代状态

    • “完成”- 最终状态

传递额外的参数(优化工具箱)解释了如何提供额外的参数输出功能。

输出函数返回以下参数:

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

    • - 该算法继续到下一个迭代。

    • 真正- 在当前迭代算法终止。

  • 选项- 如由输出函数修改选项。

  • optchanged- 一个布尔标志,指示变化到由选项。这必须设置为真正如果选项被改变。

显示选项

使用显示选项来指定多少信息,在命令行的算法运行时显示。可用的选项

  • - 不显示输出。这是默认值选项从优化应用程序导出。

  • ITER- 信息在每次迭代显示。

  • 诊断- 信息在每次迭代显示。此外,诊断列出了一些问题的信息和已更改其缺省值的选项。

  • 最后- 显示原因停止。这是使用创建的默认选项optimoptions

ITER诊断显示以下信息:

  • 迭代- 迭代次数

  • F-数- 目标函数评估的累计数

  • 最好F(X)- 最佳目标函数值

  • 当前F(X)- 当前目标函数值

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