Programa Matlab para resolver problemas de programación lineal basado en el algoritmo de optimización de parvadas de pollos
1 Introducción al algoritmo de optimización de grupos de pollos
Un nuevo tipo de algoritmo biónico: algoritmo de optimización de bandada de pollos, que simula la jerarquía de la bandada y el comportamiento de actividad grupal de la bandada. Hay competencia entre diferentes razas en el rebaño por comida en una jerarquía especial. El gallo tiene la capacidad más fuerte para buscar comida, pero su valor físico es pequeño; la gallina es la siguiente; el pollito tiene la capacidad más débil para buscar alimento y su valor físico es el más grande. En aras de la simplicidad, se utilizan las siguientes reglas para idealizar el algoritmo de la parvada de pollos: las parvadas de pollos se dividen en grupos según el número de gallos, y cada grupo consta de un gallo, algunas gallinas y pollitos, y hay varios grupos con varios gallos. En el grupo, el gallo tiene la capacidad de búsqueda más fuerte, está en la posición dominante y tiene el valor de aptitud más bajo; las gallinas con una capacidad de búsqueda ligeramente más pobre siguen al gallo para buscar comida y el valor de aptitud es ligeramente mayor; algunas de las gallinas también guían a los pollitos, y los pollitos buscan La capacidad es la peor, solo busca comida alrededor de la gallina, y el valor de aptitud es el más grande, realizando la función de búsqueda local. Bajo la jerarquía, la relación de dominancia del gallo y la relación madre-hijo de la gallina-pollo dentro del grupo cambiarán. El orden jerárquico se establece a través del valor de aptitud, y la relación entre gallos y gallinas se agrupa aleatoriamente, y la relación gallina-pollo se establece aleatoriamente. En el rebaño, los individuos con valores de aptitud más pequeños son más dominantes, pueden obtener comida primero y liderar a los individuos con valores de aptitud más altos. El individuo con menor valor de aptitud corresponde al gallo en el rebaño, el un poco más grande corresponde a la gallina y el más grande corresponde al pollito.En este orden jerárquico, cooperan en grupos y actualizan sus posiciones de acuerdo a sus propias reglas de movimiento Busque y finalmente encuentre la mejor posición de forrajeo, es decir, obtenga la solución óptima.
2 Ejemplo de programación lineal
3 Resultados de la solución del algoritmo de optimización de bandadas de pollos
1) Curva iterativa
2) Resuelva la respuesta
A partir del resultado de la solución, se puede saber que la solución del algoritmo de cálculo es bastante diferente de la respuesta, y el efecto no es ideal.
4 programa matlab
1) función principal
%% 鸡群优化算法
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
。。。。。。。。。。。。略