simulannealbnd
使用模拟退火算法寻找函数的最小值
语法
说明
示例
最小化具有许多局部最小值的函数
最小化 De Jong 第五个函数,这是一个具有许多局部极小值的二维函数。运行此示例时此函数可用。
绘制德容的第五个函数。
dejong5fcn
从点 [0,0]
开始,使用 simulannealbnd
最小化 De Jong 第五函数。
fun = @dejong5fcn; x0 = [0 0]; x = simulannealbnd(fun,x0)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2
-32.0285 -0.1280
simulannealbnd
算法使用 MATLAB® 随机数流,因此您可能会获得不同的结果。
最小化受限制
在有界区域内最小化 De Jong 第五个函数。运行此示例时此函数可用。
绘制德容的第五个函数。
dejong5fcn
从点 [0,0]
开始 simulannealbnd
,并在每个分量上设置下界为 -64、上界为 64。
fun = @dejong5fcn; x0 = [0 0]; lb = [-64 -64]; ub = [64 64]; x = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2
-15.9790 -31.9593
simulannealbnd
算法使用 MATLAB® 随机数流,因此您可能会获得不同的结果。
尽量减少使用非默认选项
通过设置选项使用一些绘图函数来观察 simulannealbnd
的进度。
设置模拟退火选项以使用几个绘图函数。
options = optimoptions('simulannealbnd','PlotFcns',... {@saplotbestx,@saplotbestf,@saplotx,@saplotf});
从点 [0,0]
开始 simulannealbnd
,并在每个分量上设置下界为 -64、上界为 64。最小化 dejong5fcn
,它在运行此示例时可用。
rng default % For reproducibility fun = @dejong5fcn; x0 = [0,0]; lb = [-64,-64]; ub = [64,64]; x = simulannealbnd(fun,x0,lb,ub,options)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2
-15.9790 -31.9593
获取所有输出
获得模拟退火最小化的所有输出。
绘制 De Jong 第五个函数,运行此示例时可用。
dejong5fcn
从点 [0,0]
开始 simulannealbnd
,并在每个分量上设置下界为 -64、上界为 64。
fun = @dejong5fcn; x0 = [0,0]; lb = [-64,-64]; ub = [64,64]; [x,fval,exitflag,output] = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2
-15.9790 -31.9593
fval = 1.9920
exitflag = 1
output = struct with fields:
iterations: 1762
funccount: 1779
message: 'simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.'
rngstate: [1x1 struct]
problemtype: 'boundconstraints'
temperature: [2x1 double]
totaltime: 0.9858
simulannealbnd
算法使用 MATLAB® 随机数流,因此您可能会获得不同的结果。
输入参数
fun
— 要求最小化值的函数
函数句柄 | 函数名称
要最小化的函数,指定为函数句柄或函数名称。fun
是一个接受向量 x
并返回实数标量 f
的函数,即在 x
处评估的目标函数。
fun
可以指定为文件的函数句柄:
x = simulannealbnd(@myfun,x0)
其中 myfun
是一个 MATLAB® 函数,例如
function f = myfun(x) f = ... % Compute function value at x
fun
也可以是匿名函数的函数句柄:
x = simulannealbnd(@(x)norm(x)^2,x0,lb,ub);
示例: fun = @(x)sin(x(1))*cos(x(2))
数据类型: char
| function_handle
| string
x0
— 初始点
实数向量
lb
— 下界
实数向量 | 实数数组
下界,指定为实数向量或实数数组。如果 x0
中的元素数量等于 lb
中的元素数量,则 lb
指定
x(i) >= lb(i)
(对于全部 i
)。
如果 numel(lb) < numel(x0)
,则 lb
指定
x(i) >= lb(i)
,其中 1 <= i <= numel(lb)
。
在这种情况下,求解器会发出警告。
示例: 要指定所有控制变量都是正的,lb = zeros(size(x0))
数据类型: double
ub
— 上界
实数向量 | 实数数组
上界,指定为实数向量或实数数组。如果 x0
中的元素数量等于 ub
中的元素数量,则 ub
指定
x(i) <= ub(i)
(对于全部 i
)。
如果 numel(ub) < numel(x0)
,则 ub
指定
x(i) <= ub(i)
,其中 1 <= i <= numel(ub)
。
在这种情况下,求解器会发出警告。
示例: 要指定所有控制变量都小于一,ub = ones(size(x0))
数据类型: double
options
— 优化选项
optimoptions
返回的对象 | 结构体
优化选项,指定为 optimoptions
返回的对象或结构体。有关详细信息,请参阅模拟退火选项。
optimoptions
隐藏以斜体列出的选项;请参阅 optimoptions 隐藏的选项。
{}
表示默认值。请参阅 模拟退火选项 中的选项详细信息。
选项 | 描述 | 值 |
---|---|---|
| 算法用来确定新点是否被接受的函数。指定为 | 函数句柄 | |
| 算法用来生成新点的函数。指定为内置退火函数的名称或函数句柄。 | 函数句柄 |函数名称 | |
| 决策变量的类型 |
|
| 显示级别 |
|
DisplayInterval | 迭代显示间隔 | 正整数 | |
FunctionTolerance | 函数值的终止容差 对于选项结构体,使用 | 非负标量 | |
| 在求解器迭代期间或迭代结束时自动运行 请参阅 何时使用混合函数。 |
或者 1×2 元胞数组| |
HybridInterval | 调用 | 正整数 | |
| 温度初值 | 非负标量 | 正向量| |
| 允许的最大目标函数评估次数 对于选项结构体,使用 | 非负整数 | |
| 允许的最大迭代次数 对于选项结构体,使用 | 非负整数 | |
| 当前点适应适应度函数值平均变化小于 对于选项结构体,使用 | 非负整数 | |
| 算法运行 对于选项结构体,使用 | 非负标量 | |
| 期望的最小目标函数值 | 标量 | |
| 函数获取迭代数据并可以在运行时更改选项 对于选项结构体,使用 | 函数句柄 |函数句柄的元胞数组| |
| 迭代过程中调用的绘图函数 对于选项结构体,使用 | 函数句柄 | 内置绘图函数名称 |函数句柄的元胞数组| 内置绘图函数名称的元胞数组| |
PlotInterval | 每个间隔都会调用绘图函数 | 正整数 | |
| 再退火间隔 | 非负整数 | |
| 用于更新温度计划的函数 | 函数句柄 | 内置温度函数名称 | |
示例: options = optimoptions(@simulannealbnd,'MaxIterations',150)
数据类型: struct
problem
— 问题结构体
结构体
问题结构体,指定为含有以下字段的结构体:
objective
- 目标函数x0
- 起点lb
-x
的下界ub
-x
的上界solver
—'simulannealbnd'
options
- 使用optimoptions
或选项结构体创建的选项rngstate
- 可选字段,用于重置随机数生成器的状态
注意
problem
必须具有上面指定的所有字段。
数据类型: struct
输出参量
fval
— 解处的目标函数值
实数
解处的目标函数值,以实数形式返回。通常,fval
= fun(x)
。
exitflag
— simulannealbnd
停止的原因
整数
simulannealbnd
停止的原因,以整数形式返回。
退出标志 | 含义 |
---|---|
1 | 在 |
5 | 目标函数值小于 |
0 | 已达到函数计算或迭代的最大次数。 |
-1 | 优化被输出函数或绘图函数终止。 |
-2 | 找不到可行点。 |
-5 | 超过时间限制。 |
output
— 有关优化过程的信息
结构体
有关优化过程的信息,以包含下列字段的结构体形式返回:
problemtype
- 问题类型:无约束或边界。iterations
- 计算的迭代次数。funccount
-目标函数的评估次数。message
- 算法终止的原因。temperature
-求解器终止时的温度。totaltime
-求解器运行的总时间。rngstate
- MATLAB 随机数生成器的状态,就在算法开始之前。您可以使用rngstate
中的值来重现simulannealbnd
的输出。请参阅 重现结果。
替代功能
App
优化实时编辑器任务为 simulannealbnd
提供了一个可视化界面。
版本历史记录
在 R2007a 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)