模拟退火算法matlab求函数最大值实例
2017-10-31 22:31
211 查看
模拟退火算法matlab求函数最大值实例
模拟退火算法的思路基本上是:
1.粒子按照不同的概率在不同的方向漂移(随机运动)
2.向目标点漂移的概率更大(趋向于能量低的点)
3.随着时间的推移粒子每次漂移的步长变短(温度降低)
这里粒子的速度采用正态分布,正态分布的速度的平均值与温度成正比
粒子运动方向随机,+-方向运动概率为0.5
%模拟退火算法实现搜索函数最大值
%Anneal.m
N=20;%粒子数量
temp=20;%初始温度
T=200;%迭代次数
k=0.1;%温度位移系数
kt=0.05;%温度概率系数
de=0.99;%温度降低速率
minx=0;
maxx=10;%区间
location=10*rand(1,N);%粒子初始位置
present_value=equation(location);%粒子当前解
%---------------------------
for t=1:T
%
dx_av=k*temp;%当前温度下粒子平均移动距离
probability=exp(-1/(kt*temp));
disp(probability);
temp=temp*de;%温度变化
for p=1:N
dx=0.5*dx_av*randn+dx_av;%以平均移动距离为中心正态分布,
if rand>0.5 %0.5的概率为-
dx=-dx;
end
local=location(p)+dx;
if (local<maxx)&&(local>minx)%判断是否越界
local_value=equation(local);
if local_value>present_value(p)
location(p)=local;
present_value(p)=local_value;
else if rand<probability
location(p)=local;
present_value(p)=local_value;
end
end
end
end
end
x=minx:0.01:maxx;
y=equation(x);
plot(x,y);
hold on;
plot(location, present_value,'*');
disp(location);
被搜寻的函数如下·
function y=equation(x)
y=10*cos(0.4*pi*x).*sin(0.1*pi*x);
end
模拟退火算法的思路基本上是:
1.粒子按照不同的概率在不同的方向漂移(随机运动)
2.向目标点漂移的概率更大(趋向于能量低的点)
3.随着时间的推移粒子每次漂移的步长变短(温度降低)
这里粒子的速度采用正态分布,正态分布的速度的平均值与温度成正比
粒子运动方向随机,+-方向运动概率为0.5
%模拟退火算法实现搜索函数最大值
%Anneal.m
N=20;%粒子数量
temp=20;%初始温度
T=200;%迭代次数
k=0.1;%温度位移系数
kt=0.05;%温度概率系数
de=0.99;%温度降低速率
minx=0;
maxx=10;%区间
location=10*rand(1,N);%粒子初始位置
present_value=equation(location);%粒子当前解
%---------------------------
for t=1:T
%
dx_av=k*temp;%当前温度下粒子平均移动距离
probability=exp(-1/(kt*temp));
disp(probability);
temp=temp*de;%温度变化
for p=1:N
dx=0.5*dx_av*randn+dx_av;%以平均移动距离为中心正态分布,
if rand>0.5 %0.5的概率为-
dx=-dx;
end
local=location(p)+dx;
if (local<maxx)&&(local>minx)%判断是否越界
local_value=equation(local);
if local_value>present_value(p)
location(p)=local;
present_value(p)=local_value;
else if rand<probability
location(p)=local;
present_value(p)=local_value;
end
end
end
end
end
x=minx:0.01:maxx;
y=equation(x);
plot(x,y);
hold on;
plot(location, present_value,'*');
disp(location);
被搜寻的函数如下·
function y=equation(x)
y=10*cos(0.4*pi*x).*sin(0.1*pi*x);
end
相关文章推荐
- VC调用matlab中定义的.m文件中的函数的实例
- matlab遗传算法工具箱函数及实例讲解(转引)[
- matlab 画图函数的实例
- matlab遗传算法工具箱函数及实例讲解
- matlab中fopen函数在指定文件打开的实例如下:
- VC调用matlab中定义的.m文件中的函数的实例
- MATLAB save 函数用法及实例
- MATLAB画图入门篇--各种基本图形绘制的函数与实例
- MATLAB和C++数据交类实例---求任意函数y=f(x)的n阶导数,并计算在x=x0处的值
- matlab中求和函数sum的具体使用实例
- VC调用matlab中定义的.m文件中的函数的实例
- Matlab时频分析工具箱小波尺度图函数的使用说明与实例
- 一个MATLAB 函数的规范化格式实例
- Matlab 最大值滤波 中值滤波 最小值滤波 函数 ordfilt2
- matlab premnmx归一化函数的使用 1、premnmx 预处理数据使数据的最小值和最大值分别为-1和1. [PN,minp,maxp,TN,mint,maxt] = premnmx(P,T)
- matlab/simulink中自定义m-s函数作为simulink模块使用实例
- VC调用matlab中定义的.m文件中的函数的实例
- Matlab编程实例(3) 函数向左或向右平移N点 左移右移
- MATLAB 归一化 函数用法以及实例
- matlab遗传算法工具箱函数及实例讲解(转引)