• درباره ی ما
  • قوانین سایت MATLABDL
  • تماس با ما

شماره تلگرام و واتساپ:  ۰۹۳۷۹۸۴۰۱۶۵  ساعت ۹ الی ۱۳ و ۱۶ الی ۲۱

مطلب دی ال
  • خانه
  • انجام پروژه
    • انجام پروژه متلب MATLAB
    • شبیه سازی مقاله
    • انجام پروژه داده کاوی
    • انجام پروژه پردازش تصویر
    • انجام پروژه شبکه عصبی
    • انجام پروژه الگوریتم ژنتیک
    • بهینه سازی با الگوریتم pso
    • انجام پروژه الگوریتم کلونی مورچگان
    • انجام پروژه الگوریتم گرگ خاکستری
    • انجام پروژه الگوریتم شبیه‌ سازی ذوب فلزات
    • انجام پروژه طبقه‌ بندی (classification)
    • انجام پروژه میکروکنترلر
  • پروژه ها
    • پروژه های آماده
    • پروژه آماده متلب
    • پروژه آماده برق
    • پروژه آماده کامپیوتر
    • پروژه آماده مکانیک
    • پروژه های پردازش تصویر
    • پروژه های پردازش متن
  • آکادمی مطلب دی ال
    • پایتون
    • متلب
    • سی پلاس پلاس
    • محاسبات نرم
      • الگوریتم‌های فراابتکاری
      • یادگیری ماشین ، داده‌کاوی و شناسایی آماری الگو
      • منطق فازی
    • پردازش تصویر
    • پردازش صوت و گفتار
    • سی شارپ
    • پایگاه داده
    • طراحی وب سایت
    • دیگر زبان های برنامه نویسی
    • شبکه
    • دیگر آموزش ها و مقالات
  • مطالب و دروس دانشگاهی
    • مهندسی کامپیوتر
    • مهندسی برق
  • پرداخت آنلاین
  • درخواست پروژه
  • دعوت به همکاری
  • منو منو
وبلاگ - آخرین اخبار
پیدا کردن کمینه تابع EggHolder با الگوریتم بهینه‌ سازی اجتماع ذرات

پیدا کردن کمینه تابع Egg Holder با الگوریتم بهینه‌ سازی اجتماع ذرات

25 شهریور 1398/0 دیدگاه /در آکادمی مطلب دی ال, الگوریتم‌های فراابتکاری, متلب, محاسبات نرم

پیدا کردن کمینه تابع Egg Holder با الگوریتم بهینه‌ سازی اجتماع ذرات ، در این لحظه از مطلب دی ال قصد داریم به صورت پروژه محور الگوریتم بهینه‌ سازی اجتماع ذرات را به شما آموزش دهیم.ما برای این کار بهینه سازی تابع Egg Holder با الگوریتم pso را انتخاب کرده ایم.

پیدا کردن کمینه تابع Egg Holder با الگوریتم بهینه‌ سازی اجتماع ذرات

امروزه روش های متنوعی برای حل مسائل بهینه سازی و یافتن مقدار بهینه وجود دارد. یکی از روش‌های قوی و کارا الگوریتم‌های تکاملی [ Evolutionary Algorithm ] می‌باشد. این الگوریتم‌ها بدون درگیر شدن با ذات مساله، مساله مورد نظر را بهینه می‌کنند که مزیت و برتری برای این روش ها محسوب می‌گردد.

هدف از انجام این پروژه پیدا کردن کمینه تابع نگه‌ دارنده تخم مرغ [ Egg Holder Function ] با استفاده از الگوریتم بهینه سازی اجتماع ذرات [ Particle Swarm Optimization ] می‌باشد.

برای این کار الگوریتم بهینه سازی اجتماع ذرات را در نرم افزار متلب پیاده سازی کرده و با استفاده از این کد و تعریف تابع هدف مناسب مقدار کمینه این تابع را پیدا می‎‌نماییم. 

برای این کار لازم است تابع هدف مناسب تعریف گردد و پارامترهای الگوریتم بهینه سازی اجتماع ذرات نیز تعیین گردند. در این تحقیق با اعمال تغییرات روی پارامترهای الگوریتم PSO سعی می‌شود بهترین ترکیب از مقادیر این پارامترها پیدا گشته ،و در تکرار کمتر به جواب بهینه دست یابیم.  

لذا در ادامه ی این آموزش در بخش دوم به توضیح در مورد تابع Egg Holder می‌پردازیم. سپس در قسمت سوم در مورد الگوریتم PSO توضیحات مختصری داده خواهد شد، در قسمت چهارم  اعمال الگوریتم PSO روی تابع Egg Holder آورده می‌شود و در بخش نهایی کد برنامه توضیح داده خواهد شد.با ما هراه باشید.

تابع Egg Holder

رابطه‌ی ۱ نشان دهنده فرمول ریاضی تابع Egg Holder می‌باشد:

بهینه سازی تابع نگهدارنده تخم مرغ

همانگونه که از رابطه ۱ پیداست این تابع یک تابع دو متغیره  می‌باشد ، که محدوده تغییرات این متغیرها در بازه (۵۱۲ و۵۱۲-)  می‌باشد. نکته ای که باید به آن توجه کرد این است که این یک تابع سخت می‌باشد ، چرا دارای تعداد بی‌شماری بهینه محلی می‌باشد.

قطعه کد زیر در متلب برای محاسبه مقدار تابع در نقطه p = (x1,x2) استفاده می‌شود:

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;

که در آن sin مقدار تابع سینوس ورودی و sqrt نیز ریشه دوم ورودی اش را محاسبه می کند.

نمودار این تابع در شکل زیر آمده است:

نمودار تابع نگه دارنده تخم مرغ
نمودار تابع نگه‌ دارنده تخم مرغ

الگوریتم بهینه‌ سازی اجتماع ذرات

برای یادگیری الگوریتم بهینه‌ سازی اجتماع ذرات اینجا کلیک کنید.

بهینه سازی تابع Egg Holder یا تابع نگه دارنده تخم مرغ با استفاده از الگوریتم PSO

در این قسمت نتایج پیاده سازی PSO آورده می‌شود. بر این اساس پارامترهای PSO به صورت زیر مقدار دهی شده اند.

MaxVelocityWC2C1پارامتر
۰٫۱ * (value)1.432مقدار

در این حالت نمودار همگرایی به صورت زیر بوده است:

پیدا کردن کمینه تابع EggHolder با الگوریتم بهینه‌ سازی اجتماع ذرات
پیدا کردن کمینه تابع Egg Holder با الگوریتم بهینه‌ سازی اجتماع ذرات

همچنین بخوانید: بهینه سازی تابع egg holder با الگوریتم گرگ خاکستری

مراحل پیاده سازی و کد نویسی :

در این قسمت کد PSO توضیح داده می‌شود. برای این پروژه دو فایل در متلب با نام های pso1.m ، PSO.m ، egg.m و Plot.m ایجاد کنید. که در pso1.m کدهای مربوط به تنظیم پارامترها صورت می‌گیرد و PSO.m کدهای پیاده‌ سازی الگوریتم بهینه سازی اجتماع ذرات قرار می گیرد.

کدهای زیر را در فایل egg.m قرار دهید:

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

این کدها در ابتدای این آموزش و در بخش تابع Egg Holder توضیح داده شد.

کدهای زیر را در فایل pso1.m قرار دهید:

clc;
clear;
close all;

%% Problem Definiton

problem.CostFunction = @(x) egg(x);  % Cost Function
problem.nVar = 2;       % Number of Unknown (Decision) Variables
problem.VarMin =  -512;  % Lower Bound of Decision Variables
problem.VarMax =  512;   % Upper Bound of Decision Variables

%% Parameters of PSO

params.MaxIt = 1000;                          % Maximum Number of Iterations
params.nPop = 25;                            % Population Size (Swarm Size)                                

% Intertia Coefficient                         
% Damping Ratio of Inertia Coefficient
params.c1 = 2;                               % Personal Acceleration Coefficient
params.c2 = 3;                               % Social Acceleration Coefficient
params.w = 1.4;
params.MaxVelocity=0.1*(problem.VarMax-problem.VarMin);      % maxVelocity of particles
params.MinVelocity=-0.1*(problem.VarMax-problem.VarMin);     % minVelocity of particles
params.ShowIterInfo = true;                  % Flag for Showing Iteration Informatin
params.wdamp = 0.99;
%% Calling PSO

out = PSO(problem, params);

BestSol = out.BestSol;
BestCosts = out.BestCosts;

%% Results

figure;
% plot(BestCosts, 'LineWidth', 2);
semilogy(BestCosts, 'LineWidth', 2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;

خط ۷: تعریف تابع ارزیابی که همان تابع «نگه‌دارنده تخم‌مرغ» می‌باشد.
خط ۸: تعداد متغیرها که برابر ۲ می‌باشد.
خط ۹ و ۱۰: تعریف حد بالا و پایین متغیرها.
خط ۱۴ تا ۲۵: در این قسمت به ترتیب حداکثر تعداد تکرار، تعداد ذرات موجود در الگوریتم PSO ،ضریب پارامتر شخصی مورد استفاده در فرمول ۲ در ، ضریب پارامتر اجتماعی در فرمول ۲ ،مقدار وزن اینرسی، حداکثر سرعت ، حداقل سرعت و نرخ کاهش مقدار وزن اینرسی معین شده است. که با تغییرات در این متغیرها آزمایشات صورت گرفته است.
خط ۲۸: در این قسمت تابع PSO.m فراخوانی شده که ورودی آن مسئله مورد بحث و پارامترهای PSO می‌باشد.

کدهای زیر را در فایل PSO.m قرار دهید:

function out = PSO(problem, params)
    %% Problem Definiton

    CostFunction = problem.CostFunction;  % Cost Function

    nVar = problem.nVar;        % Number of Unknown (Decision) Variables

    VarSize = [1 nVar];         % Matrix Size of Decision Variables

    VarMin = problem.VarMin;	% Lower Bound of Decision Variables
    VarMax = problem.VarMax;    % Upper Bound of Decision Variables
    %% Parameters of PSO
    MaxIt = params.MaxIt;   % Maximum Number of Iterations
    nPop = params.nPop;     % Population Size (Swarm Size)
    w = params.w;           % Intertia Coefficient
    wdamp = params.wdamp;   % Damping Ratio of Inertia Coefficient
    c1 = params.c1;         % Personal Acceleration Coefficient
    c2 = params.c2;         % Social Acceleration Coefficient
    % The Flag for Showing Iteration Information
    ShowIterInfo = params.ShowIterInfo;    
    MaxVelocity =params.MaxVelocity; 
    MinVelocity =params.MinVelocity; 
   %% Initialization
    % The Particle Template
    empty_particle.Position = [];
    empty_particle.Velocity = [];
    empty_particle.Cost = [];
    empty_particle.Best.Position = [];
    empty_particle.Best.Cost = [];
    % Create Population Array
    particle = repmat(empty_particle, nPop, 1);
    % Initialize Global Best
    GlobalBest.Cost = inf;
    % Initialize Population Members
    for i=1:nPop

        % Generate Random Solution
        particle(i).Position = unifrnd(VarMin, VarMax, VarSize);

        % Initialize Velocity
        particle(i).Velocity = zeros(VarSize);

        % Evaluation
        particle(i).Cost = CostFunction(particle(i).Position);

        % Update the Personal Best
        particle(i).Best.Position = particle(i).Position;
        particle(i).Best.Cost = particle(i).Cost;

        % Update Global Best
        if particle(i).Best.Cost < GlobalBest.Cost
            GlobalBest = particle(i).Best;
        end

    end

    % Array to Hold Best Cost Value on Each Iteration
    BestCosts = zeros(MaxIt, 1);


    %% Main Loop of PSO

    for it=1:MaxIt

        for i=1:nPop

            % Update Velocity
            particle(i).Velocity = w*particle(i).Velocity ...
                + c1*rand(VarSize).*(particle(i).Best.Position - particle(i).Position) ...
                + c2*rand(VarSize).*(GlobalBest.Position - particle(i).Position);

            % Apply Velocity Limits
            particle(i).Velocity = max(particle(i).Velocity, MinVelocity);
            particle(i).Velocity = min(particle(i).Velocity, MaxVelocity);
            
            % Update Position
            particle(i).Position = particle(i).Position + particle(i).Velocity;
            
            % Apply Lower and Upper Bound Limits
            particle(i).Position = max(particle(i).Position, VarMin);
            particle(i).Position = min(particle(i).Position, VarMax);

            % Evaluation
            particle(i).Cost = CostFunction(particle(i).Position);

            % Update Personal Best
            if particle(i).Cost < particle(i).Best.Cost

                particle(i).Best.Position = particle(i).Position;
                particle(i).Best.Cost = particle(i).Cost;

                % Update Global Best
                if particle(i).Best.Cost < GlobalBest.Cost
                    GlobalBest = particle(i).Best;
                end            

            end

        end
        % Store the Best Cost Value
        BestCosts(it) = GlobalBest.Cost;
        
        %% 
        % Display Iteration Information
        if ShowIterInfo
            disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]);
        end

        % Damping Inertia Coefficient
        w = w * wdamp;

    end
    
    out.pop = particle;
    out.BestSol = GlobalBest;
    out.BestCosts = BestCosts;
    
end

تا خط ۳۱ این برنامه مقدارهای اولیه که در برنامه pso1.m تعریف شده بودند در متغیرهای مناسب قرار می‌گیرند. از خط ۳۱ تا خط ۷۴ جمعیت اولیه تولید شده و سرعت اولیه ذرات نیز مشخص شد. جمعیت اولیه و سرعت اولیه به صورت تصادفی مقداردهی شده اند.

خط ۲۵ تا ۲۹: هر کدام از متغیرها به ترتیب بیان گر موقعیت فعلی ذره، سرعت فعلی ذره، مقدار تابع برازندگی ذره، بهترین موقعیتی که ذره تا بحال دیده است (جهت استفاده در ضریب تاثیر شخصی (فرمول ۲)) و برازندگی بهترین حالت می‌باشند.

خط ۳۱: ساخت جمعیت اولیه به صورت تابعی خالی که در حلقه for، که در ادامه می‌آید به صورت تصادفی مقدار دهی می‌گردد.
خط ۳۳: بهترین برازندگی مشاهده شده در این متغیر ریخته می‌شود چون هدف کمینه سازی است در ابتدا مقدار آن  برابر Inf قرار داده می‌شود.
خط ۳۸: تولید یک ذره به صورت توزیع یکنواخت در محدوده بالا و پایین متغیرها، که در این مساله برابر ۵۱۲ و ۵۱۲- می‌باشد.
خط ۴۱: تعیین سرعت ذرات که در ابتدا برابر صفر می‌باشد.
خط ۴۴: ارزیابی ذرات بر اساس تابع ارزیابی (نگهدارنده تخم مرغ).
خط ۴۷ و ۴۸: تعیین بهترین حالت مشاهده شده هر شخص تاکنون.
خط ۵۱ تا ۵۳: تعیین و بروز رسانی بهترین جوابی که تاکنون مشاهده شده است.

در ادامه به حلقه اصلی برنامه می رسیم که به تعداد حداکثر تکرار مجاز، تکرار می‌شود. که خود شامل حلقه‌ای است که در هر تکرار به تعداد جمعیت تکرار شده، و موقعیت و سرعت ذرات را به روز رسانی می‌کند.

خط ۶۸ تا ۷۰: بروز رسانی سرعت ذرات بر اساس فرمول ۲
خط ۷۳ و ۷۴: کنترل اینکه سرعت ذرات که در قسمت قبل بروزرسانی شد، از محدوده تعیین شده برای سرعت تجاوز نکند.
خط ۷۷: بروز رسانی موقعیت ذره بر اساس سرعتی که بر اساس فرمول شماره ۲ (بروز رسانی سرعت ذرات) به دست آمده است.
خط ۸۰ تا ۸۱: چک کردن خارج نشدن ذرات از محدوده تغییرات تعریف شده.
خط ۸۴: ارزیابی ذره در موقعیت جدید.
خط ۸۷ تا ۹۷: بروز رسانی مقادیر بهترین مقادیر مشاهده شده هر ذره تا تکرار کنونی و بهترین موقعیتی که کل ذرات تا بدین جای کار مشاهده کردند.
خط ۱۰۱: تعیین بهترین مقداری که تاکنون مشاهده شده است برای اینکه در نمودار نهایی چاپ گردد.
خط ۱۱۰: کاهش دادن مقدار وزن اینرسی با ضریب wdamp که در این مساله برابر ۰٫۹۹ در نظر گرفته شده است.

کدهای زیر را در فایل Plot.m قرار دهید:

clc
clear all
close all
%% [-۶۵٫۵۳۶, ۶۵٫۵۳۶
x1=-512:1:512; 
x2=-512:1:512;
for i=1:length(x1)
    
    for j=1:length(x2)
y(i,j)=egg([x1(i) x2(j)]);
    end
end
meshc(x1,x2,y) % Plot 3-D function
colorbar
xlabel('x1')
ylabel('x2')
zlabel('y')

همچنین بخوانید: کتاب بهینه سازی ازدحام ذرات ، کاملترین مرجع الگوریتم PSO

در این آموزش سعی شده است، قسمت‌های اصلی کد مورد استفاده توضیح داده شود.امیداورم که این آموزش برای شما مفید بوده باشد.



برچسب ها: الگوریتم PSO, الگوریتم بهینه‌ سازی اجتماع ذرات, بهینه سازی تابع EggHolder, پیدا کردن کمینه تابع EggHolder, تابع EggHolder
اشتراک این مطلب
  • اشتراک در Facebook
  • اشتراک در Twitter
  • Share on WhatsApp
  • اشتراک در LinkedIn
شاید این موارد نیز مورد علاقه شما باشد
تحلیل مقایسه ای از الگوریتم های ABC و PSO در طراحی یک کنترل کننده PID فازی کسری و پیاده سازی آن بر روی موتور DC تحلیل مقایسه ای از الگوریتم های هوش جمعی کلونی زنبور مصنوعی ABC و بهینه سازی گروهی ذرات PSO
شبیه سازی مقاله بهبود کارایی خوشه بندی بوسیله ترکیب PSO و الگوریتم k-means با متلب بهبود کارایی خوشه بندی بوسیله ترکیب PSO و الگوریتم k-means
بهینه سازی ازدحام ذرات ، کاملترین مرجع الگوریتم PSO کتاب بهینه سازی ازدحام ذرات ، کاملترین مرجع الگوریتم PSO
بهبود خوشه بندی داده ها به کمک منطق فازی و الگوریتم بهینه سازی اجتماع ذرات بهبود خوشه بندی داده ها به کمک منطق فازی و الگوریتم بهینه سازی اجتماع ذرات
بهینه سازی تابع GOLDSTEIN-PRICE با الگوریتم PSO بهینه سازی تابع GOLDSTEIN-PRICE با الگوریتم PSO
پروژه ترکیب الگوریتم کلونی مورچه ، الگوریتم ژنتیک و PSO برای حل مساله TSP در متلب پروژه ترکیب الگوریتم کلونی مورچه ، الگوریتم ژنتیک و PSO برای حل مسئله TSP در متلب
0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

سبد خرید

تعداد موارد موجود در سبدخرید: 0

  • سبد خریدتان خالی است.
  • کل: 0 RIAL
  • پرداخت

خبرنامه ایمیلی مطلب دی ال

آموزش زبان های برنامه نویسی

آموزش زبان های برنامه نویسی

آموزش زبان های برنامه نویسی

آخرین مطالب

  • کد نویسی الگوریتم پس انتشار خطا یا الگوریتم انتشار معکوس در نرم افزار متلبالگوریتم پس انتشار خطا یا انتشار معکوس در نرم افزار متلب5 خرداد 1400 - 17:31
  • پروژه تعلیم شبکه های عصبی پرسپترون و آدالاین در نرم افزار متلبپروژه تعلیم شبکه های عصبی پرسپترون و آدالاین در نرم افزار متلب5 خرداد 1400 - 00:35
  • پروژه پردازش گفتار با نرم افزار متلبپروژه پردازش گفتار با نرم افزار متلب2 خرداد 1400 - 19:37
  • پروژه تشخیص احساسات از روی صدا در نرم افزار متلبپروژه تشخیص احساسات از روی صدا در نرم افزار متلب1 خرداد 1400 - 04:22
  • پیاده سازی پروژه برچسب گذاری اجزاء گفتار یا Part of Speech Tagging در نرم افزار متلبپروژه Part of Speech Tagging (پیاده سازی در نرم افزار متلب)19 اردیبهشت 1400 - 03:20

آخرین دیدگاه

  • متین قربانی در حذف آیتم‌های تکراری در یک لیست در پایتون
  • محمد در پروژه نرم افزار صندوق قرض الحسنه با سی شارپ
  • محمد حسین در دانلود پروژه ساعت دیجیتال با میکروکنترلر avr
  • مدیر سایت در پروژه پیاده سازی یک سیستم توصیه گر ترکیبی با متلب
  • امیر در پروژه پیاده سازی یک سیستم توصیه گر ترکیبی با متلب

مطلب دی ال را در شبکه های اجتماعی دنبال کنید

خانه |پرداخت آنلاین | دعوت به همکاری | قوانین سایت | درباره ما | تماس با ما

تمامي حقوق مادي و معنوي اين وب سايت نزد مطلب دی ال محفوظ بوده و هر گونه کپي برداري از مطالب پيگرد قانوني به همراه دارد!

طراح سایت : ProgRun

تشخیص و شمارش خودروها در یک ویدئو با متلبتشخیص و شمارش خودروها در یک ویدئو با متلببهینه سازی تابع GOLDSTEIN-PRICE با الگوریتم PSOبهینه سازی تابع GOLDSTEIN-PRICE با الگوریتم PSO
رفتن به بالا