資源簡介
基本的粒子群算法,編寫的MATLAB的M文件,對于熟悉算法流程有幫助
代碼片段和文件信息
function?[pso?F]?=?pso_2D()
uav_size=4;
pop_size?=?30;??????????%???pop_size?種群大小
part_size?=?2*uav_size;??????????%???part_size?粒子大小
%?Value=[0.9?0.8?0.7?0.6];
%?p_kill=[0.1?0.1?0.2?0.9;0.8?0.8?0.2?0.1;0.3?0.4?0.5?0.2;0.4?0.9?0.3?0.3]
%?Distance=[0.91813?0.56140?0.93860?0.20175;0.16374?0.93860?0.35965?0.35965;0.31579?0.97368?0.20760?0.67544;0.36008?0.75642?0.82016?0.5573]
%?p_survial=[0.926?0.906?0.916?0.966;0.306?0.906?0.986?0.926;0.996?0.916?0.256?0.926;0.926?0.936?0.926?0.916]
gbest?=?zeros(1part_size+1);????????????%???gbest?當(dāng)前搜索到的最小的值
max_gen?=?6000;??????????%???max_gen?最大迭代次數(shù)
arr_present?=?ini_pos(pop_sizepart_size);???%???present?當(dāng)前位置隨機初始化rand()的范圍為0~1
v=ini_v(pop_sizepart_size);?????????????%???初始化當(dāng)前速度
pbest?=?zeros(pop_sizepart_size+1);??????%???pbest?粒子以前搜索到的最優(yōu)值,最后一列包括這些值的適應(yīng)度
w_max?=?0.9;????????????????????????????%???w_max?權(quán)系數(shù)最大值
w_min?=?0.4;
v_max?=?0.2;?????????????%??????????????????????????????????????????????????????????????????????????????????????????**最大速度為粒子的范圍寬度
c1?=?2;???????????????????%???學(xué)習(xí)因子
c2?=?2;???????????????????%???學(xué)習(xí)因子
best_record?=?zeros(1max_gen);?????%???best_record記錄最好的粒子的適應(yīng)度。
%??————————————————————————
%???計算原始種群的適應(yīng)度及初始化
%??————————————————————————
arr_present(:end)=ini_fit(arr_presentpop_sizepart_size);
%?for?k=1:pop_size
%?????present(kend)?=?fitness(present(k1:part_size));??%計算原始種群的適應(yīng)度
%?end
pbest?=?arr_present;????????????????????????????????????????%初始化各個粒子最優(yōu)值
[best_value?best_index]?=?max(arr_present(:end));?????????%初始化全局最優(yōu),即適應(yīng)度為全局最小的值,根據(jù)需要也可以選取為最大值
gbest?=?arr_present(best_index:);
for?i=1:max_gen
????w?=?w_max-(w_max-w_min)*i/max_gen;
????for?j=1:pop_size
????????v(j:)?=?w.*v(j:)+c1.*rand.*(pbest(j1:part_size)-arr_present(j1:part_size))...
????????????+c2.*rand.*(gbest(1:part_size)-arr_present(j1:part_size));????????????????????????%??粒子速度更新?(a)
????????v(j:)=round(v(j:));
%?????????c?=?find(abs(v)>0.2);??????????????????????????????????????????????????????????????????????????????????????????????%**最大速度設(shè)置,粒子的范圍寬度
%?????????v(c)?=?sign(v(c))*0.2;???%如果速度大于3.14則,速度為3.14
????????arr_present(j1:part_size)=?arr_present(j1:part_size)+v(j1:part_size);??????????????%??粒子位置更新?(b)
%?????????arr_present(j1:part_size)=round(arr_present(j1:part_size))
???????????????c?=?find(arr_present>4);?
?????????????arr_present(c)?=?4;?
?????????????d?=
- 上一篇:用于中文分詞的中文詞庫包
- 下一篇:基于Armijo準(zhǔn)則的阻尼牛頓法
評論
共有 條評論