まず第一に、このアルゴリズムは、作者がゴールド ラッシュ オプティマイザー アルゴリズムを借用して改良したハイイロオオカミ アルゴリズムであることを明記しておく必要があります。これを行うための参考文献はなく、純粋に作者が独自に改良したものです。
友人はバックグラウンドで次のようなメッセージを残すことがよくあります。
著者が改良したアルゴリズムを論文執筆に使用できるでしょうか?
答えは「もちろん!」です。
私の記事が論文執筆の助けになれば、それは著者の光栄です。
Gold Rush Optimizer を選択した理由については、前回の号で Gold Rush Optimizer を紹介したときに、このアルゴリズムの多くの式が Gray Wolf アルゴリズムに非常に似ているが、その効果は Gray Wolf アルゴリズムよりも優れていることに著者は気づきました。そこで今日は、Gold Rush Optimizer のアイデアのいくつかから学び、ハイイロオオカミのアルゴリズムを改善しましょう。
原理を詳しく解説
強調しておきますが、このプログラムの改善点は複雑ではなく、初心者にも適しています。このプログラムはアルゴリズムの複雑さを増加させず、フィットネス関数はサイクルごとに 1 回だけ呼び出されます。高効率!
改善点は 4 つあります。
改善点1:カオスマッピング;
この改善では、テント カオス マッピングを使用します。
改善点2:収束率の向上。
改善点 3: 金採掘最適化アルゴリズムの金探鉱者の金鉱山への移動式を利用して、ハイイロオオカミアルゴリズムのアルファオオカミを更新します。
改善点4、X2の更新式を改善
結果表示
GGWO はこの記事の改良されたアルゴリズムです。より適切な名前を付けることもできます。
コード表示
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