Programa Matlab para resolver problemas de programación lineal basado en el algoritmo de optimización de parvadas de pollos

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.
inserte la descripción de la imagen aquí

2 Ejemplo de programación lineal
inserte la descripción de la imagen aquí

3 Resultados de la solución del algoritmo de optimización de bandadas de pollos

1) Curva iterativa

inserte la descripción de la imagen aquí
2) Resuelva la respuesta
inserte la descripción de la imagen aquí
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
。。。。。。。。。。。。略

Supongo que te gusta

Origin blog.csdn.net/weixin_47365903/article/details/125551711
Recomendado
Clasificación