فیلم: مروری بر روشهای محاسبات تکاملی و الگوریتم رقابت استعماری
دراین پست فیلم یکی از نشست های وبینار محاسبات تکاملی با موضوع “مروری بر روشهای محاسبات تکاملی و الگوریتم رقابت استعماری” را خدمتتان جهت دانلود و نیز مشاهده آنلاین قرار داده ایم.
دراین پست فیلم یکی از نشست های وبینار محاسبات تکاملی با موضوع “مروری بر روشهای محاسبات تکاملی و الگوریتم رقابت استعماری” را خدمتتان جهت دانلود و نیز مشاهده آنلاین قرار داده ایم.
سوال مهمی که همیشه مطرح می باشد، این است که چه الگوریتمی برای یک مسئله بهینه سازی معین مناسب است و یا در حالت کلی تر، چه الگوریتمی نسبت به الگوریتم دیگر برتری دارد؟ در حالت کلی می توان گفت که از دید بهینه سازی اگر الگوریتم “الف” در زمان سریعتری نسبت به الگوریتم “ب” به جواب مسئله (یا هر جواب یکسان) برسد، الگوریتم ا”لف “بهتر است. به عبارت دیگر می توان گفت که در زمانهای مساوی، الگوریتم “الف” جواب های بهتر و بهینه تری را در اختیار می گذارد. شکل زیر این موضوع را به خوبی نشان می دهد.
نکته:اگر فایلهای دریافتی نیاز به پسورد داشتند، عبارت matlabsite.com را استفاده کنید.
نظرات شما در انتهای این پست برای سایر خوانندگان، بسیار مفید خواهد بود. می توانید نظر خود را با اکانت سرویس های مختلف و یا به عنوان ناشناس در این پست درج نمائید.
الگوریتم بهینه سازی ازدحام ذرات یا PSO، که به نام الگوریتم پرندگان نیز شناخته می شود، یکی از الگوریتم های قدرتمند و پر طرفدار برای بهینه سازی است که بیشتر به خاطر سرعت همگرایی نسبتا بالایی که دارد، مورد استفاده قرار می گیرد. این الگوریتم با وجود عمر کمی که دارد، اما توانسته است در حوزه های کاربردی بسیاری، از الگوریتم های قدیمی تر، مانند الگوریتم ژنتیک، پیشی بگیرد و به عنوان انتخاب اول محسوب شود. گروه برنامه نویسان متلب سایت، کد الگوریتم کلاسیک PSO را تهیه نموده در برای دانلود در اختیار دوستان و مراجعین عزیز قرار داده است. با ما در ادامه مطلب، همراه باشید.
لینک دانلود کد الگوریتم PSO در ادامه قرار داده شده است. کدها و برنامه رایگان ارائه شده می توانند به عنوان یک پروژه کامل و مجزا در مورد الگوریتم پرندگان (ازدحام انبوه ذرات – Particle Swarm Optimization) که به اختصار PSO نامیده می شود، مورد استفاده آموزشی نیز قرار بگیرند.
لینک دانلود کد الگوریتم پرندگان یا ازدحام ذرات – 32 کیلوبایت
نکته: اگر فایلهای دریافتی نیاز به پسورد داشتند، عبارت matlabsite.com را استفاده کنید.
منبع این پست، متلبسایت، مرجع کاربران و برنامه نویسان متلب و هوش مصنوعی می باشد.
صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.
لینک دانلود کد رایگان الگوریتم پرندگان گسسته (427.93 KB)
نکته: اگر فایلهای دریافتی نیاز به پسورد داشتند، عبارت matlabsite.com را استفاده کنید.
صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.
الگوریتم پرندگان را شاید بتوان نزدیک ترین الگوریتم به الگوریتم رقابت استعماری در میان الگوریتم های تکاملی موجود نامید. الگوریتم PSO نیز همانند الگوریتم رقابت استعماری برای حل مسائل پیوسته معرفی شد (نسخه های گسسته هر دو الگوریتم بعد از معرفی نسخه پیوسته معرفی شدند). مطالعه این الگوریتم برای علاقه مندان الگوریتم رقابت استعماری جهت درک بهتر این الگوریتم و ایجاد توسعه آن خالی از لطفا نخواهد بود. با ما در ادامه مطلب همراه باشید.
دانلود رایگان کتاب الگوریتم بهینه سازی ازدحام ذرات (3.14 MB)
اگر به هر نحو ممکن در دانلود فایلهای فوق با مشکل روبرو شدید، با ارسال ایمیل از طریق قسمت تماس با ما و یا با نوشتن کامنت در پایین همین پست، ما را در جریان قرار دهید.
منبع این پست، متلبسایت، مرجع کاربران و برنامه نویسان متلب و هوش مصنوعی می باشد.
همانگونه که قبلاً نیز اعلام کرده بودیم، در وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی به معرفی سایر الگوریتم های تکاملی نیز پرداخته و مطالب آموزشی، کدها و فایل های آموزشی مربوط به آنها را نیز ارائه خواهیم کرد.
که در آن
به زودی بر روی وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی کدها و مراجع آموزشی مفیدی راجع به این الگوریتم را برایتان قرار خواهیم داد.
صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.
————————————-
تبلیغات متنی:
جهت ارائه محصولات آموزشی خود در وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی با ما در تماس باشید.
در بسیاری از موارد دوستان زیادی این سوال را مطرح کردند که چگونه باید الگوریتم رقابت استعماری را به مسئله بهینه سازی خود اعمال کنند. در حقیقت، برای حل یک مسئله بهینه سازی، باید تعریف دقیقی از خود مسئله و متغیرها و اهداف بهینه سازی به عمل آید. در این بخش می خواهیم استراتژی حل یک مسئله بهینه سازی را گام به گام بیان کنیم. توضیحات ارائه شده کاملاً عمومی خواهند بود و نه تنها برای استفاده از الگوریتم رقابت استعماری، بلکه برای حل مسائل بهینه سازی با استفاده از هر الگوریتمی مفید خواهند بود.
“این پست اختصاصی وبسایت محاسبات تکاملی و الگوریتم رقابت استعماری تهیه شده است و درج آن در رسانه های چاپی و یا مجازی فقط با کسب اجازه از وبسایت مذکور، مجاز می باشد.”
چاره چیست؟ برای فرار از استفاده از سعی و خطا برای حل مسائل بهینه سازی باید سعی کرد تا مسئله بهینه سازی را به صورت ریاضی مدل کرد. این مهمترین قدم در حل مسائل بهینه سازی در حوزه مهندسی و علوم است. پس از مدلسازی ریاضی تابع هزینه می توان از الگوریتم رقابت استعماری و هر روش دیگری در حوزه بهینه سازی تکاملی استفاده نمود. همان مثال تنظیم آنتن تلویزیون را در نظر می گیریم و به ترتیب به سوالات زیر پاسخ می دهیم.
2) هدف چیست (بیان کیفی هدف)؟
در مثال مطرح شده هدف رسیدن به بیشترین کیفیت تصویر دریافتی از تلویزیون است.
3) متغیرهای بهینه سازی چه هستند؟
با بیان هدف به صورت کیفی، به سراغ پارامترهایی می رویم که دست ما هستند و می توانند برای رسیدن به هدف ما را کمک کنند. در این مورد متغییر قابل تغییر، زاویه آنتن تلویزیون می باشد. اگر پارامترهای دیگری نیز در مسئله تاثیر دارند، لیستشان می کنیم و در غیر این صورت به گام بعدی می رویم. به عنوان مثال در کنار زاویه آنتن، ممکن است که ارتفاع آن نیز در کیفیت تصویر دریافتی تاثیر داشته باشد. مواردی مانند کیفیت آنتن و یا مثلاً طول سیم آنتن و موارد مشابه دیگر می توانند بسته به تعریف ما، وارد متغیرهای بهینه سازی بشوند یا نشوند. ما فعلاً همان دو مورد اول را در نظر می گیریم و بنابراین داریم.
و به طور خلاصه داریم:
که در آن x1، میزان زاویه آنتن و x2 میزان ارتفاع آنتن است.
4) ارتباط میان هدف بهینه سازی و متغیرهای بهینه سازی به صورت ریاضی چیست؟
تا الان کاری که کردیم ارائه یک بیان کیفی از مسئله بهینه سازی است و عملاً تا الان کار زیادی انجام نداده ایم. کار اصلی بیان ریاضی یک مسئله بهینه سازی، در این مرحله انجام می شود. در این مرحله باید ارتباط میان متغیرها و هدف بهینه سازی را بیان کنیم. معمولاً بسته به حوزه تخصصی مربوط به مسئله بهینه سازی، این مرحله به دانش نسبتاً زیادی از مسئله بهینه سازی نیاز دارد و اینگونه نیست که فردی خارج از حوزه مرتبط به مسئله، حتی با داشتن تخصص بالا در بهینه سازی بتواند به بیان تابع هزینه کمک کند. مثلاً برای بیان ارتباط میان کیفیت تصویر دریافتی از تلویزیون و زاویه و ارتفاع آنتن، به دانش تخصصی در حوزه میدان ها و امواج و نیز تصویر نیاز است. فرض کنیم که با مراجعه به متون تخصصی این حوزه به رابطه مفروض زیر می رسیم.
با بیان این رابطه ریاضی، فرایند تعریف مسئله بهینه سازی به پایان می رسد. حال باید به دنبال یک الگوریتم برای حل مسئله فوق باشیم. در مواردی که مسئله همانند مورد بالا فقط دارای یک نقطه می نیمم (یا ماکزیمم) بوده و تابع هزینه نسبت به متغیرها مشتق پذیر باشد، روش های مبتنی برای گرادیان (مشتق) بهترین انتخاب هستند و به سادگی و با سرعت بالا، بهترین جواب مسئله را به ما می دهند. مثلاً جواب مسئله فوق به صورت زیر خواهد بود.
که با مقادیر فوق به کیفیت تصویر 100 می رسیم.
5) حال اگر رابطه فوق کمی پیچیده تر باشد، چه باید کرد؟ مثال زیر را در نظر می گیریم.
این رابطه دارای تعداد زیادی نقاط اکسترمم محلی و یک نقطه اکسترمم مطلق در نقطه (0,0) می باشد. برای حل چنین مسائل بهینه سازی، از روش های دیگر بهینه سازی همچون بهینه سازی تکاملی و در میان آنها از می توان از الگوریتم رقابت استعماری استفاده کرد.
6) پس از تعریف ارتباط ریاضی تابع هزینه و متغیرهای بهینه سازی چه باید کرد؟
در این مرحله پیاده سازی عملی کار شروع می شود. در مراجع مختلف و به ویژه در اینترنت، کدهای رایگان بسیاری از الگوریتم های بهینه سازی تکاملی وجود دارند. کدهای رایگان الگوریتم رقابت استعماری نیز به سادگی با جستجوی عبارت “کدهای رایگان الگوریتم رقابت استعماری” و یا “Imperialist Competitive Algorithm Code” به زبانهای مختلف قابل تهیه هستند. نکته مشترک میان همه این کدها این هست که این کدها، تابع هزینه مسئله شما را گرفته و پس از جستجو با استراتژی های مختلف، جواب مسئله را به شما می دهند. برای استفاده از همه کدهای موجود بر روی وب باید تابع هزینه خود را به صورت یک تابع جداگانه بنویسید. البته میان نحوه تعریف تابع هزینه در کدهای مختلف شاید ، اندکی تفاوت موجود باشد. منتها روند کلی به صورت زیر است.
در مورد نحوه تعریف تابع هزینه، فیلم آموزشی کوتاهی بر روی سایت الگوریتم رقابت استعماری قرار گرفته است و موارد تکمیلی به زودی ارائه خواهند شد.
7) آیا تابع هزینه مسئله همیشه به صورت یک برنامه ساده و یک رابطه ریاضی مشخص است؟
خیر! در بسیاری از موارد عملی تابع هزینه یک رابطه ریاضی مشخص نیست. بلکه مثلاً برای یافتن مقدار تابع هزینه، باید یک پروسه فیزیکی، شیمیایی و یا کنترلی را اجرا کنیم. مثلاً ممکن است برای طراحی یک آنتن بهینه هر بار مقادیر بهینه سازی را به تابع هزینه ارسال کنیم و تابع هزینه نیز به نوبه خود، این مقادیر را به یک نرم افزار تخصصی در حوزه میدانها و امواج ارسال کند و نتیجه حاصل را گرفته و دوباره محاسباتی روی آنها انجام داده و آنها را به عنوان هزینه ورودی معین برگرداند. در بسیاری از موارد دانشجویان رشته کنترل نیاز پیدا می کنند که در داخل تابع هزینه خود، یک پروسه کنترلی را از طریق سیمولینک متلب اجرا کرده و نتیجه حاصل را آنالیز کرده و برگردانند.
به طور خلاصه می توان گفت که شروع نوشتن کد تابع هزینه بهینه سازی، شروع به حل آن و پایان کد نویسی آن نیز، آخرین مرحله به حساب می آید. ایجاد ارتباط میان یک کد تابع هزینه مرتب با یک الگوریتم بهینه سازی، کار چندان سختی به شمار نمی آید.
8) مسئله بهینه سازی من پارامتهای دیگری دارد که متغیر بهینه سازی نیستند ولی در بهینه سازی تاثیر دارند، چه کنم؟
معمولاً تابع هزینه ما پارمترهای دیگری دارد. سعی کنید، تمام پارامتهای اضافی (پارامتهای به غیر از متغیرهای بهینه سازی) را داخل کد تابع هزینه قرار دهید و تابع هزینه شما فقط شامل متغیرهای بهینه سازی باشد (تابع شما فقط متغیرهای بهینه سازی را به عنوان ورودی دریافت کند). مثلاً جنس آنتن می تواند پارامتری باشد که کاملاً مدل شده است ولی جزو متغیرهای بهینه سازی ما نیست و در عین حال روی تابع هزینه مثال مطرح شده، تاثیر دارد. البته در کدهای تهیه شده برای الگوریتم رقابت استعماری، متغیرهای اضافی برای دریافت پارامتهای اضافی نیز ذخیر شده اند.
برای واضح تر شدن مسئله می خواهیم قدم به قدم به سوال مطرح شده زیر پاسخ دهیم. یکی از دوستان سوال مشکل خود در استفاده از الگوریتم رقابت استعماری را اینگونه مطرح کرده اند.
قسمتی از پروژه ی پایان نامه ی من به این شکل تعریف شده است:انجام آزمایشات (32 موردآزمایش) با استفاده از دستگاه WEDM: در طول انجام این آزمایشات که بر حسب روش طراحی آزمایش تاگوچی طرح ریزی شده اند، 5 فاکتور ورودی سیستم یعنی W (تغذیه ی سیم)، P (توان)، V (ولتاژ)، S (سر) و زمان تغییر می کند تا از این طریق اثر تغییر این پارامترها روی خروجی و یا کارایی سیستم بررسی شود. خروجی های سیستم هم حجم برداشته شده از سطح قطعه کار (MRR) و صافی سطح (SR) است.برای بهینه سازی خروجی فرایند، تصمیم گرفتم که از الگوریتم استعماری استفاده کنم. ولی مشکلی که دارم این است که نمی دانم به چه شکل می توانم تابع هزینه متناسب با این فرایند را تعریف کنم؟ یکی از توابع هزینه که درفرایند های ماشینکاری مطرح میشود به شکل زیر است
به این مفهوم که با تغییر ورودی ها به ماکزیمم مقدار برداشت مواد از سطح و کمترین پستی و بلندی که با SR نمایش داده می شود برسیم.
سوالاتی زیر برای من مطرح است:
سوال 1: برای استفاده از الگوریتم رقابت استعماری، چه تعداد تابع هزینه بایستی تعریف شود؟
پاسخ: الگوریتم رقابت استعماری در حال حاضر برای حل مسائل بهینه سازی تک هدفه مفید می باشد. علاقه مندان زیادی بر روی نسخه های چند هدفه الگوریتم کار می کنند و مطمئناً به زودی کدهای چند هدفه الگوریتم را نیز بر روی وب خواهیم داشت. البته لازم به ذکر هست که مسائل بهینه سازی چند هدفه غالباً با جمع خطی تک تک اهداف به مسائل تک هدفه تبدیل می شوند. مسئله مذکور نیز همین گونه است. دو هدفMRRوSRبا جمع شدن با وزن واحد تبدیل به یک هدفLشده اند. البته همانگونه که به نظر می رسد، ظاهراًMRRباید کمینه شود وSRباید بیشینه شود، زیرا معکوس آن باMRRجمع شده است. البته تبدیل یک مسئله دو یا چند بعدی به یک مسئله یک بعدی روش هایی دیگری دارد که در مورد آنها در مطالب بعدی بر روی سایت بحث خواهد شد. فعلاً خلاصه می کنیم که تابع شما یک تابع یک هدفه است و یک تابع هزینه باید برای آن نوشته شود. البته این به این معنی نیست که کد برنامه فقط یک تابع خواهد داشت. در بسیاری موارد ما یک تابع تک هدفه حتی ساده را نیز به تعدادی تابع کوچکتر شکانده و وظایف بخش های مختلف برنامه را به این زیر تابع ها می سپاریم. اما در نهایت آنها در قالب یک تابع هزینه اصلی کنار هم سازمان دهی می کنیم. مثلاً
Y = f1(x) + f2(x)
function Y = f1(x)
Y = sin(x)
function Y = f1(x)
Y = cos(x)
سوال 2: تابع هزینه به صورت FUNCTION باید باشد؟
پاسخ: بله! شما پس از جدا کردن و تعریف کردن متغیرهای بهینه سازی خود، یک تابع هزینه می نویسید که با دریافت این متغیرها ، خروجی هزینه را بدهد. در این مورد فیلم آموزشی کوتاهی بر روی سایت الگوریتم استعماری (www.icasite.info) وجود دارد. موارد آموزشی تکمیلی به زودی بر روی سایت قرار خواهد گرفت.
سوال 3: تابع هزینه باید رابطه ای بین ورودی ها باشد ویا خروجی ها؟
پاسخ: ظاهراً تابع هزینه شما باید بهترین مقادیر (w,p,s,v,t) را بدهد. بنابراین شما باید تابعی بنویسید که این مقادیر را گرفته وMRRوSRاز روی آنها تعیین شوند و در نهایتLبه دست آید. در حقیقت داریم.
اگر بخواهیم تا حدی یک شبه کد برای این مسئله بنویسیم خواهیم داشت.
الگوریتم رقابت استعماری فقط با تابع L_Fcn کار خواهد کرد و با بقیه تابع ها کاری نخواهد داشت.
بخش 1 این نوشتار با عنوان بهینه سازی چیست، به همراه تصویر موجود در این بخش برداشتی از کار ارزشمند جناب آقای مهندسی سید مصطفی کلامی هریس با کسب اجازه از ایشان بوده است.