بهینه سازی تابع egg holder با الگوریتم گرگ خاکستری
در این ساعت از مطلب دی ال قصد داریم به صورت پروژه محور الگوریتم گرگ خاکستری را به شما آموزش دهیم.ما برای این کار بهینه سازی تابع egg holder با الگوریتم بهینه سازی گرگ خاکستری را انتخاب کرده ایم.
بهینه سازی تابع egg holder با الگوریتم گرگ خاکستری
تابع egg holder یا تابع نگهدارنده تخم مرغ
رابطهی ۱ نشان دهنده فرمول ریاضی تابع egg holder میباشد:
همانگونه که از رابطه ۱ پیداست این تابع یک تابع دو متغیره میباشد، که محدوده تغییرات این متغیرها در بازه (۵۱۲و۵۱۲-) میباشد. نکتهای که باید به آن توجه کرد این است که این یک تابع سخت میباشد، چرا دارای تعداد بیشماری بهینه محلی میباشد.
نمودار این تابع در شکل زیر آمده است:
الگوریتم بهینه سازی گرگ خاکستری
برای یادگیری الگوریتم گرگ خاکستری یا الگوریتم GWO اینجا کلیک کنید.
مراحل پیاده سازی و کد نویسی :
گام یک ⇐ پیاده سازی تابع egg holder در متلب:
function [y] = egg(xx)
x1 = xx(1);
x2 = xx(2);
Temp1 = -(x2+47) * sin(sqrt(abs(x2+x1/2+47)));
Temp2 = -x1 * sin(sqrt(abs(x1-(x2+47))));
y = Temp1 + Temp2;
end
خط ۳: تعیین ورودی اول
خط ۴: تعیین ورودی دوم
خط ۵ تا ۷: محاسبه مقدار تابع در نقطه x1 و x2 و ارسال آن به خروجی
گام دوم ⇐ پیاده سازی الگوریتم گرگ خاکستری GWO برای بهینه سازی تابع egg holder
توضیح برنامه فایل MainProgram
clc
clear all
close all
%%
R=GWO();
این برنامه برنامهی اصلی است و باید اجرا گردد. این برنامه فقط تابع GWO را بدون هیچ ورودی فراخوانی میکند. خروجی GWO که در متغیر R قرار میگیرد به صورت زیر است:
R.ObjectVale
مقدار جواب بهینه که در نقطه ی بهینه به دست آمده است.
R.Pos
نقطه ای که تابع در آن جواب بهینه دارد
توضیح برنامه GWO():
این برنامه، برنامهی اصلی GWO است که بر اساس الگوریتم بهینه سازی گرگ خاکستری تابع egg holder رو بهینه میکند.
function R=GWO( )
%UNTITLED7 Summary of this function goes here
% Detailed explanation goes here
dim=2;
Ub=512;
lb=-512;
MG=1000;
% initialize alpha, beta, and delta_pos
Alpha_pos=zeros(1,dim);
Alpha_score=inf; %change this to -inf for maximization problems
Beta_pos=zeros(1,dim);
Beta_score=inf; %change this to -inf for maximization problems
Delta_pos=zeros(1,dim);
Delta_score=inf; %change this to -inf for maximization problems
PZ=100; % Population Size
Positions=rand(PZ,dim)*(Ub-lb)+lb;
%%
Convergence_curv=[];
Gen=0;% Loop counter
while Gen< MG
for i=1:size(Positions,1)
fitness=egg(Positions(i,:));%Power(Positions(i,:));
% Update Alpha, Beta, and Delta
if fitness<Alpha_score
Alpha_score=fitness; % Update alpha
Alpha_pos=Positions(i,:);
end
if fitness>Alpha_score && fitness<Beta_score
Beta_score=fitness; % Update beta
Beta_pos=Positions(i,:);
end
if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score
Delta_score=fitness; % Update delta
Delta_pos=Positions(i,:);
end
end
a=2-Gen*((2)/MG); % a decreases linearly fron 2 to 0
% Update the Position of search agents including omegas
for i=1:size(Positions,1)
for j=1:size(Positions,2)
r1=rand(); % r1 is a random number in [0,1]
r2=rand(); % r2 is a random number in [0,1]
A1=2*a*r1-a; % Equation (3.3)
C1=2*r2; % Equation (3.4)
D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1
r1=rand();
r2=rand();
A2=2*a*r1-a; % Equation (3.3)
C2=2*r2; % Equation (3.4)
D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2
X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2
r1=rand();
r2=rand();
A3=2*a*r1-a; % Equation (3.3)
C3=2*r2; % Equation (3.4)
D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3
Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
end
Positions(i,:)=min( Positions(i,:),Ub);
Positions(i,:)=max( Positions(i,:),lb);
end
Convergence_curv=[Convergence_curv Alpha_score];
%%
pause(0.01)
plot(Convergence_curv,'g');
xlim([1 MG])
hold on
xlabel(sprintf('Generation= %d',Gen))
ylabel('Accuracy')
title(sprintf('Population Fitness; Best Fitness=%f ',Convergence_curv(end)));
%%
Gen=Gen+1;
end
%% Result
R.ObjectVale=Alpha_score;
R.Pos=Alpha_pos;
end
خط ۴: تعیین طول هر عامل یا گرگ ، با توجه به اینکه تابع egg holder دارای دو ورودی است لذا طول هر عامل برابر ۲ در نظر گرفته شده است (برای هر مساله مختص آن مساله است و باید متناسب آن مساله تعیین شود).
خط ۵ و ۶: تعیین حد بالا و پایین مقادیر عاملها بر اساس تعریف تابع egg برای هر مساله مختص آن مساله است و باید متناسب آن مساله تعیین شود).
خط ۷: حداکثر تعدادتکرار GWO ( توسط برنامه نویس تعیین میگردد و مقداری دلخواه و منطقی باید باشد).
خط ۹: تعریف گرگ Alpha یا گرگ سر دسته (آموزش الگوریتم گرگ خاکستری GWO با دقت خوانده شود)
خط ۱۰: تعیین مقدار اولیه امتیاز گرگ alpha که در برای مسائل کمینه سازی inf یا مثبت بی نهایت در نظر گرفته میشود
خط ۱۱: تعیین موقعیت گرگ beta
حط ۱۲: تعیین مقدار اولیه امتیاز گرگ beta که در برای مسائل کمینه سازی inf یا مثبت بی نهایت در نظر گرفته میشود
خط ۱۳: تعیین موقعیت گرگ Delta
خط ۱۴: تعیین مقدار اولیه امتیاز گرگ Delta که در برای مسائل کمینه سازی inf یا مثبت بی نهایت در نظر گرفته میشود
خط ۱۵: تعیین تعداد گرگها ( توسط برنامه نویس تعیین میگردد و مقداری دلخواه و منطقی باید باشد).
خط ۱۶: تعریف جمعیت اولیه به صورت تصادفی در محدوده مجاز تابع egg()
خط ۱۸: تعریف آرایه برای ذخیره مقدار امتیاز گرگ آلفا در هر تکرار
خط ۱۹: شمارنده تعداد تکرار الگوریتم GWO
خط ۲۰: بر اساس این حلقه مادامی که Gen مقدارش از MG کمتر باشد الگوریتم گرگ خاکستری GWO اجرا میگردد.
خط ۲۲ و ۲۳: محاسبه برازندگی گرگ شماره i
خط ۲۵ تا ۲۸: بروز رسانی گرگ alpha
خط ۳۰ تا ۳۳: بروز رسانی گرگ beta
خط ۳۵ تا ۳۸: بروزرسانی گرگ delta
در حلقه for بالا مقدار امتیاز هر گرگ محاسبه میگردد و گرگهای برتر در صورت برقراری شرط بروز رسانی میگردد.
خط ۴۱: کاهش خطی مقدار a بر اساس تعداد تکرارها
خط ۴۴ تا ۷۶: در حلقه بالا موقعیت تمامی گرگهای موجود در دسته (جمعیت بروز رسانی میگردد). این بروز رسانی بر اساس میانگین بروز رسانیهای گرگهای برتر صورت میگیرد.
خط ۷۷ و ۸۷: چک کردن محدودهی گرگهای جدید ایجاد شده
خط ۸۱ تا ۸۹: رسم نمودار بروز رسانی
خط ۹۱: افزایش یک واحدی تعداد تکرار الگوریتم GWO
بر اساس اجرای کد بالا نتیجه زیر حاصل شد (توجه شود که این نتایج برای هر تکرار متفاوت است (خواهد بود)).
ObjectVale: -894.5789
[Pos: [-465.7134 , 385.7203
فرایند بهینه سازی (مقدار امتیاز گرگ آلفا در هر تکرار) :
نکته:
کارشناسان وب سایت MATLABDL قادر به انجام پروژه ، تحقیق و مقاله در زمینه های مشابه نیز می باشند.
حجم : ۲ کیلوبایت
منبع : مطلب دی ال
رمز فایل : www.matlabdl.com
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.