模拟退火算法matlab
时间: 2023-09-06 08:10:16 浏览: 29
以下是一个基本的模拟退火算法的MATLAB代码示例:
```matlab
% 模拟退火算法
% f: 目标函数
% x0: 初始解
% T0: 初始温度
% Tend: 终止温度
% alpha: 降温系数
% maxIter: 最大迭代次数
function [x, fval] = simAnneal(f, x0, T0, Tend, alpha, maxIter)
% 初始化
x = x0;
fval = f(x);
T = T0;
iter = 0;
while T > Tend && iter < maxIter
% 产生随机扰动
xnew = x + randn(size(x));
% 计算目标函数值差
deltaf = f(xnew) - fval;
% 判断是否接受新解
if deltaf < 0 || exp(-deltaf/T) > rand()
x = xnew;
fval = f(x);
end
% 降温
T = alpha * T;
% 迭代次数加一
iter = iter + 1;
end
end
```
使用示例:
```matlab
% 目标函数
f = @(x) x(1)^2 + x(2)^2;
% 初始解
x0 = [1; 1];
% 初始温度
T0 = 1;
% 终止温度
Tend = 1e-5;
% 降温系数
alpha = 0.99;
% 最大迭代次数
maxIter = 1000;
% 运行模拟退火算法
[x, fval] = simAnneal(f, x0, T0, Tend, alpha, maxIter);
% 输出结果
fprintf('最优解:\n');
disp(x);
fprintf('目标函数值: %.4f\n', fval);
```