鶏群最適化アルゴリズムに基づいて線形計画問題を解くための Matlab プログラム
1 チキングループ最適化アルゴリズムの概要
新しいタイプのバイオニクス アルゴリズム - 鶏の群れ最適化アルゴリズム。群れの階層と群れのグループ活動行動をシミュレートします。特別な階層内で、群れ内の異なる品種間で食物をめぐる競争が行われます。雄鶏は食物を探す能力が最も強いが、適応度値は小さく、次に雌鶏が食物を探す能力が最も弱く、適応度値が最も大きい。簡略化のため、群れのアルゴリズムは次のルールによって理想化されます。群れは雄鶏の数に応じてグループに分割され、各グループは 1 羽の雄鶏、数羽の鶏とひよこで構成され、数羽の鶏がいる場合は複数のグループが存在します。雄鶏。グループ内では、雄鶏が最も探索能力が高く、優勢な位置にあり、適応度値が最も小さく、探索能力がわずかに劣る鶏は、雄鶏に従って餌を探索し、適応度値がわずかに大きくなります。雌鶏もヒナを先導し、ヒナが餌を探すが、能力は最悪、雌鳥の周囲のみを探索するが、適応度は最も大きく、局所探索機能を実現している。ヒエラルキーの下では、グループ内での雄鶏の支配関係や雌鶏と雛の母子関係が変化します。階層順序は適応度によって確立され、雄鶏と雌鶏の関係はランダムにグループ化され、雌鶏と鶏の関係はランダムに確立されます。群れの中では、適応度値が小さい個体がより優勢であり、最初に餌を得ることができ、適応度値が大きい個体を導くことができます。群れの中の適応度が最も小さい個体が雄鶏、少し大きい個体が雌鶏、最大の個体がひよこという階層的な順序で、集団で協力し、それぞれの立場に応じて位置を更新していきます。移動ルールを探索し、最終的に最適な採餌位置、つまり最適解を見つけます。
2 線形計画法の例
3 鶏群最適化アルゴリズムの解決結果
1) 反復曲線
2) 解答を解く 解答
の結果から、計算アルゴリズムの解が解答とは大きく異なり、理想的な効果が得られていないことがわかります。
4 matlab プログラム
1) main 関数
%% 鸡群优化算法
close all;
clear
clc
ntr=1; % number of runs
for tr=1:ntr
ton=cputime;
pd=3; % problem dimension变量个数
nt=500; % flock size种群规模
AP=0.01;%awareness probability
[x, l, u]=init(nt,pd); % initialization function
xn=x;
ft=fitness(xn,nt,pd); % fitness function evaluation
mem=x;
fit_mem=ft;
tmax=300; % maximum number of iterations
for t=1:tmax
num=ceil(nt*rand(1,nt));
for i=1:nt
if rand>AP
% disp(num2str(rand));
xnew(i,:)= x(i,:)+2*rand*(mem(num(i),:)-x(i,:));
else
for j=1:pd
xnew(i,j)=[u(j)-(u(j)-l(j))*rand];
end
end
end
xn=xnew;
ft=fitness(xn,nt,pd); % fitness function
% update position
for i=1:nt
x1=xnew(i,1);
x2=xnew(i,2);
if 2*(sqrt(2)*x1+x2)/(sqrt(2)*x1^2+2*x1*x2)-2<=0 && 2*x2/(sqrt(2)*x1^2+2*x1*x2)-2<=0 && 2/(sqrt(2)*x2+x1)-2<=0 && x1>=0 && x1<=1 && x2>=0 && x2<=1
x(i,:)=xnew(i,:);
if ft(i)<fit_mem(i)
mem(i,:)=xnew(i,:);
fit_mem(i)=ft(i);
end
end
end
ffit(t)=min(fit_mem);
plot(ffit(1:t))
xlabel('迭代次数')
ylabel('目标值')
title(' 迭代曲线')
drawnow
% min(fit_mem);
end
F(tr,:)=ffit;
fitn(tr)= min(fit_mem);
ngbest=find(fit_mem== min(fit_mem));
g_best(tr,:)=mem(ngbest(1),:);
toff(tr)=cputime-ton;
end
%极值坐标
ng=find(fitn==min(fitn));
%% 输出结果
disp('输出最优变量');
gbest=g_best(ng(1),:)
disp('输出最优值');
Best=min(fitn)% return best performance
% disp('输出最劣值');
% Wrst=max(fitn)% return worst performance
% disp('输出平均值');
% Mean=mean(fitn) % return mean
% disp('输出标准差');
% Std=std(fitn) % return std
。。。。。。。。。。。。略