الگوریتم دسته ماهی‌های مصنوعی (AFSA) — معرفی کامل، کاربردها و پیاده‌سازی

الگوریتم دسته ماهی‌های مصنوعی

در دنیای هوش مصنوعی و بهینه‌سازی، الگوریتم‌های مبتنی بر طبیعت جایگاه ویژه‌ای دارند. یکی از الگوریتم‌های نسبتاً جدید و قدرتمند در این زمینه، الگوریتم دسته ماهی‌های مصنوعی یا 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 باشد این فرآیند به شکل زیر بیان می‌شود:

فرمول 1 الگوریتم ماهی

که در آن Rand اعداد تصادفی در بازه ۰ و ۱ تولید می‌کند، Step طول گام است.xi  متغیر بهینه سازی، و n  تعداد متغیرها است. مدل AF در الگوریتم دسته ماهی‌ های مصنوعی دو بخش دارد:

  1. متغیرها
  2. توابع

متغیرها: 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) یک الگوریتم الهام‌گرفته از طبیعت با توانایی جست‌وجوی قوی و قابلیت کاربرد در مسائل مختلف بهینه‌سازی است. اگرچه ممکن است در برخی موارد نیاز به تنظیمات دقیق داشته باشد، اما مزایای آن در اجتناب از بهینه‌های محلی و قابلیت جست‌وجوی جمعی باعث شده یکی از الگوریتم‌های محبوب در حوزه محاسبات نرم باشد.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 0 از 0 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
ieeexplore

دیدگاه‌ خود را بنویسید

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



برچسب‌ها:
الگوریتم فرا ابتکاری


پیمایش به بالا