simulannealbnd

使用模拟退火算法求函数的最小值

描述

X= simulannealbnd (开玩笑x0求一个局部最小值,X,到功能手柄开玩笑一个计算目标函数的值。x0是用于模拟退火算法,实向量的初始点。

注意

传递额外的参数(Optimization Toolbox)说明如何在必要时向目标函数传递额外的参数。

X= simulannealbnd (开玩笑x0乌兰巴托定义了在设计变量的一组上限和下限的X,所以解总是在这个范围内X乌兰巴托。如果x(我)下面是无界的吗磅(i) =负无穷, 而如果x(我)是无界的上方,设置乌兰巴托(i) =正无穷

X= simulannealbnd (开玩笑x0乌兰巴托选项中指定的优化选项最小化选项。创建选项使用optimoptions。如果没有边界存在,设置磅= []和/或UB = []

X= simulannealbnd (问题找到最低的问题,在那里问题中描述的结构。创建问题从优化应用程序中导出一个问题,如出口你的工作(优化工具箱)。

[XFVAL)= simulannealbnd (___,对于任何语法,返回目标函数的值开玩笑在解决方案X

[XFVALexitflag产量)= simulannealbnd (___另外返回一个值exitflag的退出条件simulannealbnd和结构产量有关优化过程的信息。

例子

全部收缩

最小化德容的第五个功能,与许多局部极小二维功能。

德容的第五个功能。

dejong5fcn

最小化De Jong的第五个函数simulannealbnd从零开始[0,0]

有趣= @dejong5fcn;X0 = [0 0];X = simulannealbnd(乐趣,X0)
优化终止:在最好的函数值的变化小于options.FunctionTolerance。
x =1×2-32.0285 -0.1280

simulannealbnd算法使用MATLAB®随机数流,因此您可能会得到不同的结果。

在有界区域内最小化德容的第五个函数。

德容的第五个功能。

dejong5fcn

开始simulannealbnd从这一点开始[0,0],并设置每个组件的下界为-64和上界为64。

有趣= @dejong5fcn;X0 = [0 0];磅= [-64 -64];UB = [64 64];X = simulannealbnd(乐趣,X0,LB,UB)
优化终止:在最好的函数值的变化小于options.FunctionTolerance。
x =1×2-15.9790 - -31.9593

simulannealbnd算法使用MATLAB®随机数流,因此您可能会得到不同的结果。

观察…的进展simulannealbnd通过设置选项来使用一些绘图函数。

设置模拟退火选择使用几种情节的功能。

选择= optimoptions (“simulannealbnd”'PlotFcns'{@saplotbestx, @saplotbestf、@saplotx @saplotf});

开始simulannealbnd从这一点开始[0,0],并设置每个组件的下界为-64和上界为64。

rng默认的%的再现性有趣= @dejong5fcn;x0 = (0,0);磅= (-64、-64);乌兰巴托= (64、64);x = simulannealbnd(有趣,x0,磅,乌兰巴托,选项)

优化终止:在最好的函数值的变化小于options.FunctionTolerance。
x =1×2-15.9790 - -31.9593

获得模拟退火最小化的所有输出。

德容的第五个功能。

dejong5fcn

开始simulannealbnd从这一点开始[0,0],并设置每个组件的下界为-64和上界为64。

有趣= @dejong5fcn;x0 = (0,0);磅= (-64、-64);乌兰巴托= (64、64);[X,FVAL,exitflag,输出] = simulannealbnd(乐趣,X0,LB,UB)
优化终止:在最好的函数值的变化小于options.FunctionTolerance。
x =1×2-15.9790 - -31.9593
fval = 1.9920
exitflag = 1
输出=同场的结构:迭代:1762 funccount:1779的消息:“优化终止:在最好的函数值变化小于options.FunctionTolerance”。rngstate:[1x1的结构] problemtype: 'boundconstraints' 温度:[2×1双] TOTALTIME:1.0315

simulannealbnd算法使用MATLAB®随机数流,因此您可能会得到不同的结果。

输入参数

全部收缩

函数被最小化,指定为功能句柄或函数名。开玩笑函数是否接受一个向量X并返回实标量F中,目标函数评估在X

开玩笑可以指定为文件的函数句柄:

X = simulannealbnd(@ myfun,X0)

在哪里myfun是MATLAB®等功能

函数f = myfun(x) f =…计算函数值在x处

开玩笑也可以是一个匿名函数的函数句柄:

x = simulannealbnd (@ (x)规范(x) ^ 2, x0,磅,乌兰巴托);

例子:有趣= @ (x) sin (x (1)) * cos (x (2))

数据类型:字符|function_handle|字符串

初始点,指定为实向量。simulannealbnd使用元素的个数x0来确定变量的个数开玩笑接受。

例子:x0 = (1、2、3、4)

数据类型:

下界,指定为实向量或实数组。如果元素的个数x0等于的, 然后该指定

x(我)> =磅(我)对所有一世

如果元素个数(磅)<元素个数(x0), 然后该指定

x(我)> =磅(我)对于1 <= I <= numel(Ib)的

在这种情况下,解决方案发出警告。

例子:要指定所有控制变量为正,磅= 0(大小(x0))

数据类型:

上界,指定为实向量或实数组。如果元素的个数x0等于的乌兰巴托, 然后乌兰巴托该指定

x (i) < =乌兰巴托(我)对所有一世

如果numel(UB), 然后乌兰巴托该指定

x (i) < =乌兰巴托(我)对于1 <= i <= numel(ub)

在这种情况下,解决方案发出警告。

例子:要指定所有控制变量都小于1,UB =酮(尺寸(X0))

数据类型:

优化选项,指定为对象通过返回optimoptions或结构。有关详细信息,请参见模拟退火选项

optimoptions皮张的选项中列出斜体;看到选项optimoptions隐藏

{}表示默认值。请参阅模拟退火选项

选项 描述

AcceptanceFcn

函数,该算法用于确定是否接受新点。指定为'acceptancesa'或函数句柄。

功能手柄|{ 'acceptancesa'}

AnnealingFcn

功能算法用来生成新的点。作为指定的名称的内置功能退火或函数句柄。

函数名|'annealingboltz'|{ 'annealingfast'}

数据类型

决策变量的类型

“自定义”|{'双'}

显示

水平显示

“关闭”|'ITER'|“诊断”|{'最后'}

DisplayInterval

迭代显示间隔

正整数|{10}

FunctionTolerance

在函数值终止宽容

对于选项结构,请使用TolFun

积极的标量|{1E-6}

HybridFcn

自动运行HybridFcn期间或在求解器的迭代端(另一优化功能)。指定为名称或功能句柄。

看到当使用混合功能

'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

1×2单元数组|{@solver, hybridoptions},在那里解算器= fminsearchpatternsearchfminunc,或fmincon{[]}

HybridInterval

时间间隔(如果不是'结束'“永远”),在该HybridFcn被称为

正整数|“永远”|{'结束'}

InitialTemperature

温度初值

正的标量|正的向量|{100}

MaxFunctionEvaluations

允许的最大目标函数计算数

对于选项结构,请使用MaxFunEvals

正整数|{3000 * numberOfVariables}

MaxIterations

允许的最大迭代次数

对于选项结构,请使用麦克斯特

正整数|{}天道酬勤

MaxStallIterations

适应度函数值在当前点的平均变化迭代次数小于options.FunctionTolerance

对于选项结构,请使用StallIterLimit

正整数|{500 * numberOfVariables}

MaxTime

运行后,算法停止MaxTime

对于选项结构,请使用时限

积极的标量|{}天道酬勤

ObjectiveLimit

所需的最小目标函数值

标量|{无穷}

OutputFcn

功能(S)GET(S)迭代数据,并可以在运行时更改选项

对于选项结构,请使用OutputFcns

功能手柄|功能手柄单元阵列|{[]}

PlotFcn

迭代过程中调用绘图功能(S)

对于选项结构,请使用PlotFcns

函数处理|内置小区函数名|单元数组函数处理|单元数组内置小区函数名|“saplotbestf”|'saplotbestx'|“saplotf”|'saplotstopping'|“saplottemperature”|{[]}

PlotInterval

每隔一段时间调用绘图函数

正整数|{1}

ReannealInterval

再次退火时间间隔

正整数|{100}

TemperatureFcn

用于更新温度计划的功能

功能手柄|内置温度的函数名称|'temperatureboltz'|'temperaturefast'|{ 'temperatureexp'}

例子:选项= optimoptions(@ simulannealbnd, 'MaxIterations',150)

数据类型:结构

问题结构,指定为具有以下字段的结构:

  • 客观的- 目标函数

  • x0——起点

  • - 下界X

  • 乌兰巴托-适用于X

  • 解算器-“simulannealbnd”

  • 选项-以optimoptions或选项结构

  • rngstate- 可选字段重置随机数生成器的状态

创建结构问题从优化应用程序中导出一个问题,如导入和导出您的工作(优化工具箱)。

注意

问题必须具有上面指定的所有字段。

数据类型:结构

输出参数

全部收缩

解,作为实向量返回。的大小X是一样的大小吗x0。通常情况下,X是局部解决问题的时候吗exitflag是积极的。

目标函数在解处的值,作为实数返回。一般来说,FVAL=有趣的(x)

原因simulannealbnd停止,返回一个整数。

出口标志 意义
1

在目标函数在值平均变化options.MaxStallIterations迭代次数小于options.FunctionTolerance

目标函数值小于options.ObjectiveLimit

0

达到的函数计算或迭代的最大数目。

1

由输出函数或绘图函数终止的优化。

-2

没有可行点发现。

5

超过了时间限制。

关于优化过程的信息,以带字段的结构返回:

  • problemtype- 问题类型:无约束或限制的约束。

  • 迭代- 迭代次数来计算。

  • funccount-目标函数的评价次数。

  • 信息-算法终止的原因。

  • 温度- 温度当解算器终止。

  • totaltime-求解程序运行的总时间。

  • rngstate- 国家MATLAB的随机数生成器,该算法开始之前。您可以使用值rngstate的输出simulannealbnd。看到重现您的结果

介绍了在R2007a