前号では、2023 年の最新の最適化アルゴリズムである Subtractive Optimizer Algorithm (SABO) が非常に優れた結果を達成しました。また、その公式原理が非常に単純であるため、インテリジェントな最適化アルゴリズムを初めて使用する人により適しています。
今日の記事では、ゴールデン サイン減算オプティマイザー (GSABO)について説明し、将来インテリジェント アルゴリズムを改善するための一般的で実現可能なアイデアを提供します。このアイデアは、他のインテリジェント最適化アルゴリズムも改善できます。
効果を示すために、最初に結果の写真をいくつか示します。このうち、SABO は減算最適化アルゴリズムであり、本論文で改善するアルゴリズム自体でもある、DBO アルゴリズムはフンコロガシ最適化アルゴリズムであり、最適化効果に優れたアルゴリズムである、GWO はハイイロオオカミアルゴリズム、これは頻繁に使用されます; GSABO アルゴリズムはfusion gold 正弦波減算オプティマイザは、この記事の主役でもあります。
インテリジェント アルゴリズムをよく使用する友人は、CEC2005 関数テスト セットのテストにおいて、F5 および F8 関数がインテリジェント アルゴリズムに大きな課題をもたらすことを知っているはずです。このうち、F5 関数の理論的な最小値は 0、本論文の改良型 GSABO アルゴリズムの最適値は 6.19*e-06、そしてハイイロオオカミアルゴリズム (GWO)、フンコロガシ最適化アルゴリズムの最適値は 6.19*e-06 です。 (DBO)、および減法的オプティマイザー (SABO) のメリット値はすべて 27 前後ですが、これはほとんどのインテリジェントなアルゴリズムのボトルネックでもあり、ほとんどのブロガーがあえて投稿しない比較表でもあります。
もう一度 F8 関数を見てみると、F8 関数には複数のピークがあるため、インテリジェント アルゴリズムはこの関数を最適化する過程で局所最適に陥りやすいため、この関数はインテリジェントな最適化アルゴリズムにとって非常に困難であり、その理論的な最小値は:-12569.5。一般的なインテリジェント最適化アルゴリズムが良好に動作する場合、-7000 以上まで探索できますが、本論文で提案するゴールデンサインと融合した減法オプティマイザの F8 関数の最適値は -12569.4737 であり、理論値に非常に近い値です。そしてその収束は非常に速いです!
ここに添付されているのは、cec2005 関数の公式と対応する極値です。
改善の原則
ここでは改善の原則について簡単に説明します。より詳細な説明は、プログラムに移動して注意事項を参照してください。
この論文の改善アイデアは次のとおりです。
-
①10種類のカオスマッピング手法を用いて粒子を初期化する
この方法を使用すると、粒子に多様性を持たせることができ、アルゴリズムの収束を加速することができます。インテリジェントなアルゴリズムを改善するためのカオス マッピングの 10 の方法については、この記事を段階的に読んで詳細な説明をご覧ください。10個のカオスマップ最適化ハイイロオオカミアルゴリズムは、キー1つで切り替えることができ、すべての群れインテリジェンスアルゴリズムを最適化するために使用できます。ハイイロオオカミアルゴリズムは、導入する例として使用されます。
-
②Piecewise マッピングを使用してランダムな値を生成し、ri 値を置き換えます
元の SABO アルゴリズムの ri 値はランダムな値です。Piecewise マッピングによって生成されたランダムな値を ri 値の置き換えに使用すると、ランダムな値の分布が変化するため、アルゴリズム自体が平均差を求める際に粒子の多様性を高めるのに役立ちます。より均一です。将来、ランダムな値を含むアルゴリズムに遭遇した場合は、この方法を試してみるとよいでしょう。
-
③局所最適解からの粒子の飛び出しを助けるゴールデンサイン法を採用
SABO アルゴリズムでは、反復ごとに全体的な最適値を使用せず、更新の目的を達成するためにすべての粒子の位置を使用して減算平均を実行するため、粒子の初期位置が良好でない場合、非常に簡単に局所最適値に陥りやすく、これは F5 および F8 関数からも実証できる優れたソリューションです。
したがって、この論文の改善アイデアは、現在の反復で粒子の適合度値が変化しない場合、ゴールデン サイン アルゴリズムを使用して粒子の位置を更新するというものです。このようにすることで、適応度値の計算量があまり増加せず、大域最適化におけるゴールデンサインアルゴリズムの利点を利用して、SABOアルゴリズムが局所最適解から飛び出すのを助けることができる。この方法は、他のアルゴリズムを改善するための参考として誰もが使用することができ、奇跡的な効果をもたらすでしょう。さらにいくつかの詳細がコード内で 1 つずつマークされます。次にコードです。
メイン関数コード
%%
clear
clc
close all
number='F8'; %选定优化函数,自行替换:F1~F23
[lb,ub,dim,fobj]=CEC2005(number); % [lb,ub,D,y]:下界、上界、维度、目标函数表达式
%% 调用SABO算法
SearchAgents=30; % population members
Max_iterations=1000; % maximum number of iteration
numm = 11;
[Best_score,Best_pos,SABO_curve]=SABO(numm,SearchAgents,Max_iterations,lb,ub,dim,fobj); % Calculating the solution of the given problem using SABO
display(['The best optimal value of the objective funciton found by SABO for ' [num2str(number)],' is : ', num2str(Best_score)]);
fprintf ('Best solution obtained by SABO: %s\n', num2str(Best_pos,'%e '));
%% 调用DBO算法
[fMin , bestX, DBO_Convergence_curve ] = DBO(SearchAgents, Max_iterations,lb,ub,dim,fobj);
display(['The best optimal value of the objective funciton found by DBO for ' [num2str(number)],' is : ', num2str(fMin)]);
fprintf ('Best solution obtained by DBO: %s\n', num2str(bestX,'%e '));
%% 调用GWO算法
[Alpha_score,Alpha_pos,GWO_Convergence_curve]=GWO(SearchAgents,Max_iterations,lb,ub,dim,fobj);
display(['The best optimal value of the objective funciton found by GWO for ' [num2str(number)],' is : ', num2str(Alpha_score)]);
fprintf ('Best solution obtained by GWO: %s\n', num2str(Alpha_pos,'%e '));
%% 调用GSABO算法
numm = 2; %10种 混沌映射类型选择,1-10分别为,tent、Logistic、Cubic、chebyshev、Piecewise、sinusoidal、Sine,ICMIC, Circle,Bernoulli
[GBest_score,GBest_pos,GSABO_curve]=GSABO(numm,SearchAgents,Max_iterations,lb,ub,dim,fobj); % Calculating the solution of the given problem using SABO
display(['The best optimal value of the objective funciton found by GSABO for ' [num2str(number)],' is : ', num2str(GBest_score)]);
fprintf ('Best solution obtained by GSABO: %s\n', num2str(GBest_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=20;
k=round(linspace(1,Max_iterations,CNT)); %随机选CNT个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:Max_iterations;
if ~strcmp(number,'F16')&&~strcmp(number,'F9')&&~strcmp(number,'F11') %这里是因为这几个函数收敛太快,不适用于semilogy,直接plot
semilogy(iter(k),SABO_curve(k),'m-*','linewidth',1);
hold on
semilogy(iter(k),DBO_Convergence_curve(k),'b-^','linewidth',1);
hold on
semilogy(iter(k),GWO_Convergence_curve(k),'r->','linewidth',1);
hold on
semilogy(iter(k),GSABO_curve(k),'g-p','linewidth',1);
else
plot(iter(k),SABO_curve(k),'m-*','linewidth',1);
hold on
plot(iter(k),DBO_Convergence_curve(k),'b-^','linewidth',1);
hold on
plot(iter(k),GWO_Convergence_curve(k),'r->','linewidth',1);
hold on
plot(iter(k),GSABO_curve(k),'g-p','linewidth',1);
end
grid on;
title('收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
box on
legend('SABO','DBO','GWO','GSABO')
set (gcf,'position', [300,300,800,330])
下のカードのキーワードに返信してコードを取得し、キーワード: GSABO
記事が良いと思ったら、著者に「いいね!」をお願いします!ありがとう!