基于鸡群优化算法的线性规划问题求解matlab程序

基于鸡群优化算法的线性规划问题求解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
。。。。。。。。。。。。略

猜你喜欢

转载自blog.csdn.net/weixin_47365903/article/details/125551711
今日推荐