در دنیای هوش مصنوعی و بهینهسازی، الگوریتمهای مبتنی بر طبیعت جایگاه ویژهای دارند. یکی از الگوریتمهای نسبتاً جدید و قدرتمند در این زمینه، الگوریتم دسته ماهیهای مصنوعی یا Artificial Fish Swarm Algorithm (AFSA) است. این الگوریتم با الهام از رفتار اجتماعی ماهیها طراحی شده و کاربردهای گستردهای در مسائل بهینهسازی غیرخطی، ترکیبی و چندهدفه دارد.
در این مقاله، به معرفی کامل AFSA، نحوه عملکرد، مزایا، معایب، کاربردها و همچنین پیادهسازی اولیه آن خواهیم پرداخت.
الگوریتم AFSA چیست؟
الگوریتم دسته ماهیهای مصنوعی (AFSA) توسط Xiaolei Li در سال ۲۰۰۲ معرفی شد. این الگوریتم، مانند الگوریتمهای ژنتیک (GA) یا الگوریتم PSO، یک الگوریتم جستوجوی جمعی است که برای حل مسائل بهینهسازی پیچیده مورد استفاده قرار میگیرد.
الهامبخش طراحی الگوریتم دسته ماهیهای مصنوعی، رفتار هوشمندانه ماهیها در طبیعت است؛ مانند حرکت به سمت غذا، اجتناب از خطر و تشکیل گروه. ماهی مصنوعی Artificial Fish یا (AF) مفاهیم خارجی را از طریق بینایی درک میکند. X وضعیت فعلی AF است، Visual میدان دید بینایی است و Xv موقعیتی در میدان دید است که ماهی میخواهد به آنجا برود.
اگر وضعیت در موقعیت دیگر (Xv) بهتر از وضعیت فعلی باشد، ماهی یک گام در این جهت حرکت میکند و به وضعیت Xnext میرود. در غیر این صورت در میدان دید به گشت زنی ادامه میدهد. هر چه تعداد گشتزنی AF بیشتر باشد، دانش بیشتری در مورد وضعیت میدان دید به دست میآورد. مطمئناً لازم نیست ماهی کل وضعیتهای پیچیده یا نامتناهی را بررسی کند و یافتن چند بهینه محلی با کمی عدم قطعیت، به یافتن بهینه عمومی کمک میکند.
اگر (X=(x۱ , x2 , …,xn و (Xv=(x1v ., x2v , …, xnv باشد این فرآیند به شکل زیر بیان میشود:
که در آن Rand اعداد تصادفی در بازه ۰ و ۱ تولید میکند، Step طول گام است.xi متغیر بهینه سازی، و n تعداد متغیرها است. مدل AF در الگوریتم دسته ماهی های مصنوعی دو بخش دارد:
- متغیرها
- توابع
متغیرها: X که موقعیت فعلی AF است، Step که طول گام حرکت است، Visual که میدان دید را نشان میدهد، try_number که تعداد تکرار است و δ_s که فاکتور شلوغی است مابین صفر و یک.
توابع: ماهی معمولاً در مکانی میماند که غذای زیادی در آن موجود باشد، پس ما رفتارهای ماهی را بر اساس این ویژگی شبیه سازی میکنیم تا بهینه عمومی را پیدا کنیم.
رفتارهای اصلی ماهیهای مصنوعی
الگوریتم AFSA از چهار رفتار اصلی تقلید میکند:
- رفتار تغذیه (Prey Behavior): ماهی بهصورت تصادفی در اطراف خود جستوجو میکند و اگر نقطهای با مقدار برازندگی بهتر پیدا کند، به آن سمت حرکت میکند.
- رفتار دنبال کردن (Follow Behavior): ماهی بهسمت نزدیکترین ماهی که دارای برازندگی بهتر است حرکت میکند.
- رفتار ازدحام (Swarm Behavior): ماهی بهسمت مرکز جمعی ماهیهایی که در شعاع بینایی او قرار دارند حرکت میکند، مشروط بر اینکه تراکم بیش از حد نباشد.
- رفتار تصادفی (Random Behavior): اگر هیچکدام از رفتارهای بالا شرایط مناسبی نداشتند، ماهی بهصورت تصادفی حرکت میکند.
۱- جستجوی طعمه Prey
رفتن به سمت غذا یک رفتار زیستی اصلی است. ماهی غلظت غذا در آب را حس کرده و از طریق دید یا حس مسیر خود را انتخاب میکند. فرض کنید Xi وضعیت فعلی ماهی است و ماهی وضعیتXj را در میدان دید خود به صورت تصادفی انتخاب میکند. Y غلظت غذا (مقدار تابع هدف) است و هرچه Visual بیشتر باشد، AF بیشینه عمومی را راحت تر پیدا کرده و همگرا میشود.
Xj=Xi+Visual.Rand()
اگر در مساله بیشینه سازی Yi<Yj، ماهی یک گام در این جهت جلو میرود؛ در غیر این صورت دوباره یک وضعیت Xj را به صورت تصادفی انتخاب کرده و بررسی میکند که شرط حرکت را ارضا میکند یا خیر. اگر پس از چندین بار انتخاب شرط ارضا نشد، یک گام به صورت تصادفی حرکت میکند.
Xi(t+1)=Xi(t)+Visual.Rand()
۲- دنبال کردن Follow
در فرآیند حرکت دسته ماهیها در الگوریتم دسته ماهی های مصنوعی، وقتی یک یا چند ماهی غذا پیدا میکنند، همسایگان به سرعت آنها را دنبال کرده و به غذا میرسند. فرض کنید Xi وضعیت فعلی AF است و موقعیت Xj در همسایگیdij<Visual را کهYj بزرگتری دارد، جستجو میکند. اگر Yj>Yi و n_f/n< δ ، یعنی غلظت غذا در موقعیت Xj بیشتر است (مقدار تابع شایستگی بیشتر است) و اطراف آن زیاد شلوغ نیست، AF یک گام به سمت Xj حرکت میکند. در غیر این صورت رفتار شکار اجرا میشود.
Xi(t+1)=Xi(t)+(Xj-Xit)/(||Xj-Xit ||).StepRand()
۳- حرکت ازدحامی Swarm
ماهیها به صورت گروهی حرکت میکنند. این یک نوع عادت زیستی برای تضمین بقای کلونی و اجتناب از خطر است. فرض کنید Xi وضعیت فعلی AF، Xc موقعیت مرکز گروه و nf تعداد موجودات در همسایگی فعلی dij<Visual، و n تعداد کل ماهیها است. اگر Yc>Yi و nf/n< δ، یعنی مرکز گروه غذای بیشتری دارد (مقدار تابع شایستگی در آن بیشتر است) و زیاد شلوغ نیست، AF یک گام به سمت مرکز حرکت میکند.
Xi(t+1)=Xi(t)+(Xv-Xit)/(||Xv-Xit ||).StepRand()
در غیر این صورت رفتار شکار اجرا میشود. فاکتور شلوغی اندازه دستهها را محدود میکند و AFهای بیشتر فقط در نواحی بهینه قرار میگیرند. این کار تضمین میکند AF در یک محدوده گسترده به سمت بهینه حرکت کند.
۴- حرکت Random
در الگوریتم دسته ماهی های مصنوعی، ماهی به صورت تصادفی در آب حرکت میکند؛ در واقع در محدوده بزرگی به دنبال غذا یا ماهیهای دیگر میگردد. در میدان دید یک موقعیت به صورت تصادفی انتخاب میکند؛ سپس به سمت این مکان حرکت میکند در واقع این حالت پیش فرض AF-_Prey است.
Xi(t+1)=Xi(t)+Visual.Rand()
مراحل اجرای الگوریتم دسته ماهیهای مصنوعی
- مقداردهی اولیه جمعیت ماهیها بهصورت تصادفی
- ارزیابی تابع برازندگی برای هر ماهی
- اعمال رفتارها طبق شرایط
- بهروزرسانی موقعیت ماهیها
- تکرار مراحل تا رسیدن به معیار توقف (تعداد تکرار یا برازندگی مطلوب)
فلوچارت الگوریتم دسته ماهیهای مصنوعی
مزایا و معایب الگوریتم
مزایا:
- مقاوم در برابر گیر افتادن در بهینههای محلی
- قابلیت بالای جستوجو در فضای بزرگ
- تنظیم ساده پارامترها نسبت به برخی الگوریتمها
معایب:
- سرعت همگرایی نسبتاً کند
- نیاز به تنظیم دقیق پارامترها مثل شعاع دید، گام حرکت و…
کاربردهای الگوریتم دسته ماهیهای مصنوعی
- بهینهسازی توابع پیچیده ریاضی
- انتخاب ویژگی (Feature Selection) در دادهکاوی
- برنامهریزی مسیر در رباتیک
- بهینهسازی شبکههای عصبی
- مسائل زمانبندی صنعتی
پیادهسازی اولیه الگوریتم AFSA در متلب
در این بخش یک نمونه ساده از کد متلب برای الگوریتم دسته ماهیهای مصنوعی AFSA آورده شده است:
% پارامترها N = 30; % تعداد ماهیها Dim = 2; % تعداد متغیرها MaxIter = 100; Visual = 1; % شعاع دید Step = 0.5; % گام حرکت % مقداردهی اولیه Fish = rand(N, Dim); % جمعیت اولیه Fitness = @(x) sum(x.^2); % تابع هدف نمونه (کمینهسازی) for iter = 1:MaxIter for i = 1:N % جستوجوی تصادفی در اطراف new_pos = Fish(i,:) + (rand(1,Dim)-0.5) * 2 * Visual; if Fitness(new_pos) < Fitness(Fish(i,:)) Fish(i,:) = Fish(i,:) + Step * (new_pos - Fish(i,:)); end end end
مقایسه AFSA با سایر الگوریتمها
الگوریتم | الهام گرفته از | مزیت اصلی | سرعت همگرایی |
GA | ژنتیک طبیعی | تنوع بالا در جمعیت | متوسط |
PSO | حرکت گروه پرندگان | سادگی در پیادهسازی | بالا |
AFSA | رفتار ماهیها | مقاومت در برابر بهینههای محلی | پایین تا متوسط |
جمعبندی
الگوریتم دسته ماهیهای مصنوعی (AFSA) یک الگوریتم الهامگرفته از طبیعت با توانایی جستوجوی قوی و قابلیت کاربرد در مسائل مختلف بهینهسازی است. اگرچه ممکن است در برخی موارد نیاز به تنظیمات دقیق داشته باشد، اما مزایای آن در اجتناب از بهینههای محلی و قابلیت جستوجوی جمعی باعث شده یکی از الگوریتمهای محبوب در حوزه محاسبات نرم باشد.