نمايش پست تنها
قديمي ۰۲-۹-۱۳۹۰, ۰۸:۲۴ قبل از ظهر   #2 (لینک دائم)
samane_89 Male
عضو فعال
 
آواتار samane_89
 
تاريخ عضويت: آبان ۱۳۸۹
پست ها: 12
تشكرها: 151
7 تشكر در 3 پست
پيش فرض

نقل قول:
نوشته اصلي بوسيله بهنام329 نمايش پست
من تحلیل قطعه کد زیر رو می خوام (چه جوری کار می کنه)خیلی سریع و اینکه چگونه می توان بهینه تر کرد
كد:
gbest(it,:)=gbest(it-1,:);
        gbestcost(it)=gbestcost(it-1);
        for i=1:npop
            particle(i).velocity=w*particle(i).velocity...
                                +c1*rand*(particle(i).pbest-particle(i).position)...
                                +c2*rand*(gbest(it,:)-particle(i).position);
                            
            particle(i).velocity=min(max(particle(i).velocity,-vmax),vmax);
            
            particle(i).position=particle(i).position+particle(i).velocity;
            
            particle(i).position=min(max(particle(i).position,xmin),xmax);
            
            particle(i).cost=Cost(particle(i).position);
اگه منظورتون اینه که هر دستور چی کار می کنه ؟ در یه حد مختصر می دونم

سرعت و موقعیت هر ذره تو جمعیت باید update شه و هر ذره هم نشاندهنده ی یک راه حل در فضای مسئله ی شماست.
تو فرمول update سرعت، شما با پارامتر وزن اینرسی (w) مشخص می کنید که سرعت قبلی ذره چقدر رو سرعت جدید اثر بگذاره
دو تا rand هم که برای ایجاد پراکندگی تو جمعیت
c1 : ضریبی که مشخص می کند ذره چقدر از بهترین موقعیتی که خودش تا حالا داشته استفاده کنه : pbest
c2 : ضریبی که مشخص می کند ذره چقدر از موقعیت بهترین ذره در جمعیت استفاده کنه: gbest

در نهایت موقعیت و سرعت جدید بدست می آید
فقط باید توجه کنین که موقعیت و سرعت از مرزهای تعریف شده تجاوز نمی کنه
[xmin,xmax] [vmin,vmax]
یعنی اگر هم از این مقادیر بگذره ، در نهایت به مقدار همان مرزی که گذشته تبدیل می شه
__________________
سالم ٬آرام ٬در پناه خدا...
samane_89 آفلاين است   پاسخ با نقل قول
از samane_89 تشكر كرده اند:
Astaraki (۰۲-۹-۱۳۹۰), mehdinajafinia (۰۲-۹-۱۳۹۰), mohammad100 (۰۳-۳-۱۳۹۱), ramin132000 (۰۲-۹-۱۳۹۰), بهنام329 (۰۲-۱۰-۱۳۹۰)