通过创建一个指定的选项选项
对象使用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'
- 模拟退火受理功能,默认。如果新的目标函数值小于旧的,新的点总是被接受。否则,新的点是随机接受了根据在目标函数值之差和当前温度的概率。验收概率
其中Δ=新的目标 - 老目标,Ť是当前温度。由于两个Δ和Ť是正的,接受的概率为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
对于fmincon
,patternsearch
, 要么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)
- 当前目标函数值
平均气温
- 平均温度函数值