基于鸡群优化算法的线性规划问题求解matlab程序
1 鸡群优化算法简介
新型的仿生学算法—鸡群优化算法,它模拟群的等级制度和鸡群的群体活动行为。在特殊的等级制度下鸡群中不同鸡种搜寻食物时存在着竞争。公鸡搜索食物能力强,适应值小;母鸡其次;小鸡搜索食物能力最弱,适应值最大。为了简化,文中通过下列规则理想化鸡群算法:鸡群按公鸡个数来分组,每组由一只公鸡、一些母鸡和小鸡组成,有几只公鸡就有几组。分组中,公鸡搜索能力最强,处于统治地位,适应值最小;搜索能力稍差的母鸡紧跟在公鸡周围搜索食物,适应度值稍大;其中一些母鸡还带领小鸡,小鸡搜索能力最差,只在母鸡周围搜索食物,适应度值最大,实现局部搜索功能。在等级制度下,分组中公鸡的统治关系和母鸡 - 小鸡的母子关系将会改变。通过适应度值来建立这种等级秩序,并随机分组建立公鸡与母鸡的关系,随机建立母鸡—小鸡的母子关系。鸡群中,适应度值越小的个体越占有优势,可以优先获得食物,并且统领适应度值大的个体。适应度值最小的个体对应鸡群中的公鸡,稍大的对应于母鸡,最大的对应于小鸡,在这种等级秩序下它们以组为单位合作,并按照各自的运动规律更新位置,进行搜索,最终搜索到最佳的觅食位置,即得到最优解。
2 线性规划算例
3 鸡群优化算法求解结果
1)迭代曲线
2)求解答案
由求解结果可知,计算算法求解与答案相差较大,效果不理想。
4 matlab程序
1)主函数
%% 鸡群优化算法
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
。。。。。。。。。。。。略