یک عدد دانشجوی کامپیوتر/ علاقهمند به حوزه دیتا / توسعهدهنده وب
الهام الگوریتمیک از طبیعت
انسان همواره در طول زندگی ش پی حل مساله ها گوناگون بوده است. از ساده ترین مسایل مثل محاسبه قیمت ۵ قوطی شیر از روی قیمت یک قوطی شیر تا محاسبات پیچیده ماهواره ها برای پرتابشان به فضا، از اینکه چطور می توانیم روی آب شناور بمانیم تا آن که چطور می توانیم پرواز کنیم.
یکی از رویکرد هایی انسان ها که در حل مسایل خود پیش گرفتن، شبیه سازی پدیده ها و یا مکانیزم های طبیعی موجود در دنیای طبیعت بود. مثلا برادران رایت با دقت در نحوه پرواز پرنده های توانستند که اولین هواپیما را بسازند یا مثلا انسان توانست با دیدن مدل شناوری اردک یا دیگر حیوانات شبیه آن دست به اختراع قایق بزند.
همه این ها مصادیق الهام گرفتن بشر از طبیعت است برای حل مسایلش.
حال می خواهیم این شبیه سازی و الهامات را در حل مسایل حوزه کامپیوتر و محاسبات ریاضی بررسی کنیم.
مساله و مدلسازی؟
همواره رویکرد در حل مسایل این بوده است که آن را مدل سازی محاسباتی کرده و سپس محاسبه کنیم. ابتدا این محاسبات را انسان روی کاغذ و به صورت دستی انجام می داد ولی بعد از آن که پیچیدگی آن زیادتر شد، کامپیوتر را اختراع کرد و از آن بری محاسبات زیاد و تکراری خود استفاده کرد؛ بعد از آن، مدل سازی ها دقیق و دقیق تر شدند و بالطبع پیچیده و پیچیده تر شدند و به حدی رسیدند که حتی روش های عادی به کمک کامپیوتر نیز نتوانستند پاسخگو باشند، اینجا بود که به تغییر رویکرد روی آوردند و به سمت الگوریتم های الهام گرفته از طبیعت رفتند.
خیلی از مسایل به این صورت هستند که نمی توان گفت که یک جواب دارند یا خیر و جوابشان چیست و فقط می دانیم که جوابی که این ویژگی ها را داشته باشد از جوابی که آن ویژگی ها را داشته باشد، بهتر است. به این دسته مسایل، مسایل بهینه سازی می گویند؛ یعنی همواره به دنبال بهینه کردن نتیجه با توجه به پارامتر های موردنظر خود هستیم و نمی دانیم که کی به نتیجه اصلی می رسیم یا اصلا نتیجه یک اصلی وجود دارد یاخیر.
به مجموعه جواب هایی که در میان آن ها به سمت بهینه ترین جواب می رویم، فضای جواب می گویند.
الگوریتم، روش انجام کار ها به صورت گام به گام و مشخص شده و با پایان متناهی است. الگوریتم ها برای حل مسایل استفاده می شوند. حال می خواهیم به بررسی دسته خاصی از الگوریتم ها که برای مسایل بهینه سازی استفاده می شوند بپردازیم.
الگوریتمهای فراابتکاری (Meta heuristic) یا فراتکاملی یا فرااکتشافی نوعی از الگوریتمهای تصادفی هستند که برای یافتن پاسخ بهینه به کار میروند. (ویکیپدیا)
اکثر این الگوریتم ها الهام گرفته از طبیعت می باشند. به عنوان مثال می توان به موارد زیر اشاره کرد:
الهام گرفته از علوم زیستی:
- الگوریتم ژنتیک
- الگوریتم کلونی مورچه ها
- الگوریتم کلونی زنبور ها
- الگوریتم گرگ خاکستری (این الگوریتم رو دو تا ایرانی طراحی کردن=))
- الگوریتم ریشه-پاجوش
- و ...
الهام گرفته از پدیده های فیزیکی:
به عنوان مثال یکی از معروف ترین الگوریتم های فوق را که الگوریتم ژنتیک نام دارم به صورت اجمالی معرفی می کنیم.
الگوریتم ژنتیک
الگوریتم ژنتیک معتقد است که می توان با شبیه سازی تکنیک های فرگشتی مثل وراثت، جهش و اصل انتخاب طبیعی به سوی یافتن جواب بهینه پیش رفت. این الگوریتم از قانون تنازع بقا استفاده می کند، یعنی هر جوابی که مناسب تر باشد، احتمال باقی ماندنش در فضا جواب بیشتر خواهد بود و آن هایی که کمتر بهینه و ضعیف تر هستند، زود از بین خواهند رفت.
روند استفاده از این الگوریتم به صورت زیر است:
- معرفی جوابهای مسئله (نه لزوما بهینه) به عنوان کروموزوم
- معرفی تابع تناسب
- جمعآوری اولین جمعیت
- معرفی عملگرهای انتخاب
- معرفی عملگرهای تولید مثل نمونه
- جهش
بعد از تعریف هر یک پارامتر های زیر در مساله و متناسب کردن آن با مدل محاسباتیمان به صورت زیر عمل می کنیم:
- ابتدا به صورت تصادفی مقدار زیادی جواب تولید می کنیم (لزوما جواب ها بهینه نیستند) این مجموعه جواب را جمعیت اولیه مینامیم. هر جواب را یک کروموزوم مینامیم.
- با استفاده از تابع تناسب با توجه به بهینه تر بودن، برای هر کروموزوم امتیاز دهی می کنیم.
- کروموزم های بهتر را انتخاب کرده و با هم ترکیب می کنیم .
- در مجموعه کروموزوم ها جهش ایجاد می کنیم(یک کروموزوم را تغییر ناگهانی می دهیم)
- مجددا مقدار زیاد جواب تولید می کنیم و کروموزوم های جدید را با قبلی ترکیب می کنیم
آنقدر این کار را تکرار می کنیم که به پاسخ بهینه مورد نظر برسیم.
این روند، کلیتی بود از الگوریتم ژنتیک که البته خیلی الگوریتم کاربردی ای می باشد و امروزه در حل بسیاری از مسایل به کار می آید.
بقیهی الگوریتم های فراابتکاری نیز خیلی جالب هستند و می توان شبیه سازی شدن آن ها از روی طبیعت را مطالعه کرد.
امروز، دوران تعاملات میان رشته ایاست و داشتن رویکرد پیشرفت در یک رشته ثابت تقریبا بی فایده است؛ دوران آن است که از ابزار های مختلف هر رشته در رشته دیگر استفاده کرد و حتی می توان پروژه هایی بین هر دو رشته، حتی اگر بی ربط به هم به نظر بیایند تعریف کرد.
مثل موضوع همین نوشتار که ایده را از علوم زیستی گرفت و مدل محاسباتی تعریف کرد و همین مدل را باز می توان در محاسبات خود علوم زیستی به کار برد. این رویکرد، رویکرد بسیاری مهمی است و به اقرار بسیاری از اساتید برجسته دنیا، آینده علم با این رویکرد پیش خواهد رفت.
به امید پیشرفت هر چه بیشتر علمی کشورمان
مطلبی دیگر از این انتشارات
استفاده از ELMO برای طبقه بندی
مطلبی دیگر از این انتشارات
پردازش زبان طبیعی و کاربردهایش - بخش 2
مطلبی دیگر از این انتشارات
چگونه مسائل را با یادگیری عمیق حل کنیم ؟