ゴールドラッシュオプティマイザーのアイデアに基づいて改良されたハイイロオオカミアルゴリズム

まず第一に、このアルゴリズムは、作者がゴールド ラッシュ オプティマイザー アルゴリズムを借用して改良したハイイロオオカミ アルゴリズムであることを明記しておく必要があります。これを行うための参考文献はなく、純粋に作者が独自に改良したものです。

友人はバックグラウンドで次のようなメッセージを残すことがよくあります。

著者が改良したアルゴリズムを論文執筆に使用できるでしょうか?

答えは「もちろん!」です。

私の記事が論文執筆の助けになれば、それは著者の光栄です。

Gold Rush Optimizer を選択した理由については、前回の号で Gold Rush Optimizer を紹介したときに、このアルゴリズムの多くの式が Gray Wolf アルゴリズムに非常に似ているが、その効果は Gray Wolf アルゴリズムよりも優れていることに著者は気づきました。そこで今日は、Gold Rush Optimizer のアイデアのいくつかから学び、ハイイロオオカミのアルゴリズムを改善しましょう。

原理を詳しく解説

強調しておきますが、このプログラムの改善点は複雑ではなく、初心者にも適しています。このプログラムはアルゴリズムの複雑さを増加させず、フィットネス関数はサイクルごとに 1 回だけ呼び出されます。高効率!

改善点は 4 つあります。

改善点1:カオスマッピング;

この改善では、テント カオス マッピングを使用します。

改善点2:収束率の向上。

93aa311086a09d11732e09b661f3bb90.png

改善点 3: 金採掘最適化アルゴリズムの金探鉱者の金鉱山への移動式を利用して、ハイイロオオカミアルゴリズムのアルファオオカミを更新します。

06c70361356da99a6af445334c69bc26.png

改善点4、X2の更新式を改善

4263bc26d1e981c8692b8dde3e51349f.png

結果表示

GGWO はこの記事の改良されたアルゴリズムです。より適切な名前を付けることもできます。

12960b9142975cff7b5b91ed19af5d79.jpeg

a2994b5b9f3493c9ef806ccca70c6ed9.jpeg

7f3760fc3c5836228bbd3ac7ddcfb1c5.jpeg

35474d40c726929305d62a31980c5bd5.jpeg

de1800c32359545e812af16633b5e7b8.jpeg

コード表示

clear
clc
close all
number='F10'; %选定优化函数,自行替换:F1~F23
[lower_bound,upper_bound,variables_no,fobj]=CEC2005(number);  % [lb,ub,D,y]:下界、上界、维度、目标函数表达式
pop_size=50;                      % population members 
max_iter=1000;                  % maximum number of iteration
%% GWO
[Best_score,Best_pos,GWO_cg_curve]=GWO(pop_size,max_iter,lower_bound,upper_bound,variables_no,fobj);
display(['The best optimal value of the objective funciton found by GWO  for ' [num2str(number)],'  is : ', num2str(Best_score)]);
fprintf ('Best solution obtained by GWO: %s\n', num2str(Best_pos,'%e  '));
%% GGWO(改进的灰狼算法)
[Best_score,Best_pos,GGWO_cg_curve]=GGWO(pop_size,max_iter,lower_bound,upper_bound,variables_no,fobj);
display(['The best optimal value of the objective funciton found by GGWO  for ' [num2str(number)],'  is : ', num2str(Best_score)]);
fprintf ('Best solution obtained by GGWO: %s\n', num2str(Best_pos,'%e  '));
 %% Figure
figure1 = figure('Color',[1 1 1]);
G1=subplot(1,2,1,'Parent',figure1);
func_plot(number)
title(number)
xlabel('x')
ylabel('y')
zlabel('z')
subplot(1,2,2)
G2=subplot(1,2,2,'Parent',figure1);
CNT=50;
k=round(linspace(1,max_iter,CNT)); %随机选CNT个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:max_iter;
if ~strcmp(number,'F16')&&~strcmp(number,'F9')&&~strcmp(number,'F11')  %这里是因为这几个函数收敛太快,不适用于semilogy,直接plot
    semilogy(iter(k),GWO_cg_curve(k),'m-*','linewidth',1);
    hold on
    semilogy(iter(k),GGWO_cg_curve(k),'k-o','linewidth',1);
    
else
    plot(iter(k),GWO_cg_curve(k),'m-*','linewidth',1);
    hold on
    plot(iter(k),GGWO_cg_curve(k),'k-o','linewidth',1);
   
end
grid on;
title('收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
box on
legend('GWO','GGWO')
set (gcf,'position', [300,300,800,330])

完全なコードを取得し、バックグラウンドでキーワードを返信する方法。キーワード:

GGWO

おすすめ

転載: blog.csdn.net/woaipythonmeme/article/details/132680696