نقل قول:
نوشته اصلي بوسيله بهنام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]
یعنی اگر هم از این مقادیر بگذره ، در نهایت به مقدار همان مرزی که گذشته تبدیل می شه