鶏群最適化アルゴリズムに基づいて線形計画問題を解くための Matlab プログラム

鶏群最適化アルゴリズムに基づいて線形計画問題を解くための 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
。。。。。。。。。。。。略

おすすめ

転載: blog.csdn.net/weixin_47365903/article/details/125551711