通过创建选项
对象使用optimoptions
函数如下:
选择= optimoptions (@simulannealbnd,...“Param1”value1,“Param2”value2,...);
中的字段名列出了本节中的每个选项选项
。例如,InitialTemperature
表示对应的字段选项
。
绘图选项使您能够在模拟退火求解器运行时绘制数据。
PlotInterval
指定连续调用plot函数之间的迭代次数。
调用时显示情节simulannealbnd
从命令行中,设置PlotFcn
领域的选项
作为绘图函数的内置绘图函数名或句柄。你可以指定以下任意一个图:
“saplotbestf”
绘制最佳目标函数值。
“saplotbestx”
画出当前最好的点。
“saplotf”
绘制当前函数值。
“saplotx”
绘制当前点。
“saplotstopping”
地块停止标准水平。
“saplottemperature”
绘制每次迭代的温度。
@myfun
绘制自定义绘图函数,其中myfun
是函数的名称。看到情节功能的结构查询语法说明。
例如,要显示最好的目标图,设置选项
如下
选项= optimoptions (@simulannealbnd ' PlotFcn ', ' saplotbestf ');
要显示多个图,请使用单元格数组语法
选择= optimoptions (@simulannealbnd,...“PlotFcn”, {@plotfun1 @plotfun2,...});
在哪里@plotfun1
,@plotfun2
,等等是plot函数的函数句柄。
如果指定多个绘图函数,所有绘图将作为子绘图显示在同一个窗口中。在单独的图形窗口中,右键单击任何子图以获得更大的版本。
plot函数的第一行有这样的形式
函数stop = plotfun(options,optimvalues,flag)
函数的输入参数是
选项
-使用optimoptions
。
optimvalues
-包含关于求解器当前状态信息的结构。该结构包含以下字段:
x
——当前点
fval
-目标函数在x处的值
bestx
-迄今为止发现的最好的点
bestfval
-最佳点的目标函数值
温度
——当前温度
迭代
——当前迭代
funccount
—函数计算次数
t0
—算法的开始时间
k
——退火参数
国旗
-调用plot函数的当前状态。的可能值国旗
是
“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”
—模拟退火验收函数,默认值。如果新的目标函数值小于旧的目标函数值,则总是接受新的点。否则,新点被随机接受,其概率取决于目标函数值的差值和当前温度。接受概率为
其中Δ =新目标-旧目标,和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)
-当前目标函数值
平均温度
-平均温度函数值