模拟退火方法
设置模拟退火在命令行选项
通过创建一个指定选项选项
对象使用optimoptions
函数如下:
选择= optimoptions (@simulannealbnd,…“Param1”value1,“Param2”value2,…);
每个选项在这一节中列出的字段名选项
。例如,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
——开始时间算法k
——退火参数
国旗
——情节函数被调用的当前状态。可能的值国旗
是“init”
——初始化状态“通路”
——迭代状态“完成”
——最终状态
输出参数停止
提供了一种方法来停止在当前迭代算法。停止
可以有以下值:
假
——继续下一次迭代的算法。真正的
——在当前迭代算法终止。
温度的选择
温度选项指定如何降低温度在每个迭代的算法。
InitialTemperature
——初始温度的算法。默认值是One hundred.
。初始温度可以是一个向量的长度相同x
向量的未知数。simulannealbnd
扩展一个标量初始温度为一个向量。TemperatureFcn
——温度函数用于更新时间表。让k表示退火参数。(退火参数是一样的迭代数,直到再次退火)。的选项是:“temperatureexp”
——温度等于InitialTemperature * 0.95 ^k。这是默认的。“temperaturefast”
——温度等于InitialTemperature /k。“temperatureboltz”
——温度等于InitialTemperature / ln (k)。@myfun
——使用一个自定义函数,myfun
,更新温度。的语法是:温度= myfun (optimValues选项)
在哪里
optimValues
是一个结构描述的情节结构的功能。选项
要么是创建optimoptions
或由默认选项,如果您没有创建任何选项。两个退火参数optimValues.k
和温度optimValues.temperature
向量的长度等于当前点的元素的数量x
。例如,函数temperaturefast
是:温度= options.InitialTemperature. / optimValues.k;
算法设置
算法设置定义算法中使用特定的参数生成新的点在每个迭代。
可以指定参数simulannealbnd
是:
数据类型
——类型的数据在目标函数中使用。选择:“双”
(默认)——一个向量类型双
。“自定义”
——其他任何数据类型。你必须提供一个“自定义”
退火函数。你不能使用混合功能。
AnnealingFcn
——函数用于生成新的下一个迭代点。的选择是:“annealingfast”
——步长度温度,随机方向一致。这是默认的。“annealingboltz”
——温度的步骤长度的平方根,随机方向一致。@myfun
——使用一个定制的退火算法,myfun
。的语法是:newx = myfun (optimValues问题)
optimValues
是一个结构描述的结构的输出功能,问题
是一个结构,它包含以下信息:客观的
目标函数:函数处理x0
:起点据nvar
:决策变量的数量磅
决策变量:下界乌兰巴托
决策变量:上界
例如,当前位置
optimValues.x
,当前的目标函数值problem.objective (optimValues.x)
。您可以编写一个自定义目标函数通过修改
saannealingfcntemplate.m
文件。保持所有迭代在允许范围内,您的自定义退火函数调用sahonorbounds
最后一个命令。
ReannealInterval
——点接受再次退火前的数量。默认值是One hundred.
。AcceptanceFcn
——函数用来决定是否一个新的点接受。的选择是:“acceptancesa”
——模拟退火接受函数,默认。如果新的目标函数值小于旧的,新的点总是接受。否则,新观点是接受随机概率取决于目标函数值的差异和对当前温度。接受概率是Δ= new客观历史的客观,T是当前温度。因为Δ和T是积极的,接受的概率是0到1/2。温度会导致小接受概率。同时,大Δ导致较小的接受概率。
@myfun
——自定义验收功能,myfun
。的语法是:acceptpoint = myfun (optimValues newx newfval);
optimValues
是一个结构描述的结构的输出功能,newx
重点是评估验收,newfval
目标函数在哪里newx
。acceptpoint
一个布尔值,值吗真正的
接受newx
,假
拒绝newx
。
混合功能选项
混合函数是另一个最小化函数运行期间或结束时的迭代解算器。HybridInterval
指定时间间隔(如果不是从来没有
或结束
)的混合函数被调用。您可以指定一个混合函数使用HybridFcn
选择。的选择是:
[]
——没有混合功能。“fminsearch”
——使用MATLAB®函数fminsearch
执行无约束极小化。“patternsearch”
——使用patternsearch
执行限制或无约束极小化。“fminunc”
——使用优化工具箱™函数fminunc
执行无约束极小化。“fmincon”
——使用优化工具箱函数fmincon
执行约束最小化。
请注意
确保你的混合函数接受你的问题约束。否则,simulannealbnd
抛出一个错误。
你可以设置单独的选项混合功能。使用optimset
为fminsearch
,或optimoptions
为fmincon
,patternsearch
,或fminunc
。例如:
hybridopts = optimoptions (“fminunc”,…“显示”,“通路”,“算法”,“拟牛顿”);
simulannealbnd
选项
如下:选择= optimoptions (@simulannealbnd选项,…“HybridFcn”,{@fminunc, hybridopts});
hybridopts
必须存在之前,你准备好了吗选项
。
停止条件的选择
停止标准确定的算法将会被终止。您可以指定以下选项:
FunctionTolerance
——算法运行直到目标函数的平均变化值StallIterLim
迭代小于FunctionTolerance
。默认值是1 e-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
——开始时间算法k
——退火参数,一个向量长度一样x
国旗
——输出函数被调用的当前状态。可能的值国旗
是“init”
——初始化状态“通路”
——迭代状态“完成”
——最终状态
传递额外的参数解释如何提供额外的参数函数的输出。
输出函数返回以下参数:
停止
——提供了一种方法来停止在当前迭代算法。停止
可以有以下值:假
——继续下一次迭代的算法。真正的
——在当前迭代算法终止。
选项
——选项修改输出函数。optchanged
——一个布尔标志指示发生了改变选项
。这必须设置为真正的
如果选择改变。
显示选项
使用显示
选项指定多少信息显示在命令行算法运行时。可用的选项是
从
——没有显示输出。这是默认值选项
从优化导出应用程序。iter
——信息显示在每一个迭代。诊断
——信息显示在每一个迭代。此外,诊断信息和列出了一些问题已经从默认的选项。最后
——显示停止的原因。这是默认选项创建使用optimoptions
。
这两个iter
和诊断
显示以下信息:
迭代
——迭代数f-count
——累积数量的目标函数的评价最好的f (x)
-最佳目标函数值当前f (x)
——当前目标函数值平均温度
——平均温度函数值