در این مقاله قصد داریم در مورد یکی از الگوریتم های بهینه سازی به نام الگوریتم فرا ابتکاری بحث کنیم که این الگوریتم در نرم افزار متلب و برای حل مسائل ، کاربرد گسترده ای دارد. ما در ابتدا به معرفی مسائل بهینه سازی میپردازیم و انواع مختلف اینگونه مسائل را بیان میکنیم تا بتوانیم به درک کاملی در مورد نقش الگوریتم های فرا ابتکاری برسیم:
بسیاری از مسائل تصمیم گیری ( decision-making ) میتوانند به عنوان مسائل بهینه سازی محدود بیان شوند که این مسائل دارای چند متغیر تصمیم گیری هستند که با چند قید، محدود شده اند.
انواع مسائل بهینه سازی :
مسائل ترکیبی (گسسته)
در دنیای واقعی مثال هایی از اینگونه مسایل داریم :
مسائل مربوط مسیریابی وسایل نقلیه و برنامه ریزی و زمان بندی
مسائل برنامه ریزی نیروی انسانی
برنامه ریزی تولید و توزیع منابع
مسائل تعدیل در خط تولید
مسائل توزیع امکانات و تخصیص تسهیلات
…
مسائل بهینه سازی ترکیبی معمولا به راحتی بیان میشوند اما به سختی حل میشوند. تو دسته از الگوریتم ها برای حل مسائل ترکیبی وجود دارند. الگوریتم های دقیق و الگوریتم های تقریبی.
الگوریتم های دقیق ، یافتن بهینه ترین راه حل را تضمین میکنند اما مشکلی که در این میان وجود دارد این است که این الگوریتم ها برای مسائل سخت، کارایی ندارند و زمان یافتن راه حل برای مسائل سخت به صورت نمایی افزایش خواهد یافت و برای بیشتر مسائل سخت یا NP-hard problems ، الگوریتم دقیق راضی کننده نیست.
اگر پاسخ بهینه با الگوریتم دقیق در عمل قابل دستیابی نبود باید به سراغ الگوریتم تقریبی برویم. الگوریتم تقریبی ( Approximate algorithms ) که معمولا به روش ابتکاری ( heuristic methods ) شناخته میشود، به دنبال راه حل مناسب و نزدیک به بهینه میگردد . این روش زمان محاسبات را به نسبت روش قبل پایین می آورد اما تضمینی برای ارائه بهینه ترین راه حل ندارد.
حال به سراغ روش اصلی مورد بحث که الگوریتم فراابتکاری است برویم. معایب روش ابتکاری چیست؟ روش های ابتکاری یا تعداد بسیار کمی راه حل را تضمین و ارائه میکنند (یعنی یک الگوریتم را نمی توان برای مسائل مختلف دیگر استفاده کرد) و یا در نقطه بهینه ضعیف محلی (local) و نامطمئنی متوقف میشوند که این امر به دلیل وجود روش های تکرار بهبود یافته، است. الگوریتم فرا ابتکاری به منظور حل این مشکلات ارائه شده است. این روش که از دهه 80 میلادی ارائه شده است به حل مسائلی با بهینه سازی سخت کارایی دارد.
الگوریتم های فرا ابتکاری در واقع مجموعه ای از الگوریتم ها هستند که بر روی الگوریتم های ابتکاری اعمال می شوند و باعث رهایی از بهینه سازی محلی میشوند و در عین حال امکان استفاده از الگوریتم های ابتکاری را در تعداد زیادی از مسائل میدهند. ما در بالا به دو مشکل بهینه سازی محلی و محدود بودن راه حل ها برای الگوریتم های ابتکاری اشاره کردیم که این دو مشکل با ظهور الگوریتم های فرا ابتکاری از بین میروند.
در تعریفی مشابه میتوانیم بگوییم که فرا ابتکاری، یک چارچوب عمومی الگوریتمیک است که میتواند با تغییرات کمی روی مسائل گوناگون راه حل های مخصوص به همان مسئله را ارائه کند (بر خلاف الگوریتم ابتکاری که فقط مختص به یک مسئله بود)
در شکل زیر میبینیم که الگوریتم های فرا ابتکاری قابلیت گسترش از یک نقطه بهینه محلی را دارند :
برخی از الگوریتم های این دسته از طبیعت الهام گرفته شده اند و برخی خیر . همچنین برخی از الگوریتم ها دارای حافظه هستند یعنی از نتایج به دست آمده در حین اجرای الگوریتم استفاده میکنند و برخی نیز بدون حافظه هستند.
مثال هایی از الگوریتم فرا ابتکاری شامل الگوریم ژنتیک ، کلونی مورچه ها و کلونی زنبورها، الگوریتم شبیه سازی تبرید و الگوریتم جستجوی ممنوعه هستند.
در دهه هفتاد میلادی دانشمندی از دانشگاه میشیگان به نام جان هلند ایده استفاده از الگوریتم ژنتیک در بهینهسازیهای مهندسی مطرح کرد. ایده اساسی این الگوریتم انتقال خصوصیات موروثی توسط ژنهاست. الگوریتم ژنتیک نوع خاصی از الگوریتم های تکاملی است که از تکنیک های یستشناسی فراگشتی مانند وراثت و جهش استفاده میکند. در واقع الگوریتم های ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیشبینی یا تطبیق الگو استفاده می کنند. الگوریتم های ژنتیک اغلب گزینه خوبی برای تکنیکهای پیشبینی بر مبنای رگرسیون هستند. مختصراً گفته میشود که الگوریتم ژنتیک یک تکنیک برنامهنویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده میکند. در طبیعت، فرایند تکامل هنگامی ایجاد میشود که چهار شرط زیر برقرار باشد:
الف) یک موجود توانایی تکثیر داشته باشد (قابلیت تولید مثل).
ب) جمعیتی از این موجودات قابل تکثیر وجود داشته باشد.
پ) چنین وضعیتی دارای تنوع باشد.
ت) این موجودات به وسیله قابلیتهایی در زندگی از هم جدا شوند.
در طبیعت، گونههای متفاوتی از یک موجود وجود دارند که این تفاوتها در کروموزومهای این موجودات ظاهر میشود و باعث تنوع در ساختار و رفتار این موجودات میشود.
این تنوع ساختار و رفتار به نوبه خود بر زاد و ولد تأثیر میگذارد. موجوداتی که قابلیتها و توانایی بیشتری برای انجام فعالیتها در محیط دارند (موجودات متکاملتر)، دارای نرخ زاد و ولد بالاتری خواهند بود و طبعاً موجوداتی که سازگاری کمتری با محیط دارند، از نرخ زاد و ولد پایینتری برخوردار خواهند بود. بعد از چند دوره زمانی و گذشت چند نسل، جمعیت تمایل دارد که موجوداتی را بیشتر در خود داشته باشد که کروموزومهایشان با محیط اطراف سازگاری بیشتری دارد. در طی زمان، ساختار افراد جامعه به علت انتخاب طبیعی تغییر میکند و این نشانه تکامل جمعیت است
الگوریتم آنیلینگ شبیهسازی شده توسط متروپولیس و همکاران در سال 1953 پیشنهاد شده و جهت بهینهسازی در سال 1983 مورد بازبینی قرار گرفته است. این روش در مسائل تاکسی تلفنی کاربرد دارد.
الگوریتم آنیلینگ شبیهسازی شده در شکل عمومی، بر اساس شباهت میان سرد شدن جامدات مذاب و حل مسائل بهینهسازی ترکیبی به وجود آمده است. در فیزیک مواد فشرده، گرم و سرد کردن فرایندی است فیزیکی که طی آن یک ماده جامد در ظرفی حرارت داده میشود تا مایع شود؛ سپس حرارت آن بتدریج کاهش مییابد. بدین ترتیب تمام ذرات فرصت مییابند تا خود را در پایینترین سطح انرژی منظم کنند. چنین وضعی در شرایطی ایجاد میشود که گرمادهی کافی بوده و سرد کردن نیز به آهستگی صورت گیرد. جواب حاصل از الگوریتم گرم و سرد کردن شبیهسازی شده، به جواب اولیه وابسته نیست و میتوان توسط آن جوابی نزدیک به جواب بهینه به دست آورد. حد بالایی زمان اجرای الگوریتم نیز قابل تعیین است. بنابراین الگوریتم گرم و سرد کردن شبیهسازی شده، الگوریتمی است تکراری که اشکالات روشهای عمومی مبتنی بر تکرار را ندارد.
در روش آنیلینگ شبیهسازی شده، به صورت پی در پی از جواب جاری به یکی از همسایههای آن انتقال صورت میگیرد. این سازوکار توسط زنجیره مارکوف به صورت ریاضی قابل توصیف است. در این روش، یک مجموعه آزمون انجام میگیرد؛ این آزمونها به نحوی است که نتیجه هر یک به نتیجه آزمون قبل وابسته است. در روش آنیلینگ شبیهسازی شده، منظور از یک آزمون، انتقال به نقطه جدید است و روشن است که نتیجه انتقال به نقطه جدید تنها وابسته به مشخصات جواب جاری است.
الگوریتم جستجوی همسایگی و الگوریتم آنیلینگ شبیهسازی شده، هر دو روشهای تکراری هستند. در الگوریتم آنیلینگ شبیهسازی شده، هر بار که شاخص کنترلکننده به مقدار نهایی خود میرسد، در حقیقت یک عملیات تکراری انجام شده است. در الگوریتم جستجوی همسایگی، هنگامی که تعداد تکرارها به سمت بینهایت میل میکند، روش به جواب بهینه نزدیک میشود. اما عملکرد الگوریتم آنیلینگ شبیهسازی شده سریعتر است
دیکاستر و و تیمیس، اولین الگوریتم ایمنی مصنوعی را در سال 1986 طراحی کردند. به طور کلی، سیستمهای ایمنی مصنوعی جزء الگوریتم های الهام گرفته شده از بیولوژی هستند. این نوع الگوریتمها، الگوریتم هایی کامپیوتری هستند که اصول و ویژگیهای آنها نتیجه بررسی در خواص وفقی و مقاومت نمونهها بیولوژیکی است. سیستم ایمنی مصنوعی نوعی الگو برای یادگیری ماشین است. یادگیری ماشین، توانایی کامپیوتر برای انجام یک کار با یادگیری دادهها یا از روی تجربه است. سیستم ایمنی مصنوعی توسط کاسترو به این صورت تعریف شده است:
سیستم های وفقی که با الهام از ایمونولوژی نظری و توابع، اصول و مدل های ایمنی سیستم بدن انسان مشاهده شده به وجود آمدهاند و برای حل مسائل مورد استفاده قرار میگیرند
الگوریتم جستجوی ممنوعه برای اولین بار در سال 1986 توسط گلووِر معرفی شد. روش جستجوی ممنوع همانند روش آنیلینگ شبیهسازی شده بر اساس جستجوی همسایه بنا شده است. در این روش عملکرد حافظه انسان شبیهسازی شده است. حافظه انسان با به کارگیری ساختمانی مؤثر و در عین حال ساده از اطلاعات، آنچه را در قبل رؤیت شده، ذخیره میکند. این مرکز همچنین فهرستی از حرکات منع شده را تنظیم میکند و این فهرست همواره بر اساس آخرین جستجوها منظم میشود. این روش از انجام هر گونه عملیات مجدد و تکراری جلوگیری میکند.
الگوریتم جستجوی ممنوعه توسط گلوور مطرح شده است. روش جستجوی مبتنی بر منع، با ایجاد تغییری کوچک در روش جستجوی همسایه به وجود میآید. هدف این روش آن است که بخشهایی از مجموعه جواب که پیش از این بررسی نشده است، مد نظر قرار گیرد. بدین منظور حرکت به جوابهایی که اخیراً جستجو شده، ممنوع خواهد بود.
ساختار کلی الگوریتم جستجوی ممنوعه بدین صورت است که ابتدا یک جواب اولیه امکانپذیر انتخاب میشود؛ سپس برای جواب مربوط، بر اساس یک معیار خاص مجموعهای از جوابهای همسایه امکانپذیر در نظر گرفته میشود.
در گام بعد، پس از ارزیابی جوابهای همسایه تعیین شده، بهترین آنها انتخاب میشود و جابهجایی از جواب جاری به جواب همسایه انتخابی صورت میگیرد. این فرایند به همین ترتیب تکرار میشود تا زمانی که شرط خاتمه تحقق یابد.
در روش جستجوی ممنوع، فهرستی وجود دارد که جابهجاییهای منع شده را نگهداری میکند و به فهرست تابو معروف است و کاربرد اصلی آن، پرهیز از همگرا شدن به جوابهای بهینه محلی است. به عبارت دیگر، به کمک فهرست تابو جابهجایی به جوابهایی که اخیراً جستجو شدهاند، ممنوع خواهد شد. فقط بخشهایی از مجموعه جواب که پیش از این مورد بررسی قرار نگرفته، مد نظر خواهند بود. در واقع جابهجایی از جواب جاری به جواب همسایه امکانپذیر زمانی انجام میشود که در فهرست تابو قرار نداشته باشد. در غیر این صورت، جواب همسایه دیگری که در ارزیابی جوابهای همسایه در رده بعدی قرار گرفته است، انتخاب شده و جابهجایی به آن صورت میگیرد.
در الگوریتم جستجوی ممنوعه بعد از هر جابهجایی، فهرست تابو بهنگام میشود، به نحوی که جابهجایی جدید به آن فهرست اضافه شده و جابهجایی که تا n تکرار مشخص در فهرست بوده است، از آن حذف میشود. نحوه انتخاب میتواند با توجه به شرایط و نوع مسأله متفاوت باشد
الگوریتم بهینهسازی کلونی مورچهها در سال 1991 توسط دوریگو و همکاران پیشنهاد شده است که در حل مسأله فروشنده دورهگرد و مسائل تخصیص چندوجهی کاربرد دارد. الگوریتم بهینه سازی کلونی مورچهها از عاملهای سادهای که مورچه نامیده میشوند، استفاده میکند تا به صورت تکراری جوابهایی تولید کند. مورچهها می توانند کوتاهترین مسیر از یک منبع غذایی به لانه را با بهرهگیری از اطلاعات فرمونی پیدا کنند. مورچهها در هنگام راه رفتن، روی زمین فرمون میریزند و با بو کشیدن فرمون ریخته شده بر روی زمین راه را دنبال میکنند؛ چنانچه در طی مسیر به سوی لانه به یک دوراهی برسند، از آن جایی که هیچ اطلاعی درباره راه بهتر ندارند، راه را به تصادف برمیگزینند. انتظار میرود به طور متوسط نیمی از مورچهها مسیر اول و نیمی دیگر مسیر دوم را انتخاب کنند.
فرض میشود که تمام مورچهها با سرعت یکسان مسیر را طی کنند. از آنجا که یک مسیر کوتاهتر از مسیر دیگر است، مورچههای بیشتری از آن میگذرند و فرمون بیشتری بر روی آن انباشته میشود. بعد از مدت کوتاهی مقدار فرمون روی دو مسیر به اندازهای می رسد که روی تصمیم مورچههای جدید برای انتخاب مسیر بهتر تأثیر میگذارد. از این به بعد، مورچههای جدید با احتمال بیشتری ترجیح میدهند از مسیر کوتاهتر استفاده کنند، زیرا در نقطه تصمیمگیری مقدار فرمون بیشتری در مسیر کوتاهتر مشاهده میکنند. بعد از مدت کوتاهی تمام مورچهها این مسیر را انتخاب خواهند کرد
الگوریتم اجتماع ذرات که به آن الگوریتم پرندگان نیز گفته می شود برای اولین بار توسط کندی و ابرهارت در سال 1995 مطرح شد. این الگوریتم محاسبه ای تکاملی الهام گرفته از طبیعت و براساس تکرار میباشد. منبع الهام این الگوریتم، رفتار اجتماعی حیوانات، همانند حرکت دسته جمعی پرندگان و ماهیها بود. الگوریتم اجتماع ذرات نیز با یک ماتریس جمعیت تصادفی اولیه، شروع میشود. الگوریتم اجتماع ذرات از تعداد مشخصی از ذرات تشکیل می شود که به طور تصادفی، مقدار اولیه می گیرند. برای هر ذره دو مقدار وضعیت و سرعت، تعریف می شود که به ترتیب با یک بردار مکان و یک بردار سرعت، مدل میشوند. این ذرات، بصورت تکرارشونده ای در فضای nبعدی مسئله حرکت می کنند تا با محاسبه مقدار بهینگی به عنوان یک ملاک سنجش، گزینههای ممکن جدید را جستجو کنند
الگوریتم تکامل تفاضلی یک روش جست و جوی احتمالی بر پایه جمعیت است که در سال 1995 توسط ستورن و پرایس ابداع گردید. تفاضل تکاملی در حالی که تشابهاتی با سایر الگوریتم های تکاملی دارد اما استفاده از اطلاعات فاصله و جهت از جمعیت فعلی برای پیش بردن عملیات جست و جو آن را از سایر الگوریتم های تکاملی متمایز کرده است. الگوریتم تکامل تفاضلی اولیه برای مسائل فضای پیوسته به وجود آمدند ولی در ادامه برای مسائل فضای گسسته نیز تعمیم یافتند
الگوریتم جستجوی هارمونی توسط گیم و همکاران در سال 2001 معرفی شد. بعد ها در سال 2007 این الگوریتم توسعه داده شد. این الگوریتم با الهام از نحوه شکل گیری و چگونگی عملکرد یک ارکستر موسیقی به دنبال راه حل بهینه و یا به عبارت ملموس تر، بهترین هماهنگی بین اجزا دخیل در راهبری یک پروسه است. همان طور که نوازنده ها در یک ارکستر قطعات موسیقایی را می نوازند تا از بین آنها بهترین ترکیب، محصول نهایی را پدید آورد الگوریتم هارمونی نیز از بررسی نتیجه عملکرد اجزا به دنبال هماهنگی مطلوب است . الگوریتم هارمونی برای حل مسائل به دنبال یافتن بهترین مسیر است تا بوسیله آن هزینه توابع محاسباتی را کاهش دهد (کوتاهتر) نماید
الگوریتم جستجوی فاخته در سال 2009 توسط یانگ و دب پیشنهاد شده است. این الگوریتم یک روش بهینهسازی فرااکتشافی است که رویکردی تکاملی در جستجوی راهحل بهینه دارد. این روش از رفتار جالب توجه گونههایی از پرندهی فاخته در پرورش تخم الهام گرفته است و آن را با پرواز لووی که نوعی گشت تصادفی است ترکیب میکند. برخی از گونههای فاخته به جای ساختن لانه، تخمهای خود را در لانهی پرندهای از گونههای دیگر میگذارند و آنها را با تقلید از شکل تخمها و جوجههای پرندهی میزبان وادار به مشارکت در بقای نسل خود می کنند
الگوریتم کرم شب تاب در سال 2009 توسط یانگ معرفی شد. دو کاربرد اساسی پرتوتابی حشره های شب تاب جفتیابی و جذب طعمه است. به علاوه، پرتوتابی ممکن است به صورت مکانیزم هشداری برای محافظت به کار رود. پرتوتابی ریتمیک، نرخ چشمک ها و مدت هر یک از آن ها، سیستم ارتباط جفتها با یکدیگر را شکل می دهد. مادهها به الگوی یکسان نرها در گونههای یکسان پاسخ می دهند، در حالی که در تعدادی از گونهها حشره های شبتاب ماده می توانند الگوی تابشی جفتهای گونههای دیگر را نیز تقلید کنند و با فریب حشره های شبتاب نر که ممکن است اشتباه کنند، آنها را به سمت خود جذب و شکار کنند. شدت تابش نور می تواند به طریقی فرموله شود که با تابع هدف در ارتباط باشد و بدین صورت مقدار این تابع بهینه شود
الگوریتم خفاش نیز در سال 2010 توسط یانگ معرفی شد. این الگوریتم بر مبنای زندگی خفاش ها توسعه داده شده است
الگوریتم جستجوی گرانشی در سال 2009 توسط راشدی و همکاران معرفی شده است. این الگوریتم که با الهام از قانون گرانش طبیعت، پیشنهاد شده است یک روش جدید از دسته الگوریتم های جستجو ابتکاری میباشد. در این روش عامل های جستجو، اجرامی هستند که با توجه به نیروی جاذبه ای که از سایر اجرام به آنها وارد می شود، درکی از فضای جستجو پیدا می کنند و با توجه به این درک به جستجوی فضای اطراف خود می گردند
الگوریتم کلونی زنبور عسل در سال 2007 توسط کارابوگ و باشتورگ معرفی شده است. الگوریتم زنبور عسل هر نقطه را در فضای پارامتری، متشکل از پاسخهای ممکن به عنوان منبع غذا تحت بررسی قرار می دهد. زنبورهای دیدهبان، کارگزاران شبیهسازی شده، به صورت تصادفی فضای پاسخها را ساده می کنند و به وسیلهی تابع شایستگی کیفیت موقعیتهای بازدید شده را گزارش می دهند. جوابهای ساده شده رتبه بندی میشوند و دیگر زنبورها نیروهای تازهای هستند که فضای پاسخها را در پیرامون خود برای یافتن بالاترین رتبه محلها جستجو می کنند که گلزار نامیده میشود. الگوریتم به صورت گزینشی دیگر گلزارها را برای یافتن نقطهی بیشینهی تابع شایستگی جستجو میکند
الگوریتم رقابت استعماری در سال 2007 توسط اتش پز و همکاران معرفی شده است. روشی در حوزه محاسبات تکاملی است که به یافتن پاسخ بهینه مسائل مختلف بهینه سازی میپردازد. این الگوریتم با مدلسازی ریاضی فرایند تکامل اجتماعی، سیاسی، الگوریتمی برای حل مسائل ریاضی بهینه سازی ارائه می دهد. الگوریتم رقابت استعماری نیز مجموعه اولیه ای از جوابهای احتمالی را تشکیل می دهد. الگوریتم رقابت استعماری با روند خاصی جوابهای اولیه (کشور ها) را به تدریج بهبود داده و در نهایت جواب مناسب مسئله بهینه سازی (کشور مطلوب) را در اختیار می گذارد. پایههای اصلی این الگوریتم را سیاست همسان سازی، رقابت استعماری و انقلاب تشکیل می دهند. این الگوریتم با تقلید از روند تکامل اجتماعی، اقتصادی و سیاسی کشورها و با مدلسازی ریاضی بخشهایی از این فرایند، عملگرهایی را در قالب منظم به صورت الگوریتم ارائه می دهد که می توانند به حل مسائل پیچیده بهینه سازی کمک کنند. در واقع این الگوریتم جوابهای مسئله بهینه سازی را در قالب کشورها نگریسته و سعی میکند در طی فرایندی تکرار شونده این جوابها را رفته رفته بهبود داده و در نهایت به جواب بهینه مسئله برساند
الگوریتم بهینه سازی فاخته در سال 2011 توسط رجبیون معرفی شده است. همانند سایر الگوریتمهای تکاملی این الگوریتم هم با یک جمعیت اولیه کار خود را شروع می کند. این جمعیت از فاخته ها، تعدادی تخم دارند که آنها را در لانه تعدادی پرنده ی میزبان خواهند گذاشت. تعدادی از این تخم ها که شباهت بیشتری به تخم های پرنده میزبان دارند شانس بیشتری برای رشد و تبدیل شدن به فاخته بالغ خواهند داشت. سایر تخم ها توسط پرنده میزبان شناسایی شده و از بین می روند. میزان تخم های رشد کرده مناسب بودن لانه های آن منطقه را نشان می دهند. موقعیتی که در آن بیشترین تعداد تخمها نجات یابند پارامتری خواهد بود که الگوریتم قصد بهینه سازی آن را دارد. فاخته ها برای بیشینه کردن نجات تخم های خود دنبال بهترین منطقه می گردند. پس از آنکه جوجه ها از تخم در آمدند و تبدیل به فاخته بالغ شدند، جوامع و گروه هایی تشکیل می دهند. هر گروه منطقه سکونت خود را برای زیست دارد. تمام گروهها به سمت بهترین منطقه موجود فعلی مهاجرت می کنند. هر گروه در منطقه ای نزدیک بهترین موقعیت فعلی ساکن می شود. با در نظر گرفتن تعداد تخمی که هر فاخته خواهد گذاشت و همچنین فاصله فاخته ها از منطقه بهینه فعلی برای سکونت تعدادی شعاع تخم گذاری محاسبه شده و شکل می گیرد. سپس فاخته ها شروع به تخم گذاری تصادفی در لانه هایی داخل شعاع تخم گذاری خود می کنند. این پروسه تا رسیدن به بهترین محل برای تخم گذاری (منطقه با بیشترین سود) ادامه می یابد. این محل بهینه جایی است که بیشترین تعداد فاخته ها در آن گرد می آیند
الگوریتم دستهی ماهیهای مصنوعی یکی از الگوریتمهای هوش جمعی است که بر اساس جمعیت و جستجوی تصادفی کار میکند. این الگوریتم در سال 2003 توسط لی ارائه گردید. اساس کار این الگوریتم از روی رفتارهای اجتماعی ماهیها برگرفته شده و بر مبنای جستجوی تصادفی، جمعیت و رفتارگرایی کار میکند. این الگوریتم دارای خصوصیاتی از جمله سرعت همگرایی بالا، حساس نبودن به مقادیر اولیهی ماهیهای مصنوعی، انعطافپذیری و تحملپذیری خطا می باشد که آن را برای حل مسائل بهینهسازی قابل قبول میکند. اساس کار این الگوریتم بر پایهی توابعی است که از رفتارهای اجتماعی دستهی ماهیها در طبیعت برگرفته شدهاند. در دنیای زیر آب، ماهیها می توانند مناطقی را پیدا کنند که دارای غذای بیشتری است، که این امر با جستجوی فردی یا گروهی ماهیها محقق میشود. مطابق با این ویژگی، مدل ماهی مصنوعی با رفتارهای حرکت آزادانه، جستجوی غذا، حرکت گروهی و دنبالهروی ارائه شده است که به وسیلهی آنها فضای مسئله جستجو میشود