資源簡(jiǎn)介
為使用PSO提供了具體的事例,并詳細(xì)說明怎樣使用該Matlab編寫的PSO算法,對(duì)一般的問題有借鑒功能。里面包含3個(gè).m文件一個(gè).doc文件,.doc文件講授PSO算法的基本原理,并且采用實(shí)例講解,.m文件為PSO算法實(shí)現(xiàn)的代碼,詳細(xì)用法已在word文檔有說明,希望對(duì)你們有用。

代碼片段和文件信息
function?[ParSwarmOptSwarm]=baseStepPso(ParSwarmOptSwarmAdaptFuncParticleScopeMaxWMinWLoopCountCurCount)
%功能描述:全局版本:基本的粒子群算法的單步更新位置速度的算法
%
%[ParSwarmOptSwarm]=baseStepPso(ParSwarmOptSwarmAdaptFuncParticleScopeMaxWMinWLoopCountCurCount)
%
%輸入?yún)?shù):ParSwarm:粒子群矩陣,包含粒子的位置,速度與當(dāng)前的目標(biāo)函數(shù)值
%輸入?yún)?shù):OptSwarm:包含粒子群個(gè)體最優(yōu)解與全局最優(yōu)解的矩陣
%輸入?yún)?shù):ParticleScope:一個(gè)粒子在運(yùn)算中各維的范圍;
%輸入?yún)?shù):AdaptFunc:適應(yīng)度函數(shù)
%輸入?yún)?shù):LoopCount:迭代的總次數(shù)
%輸入?yún)?shù):CurCount:當(dāng)前迭代的次數(shù)
%
%返回值:含意同輸入的同名參數(shù)
%
%用法:[ParSwarmOptSwarm]=baseStepPso(ParSwarmOptSwarmAdaptFuncParticleScopeMaxWMinWLoopCountCurCount)
%
%異常:首先保證該文件在Matlab的搜索路徑中,然后查看相關(guān)的提示信息。
%
%編制人:XXX
%編制時(shí)間:2007.3.26
%參考文獻(xiàn):XXX
%參考文獻(xiàn):XXX
%
%修改記錄
%----------------------------------------------------------------
%2007.3.27
%修改人:XXX
%?添加2*unifrnd(01).*SubTract1(row:)中的unifrnd(01)隨機(jī)數(shù),使性能大為提高
%參照基于MATLAB的粒子群優(yōu)化算法程序設(shè)計(jì)
%
%?總體評(píng)價(jià):使用這個(gè)版本的調(diào)節(jié)系數(shù),效果比較好
%
%容錯(cuò)控制
if?nargin~=8
error(‘輸入的參數(shù)個(gè)數(shù)錯(cuò)誤。‘)
end
if?nargout~=2
error(‘輸出的個(gè)數(shù)太少,不能保證循環(huán)迭代。‘)
end
%開始單步更新的操作
%*********************************************
%*****更改下面的代碼,可以更改慣性因子的變化*****
%---------------------------------------------------------------------
%線形遞減策略
w=MaxW-CurCount*((MaxW-MinW)/LoopCount);
%---------------------------------------------------------------------
%w固定不變策略
%w=0.728;
%---------------------------------------------------------------------
%參考文獻(xiàn):陳貴敏,賈建援,韓琪,粒子群優(yōu)化算法的慣性權(quán)值遞減策略研究,西安交通大學(xué)學(xué)報(bào),2006,1
%w非線形遞減,以凹函數(shù)遞減
%w=(MaxW-MinW)*(CurCount/LoopCount)^2+(MinW-MaxW)*(2*CurCount/LoopCount)+MaxW;
%---------------------------------------------------------------------
%w非線形遞減,以凹函數(shù)遞減
%w=MinW*(MaxW/MinW)^(1/(1+10*CurCount/LoopCount));
%*****更改上面的代碼,可以更改慣性因子的變化*****
%*********************************************
%得到粒子群群體大小以及一個(gè)粒子維數(shù)的信息
[ParRowParCol]=size(ParSwarm);
%得到粒子的維數(shù)
ParCol=(ParCol-1)/2;
SubTract1=OptSwarm(1:ParRow:)-ParSwarm(:1:ParCol);
%*********************************************
%*****更改下面的代碼,可以更改c1c2的變化*****
%c1=2;
%c2=2;
%---------------------------------------------------------------------
con=1;
c1=4-exp(-con*abs(mean(ParSwarm(:2*ParCol+1))-AdaptFunc(OptSwarm(ParRow+1:))));
c2=4-c1;
%----------------------------------------------------------------------
%*****更改上面的代碼,可以更改c1c2的變化*****
%*********************************************
for?row=1:ParRow
SubTract2=OptSwarm(ParRow+1:)-ParSwarm(row1:ParCol);
TempV=w.*ParSwarm(rowParCol+1:2*ParCol)+2*unifrnd(01).*SubTract1(row:)+2*unifrnd(01).*SubTract2;
%限制速度的代碼
for?h=1:ParCol
if?TempV(:h)>ParticleScope(h2)
TempV(:h)=ParticleScope(h2);
end
if?TempV(:h)<-ParticleScope(h2)
TempV(:h)=-ParticleScope(h2)+1e-10;
%加1e-10防止適應(yīng)度函數(shù)被零除
end
end
%更新速度
ParSwarm(rowParCol+1:2*ParCol)=TempV;
%*********************************************
%*****更改下面的代碼,可以更改約束因子的變化*****
%---------------------------------------------------------------------
%a=1;
%---------------------------------------------------------------------
a=0.729;
%*****更改上面的代碼,可以更改約束因子的變化*
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????4357??2009-07-12?10:57??ba
?????文件????????5509??2009-07-12?11:31??PsoProcess.m
?????文件????????2802??2009-07-12?16:25??InitSwarm.m
?????文件??????336896??2009-07-12?22:11??粒子群算法詳解-附matlab代碼說明.doc
評(píng)論
共有 條評(píng)論