混合粒子群算法:基于模拟退火的算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

混合粒子群算法:基于模拟退火的算法

1. 算法原理

模拟退火算法在搜索过程中具有概率突跳的能力,能够有效地避免搜索过程中陷入局部极小解。模拟退火算法在退火过程中不但接受好的解,而且还以一定的概率接受差得解,同时这种概率受到温度参数的控制,其大小随温度的下降而减小。

2. 算法步骤

(1) 随机初始化种群中各微粒的位置和速度;

(2) 评价每个微粒的适应度,将当前各微子的位置和适应值存储在各微子的i p 中,将所

有pbest 的中适应最优个体的位置和适应值存储在g p 中;

(3) 确定初始温度;

(4) 根据下式确定当前温度下各i p 的适配值:

(()())/(()())/1()i g i g f p f p t i N

f p f p t i e

TF p e

----==∑ (5) 采用轮盘赌策略从所有i p 中确定全局最优的某个替代值g p ',然后根据下式更新各

微粒的速度和位置:

{},,11,,22,,(1)()[()][()]i j i j i j i j g j i j v t v t c r p x t c r p x t ϕ+=+-+-

,,,(1)()(1),1,2,...i j i j i j x t x t v t j d +=++=

12

C c c ϕ==+

(6) 计算各微粒新的目标值,更新各微粒的i p 值及群体的g p 值;

(7) 进行退温操作;

(8) 若满足停止条件(通常为预设的运算精度或迭代次数),搜索停止,输出结果,否知

返回(4)继续搜索;

(9) 初始温度和退温温度对算法有一定的影响,一般采用如下的初温和退温方式:

10,()/ln 5k k g t k t f p λ+==

3. 算法MATLAB 实现

在MATLAB 中编程实现的基于杂交的粒子群算法优化函数为:SimuAPSO 。 功能:用基于模拟退火的粒子群算法求解无约束优化问题。

调用格式:12[,](,,,,,,)xm fv SimuAPSO fitness N c c lamda M D

其中,fitness :待优化的目标函数;

N :粒子数目;

1c :学习因子1;

2c :学习因子2;

lamda :退火常数;

M :最大迭代次数;

D :自变量的个数;

xm :目标函数取最小值时的自变量值;

fv :目标函数的最小值。

基于模拟退火的粒子群算法的MATLAB 代码如下:

function [xm,fv]=SimuAPSO(fitness,N,c1,c2,lamda,M,D)

% fitness :待优化的目标函数;

% N :粒子数目;

% c1:学习因子1;

% c2:学习因子2;

% lamda:退火常数;

% M :最大迭代次数;

% D :自变量的个数;

% xm :目标函数取最小值时的自变量值;

% fv :目标函数的最小值。

format long;

for i=1:N

for j=1:D

x(i,j)=randn; %随机初始化位置

v(i,j)=randn; %随机初始化速度

end

end

for i=1:N

p(i)=fitness(x(i,:));

y(i,:)=x(i,:);

end

pg=x(N,:); %pg 为全局最优

for i=1:(N-1)

if fitness(x(i,:))

pg=x(i,:);

end

end

T=fitness(pg)/log(5); %初始温度

for t=1:M

groupFit=fitness(pg);

for i=1:N %当前温度下各个pi 的适应值

Tfit(i)=exp(-(p(i)-groupFit)/T);

end

SumTfit=sum(Tfit);

Tfit=Tfit/SumTfit;

pBet=rand();

for i=1:N %用轮盘赌策略确定全局最优的某个替代值

ComFit(i)=sum(Tfit(1:i));

if pBet<=ComFit(i)

pg_plus=x(i,:);

break;

end

end

C=c1+c2;

ksi=2/abs(2-C-sqrt(C^2-4*C)); %速度压缩因子

for i=1:N

v(i,:)=ksi*(v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg_plus-x(i,:)));

x(i,:)=x(i,:)+v(i,:);

if fitness(x(i,:))

p(i)=fitness(x(i,:));

y(i,:)=x(i,:);

end

if p(i)

pg=y(i,:);

end

end

T=T*lamda;

end

xm=pg';

fv=fitness(pg);

基于模拟退火的粒子群算法应用实例。求下面函数的最小值

()1

5211()0.01,1010,1,2,...51i i i f x x i i x -=⎡⎤=+-≤≤=⎢⎥

+-⎢⎥⎣⎦∑ 取粒子数目为40,学习因子都取2.05,迭代步数取10000,退火常数取为0.5。 解:

首先建立目标函数文件.fitness m :

function F=fitness(x)

F=0;

相关文档
最新文档