|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
' f8 @* w: Y6 Y+ t
一、简介8 e# v7 U. T4 h7 a s: y
由来:根据磷虾群觅食的特性,由Gandomi等在2012年首次提出[1]。在运动过程中,磷虾群不断地聚集以增大种群密度,并减少被捕食的几率,同时探索生存区域,尽可能缩短它们与食物的距离,最终使得种群获得食物。2 H9 E7 T, p* n* R6 n2 {$ L+ @
, v6 N5 m6 _- l4 p
算法描述:* F9 W& i4 I* B& c" \. z8 a D
1、磷虾个体的速度(位置X的微分)更新公式:
5 W& `+ M3 l2 _% p2 h' H
, E+ U& M0 l, a: }# O1 A4 e
+ \. x6 q4 b: Y( U解释:磷虾群位置的变化受到三种影响:邻居磷虾的诱导,食物位置的影响和扰动
$ r/ z7 q& U( I/ o: d& o4 ?
U' B9 G* m/ X: D% W8 z. s诱导运动N
: P& z! n- L8 A6 t诱导运动指的是,每一个磷虾个体会受到其一定范围内的邻居磷虾个体和最佳位置的个体的影响。其形式化表达为:
" ]! p; v8 @) o
7 {' u; ]$ [* i: V
3 W3 Z1 p' t% I q
& b6 f: Y9 G. Y9 c- \4 L# a2 w
- l7 K5 j! E! a: S( g$ r2 G) `9 Y5 }; N" @5 i$ E
觅食运动F- j1 C8 R- \& N( ^
类似于诱导运动,觅食运动包含两个部分,第一部分是食物位置,第二部分是先前关于食物位置的经验。表达形式是:
/ `0 a( y# d: Y {7 m& }0 Z& `7 s- @% \7 K
! j% Y& B6 o9 n7 y' v/ w& e6 `7 h4 S2 L' \7 h& o2 a+ l" J( K& e* K: e
( I% L: J; V0 h1 H6 e
m2 ?% H6 W+ q5 \
# u2 z. W4 S) ^5 S7 \
' n& o" Z5 N. |3 j0 |
$ d' u: ^+ B J: t4、最后给出算法步骤和流程图
2 ]$ Q9 @1 y ^/ k; R6 h7 A3 M I, W6 Q5 D
- I. Data Structures: 定义边界,确定算法参数(种群规模Np,最大迭代次数t^max,最大诱导速度N^max,最大觅食速度V_f,最大随机扩散速度D^max,诱导惯性权重w_n,觅食惯性权重w_f和步长缩放因子C_t)等.
- II. Initialization: 在搜索空间里随机产生初始种群.
- III. Fitness evaluation: 根据磷虾的位置对每个磷虾个体进行评估(适应值函数计算/优化目标函数计算).
- IV. Motion calculation:速度分量计算,计算运动速度和位置
- * Motion induced by the presence of other individuals
- * Foraging motion
- * Physical diffusion
- V. Implement the genetic operators:多只采用交叉操作
- VI. Updating: 在搜索空间内更新个体位置.
- VII. Repeating:t=t+1, 返回步骤 III 直到满足停止条件(最大迭代次数t^max).
- VIII. End
# V$ P$ b& t ~& C1 i. a+ x E! V. w
7 l+ m/ i( r$ E/ D+ g
; s# P$ g( t* }' r" m8 q; R) z
4 p8 T. O. s1 d
+ m l1 w9 q5 B7 M
5 Q2 P% F8 L7 f1 n% E2 }
! Z3 F4 V! H( q: `, x* W$ [! I, l* {. h( H
- % Krill Herd Algorithm V 1.1
- % Main paper:
- % Gandomi A.H., Alavi A.H., Krill Herd: A New Bio-Inspired Optimization Algorithm.
- % Communications in Nonlinear Science and Numerical Simulation,
- function KH
- clc; close all; clear all
- format long
- %% Initial Parameter Setting
- NR = 10; % Number if Runs
- NK = 25; % Number if Krills
- MI = 200; % Maximum Iteration
- C_flag = 1; % Crossover flag [Yes=1]
- % Bounds (Normalize search space in case of highly imbalanced search space)
- UB = 10*ones(1,10);
- LB = -10*ones(1,10);
- NP = length(LB); % Number if Parameter(s)
- Dt = mean(abs(UB-LB))/2; % Scale Factor
- F = zeros(NP,NK);D = zeros(1,NK);N = zeros(NP,NK); %R = zeros(NP,NK);
- Vf = 0.02; Dmax = 0.005; Nmax = 0.01; Sr = 0;
- %% Optimization & Simulation
- for nr = 1:NR
- %Initial Krills positions
- for z1 = 1:NP
- X(z1,:) = LB(z1) + (UB(z1) - LB(z1)).*rand(1,NK);
- end
- for z2 = 1:NK
- K(z2)=cost(X(:,z2));
- end
- Kib=K;
- Xib=X;
- [Kgb(1,nr), A] = min(K);
- Xgb(:,1,nr) = X(:,A);
- for j = 1:MI
- % Virtual Food
- for ll = 1:NP;
- Sf(ll) = (sum(X(ll,:)./K));
- end
- Xf(:,j) = Sf./(sum(1./K)); %Food Location
- Xf(:,j) =findlimits(Xf(:,j)',LB,UB,Xgb(:,j,nr)');% Bounds Checking
- Kf(j) = cost(Xf(:,j));
- if 2<=j
- if Kf(j-1)<Kf(j)
- Xf(:,j) = Xf(:,j-1);
- Kf(j) = Kf(j-1);
- end
- end
- Kw_Kgb = max(K)-Kgb(j,nr);
- w = (0.1+0.8*(1-j/MI));
- for i = 1:NK
- % Calculation of distances
- RF = Xf(:,j)-X(:,i);
- Rgb = Xgb(:,j,nr)-X(:,i);
- for ii = 1:NK
- RR(:,ii) = X(:,ii)-X(:,i);
- end
- R = sqrt(sum(RR.*RR));
- % % % % % % % % % % % % % Movement Induced % % % % % % % % % %
- % Calculation of BEST KRILL effect
- if Kgb(j,nr) < K(i)
- alpha_b = -2*(1+rand*(j/MI))*(Kgb(j,nr) - K(i)) /Kw_Kgb/ sqrt(sum(Rgb.*Rgb)) * Rgb;
- else
- alpha_b=0;
- end
- % Calculation of NEIGHBORS KRILL effect
- nn=0;
- ds = mean(R)/5;
- alpha_n = 0;
- for n=1:NK
- if and(R<ds,n~=i)
- nn=nn+1;
- if and(nn<=4,K(i)~=K(n))
- alpha_n = alpha_n-(K(n) - K(i)) /Kw_Kgb/ R(n) * RR(:,n);
- end
- end
- end
- % Movement Induced
- N(:,i) = w*N(:,i)+Nmax*(alpha_b+alpha_n);
- % % % % % % % % % % % % % Foraging Motion % % % % % % % % % %
- % Calculation of FOOD attraction
- if Kf(j) < K(i)
- Beta_f=-2*(1-j/MI)*(Kf(j) - K(i)) /Kw_Kgb/ sqrt(sum(Rf.*Rf)) * Rf;
- else
- Beta_f=0;
- end
- % Calculation of BEST psition attraction
- Rib = Xib(:,i)-X(:,i);
- if Kib(i) < K(i)
- Beta_b=-(Kib(i) - K(i)) /Kw_Kgb/ sqrt(sum(Rib.*Rib)) *Rib;
- else
- Beta_b=0;
- end
- % Foraging Motion
- F(:,i) = w*F(:,i)+Vf*(Beta_b+Beta_f);
- % % % % % % % % % % % % % Physical Diffusion % % % % % % % % %
- D = Dmax*(1-j/MI)*floor(rand+(K(i)-Kgb(j,nr))/Kw_Kgb)*(2*rand(NP,1)-ones(NP,1));
- end
- %% Post-Processing
- [Best, Ron_No] = min(Kgb(end,:))
- Xgb(:,end,Ron_No)
- Mean = mean(Kgb(end,:))
- Worst = max(Kgb(end,:))
- Standard_Deviation = std(Kgb(end,:))
- % Convergence plot of the best run
- semilogy(1:MI+1,Kgb(:,Ron_No),1:MI+1,mean(Kgb'))
- xlabel('{\itNo. of Iterations}')
- ylabel('{\itf}({\bfx_{best}})')
- legend('Best run values','Average run values')
! b$ X; I% o9 F$ f# X5 F/ I3 \ ; ^6 W' X: a2 u: p# r. x- U; w: M
: L c& w$ m2 J
. i1 |- p0 L+ S! l6 v% o三、运行结果
1 l* q" y$ }/ z5 ^8 O, P4 h; b+ x j$ Z
) x& N* ~, w3 v1 ^7 w2 F& L# \+ t
W$ |2 s/ ]7 u( [' l6 \+ ^) p% f! E* D g) J
|
|