فایل راهنمای فارسی و انگلیسی الگوریتم رقابت استعماری در قالب قابل ویرایش Word

دوستان بسیاری در پی استفاده از الگوریتم رقابت استعماری (Imperialist Competitive Algorithm) در مسائل بهینه سازی خود در پایان نامه ها و پژوهش هایشان، در مراحل نوشتن مقالات علمی و گزارش نتایج، این درخواست را بارها مطرح کردند که بخش هایی از متن های فارسی و انگیسی در مورد الگوریتم رقابت استعماری (ICA) جهت استفاده در گزارشها و مقالات بر روی سایت قرار دهیم. در پاسخ به درخواست این عزیزان، در این پست دو فایل راهنمای فارسی و انگلیسی الگوریتم رقابت استعماری در فرمت قابل ویرایش در Word منتشر می کنیم. جهت دانلود فایل ها ادامه مطلب را ببینید.

ادامه مطلب

آموزش شبکه عصبی (Neural Network Training) توسط الگوریتم رقابت استعماری (ICA)

پستی که در ادامه می خوانید، به یادگیری شبکه عصبی با استفاده از الگوریتم رقابت استعماری می پردازد. البته مطالب ارائه شده عمومی بوده و شامل استفاده از الگوریتم های دیگری همچون الگوریتم ژنتیک یا GA (Genetic Algorithms)، الگوریتم ازدحام ذرات یا PSO (Particle Swarm Optimization) و شبیه سازی تبرید فلزات یا SA (Simulated Annealing) نیز خواهد شد. حتی به نظر می رسد که استفاده از هر یک از عناوین زیر برای این پست مناسب بود.

ادامه مطلب

نحوه مقایسه کارکرد دو الگوریتم بهینه سازی

سوال مهمی که همیشه مطرح می باشد، این است که چه الگوریتمی برای یک مسئله بهینه سازی معین مناسب است و یا در حالت کلی تر، چه الگوریتمی نسبت به الگوریتم دیگر برتری دارد؟ در حالت کلی می توان گفت که از دید بهینه سازی اگر الگوریتم “الف” در زمان سریعتری نسبت به الگوریتم “ب” به جواب مسئله (یا هر جواب یکسان) برسد، الگوریتم ا”لف “بهتر است. به عبارت دیگر می توان گفت که در زمانهای مساوی، الگوریتم “الف” جواب های بهتر و بهینه تری را در اختیار می گذارد. شکل زیر این موضوع را به خوبی نشان می دهد.

همه چیز درباره هوش مصنوعی به زبان ساده (بخش اول)

هوش مصنوعی یکی از مقوله هایی است که در علوم کامپیوتر، اهمیت فراوان دارد و تغییرات در هوش مصنوعی می توانند تحولات گسترده ای را در فناوری اطلاعات پدید بیاورند. در این مقاله قصد داریم که هوش مصنوعی را به شما معرفی کنیم. علاوه بر این چند روبات مطرح را نیز به شما معرفی خواهیم کرد. سعی ما بر این است که این مقاله بتواند به اندازه کافی راهنمای شما باشد. پس ادامه مطلب را ببینید.
– هوش مصنوعی چیست؟

هوش مصنوعی، هوش ماشین هاست! در واقع شاخه ای از علوم کامپیوتر است که قصد دارد راه حل های الگوریتمی را ارائه کند تا بتوانیم به وسیله آنها در ماشین ها هوشمندی ایجاد کنیم. اما این تعریف کافی نیست؛ اول از همه باید بدانیم که تعریف هوشمندی چیست و بعد باید منظور از ماشین را دربیابیم:
استدلال، منطق، تصمیم گیری ؛ این ها توانایی هستند که شما از آنها استفاده می کنید. پس شما هوشمند هستید. اگر این توانایی ها را در کامپیوتر هم ایجاد کنیم، آنگاه به ماشین هوشمند دست می یابیم! به همین سادگی … ولی به جز این ها چیز های دیگری هم در رابطه با تعریف هوشمندی وجود دارند که دانستن آنها را می توان مهم ارزیابی کرد. در واقع بحث هایی که در مورد هوشمندی و هوش مصنوعی مطرح شده است؛ تنها به دوره ی امروزه ی ما و قرن 21 مربوط نمی شود، بلکه از سال 1950 این مباحث به طور جدی مطرح شد.

– پیشینه ی هوش مصنوعی:

باید گفت که از این نظر هوش مصنوعی یکی از غنی ترین تاریخ ها را دارد، منتها در قصه ها! ماشین ها و مخلوقات مصنوعی باشعور، اولین بار در افسانه های یونان باستان مطرح شدند. شبه انسان ها باور داشتند که باید یک تمدن بزرگ را تشکیل دهند؛ تندیس ها و مجسمه های انسان نما در مصر و یونان به حرکت در آمده بودند و … حتی در مواردی این قصه ها، پای جابر بن حیّان و چند تن دیگر را هم به سازندگان موجودات مصنوعی باز کردند.
از قصه ها که بگذریم ؛ فیلسوف ها و ریاضی دان ها از مدت ها پیش مباحث مربوط به استدلال و منطق را پیش کشیدند و امروزه این مباحث به صورت قرار دادی، به رسمیت پذیرفته شده است. این گونه منطق ها اساس کامپیوتر های دیجیتال و برنامه پذیر شده اند. یکی از افرادی که نقش اساسی و مهمی در این مورد ایفا کرد آقای آلن تورینگ بود.

نظریه تورینگ:

تئوری تورینگ مبتنی بر این بود که می توانیم با استفاده از نشانه ها و اعدادی مانند 0 و 1، هر استدلال ریاضی ای را در کامپیوتر عملی کنیم. همزمان با این نظریه کشف های تازه ای در زمینه ی عصب شناسی، نظریه اطلاعات و فرمانشناسی، به وقوع پیوسته بود. این پیشرفت ها الهام بخش گروهی کوچک از پژوهشگران شد تا به طور جدی به مساله ایجاد یک مغز الکترونیکی رسیدگی نمایند.

– تست تورینگ:

در سال 1950، آلن تورینگ مقاله ای را در رابطه با هوش مصنوعی منتشر ساخت که بعد ها به تست تورینگ مشهور شد. در این مقاله عنوان شده بود که اگر فردی از پشت یک دیوار یا هر چیز جدا کننده دیگری، با کامپیوتر مکالمه کتبی داشته باشد و نداند که طرف مقابلش انسان نیست و پس از پایان مکالمه نیز متوجه این موضوع نشود، آنگاه می توان کامپیوتر را ماشینی هوشمند نامید زیرا توانسته است که در برابر یک انسان به اندازه کافی از استدلال و منطق استفاده کند. تست تورینگ تا حدی توانست هوش مندی را توجیه کند ولی فقط ((تا حدی))! اما از آن زمان تا کنون ماشینی اختراع نشده است که توانسته باشد این تست را با موفقیت بگذراند. هر چند زبان AIML ابداع شد، اما این زبان هرگز به این حد از هوش مصنوعی دست نیافت.


– و بعد …

تیمی که در زمینه هوش مصنوعی تحقیق می کردند، در تابستان سال 1956، کنفرانسی را در محوطه کالج دارتموس برگزار کردند. این کنفرانس به همراه افرادی مانند جان مک کارتی، ماروین مینسکی، آلین نویل و هربت سیمون که برای دهه ها پیشتازان تحقیق برای هوش مصنوعی بودند انجام شد. آنها و دانش آموزان آنها، برنامه ای نوشته بودند که حقیقتا برای عده زیادی از مردم شگفت آور بود. این برنامه می توانست مشکلات نوشتاری در جبر را حل کند، استدلال های منطقی را اثبات کند و به زبان انگلیسی سخن بگوید. در اواسط دهه ی 1960، بودجه سنگینی برای دایرکردن آزمایشگاه های تحقیقاتی در گرداگرد دنیا، از سوی حوزه ی دفاعی ایالات متحده آمریکا، اختصاص داده شد. پیشتازان هوش مصنوعی درباره آینده آن در جهان بسیار خوش بین بودند. هربت سیمون پیشبینی کرده بود که در مدت 20 سال، کامپیوتر های هوشمند می توانند، هر کاری را که انسان انجام می دهد، انجام دهند. در واقع مشکلات بزرگی که در آن زمان برای ایجاد هوش مصنوعی وجود داشت، اساسا حل شده بود.

– زمستانی سخت برای هوش مصنوعی:

علیرغم چیز هایی که در بالا گفته شد، تیم مذکور، در شناخت و رفع برخی از مشکلات هوش مصنوعی با شکست مواجه شد، در سال 1970 در مقابل انتقادات آقای جیمز لایتهیل از انگلستان و فشار های مداوم کنگره برای کم کردن بودجه برای پروژه های بزرگ، دولت های انگلیس و آمریکا تمام پژوهش های به نتیجه نرسیده برای هوش مصنوعی را لغو کردند و در اندک سالیان بعد از آن، به سختی برای هوش مصنوعی، بودجه اختصاص داده می شد. این دوره را زمستان هوش مصنوعی یا A.I winter می نامند.
به زودی در سال 1980، پژوهش ها بر روی هوش مصنوعی از سر گرفته شد و این امر مدیون این بود که سیستم های هوشمند، به موفقیت های تجاری دست یافتند. سیستم های هوشمند، ترکیب هایی از هوش مصنوعی بودند که مهارت و دانش و توان تجزیه تحلیلی یک متخصص را شبیه سازی می کردند. در سال 1985، هوش مصنوعی به بازار یک میلیارد دلاری دست یافت و در همان زمان پروژه ی کامپیوتر های نسل پنجم ژاپن، که متوقف شده بود، از سر گرفته شد و بودجه ای برای تحقیقات آکادمیک در این زمینه در نظر گرفته شده بود. اما در سال 1987 باز هم چرخ گردان به گونه ای دیگر چرخید و بازار فروش ماشین های پردازش لیست (Lisp Machines) (با زبان Lisp) که با مشکلاتی موجه بودند، نابود شد و در یک ثانیه تمام آبروی هوش مصنوعی را هم با خود برد. پس این بار زمستان طولانی تر و سخت تری برای هوش مصنوعی فرارسید.

– پس از آن، بهاری نو :

پس از این مشکلات، در دهه 1990 و نزدیک به قرن بیست و یکم، هوش مصنوعی به یکی از بزرگ ترین موفقیت های خود دست یافت. اگر چه چیز هایی پشت پرده ماندند ولی هوش مصنوعی در زمینه های مهمی مانند استدلال و منطق، داده کاوی، تشخیص های پزشکی و طیف های گسترده ای از تکنولوژی و صنعت به کار گرفته می شد.


– مقایسه، استدلال و حل مسائل:

خیلی زود توسعه دهندگان هوش مصنوعی به این نتیجه رسیدند که باید در الگوریتم های خود از نحوه حل مساله ((گام به گام)) استفاده کنند. در واقع انسان ها هم معمولا برای حل مواردی از جمله: ساختن پازل و … از این روش استفاده می کنند. آنها همچنین توانستند که پس از دهه های 80 و 90 الگوریتم های موفقیت آمیزی را برای درک داده ها و اطلاعات نا کامل عرضه کنند که این الگوریتم ها از احتمالات، برای درک این اطلاعات استفاده می کردند.
برای حل مسائل سخت، بیشتر این الگوریتم ها به کامپیوتر های بزرگ و قدرتمندی برای پردازش نیاز داشتند. بسیاری از این الگوریتم ها به مقدار زیادی حافظه (رم) نیاز داشتند و حتی در صورت فراهم آمدن آن، با وجود سخت افزار های آن زمان، مدت مورد نیاز برای پردازش نجومی بود. بنابر این می توان این مساله را دریافت که: جستجو برای الگوریتم های بهتر و موثر تر در آن زمان، از اولویت های اصلی پژوهشگران هوش مصنوعی بود.
انسان برای حل مسائل خود خیلی سریع عمل می کند. چیزی که باید فهمید این است که اگر چه انسان در جمع و تفریق اعداد از کامپیوتر شکست می خورد، اما مساله فقط جمع و تفریق نیست. در واقع اولین گام برای حل مساله درک آن است و این چیزی است که برای انسان بسیار ساده و برای کامپیوتر ها بسیار سخت است. بر این اساس آنها به تحقیقات زیادی پرداختند و به این نتیجه رسیدند که باید برای بازدهی بیشتر از شبکه های عصبی استفاده کنند. این کار به آنها کمک می کرد تا بتوانند به ساختار اعصاب و مغز انسان و سایر حیوانات نزدیک تر شوند.

– نمایش معلومات:

نمایش معلومات و مهندسی معلومات مرکز توجه در پژوهش های هوش مصنوعی بودند. بسیاری از دستگاه های حل مساله برای حل مسائل نیازمند معلومات گسترده و وسیعی بودند این معلومات عبارت می شد از : شناختن اشیاء، خواص و اقلام- شناختن روابط بین اشیاء- درک موقعیت، نوع واقعه و زمان و مکان- علت ها و تاثیر عوامل و بسیاری چیز های دیگر…

و سخت ترین مشکلات درباره نمایش اطلاعات و معلومات عبارت بود از:

1- استدلال پیش فرض و مسائل نسبی: دانسته ی یک فرد از یک چیز برابر است با پنداشت او از آن چیز، برای مثال وقتی نام پرنده به گوش کسی می خورد، معمولا یک موجود کوچک را به یاد می آورد با صدای زیبا و قابلیت پرواز؛ در حالی که این موضوع برای همه ی پرندگان صدق نمی کند. مثلا پنگوئن هیچکدام از این ویژگی ها را ندارد! جان مک کارتی این موضوع را به عنوان یک مسئله نسبی در سال 1969 کشف کرد. برای هر قضاوت صحیح (در تعریف عام) که محققان هوش مصنوعی، سعی در پیاده سازی آن داشتند، تعداد زیادی استثنا وجود داشت. بنابر این، آنها به این نتیجه دست یافتند که در قضاوت عام، نمی توان یک چیز را مطلقا درست یا غلط دانست بلکه همه چیز نسبی است. مثلا وقتی به شما می گویند که فلان شخص، خوب است یا بد؟ شما اول به مواردی توجه می کنید که مهم تر هستند و بر این اساس در مورد خوبی و بدی قضاوت می کنید. در حالی که هیچ کس مطلقا خوب یا بد نیست! در واقع شما اول به مواردی اهمیت می دهید که مهم تر است. محققان هوش مصنوعی هم با پیاده کردن چنین الگوریتمی توانستند این مشکلات را حل کنند.
2- سطح وسیع اطلاعات مورد نیاز برای قضاوت عام: منظور از قضاوت عام، همان نحوه قضاوتی است که در بالا توضیح داده شد که شما به نکاتی که بیشتر اهمیت دارند، امتیاز بیشتری اختصاص می دهید و آنها را ملاک قضاوت خود قرار می دهید. اما این نوع قضاوت، شاید در زندگی روزمره ما کار عادی ای شده باشد؛ اما در واقع برای کامپیوتر این کار نیاز به اطلاعات پایه ای زیادی در زمینه هستی شناسی و شناخت ویژگی های موجودات دارد. محققان هوش مصنوعی می بایست، مفاهیم دقیق و پیچیده ای را با دست خود، به کامپیوتر می فهماندند. کار بزرگی که انجام شد این بود که توانستند کامپیوتر را قادر سازند که از منابع اطلاعاتی (نظیر اینترنت امروزی) ، مفاهیمی را کسب کند و از این راه به اطلاعات خود در این باره بیافزاید.
3- استفاده از زبان Sub-Symbolic برای توضیح بعضی مفاهیم در قضاوت عام: بسیاری از معلوماتی که مردم دارند، چیز هایی است که نمی توان آن ها را تصویر کرد و یا توضیح داد. برای مثال یک شطرنج باز ماهر، از قرار دادن یک مهره در یک وضعیت خاص پرهیز می کند زیرا احساس می کند که این کار خطرناک است و یا یک کارشناس و منتقد هنری با نگاه کردن به یک مجسمه و یا یک نقاشی تشخیص می دهد که آن جعلی و تقلبی است. پیاده کردن چنین الگوریتم هایی با استفاده از زبان سمبلیک ممکن نبود و باید از زبان دیگری بر پایه Sub-Symbolic استفاده می شد. قبل از هر چیز باید، توضیح مختصری از این دو را به شما ارائه کنیم:
در واقع اساس کار زبان های سمبلیک بر پایه استدلال و نتیجه گیری و به طور کلی، منطق است. در این گونه زبان ها برای متغیر ها و توابع مقدار های مشخصی در نظر گرفته می شود و بدین وسیله، هر متغیر حاوی بخشی از اطلاعات برنامه و هر تابع حاوی بخشی از قوانین استنباطی برنامه است.
اما روش Sub-Symbolic تا حد زیادی متفاوت است. این روش از شبکه های عصبی برای پردازش اطلاعات استفاده می کند. این شبکه های عصبی از واحد های ورودی، واحد های پنهان و واحد های خروجی تشکیل شده اند که همگی با یکدیگر ارتباط دارند. این واحد ها گاهی سلول عصبی نیز، خطاب می شوند. همانطور که گفته شد، این سلول های عصبی با یک دیگر ارتباط دارند. اما چیزی که باید بدانید این است که اطلاعات در بین این ارتباطات، پردازش می شوند و بر این اساس ممکن است یک سلول عصبی در پردازش اطلاعات موثر و یا کم اثر باشد. در عوض، در شبکه های عصبی تمامی اجزا مهم تلقی می شود. چون هیچ کدام از آنها به تنهایی نمی توانند، اطلاعات را پردازش کنند ولی وقتی تمام اجزا با هم کار کنند، موجب ایجاد یک عملکرد هوشمند می شوند.
برای این که این روش را بهتر درک کنید، به این مثال توجه نمایید: یک مورچه تنها را در نظر بگیرید، طبعا نه کاری می تواند بکند و نه اثری دارد، اما وقتی مجموعه ای از این مورچه ها جمع می شوند و یک کلونی را تشکیل می دهند، آنگاه جامعه ای از آنها درست می شود که در کلیت، هوشمند و موثر است، به طوری که حتی ما هم با دانستن راز های زندگی جمعی مورچه ها، به فکر فرو می رویم! همین کار را هم می توان با شبکه های عصبي انجام داد و يک شبه مغز را ايجاد کرد.

– برنامه ریزی:

موجودات و به طور کلی، چیز های هوشمند، باید بتوانند هدف هایی را برای خود تعیین کرده و به آنها دست یابند. برای این کار اولا لازم است که تصوری از آینده خود داشته باشیم. یعنی وضع کنونی هدف مورد نظر را در نظر بگیریم و پیش بینی کنیم که تصمیماتی که خواهیم گرفت، چگونه می تواند بر آن تاثیر بگزارد. پس از این کار باید، برای رسیدن به بهترین نتیجه؛ از بین گزینه هایی که داریم، بهترین و سودمند ترین آنها را انتخاب نماییم.
پس تصمیم گیری و برنامه ریزی از این روش، کاری است که بدون هوشمندی، نمی توان آن را انجام داد و فقط موجودات هوشمند از پس آن بر می آیند!
در مسائل کلاسیکی که در مورد برنامه ریزی وجود داشت، عامل هوشمند می توانست فرض کند که تنها یک چیز (هدف مورد نظر) در جهان فعال است و احتمالا می توان نتیجه آن را تغییر داد. بنا بر این هدف مورد نظر تعیین می شد و برای آن راه حل هایی ارائه می گردید. همچنین عامل هوشمند – که میتواند برنامه و یا هر چیز دیگری باشد – به طور مرتب و دائمی چک می کرد که پیشگویی هایش درست باشد و اگر اینطور نبود، راه حل مورد نظر برای هدفش را تغییر می داد.
در این مورد می توانید یک روبوت را در نظر بگیرید که می خواهد از یک مسیر مارپیچ عبور نماید. این روبوت ابتدا هر یک از این مسیر ها را امتحان می کند و اگر هر کدام از آنها به بن بست، بر خورد، آن را به حافظه می سپارد تا دوباره تکرارش نکند و این عمل را آنقدر ادامه می دهد که راه خودش را بیابد! ( این يک تعریف بسيار ساده بود)

– یادگیری:

ایجاد امکان یادگیری برای ماشین ها، همواره از پژوهش های اصلی در زمینه ی هوش مصنوعی بوده است. یادگیری بدون نظارت: قابلیت یادگیری الگو ها، از اطلاعات ورودی را فراهم میکند. یادگیری نظارت شده هم، می تواند هردو امکان: طبقه بندی و عبرت عددی را ایجاد کند.
طبقه بندی این امکان را می دهد که کامپیوتر بتواند تشخیص دهد که چه چیز هایی را می توان در یک گروه خاص گنجاند. عبرت عددی (Regression takes) نیز به این صورت عمل می کند که بعد از دادن چیز هایی به عنوان ورودی به کامپیوتر و مشخص کردن خروجی دقیق آنها، کامپیوتر می تواند روابط بین ورودی و خروجی را کشف کرده و الگوریتم ها و توابع پیوسته ای را برای آنها تعیین کند. این روش برای به وجود آوردن الگوریتم های بسیار پیچیده، مفید خواهد بود.
اجازه دهید تا در این مورد مثالی بزنیم: وقتی در حال رانندگی هستید و به عابران پیاده نگاه می کنید، می توانید تا حد زیادی تشخیص دهید که آنها قصد چه کاری را دارند. مثلا می خواهند از خیابان رد شوند یا این که تاکسی بگیرند و یا این که فقط سر جای خود ایستاده اند. خب، این کار برای من و شما نسبتا ساده است اما اساسا برای نوشتن الگوریتم آن برای کامپیوتر، از دست یک انسان کاری ساخته نیست. با استفاده از روش عبرت عددی می توان با روش های خاص این مورد را با مثال های زیادی به کامپیوتر و برنامه ی مربوطه نشان داد و به تدریج الگوریتم مورد نیاز را تحویل گرفت.
اما چیزی که باید هم اکنون به آن اشاره کرد، عملیات تقویت یادگیری است. این کار به این صورت انجام می پذیرد که تئوری تصمیم گیری کامپیوتر آنالیز شده و برداشت های سودمند آن تئوری، مورد تاکید قرار می گیرند. در واقع کار های درست با تشویق (به صورت اولویت دادن) و کار های غلط با تنبیه (به صورت امتیاز منفی) پاسخ داده می شوند و به همین خاطر یادگیری کامپیوتر به طور مرتب بهبود می یابد.
یادداشت: آنالیز الگوریتم های یادگیری ماشین ها، شاخه ای از علوم نظری کامپیوتر است که با نام تئوری یادگیری کامپیوتری شناخته می شود.


– پردازش زبان طبیعی:

پردازش زبان طبیعی یا Natural Language Processing، به ماشین های هوش مند این قابلیت را می دهد که زبان انسان ها را بخوانند و آنها را متوجه شوند. بسیاری از تحقیقات به این نتیجه رسید که برای ایجاد قدرت کافی برای سیستم پردازش زبان طبیعی، نیاز است که اطلاعات زیاد و کاملی را به این سیستم ارائه کنیم که می تواند با استفاده از خواندن متن های موجود در اینترنت انجام شود.
برنامه هایی که هم اکنون در زمینه پردازش زبان طبیعی درست عمل می کنند، از امکاناتی مانند: بازیابی اطلاعات، جستجو در متن ها و امکان ترجمه ماشینی بهره مند اند.
– حرکت و جا به جا کردن اجسام: تحقیقات در زمینه روبوتیک، بیش از هر چیزی به هوش مصنوعی وابسته است. روبات ها برای موارد بسیار زیادی نیاز به هوشمندی دارند که از جمله آنها می توان مواردی مانند: مسیر یابی ، جا به جا کردن، این که بدانند کجا هستند، این که درکی از محیط خود داشته باشند و بتوانند برای حرکت به سوی نقطه خاصی، برنامه ریزی نمایند و هدف خود را تعیین کنند. بدین ترتیب هوش مصنوعی برای روبات ها بسیار پر کاربرد است و تقریبا در تمام زمینه های ذکر شده از آن استفاده می نمایند.

– ادراک:

درک ماشینی، به آنها این امکان را می دهد که بتوانند با استفاده از سنسور های ورودی خود، نظیر: دوربین، میکروفون ها و دیگر سنسور های عجیب و غریب (!) ؛ از محیط خود برداشت صحیحی داشته و بتواند محیط پیرامون خود را درک کند. در اصل، بینایی کامپیوتری این امکان را می دهد که کامپیوتر بتواند چیز هایی که می بیند را مورد تجزیه و تحلیل قرار دهد. چند مورد از آنالیز های معروف در روبات ها عبارت است از : آنالیز صحبت و صدا ها و تشخیص منظور، آنالیز چهره ها و تشخیص حالات آن ها. مانند: خشم، ناراحتی، خنده و … ، آنالیز اشیاء پیرامون و تشخیص آنها .
با استفاده از انواع آنالیز ها و تجزیه و تحلیل هایی که در بالا ذکر شدند، روبات ها قادر خواهند بود که بسیار هوشمند تر از قبل عمل کنند. مثلا در جا به جایی اجسام شیشه ای، دقت بیشتری کنند. برای کسی که ناراحت و عصبانی است، جک تعریف نکند! و سلام را با خدا حافظ پاسخ ندهد.
– هوش اجتماعی:

احساسات و مهارت های اجتماعی، دو بخش مهم از هوش مندی را تشکیل می دهند. اولا، باعث می شود که ماشین هوشمند بتواند عکس العمل طرف مقابل را در برابر یک رفتار خاص، تشخیص دهد. که این کار با درک از انگیزه فرد و احساسات او عملی خواهد شد.

ثانیا؛ برای تعامل بهتر بین انسان و کامپیوتر، ماشین هوشمند باید بتواند که احساساتی را از خود بروز دهد. در بد ترین حالت، این امر باید به صورت نشان دادن احساسات ضعیف در گفتار و با کمال ادب انجام گیرد و در بهترین حالت باید با حساسیت طبیعی و مناسب در برابر انسان همراه باشد. در واقع سعی بر این است که کامپیوتر طوری عمل کند که اگر با لحن بدی با او حرف زدید، با کمال ادب به شما پاسخی مناسب با لحن خودتان دهد. و بالعکس!

نکته مهم: مساله کمال ادب بسیار مهم است چون کامپیوتر در صورت عدم رعایت این موضوع، موجودیت خودش را به خطر خواهد انداخت و در این صورت نیاز به یک الگوریتم برای کشتی گیری انسان و کامپیوتر (یا ربات) هم به شدت احساس می شود. (معمولا انسان ها اعصاب ندارند و خیلی زود درگیر می شوند.)


– ابتکار وخلاقیت:

یکی از شاخه های مهم، هوش مصنوعی سعی در ایجاد قوه ی خلاقیت در کامپیوتر دارد. پیاده سازی ابتکار و خلاقیت در هوش مصنوعی، هم از نظر فلسفی و هم از نظر فیزیولوژی قابل توجیه می باشد. همچنین از نظر عملی هم با پیاده سازی یک الگوریتم مخصوص که خروجی هایی هوشمندانه و متفکرانه تولید نماید، امکان پذیر است. این شاخه معمولا با نام های: درک مصنوعی (Artificial Intuition) و پندار مصنوعی (Artificial Imagination) شناخته می شود. برای پرهیز از پیچیده شدن مقاله، توضیح بیشتری نمی دهیم اما می توانید مباحث مربوط به این دو را نیز در سایت های دیگر دنبال نمایید.

– هوش عمومی:
برای پیاده سازی هوش عمومی روی کامپیوتر نیاز است که از تمامی توانایی های بالقوه ی هوش مصنوعی استفاده کنیم. برای مثال مترجم متن گوگل را در نظر بگیرید؛ می دانیم که این مترجم در حال حاضر با خطا های بسیاری رو به رو است. حال اگر بخواهیم که اشکالات کار ترجمه، حل شود؛ می توانیم از هوش عمومی استفاده نماییم: برای ترجمه خوب باید اول بفهمیم که نویسنده از چه استدلال ها و چه دلایلی برای مطرح کردن یک منظور خاص استفاده می کند.( به کار گیری جنبه درک استدلال و منطق)، همچنین باید بدانیم که موضوعی که درباره آن صحبت می شود چیست.(درک و جمع آوری اطلاعات). مرحله بعدی کار ما این است که مقصود نویسنده از جملات را پیدا کنیم؛ مثلا بفهمیم که دارد انتقاد می کند یا تعریف. (هوش اجتماعی). پس از این کار ها و در نظر گرفتن موارد فوق می توانیم به ترجمه یک متن بپردازیم.

شاید بپرسید که اگر مساله فقط این است، پس چرا گوگل کاری نمی کند ؟ در این مورد باید گفت که شاید در زبان ساده باشد اما به کار گیری چنین الگوریتم هایی با خطای بسیار کم، در حال حاضر عملا امکان پذیر نیست. البته این الگوریتم ها در ترجمه گوگل استفاده می شوند ولی خطای آنها زیاد است. برای کم کردن این گونه خطا ها، راهی که کارشناسان پیشنهاد می کنند، استفاده از شبکه های عصبی و زبان Sub-Symbolic است.
————————————————-
منبع این پست “نارنجی” می باشد.

بهینه سازی چیست؟ (تئوری بهینه سازی)

این پست، به نقل از پایگاه جامع مهندسی صنایع با اندکی ویرایش نقل می شود. تعریف ارائه شده در این نوشتار، تعریف مناسبی از بهینه سازی است اما این تعریف، کامل، جامع و مانع نمی باشد و بیشتر از دیدگاه مهندسی صنایع به مبحث بهینه سازی می نگرد و ممکن است اصطلاحات و نوع نگاه به کار رفته در این تعریف در سایر حوزه ها، کمی متفاوت باشد. در ادامه مطلب، شما را به مطالعه این تعریف دعوت می کنیم.

با داشتن تابع f({\bf{x}})، در بهينه‌سازي مي‌خواهيم‌ آرگومان x را به گونه‌اي بيابيم که هزينه متناظر آن، بهينه باشد (معمولاً کمينه).
__________________________

آرزوی انسان برای رسیدن به كمال مبین تئوری بهینه سازی است. انسان می خواهد بهترین را تجسم و توصیف كرده و به آن دست یابد (بیت لر و دیگران، ۱۹۷۹) ؛ اما از آنجایی كه می داند نمی تواند تمام شرایط حاكم بر بهترین را به خوبی شناسایی و تعریف نماید در بیشتر موارد به جای جواب بهترین یا بهینه مطلق، به یك جواب رضایت بخش (وارنر، ۱۹۹۶) بسنده می كند.

آرزوی انسان برای رسیدن به كمال مبین تئوری بهینه سازی است. انسان می خواهد بهترین را تجسم و توصیف كرده و به آن دست یابد (بیت لر و دیگران، ۱۹۷۹) ؛ اما از آنجایی كه می داند نمی تواند تمام شرایط حاكم بر بهترین را به خوبی شناسایی و تعریف نماید در بیشتر موارد به جای جواب بهترین یا بهینه مطلق، به یك جواب رضایت بخش (وارنر، ۱۹۹۶) بسنده می كند. همچنین انسان در قضاوت عملكرد دیگران، معیار بهترین را در نظر نمی گیرد بلكه آنان را به صورت نسبی مورد ارزیابی قرار می دهد (گلدبرگ، ۱۹۸۹) ؛ بنابراین انسان به دلیل ناتوانی خود در بهینه سازی، به بهبود ارزش ویژه ای می دهد.

بیت لر و دیگران (۱۹۷۹) بهینه سازی را چنین شرح می دهند : فعل بهینه ساختن كه كلمه قوی تری نسبت به بهبود می باشد عبارتست از دستیابی به بهینه و بهینه سازی اشاره به عمل بهینه ساختن دارد. بنابراین تئوری بهینه سازی شامل مطالعات كمی بهینه ها و روش یافتن آنهاست. همچنین بهینه به عنوان یك واژه فنی دلالت بر اندازه گیری كمی و تحلیل ریاضی دارد در حالی كه بهترین، دارای دقت كمتر بوده و بیشتر برای امور روزمره استفاده می شود.

در بیشتر موارد آنچه كه با هدف بهینه سازی انجام می دهیم بهبود است. بهینه سازی به دنبال بهبود عملكرد در رسیدن به نقطه یا نقاط بهینه است. این تعریف دو قسمت دارد : ۱- جستجوی بهبود برای رسیدن به ۲- نقطه بهینه. تفاوت روشنی بین فرایند بهبود و مقصد یا نقطه بهینه وجود دارد. هنوز هم معمولا در رویه های بهینه سازی تمركز بر همگرایی است (آیا به نقطه بهینه می رسد؟) و عملكرد ضمنی رویه به طور كلی فراموش می شود. این اهمیت نسبت به همگرایی مربوط به ریشه های بهینه سازی در ریاضیات است اما همان طور كه اشاره شد در عمل چنین اهمیتی طبیعی و معقول نمی باشد (گلدبرگ، ۱۹۸۹). این مقایسه قصد بی ارزش نشان دادن همگرایی و دقتهای معمول ریاضی را ندارد چرا كه این حوزه خود مبنای ارزشمندی برای مقایسه روشهای بهینه سازی ارائه می كند.

در مقایسه الگوریتم های بهینه سازی دو معیار همگرایی و عملكرد مطرح می شود. بعضی از الگوریتم ها دارای همگرایی بوده ولی ممكن است عملكرد ضعیفی داشته باشند، یعنی فرایند بهبود آنها از كارایی و سرعت لازم برخوردار نباشد ؛ برعكس بعضی دیگر از الگوریتم ها همگرایی نداشته ولی عملكرد آنها خیلی خوب است.

می توان هدف از فرایندهای جستجو را در سه دسته زیر بیان كرد :

  1. بهینه سازی
  2. یافتن جواب عملی
  3. شبه بهینه سازی

در شرایطی كه ما به یافتن جواب در همسایگی جواب بهینه راضی باشیم هدف جستجو را شبه بهینه سازی می نامند. شبه بهینه سازی دارای دوطبقه است ؛ اگر هدف، یافتن جواب عملی خوب در فاصله تعریف شده ای از جواب بهینه باشد به آن بهینه سازی نزدیك گفته می شود. اگر شرط فاصله تعریف شده برای جواب بدست آمده حذف گردد و تنها یافتن جواب نزدیك بهینه با احتمال بالا هدف باشد به آن بهینه سازی تقریبی گفته می شود.

بیشتر مسائل عملی آنقدر مشكل هستند كه در آنها هدف، شبه بهینه سازی در نظر گرفته می شود تا از این طریق تعادلی بین كیفیت جواب بدست آمده و هزینه جستجوی آن جواب برقرار گردد. هم چنین از آنجایی كه تعداد محاسبات مسائل بهینه سازی تركیبی به اعداد نجومی می رسد حذف شرط بهینگی یك ضرورت اقتصادی است. در شبه بهینه سازی باید الگوریتم هایی ارائه كرد كه حدود مناسب میزان محاسبات و نزدیكی به بهینگی را تضمین نموده و تعادلی بین آنها برقرار نمایند. این الگوریتم ها باید مجهز به پارامترهای قابل تنظیم باشند تا كاربر بتواند با تغییر آن پارامترها تعادل مطلوب بین جواب بدست آمده و میزان محاسبات را برقرار نماید. (پیرل، ۱۹۸۴)

__________________________

منبع: پایگاه جامع مهندسی صنایع

_____________________________________________

نظرات شما در انتهای این پست برای سایر خوانندگان، بسیار مفید خواهد بود. می توانید نظر خود را با اکانت سرویس های مختلف و یا به عنوان ناشناس در این پست درج نمائید.

صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.

الگوریتم بهینه سازی کلونی مورچگان چیست؟

الگوریتم Ant colony Optimization که به اختصار ACO نامیده می شود و به نامهای الگوریتم کلونی مورچگان و بهینه سازی کلونی مورچه ها در ایران شناخته می شود یکی از شناخته شده ترین الگوریتم های بهینه سازی تکاملی است. بر آن شدیم تا در وبسایت الگوریتم رقابت استعماری در پستی کوتاه به معرفی این الگوریتم بپردازیم. با ما در ادامه مطلب همراه باشید.

مورچه‌ها اين قابليت را دارند که مي‌توانند با توليد فرومون، کوتاه‌ترين مسير به غذا را بيابند. مورچه‌ها مسير غذا را توسط فرمون، پيدا مي‌کنند. مورچه‌هايي که کوتاه‌ترين مسير را انتخاب مي‌کنند، نسبت به آن‌هايي که مسير طولاني‌تري را انتخاب مي‌کنند، دنباله‌ي فرمون شديدتري، ايجاد مي‌کنند. از آنجاکه فرمون شديدتر، مورچه‌ها را بهتر جذب مي‌کند، مورچه‌هاي بيشتر و بيشتري، مسير کوتاه‌تر را انتخاب مي‌کنند تا آنجاکه همه‌ي مورچه‌ها، کوتاه‌ترين مسير را يافته و از آن مسير حرکت مي‌کنند. براي بررسي بيشتر موضوع، فرض مي‌کنيم که به عنوان مثال، سه مسير به منبع غذا وجود دارند که داراي طول متفاوتي هستند. مورچه‌ها، هر سه مسير را با احتمالات يکسان، انتخاب مي‌کنند. مورچه‌هايي که مسير کوتاه‌تر را رفته و برگشته‌اند، بيشترين فرمون را زودتر از بقيه توليد مي‌کنند. در نتيجه، مورچه‌هاي ديگر اين مسير را زودتر انتخاب کرده و به نوبه‌ي خود، سطح فرمون اين مسير را تقويت مي‌کنند. در نهايت همه‌ي مورچه‌ها، کوتاه‌ترين مسير به غذا را مي‌پيمايند.
عملکرد مورچه‌هاي آرژانتيني(1) در يافتن کوتاه‌ترين مسير بين لانه و منبع غذايي، بسيار عجيب و حيرت انگيز است. مورچه‌ي آرژانتيني عملا کور است و طبعا کوتاه‌ترين مسير براي او مفهومي ندارد و توسط او قابل شناخت نمي‌باشد. اما با وجود چنين کمبودي، توده‌اي از اين مورچه‌ها مي‌توانند با همکاري يکديگر، کوتاه‌ترين مسير موجود بين لانه و محل مواد غذايي را پيدا کنند. براي پي بردن به اين خاصيت، آزمايشي در محيطي شبيه به شکل 2-10 ترتيب داده شده است. در ابتدا تمامي مورچه‌ها در محل لانه هستند و قبلا هيچ مورچه‌اي از مسير بين لانه و محل مواد غذايي رد نشده است. آزمايش نشان مي‌دهد که مورچه‌ها پس از مدتي کوتاه‌ترين مسير بين لانه و محل مواد غذايي را انتخاب خواهند نمود. اين آزمايش توسط گاس و همکارانش انجام گرفته است و نتايج آن طي مقالاتي در سال‌هاي 1989 و 1992 منتشر گرديده است.

شکل: رفتار مورچه‌هاي آرژانتيني در آزمايش گاس و همکارانش

اولين الگوريتم بهينه‌سازي کلوني مورچه‌ها (ACO) براي حل مسئله‌ي فروشنده‌ي دوره‌گرد طراحي شد [1]. در اين بخش به طور خلاصه چگونگي عملکرد ACO براي حل اين مسئله مورد بررسي قرار مي‌گيرد. در اين مسئله، ACO با يک تعداد اوليه از مورچه‌ها که مسير‌ي را در اطراف شهرها، طي مي‌کنند، شروع مي‌شود. هر مورچه، فرموني را در طول مسير آزاد مي‌کند. الگوريتم با اختصاص هر مورچه به يک شهر که بطور تصادفي انتخاب مي‌شود، شروع مي‌گردد. شهر بعد با يک احتمال وزن‌دار، که تابعي از شدت فرمون موجود در مسير و طول آن است، انتخاب مي‌شود. احتمال اينکه مورچه‌ي kام مسير شهر mام به شهر nام را طي کند برابر است با

p_{mn}^k = \frac{{\tau _{mn}^a/d_{mn}^b}}{{\sum\nolimits_q {(\tau _{mn}^a/d_{mn}^b)} }}

که در آن
  • \tau ، شدت فرمون
  • q، شهر‌هاي موجود در مسير k که بعد از شهر m مي‌آيند.
  • a، وزن‌دهي فرمون؛ زماني که a=0، نزديک‌ترين شهر انتخاب مي‌شود.
  • b، وزن‌دهي فاصله؛ زماني که b=0، فاصله ميان شهر در نظر گرفته نمي‌شود.

کوتاه‌ترين مسير، با بيش‌ترين فرمون، بيش‌ترين احتمال انتخاب شدن را دارد. در استفاده‌هاي اوليه‌ي از ACO، اين نتيجه حاصل شد که يک استراتژي نخبه‌گرايي نيز همانند آنچه که براي GA وجود دارد، مي‌تواند کارايي الگوريتم را بهبود ببخشد. در نتيجه، در محاسبه‌ي سطوح فرمون، به فرمون در طول بهترين مسير، وزني داده مي‌شود. فرمول بهينه‌سازي فرمون، به صورت زير بيان مي‌شود.

که در آن

{\tau _{mn}} = (1 - \xi ){\tau _{mn}} + \sum\limits_{k = 1}^{{N_{ants}}} {\tau _{mn}^k + \varepsilon \tau _{mn}^{elite}}
  • \tau _{mn}^k، فرمون ايجاد شده توسط مورچه‌ي k بين شهر‌هاي m و n
  • \xi ، ضريب تبخير فرمون
  • \varepsilon ، ثابت وزن‌دهي مسير نخبه
  • \tau _{mn}^{elite}، فرمون ايجاد شده روي بهترين مسيري که تاکنون، توسط الگوريتم يافته شده است. ی

ک حل نوعی از مسئله فرشنده دوره گرد توسط الگوریتم کلونی مورچگان را در شکل زیر می بینید.

شکل: یک حل نوعی از مسئله فرشنده دوره گرد توسط الگوریتم کلونی مورچگان

ACO براي حل مسائل ديگر بهينه‌سازي نيز استفاده مي‌شود. الگوریتم کلونی مورچگان در ورژن اولیه خود برای حل مسائل گسسته از نوع جایگشتی معرفی شد. بیشترین استفاده از این الگوریتم به حل مسائل مسیریابی در شبکه های کامپیوتری، تخصیص منابع در مهندسی صنایع، تقسیم وظایف در پردازنده ها و میان ماشین آلات بر می گردند. در مقابل ACO، الگوریتم های PSO و رقابت استعماری که به اختصار ICA نامیده می شود برای حل مسائل پیوسته معرفی شدند. اما هر دو الگوریتم در مدت کوتاهی پس از معرفی شدن، با معرفی نسخه های گسسته به ابزاری برای حل مسائل گسسته و بطور ویژه مسائل جایگشتی تبدیل شدند.

لازم به ذکر است که بر روی وبسایت الگوریتم رقابت استعماری کدهای حل مسئله فرشنده دوره گرد توسط الگوریتم کلونی مورچه ها نیز قرار داده شده است. در انتهای پست چند شکل دیگر مربوط به رفتار بهینه مورچه ها در یافتن مسیر غذا را می بینیم.

——————————————————————————————-

(1) نام علمي اين گونه‌ي خاص Linepithema Humile است که قبلا به نام Iridomyrmex Humilis نيز خوانده مي‌شد. مورچه‌ي آرژانتيني بسيار ريز و تيره رنگ است. زيستگاه اين موجود در بخش‌هاي شمالي آرژانتين، اوروگوئه و پاراگوئه و همچنين بخش‌هاي جنوبي برزيل است.

 شکل: رفتار بهینه کلونی مورچه ها

شکل: رفتار بهینه کلونی مورچه ها

شکل: رفتار بهینه کلونی مورچه ها


_____________________________________________
نظرات شما در انتهای این پست برای سایر خوانندگان، بسیار مفید خواهد بود. می توانید نظر خود را با اکانت سرویس های مختلف و یا به عنوان ناشناس در این پست درج نمائید.

صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.
تبلیغات:
متلبسایت فایل آموزشی جامعی در این زمینه دارد. با ذکر نام وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی از 30 درصد تخفیف ویژه!! در خرید فایل آموزشی جامع زیر در مورد الگوریتم کلونی مورچگان بهره مند شوید. جهت کسب اطلاعات بیشتر روی لینک عکس زیر کلیک کنید.

الگوریتم پرندگان یا اجتماع ذرات چیست؟

همانگونه که قبلاً نیز اعلام کرده بودیم، در وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی به معرفی سایر الگوریتم های تکاملی نیز پرداخته و مطالب آموزشی، کدها و فایل های آموزشی مربوط به آنها را نیز ارائه خواهیم کرد.

در این پست می خواهیم بطور خلاصه به معرفی الگوریتم بهینه Particle Swarm Optimization که به اختصار PSO نامیده شده و تحت نامهای مختلفی همچون الگوریتم انبوه ذرات، الگوریتم ازدحام ذرات و الگوریتم پرندگان درایران شناخته شده است، بپردازیم. با ما در ادامه مطلب همراه باشید.

عبارت Swarm در زبان انگلیسی به اجتماع دسته انبوهی از جانوران و حشرات اشاره می کند. در زیر یک swarm از زنبور ها را می بینید.

تصویر یک swarm از زنبورها

اگر سرعت اینترنتتان مناسب باشد، می توانید حرکت یک swarm از ماهی ها را در زیر ببینید. جهت حفظ امانت، لازم به ذکر است که تصویر متحرک زیر از ویکیپدیا گرفته شده است.

 

تصویر متحرک یک swarm از ماهی ها
ايده Particle Swarm Optimization، براي اولين بار توسط کندي و ابرهارت در سال 1995 مطرح شد. PSO، يک الگوريتم محاسبه اي تکاملي الهام گرفته از طبيعت و براساس تکرار مي‌باشد. منبع الهام اين الگوريتم، رفتار اجتماعي حيوانات، همانند حرکت دسته جمعي پرندگان و ماهي‌ها بود. از اين جهت که PSO نيز با يک ماتريس جمعيت تصادفي اوليه، شروع مي‌شود، شبيه بسیاری دیگر از الگوریتم های تکاملی همچون الگوريتم ژنتيک پيوسته و الگوریتم رقابت استعماری است. برخلاف الگوریتم ژنتیک ، PSO هيچ عملگر تکاملي همانند جهش و تزويج ندارد. از این جهت می شود گفت که الگوریتم رقابت استعماری شباهت بیشتری به PSO دارد تا به GA. هر عنصر جمعيت، يک ذره ناميده مي‌شود (که همان معادل کروموزوم در GA و یا کشور در الگوریتم رقابت استعماری) است. در واقع الگوريتم PSO از تعداد مشخصي از ذرات تشکيل مي-شود که به طور تصادفي، مقدار اوليه مي گيرند. براي هر ذره دو مقدار وضعيت و سرعت، تعريف مي شود که به ترتيب با يک بردار مکان و يک بردار سرعت، مدل مي‌شوند. اين ذرات، بصورت تکرارشونده اي در فضاي n‌ـ‌بعدي مسئله حرکت مي کنند تا با محاسبة مقدار بهينگي به عنوان يک ملاک سنجش، گزينه‌هاي ممکن جديد را جستجو کنند. بُعد فضاي مسئله، برابر تعداد پارامترهاي موجود در تابع مورد نظر براي بهينه سازي مي باشد. يک حافظه به ذخيرة بهترين موقعيت هر ذره در گذشته و يک حافظه به ذخيرة بهترين موقعيت پيش آمده در ميان همة ذرات، اختصاص مي‌يابد. با تجربة حاصل از اين حافظه ها, ذرات تصميم مي گيرند که در نوبت بعدي، چگونه حرکت کنند. در هر بار تکرار، همة ذرات در فضاي nـ‌بعدي مسئله حرکت مي¬کنند تا بالاخره نقطة بهينة عام، پيدا شود. ذرات، سرعت‌هايشان و موقعيت‌شان را بر حسب بهترين جواب‌هاي مطلق و محلي به‌روز مي‌کنند. يعني
v_{m,n}^{new} = v_{m,n}^{old} + {\Gamma _1} \times {r_1} \times (p_{m,n}^{local\,best} - p_{m,n}^{old}) + {\Gamma _2} \times {r_2} \times (p_{m,n}^{global\,best} - p_{m,n}^{old})
p_{m,n}^{new} = p_{m,n}^{old} + v_{m,n}^{new}

که در آن

  • {v_{m,n}}، سرعت ذره
  • {p_{m,n}}، متغير‌هاي ذره
  • {r_1},\,{r_2}، اعداد تصادفي مستقل با توزيع يکنواخت
  • {\Gamma _1},\,{\Gamma _2}\,، فاکتورهاي يادگيري
  • p_{m,n}^{local\,best}، بهترين جواب محلي
  • p_{m,n}^{global\,best}، بهترين جواب مطلق
مي‌باشند. الگوريتم PSO، بردار سرعت هر ذره را به‌روز کرده و سپس مقدار سرعت جديد را به موقعيت و يا مقدار ذره مي‌افزايد. به‌روز کردن‌هاي سرعت، تحت تأثير هر دو مقدار بهترين جواب محلي و بهترين جواب مطلق قرار مي‌گيرند. بهترين جواب محلي و بهترين جواب مطلق، بهترين جوابهايي هستند که تا لحظه‌ي جاري اجراي الگوريتم، به ترتيب توسط يک ذره و در کل جمعيت به دست آمده‌اند. ثابت‌هاي {\Gamma _1} و {\Gamma _2}\, به ترتيب، پارامتر ادراکي و پارامتر اجتماعي ناميده مي‌شوند. مزيت اصلي PSO اين است که پياده‌سازي اين الگوريتم ساده بوده و نياز به تعيين پارامتر‌هاي کمي دارد. همچنين PSO قادر به بهينه‌سازي توابع هزينه‌ي پيچيده با تعداد زياد مينيمم محلي است.

به زودی بر روی وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی کدها و مراجع آموزشی مفیدی راجع به این الگوریتم را برایتان قرار خواهیم داد.

_____________________________________________
نظرات شما در انتهای این پست برای سایر خوانندگان، بسیار مفید خواهد بود. می توانید نظر خود را با اکانت سرویس های مختلف و یا به عنوان ناشناس در این پست درج نمائید.

صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.

————————————-
تبلیغات متنی:

متلبسایت فایل آموزشی جامعی در مورد الگوریتم PSO تهیه کرده و ارائه نموده است. جهت مطالعه بیشتر در مورد این الگوریتم می توانید این فایل را تهیه کرده و مطالعه نمایید. با سفارش این محصول با ذکر نام وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی، از 20 درصد تخفیف ویژه بهره مند شوید. جهت کسب اطلاعات بیشتر، این لینک را ببینید.

جهت ارائه محصولات آموزشی خود در وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی با ما در تماس باشید.

قدم اول در حل مسئله بهینه سازی مقید با استفاده از الگوریتم رقابت استعماری

این پست در پاسخ سوال یکی از دوستان در مورد نحوه مواجهه با قیود در الگوریتم رقابت استعماری تهیه شده است. مطالعه این پست را به آنهایی که علاقه دارند تا مسائل بهینه سازی مقید خود را با الگوریتم های تکاملی و به طور ویژه با الگوریتم رقابت استعماری حل کنند، توصیه می کنیم. ایده مطرح شده در این پست، کلی بوده و قابل اعمال به همه الگوریتم های تکاملی از جمله الگوریتم های ژنتیک (Genetic Algorithms)، الگوریتم پرندگان یا ازدحام ذرات (Particle Swarm Optimization) و یا کلونی مورچگان (Ant Colony Optimization) می باشد. با ما در ادامه مطلب همراه باشید.

همانگونه که در پست های مختلفی بر روی وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی مثلاً در این پست (+) خدمتتان عرض کرده ایم، برای حل مسائل بهینه سازی مقید، اولین قدم، جلوگیری از تولید جوابهای خارج از محدود پذیرفته شده (Feasible Solutions) است. در کدهای الگوریتم رقابت استعماری برای این منظور چه باید کرد؟
اگر شما از کدهای الگوریتم رقابت استعماری استفاده می کنید، سه تابع وجود دارند که باعث ایجاد تغییرات در موقعیت کشورها (تغییر آنها) می شوند. هر یک از این سه بخش باید مورد بررسی قرار گرفته و تغییراتی در آنها ایجاد شود. نکته قابل ذکر این است که اگر قیود ساده و به صورت بازه ثابت برای هر متغیر باشند، نیازی به انجام این تغییرات نیست و نسخه های مختلف کدهای الگوریتم رقابت استعماری بر روی وب بازه اولیه متغیرها را در اول برنامه گرفته و جوابهای نهایی را نیز مطمئناً در این بازه می دهند. پس منظور از قیود، این نوع قیود ساده نیستند. به مثال زیر توجه کنید.

 

فرض کنید می خواهیم در یک مسئله بهینه سازی در حوزه مدیریت مالی، از مجموع یک بودجه برداشتی بهینه داشته باشیم. یک تابع هدف نیز داریم. قیدی داریم که مجموع برداشت ها باید یک (100 درصد) باشد. این قید هم باید در تولید جوابهای اولیه و هم در ایجاد تغییرات آرام (تابع جذب) و هم در تغییرات ناگهانی (تابع انقلاب) لحاظ شود.
در ورژن اولیه کدها که معمولاً استفاده می شود، این سه تابع به ترتیب عبارتند از
  • GenerateNewCountry
  • AssimilateColonies
  • RevolveColonies
در هر سه این توابع باید خطوطی از کد را اضافه کنیم که جمع متغیرهای تولیدی را برابر با یک کند. مثلاً تابع GenerateNewCountry در حالت اولیه به صورت زیر است.
function NewCountry = GenerateNewCountry(NumOfCountries,ProblemParams)
VarMinMatrix = repmat(ProblemParams.VarMin,NumOfCountries,1);
VarMaxMatrix = repmat(ProblemParams.VarMax,NumOfCountries,1);
NewCountry = (VarMaxMatrix – VarMinMatrix) . rand(size(VarMinMatrix)) + VarMinMatrix;
end
با اضافه کردن یک خط می توان مجموع اجزای یک کشور را در مرحله ایجاد برابر با یک کرد. تابع تغییر یافته و خط اضافه شده را در زیر می بینید.
function NewCountry = GenerateNewCountry(NumOfCountries,ProblemParams)
VarMinMatrix = repmat(ProblemParams.VarMin,NumOfCountries,1);
VarMaxMatrix = repmat(ProblemParams.VarMax,NumOfCountries,1);
NewCountry = (VarMaxMatrix – VarMinMatrix) . rand(size(VarMinMatrix)) + VarMinMatrix;
%% Normalizing the sum of population to 1
NewCountry = NewCountry . repmat(sum(NewCountry,2),1,ProblemParams.NPar);
end

نکته مهم: لازم به ذکر است که نرمالیزه کردن یک کشور (یک کردن مجموع اجزای آن) ممکن است در موارد معدودی باعث خروج از قیود بازه اولیه نیز بشود. بنابراین توصیه می شود اگر قید جدیدی را اضافه می کنید و تغییرات در موقعیت کشور (Position)، می دهید، درست بودن قیدهای قبلی را دوباره چک کنید. این کار باید در یک حلقه آنقدر تکرار شود که هنگام خروج از تابع همه قیود صادق باشند. ما در مورد بالا این کار را انجام ندادیم (و البته در حل مسئله خاصی که مدنظر بود، ظاهراً مشکلی ایجاد نمی شد)، اما شما حتماً این موضوع را در نظر بگیرید.

تغییرات مشابهی در توابع بعدی نیز باید ایجاد شود. دو تابع بعدی را به ترتیب در زیر آورده ایم.

تابع AssimilateColonies در حالت اولیه

function TheEmpire = AssimilateColonies(TheEmpire,AlgorithmParams,ProblemParams)
NumOfColonies = size(TheEmpire.ColoniesPosition,1);
Vector = repmat(TheEmpire.ImperialistPosition,NumOfColonies,1)-TheEmpire.ColoniesPosition;
TheEmpire.ColoniesPosition = TheEmpire.ColoniesPosition + 2 AlgorithmParams.AssimilationCoefficient rand(size(Vector)) . Vector;
MinVarMatrix = repmat(ProblemParams.VarMin,NumOfColonies,1);
MaxVarMatrix = repmat(ProblemParams.VarMax,NumOfColonies,1);
TheEmpire.ColoniesPosition=max(TheEmpire.ColoniesPosition,MinVarMatrix);
TheEmpire.ColoniesPosition=min(TheEmpire.ColoniesPosition,MaxVarMatrix);
end

تابع AssimilateColonies در حالت تغییر یافته

function TheEmpire = AssimilateColonies(TheEmpire,AlgorithmParams,ProblemParams)
NumOfColonies = size(TheEmpire.ColoniesPosition,1);
Vector = repmat(TheEmpire.ImperialistPosition,NumOfColonies,1)-TheEmpire.ColoniesPosition;
TheEmpire.ColoniesPosition = TheEmpire.ColoniesPosition + 2 AlgorithmParams.AssimilationCoefficient rand(size(Vector)) . Vector;
%% Modifying Population according to Conditions
MinVarMatrix = repmat(ProblemParams.VarMin,NumOfColonies,1);
MaxVarMatrix = repmat(ProblemParams.VarMax,NumOfColonies,1);
TheEmpire.ColoniesPosition=max(TheEmpire.ColoniesPosition,MinVarMatrix);
TheEmpire.ColoniesPosition=min(TheEmpire.ColoniesPosition,MaxVarMatrix);
TheEmpire.ColoniesPosition = TheEmpire.ColoniesPosition .      repmat(sum(TheEmpire.ColoniesPosition,2),1,ProblemParams.NPar);
end

تابع RevolveColonies در حالت اولیه

function TheEmpire = RevolveColonies(TheEmpire,AlgorithmParams,ProblemParams)
NumOfRevolvingColonies = round(AlgorithmParams.RevolutionRate numel(TheEmpire.ColoniesCost));
RevolvedPosition = GenerateNewCountry(NumOfRevolvingColonies , ProblemParams);
R = randperm(numel(TheEmpire.ColoniesCost));
R = R(1NumOfRevolvingColonies);
TheEmpire.ColoniesPosition(R,) = RevolvedPosition;
MinVarMatrix = repmat(ProblemParams.VarMin,NumOfColonies,1);
MaxVarMatrix = repmat(ProblemParams.VarMax,NumOfColonies,1);
TheEmpire.ColoniesPosition=max(TheEmpire.ColoniesPosition,MinVarMatrix);
TheEmpire.ColoniesPosition=min(TheEmpire.ColoniesPosition,MaxVarMatrix);
end

تابع RevolveColonies در حالت تغییر یافته

function TheEmpire = RevolveColonies(TheEmpire,AlgorithmParams,ProblemParams)
NumOfRevolvingColonies = round(AlgorithmParams.RevolutionRate numel(TheEmpire.ColoniesCost));
RevolvedPosition = GenerateNewCountry(NumOfRevolvingColonies , ProblemParams);
R = randperm(numel(TheEmpire.ColoniesCost));
R = R(1NumOfRevolvingColonies);
TheEmpire.ColoniesPosition(R,) = RevolvedPosition;
%% Modifying Population according to Conditions
NumOfColonies = size(TheEmpire.ColoniesPosition,1);
MinVarMatrix = repmat(ProblemParams.VarMin,NumOfColonies,1);
MaxVarMatrix = repmat(ProblemParams.VarMax,NumOfColonies,1);
TheEmpire.ColoniesPosition=max(TheEmpire.ColoniesPosition,MinVarMatrix);
TheEmpire.ColoniesPosition=min(TheEmpire.ColoniesPosition,MaxVarMatrix);
TheEmpire.ColoniesPosition = TheEmpire.ColoniesPosition . repmat(sum(TheEmpire.ColoniesPosition,2),1,ProblemParams.NPar);
end

با ایجاد این تغییرات تضمین می شود که جواب بهینه نهایی مسئله مجموع یک خواهد داشت.

در زیر نمودار همگرایی مسئله را می بینیم.

توجه شود که ایجاد تغییرات در توابع تولید کننده و اصلاح کننده جمعیت کشورها اولین و موثرترین قدم در راه حل مسائل بهینه سازی مقید می باشد، ولی تنها راه نیست. در بسیاری موارد قیود ما آنقدر پیچیده هستند که نمی توان آنها را در مرحله تولید کشور ها لحاظ کرد. در این صورت سراغ روشهای بعدی می رویم. بر روی سایت پستی کوتاه در مورد نحوه مواجهه با قید ها در بهینه سازی قرار داده شده است. موارد تکمیلی و فیلم اموزشی مفصلی در حال تهیه است که در آینده بر روی همین وبسایت عرضه خواهد گرفت.
دو پرسش و دو پاسخ:

یکی از دوستان پس از مطالعه متن فوق، سوالات زیر را مطرح کرده بودند. این دو سوال را ببینید و اگر برای شما نیز مفید بودند، پاسخ به دو سوال را نیز در ادامه ببینید.

  1. مسئله من تعداد زیادی قید داره، تا جایی که من کد ها رو بررسی کردم باید اونا رو تو 3 جا اعمال کنیم:      RevolveColonies و GenerateNewCountry و AssimilateColonies. اینا درستن یا جای دیگه ای هم هست؟
  2. بعد از تولید جمعیت اولیه ( یا مراحل بعدی) به صورت اتفاقی، شرایط رو اعمال میکنم و اگر جواب نداد هر مرحله رو از اول تکرار میکنم تا جمعیت ها حتما قیود رو شامل باشن و این کار خیلی سرعت رو پایین میاره آیا راه حلی برای بهبود این وضعیت هست؟

پاسخ ها:

  1. دقیقاً این بخشها هستند که باید تغییر پیدا کنند. تازه اینها بخشهایی هستند در صورت استفاده از “سیاست پیشگیری”، باید تغییر یابند. اگر از سیاست جریمه استفاده شوند، همین ها هم نیازی به تغییر ندارند! در این مورد فرض بر این هست که شما فایل صوتی زیر را مورد استفاده قرار داده اید!
    1. http://www.icasite.info/2010/05/blog-post_1525.html
  2. این بخش نیاز به خلاقیت در هر مسئله دارد. به عنوان یک مثال ساده، مثلاً وقتی قیدها قرار است مجموعشان برابر عدد یک شود، شما می توانید همیشه یکی از متغیرها را برابر یک منهای بقیه تعریف کنید. روش دیگر می تواند، تقسیم همه اعداد به مجموع شان باشد. بسته به شرایط، هر یک از این دو روش می تواند مناسب تر از دیگری باشد. اینکه چه راهی مناسب تر است، نیاز به ایده زنی در آن مسئله دارد. در ضمن اگر دیدید این مسیر سخت می شود، استفاده از متدهای کلی مبتنی بر جریمه پیش روی شماست! در نهایت این را هم در نظر بگیرید که چرخه مورد نظر نباید آنقدر پیچیده و با تغییرات بسیار در جوابها باشد که اطلاعات جواب را از میان ببرد. یعنی فقط به خاطر قیدها آنقدر روی جوابها کار شود که معلوم نشود از کجا آمدند و به کجا رفتند. در این شرایط ممکن است الگوریتم گیج شود. چون کلی انرژی بر روی حرکت در مسیر خاصی گذاشته شده و بعد شما بصورت میانبر آن جواب را وارد حوزه ممکنه جوابها کرده باشید، بدون اینکه الگوریتم بفهمد از چه مسیری به اینجا رسید تا دفعه بعد نیز، حواسش باشد. در حقیقت همان سیستم ماهی و ماهی گیری می شود. باید شما به الگوریتم با قیدهایتان، ماهیگیری یاد دهید.
_____________________________________________
نظرات شما در انتهای این پست برای سایر خوانندگان، بسیار مفید خواهد بود. می توانید نظر خود را با اکانت سرویس های مختلف و یا به عنوان ناشناس در این پست درج نمائید.

صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.

انواع مسائل بهینه سازی و تقسیم بندی آنها

جهت انتخاب استراتژی مناسب برای حل مسائل بهینه سازی باید شناخت مناسبی از آن داشته باشیم. در این پست می خواهیم انواع مسائل بهینه سازی را از دیدگاه های مختلف تقیسم بندی کنیم. با ما در ادامه مطلب همراه باشید.

مسائل بهینه سازی را از دیدگاه های مختلف به چندین نوع می توان تقسیم بندی نمود.
“این پست اختصاصی وبسایت محاسبات تکاملی و الگوریتم رقابت استعماری تهیه شده است و درج آن در رسانه های چاپی و یا مجازی فقط با کسب اجازه از وبسایت مذکور، مجاز می باشد.”
بهینه سازی با سعی خطا، بهینه سازی با تابع
مثالی از یک مسئله بهینه سازی با سعی و خطا تنظیم آنتن یک گیرنده تلویزیونی است. بهینه سازی با تابع نیز زمانی است که یک مسئله بهینه سازی توسط یک تابع ریاضی که به نام های تابع هزینه، تابع برازش و تابع هدف شناخته می شود، مدل شده و از روش های ریاضی برای حل آن استفاده شود.

بهینه سازی تک بعدی و بهینه سازی چند بعدی
اگر تنها یک متغیر در مسئله بهینه سازی وجود داشته باشد، مسئله بهینه سازی یک مسئله تک بعدی و در غیر این صورت دو بهدی است. مثالی از یک مسئله بهینه سازی یک بعدی به صورت زیر می باشد.

\begin{array}{l}  f(x) = {x^2} + \sin (x) \\   x \in [ - 10,10] \\   \end{array}

یک نمونه از یک مسئله چند یعدی (3 بعدی) به صورت زیر می باشد.

\begin{array}{l}  f(x,y,z) = {x^2} + {y^2} + {z^2} + \sin (x) + \sin (y) + \sin (z) \\   x,y,z \in [ - 10,10] \\   \end{array}

بهینه سازی پویا و بهینه سازی ایستا
اگر تابع هزینه مسئله بهینه سازی تابعی از زمان نباشد، با یک مسئله بهینه سازی ایستا سر و کار داریم. ولی اگر زمان نیز وارد تابع هزینه شود مسئله بهینه سازی پویا می شود. به عنوان مثال حرکت از یک نقطه شهر به نقطه دیگر با انتخاب کوتاهترین مسیر یک مسئله بهینه سازی ایستا می باشد. اما اگر پارامترهای دیگری همچون ترافیک که تابعی از زمان است را وارد تابع هزینه بکنیم، با یک مسئله بهینه سازی پویا سر و کار داریم. مثالی از یک مسئله بهینه سازی ایستا در زیر نشان داده شده است.

\begin{array}{l}  f(x,y) = {x^2} + {y^2} + \sin (x) + \sin (y) \\   x,y \in [ - 10,10] \\   \end{array}

یک حالت تغییر پذیر با زمان این تابع به صورت زیر نشان داده می شود.

\begin{array}{l}  f(x,y,t) = {x^2} + {y^2} + \sin (x/t) + \sin (y/t) \\   x,y \in [ - 10,10] \\   \end{array}

جواب هر دو مسئله بهینه سازی فوق نقطه (0,0) است. حتی تابع دوم نیز که متغیر با زمان می باشد برای هر لطحظه از زمان t به جواب (0,0) می رسد. اما این حالت کلی نمی باشد و در حالت کلی جواب بهینه مسئله پارامتر زمان را نیز با خود خواهد داشت.

بهینه سازی مقید و نا مقید
اگر متغیر های مسئله بهینه سازی به بازه (و یا قید) خاصی محدود باشند، با یک مسئله بهینه سازی مقید (Constrained Optimization) سروکار داریم و در غیر این صورد مسئله بهینه سازی نا مقید است. مثالی از بهینه سازی مقید را در زیر می بینید. در این رابطه موارد بعد از تابع هزینه همگی قیود بهینه سازی هستند. جواب بهینه مسئله باید از میان جوابهایی انتخاب شوند که در هر سه قیود صدق می کنند.

f(x,y) = {x^2} + {y^2} + \sin (x) + \sin (y)
x,y \in [ - 10,10]
{x^2} + {y^2} \le 20
x - y \ge 15

بر روی وبسایت الگوریتم رقابت استعماری و بهینه سازی تکاملی پست های مجزایی در مورد نحوه حل مسائل بهینه سازی مقید وجود دارند. الگوریتم رقابت استعماری با موفقیت بسیاری جهت حل مسائل بهینه سازی مقید مورد استفاده قرار گرفته است به گونه ای که نسخه های مخصوصی از این الگوریتم جهت حل بهتر مسائل مقید به صورت مجزا در قالب مقالات مختلفی منتشر شده اند.

بهینه سازی پیوسته و یا گسسته
یک مسئله بهینه سازی گسسته مسئله ای است که در آن متغییر های مسئله در یک بازه معیین تغییرات گسسته دارند. در حالی که در یک مسئله پیوسته مغییرها در بازه معیین تغییرات گسسته دارند. مثالی از یک مسئله بهینه سازی پیوسته به صورت زیر است. این تابع به تابع راسریجین معروف است.

\begin{array}{l}  {f_1} = 20 + {x^2} + {y^2} - 10*(\cos (2\pi x) + \cos (2\pi y)) \\   x,y \in [ - 10,10] \\   \end{array}

این تابع به تابع راسریجین معروف است و نقطه بهینه این تابع نقطه (0,0) است. شکل زیر این تابع را نشان می دهد.

 

\begin{array}{l}  {f_1} = 20 + {n^2} + {m^2} - 10*(\cos (2\pi n) + \cos (2\pi m)) \\   n,m \in [ - 10, - 9, - 8,.\,.\,.\,,8,9,10] \\   \end{array}

به عنوان مثالی از یک مسئله بهینه سازی گسسته، همان تابع فوق را بصورت گسسته در نظر می گیریم.

نقطه بهینه این تابع نقطه (0,0) است. شکل این تابع در زیر نشان داده شده است.

الگوریتم رقابت استعماری در نسخه های اولیه خود تنها برای حل مسائل بهینه سازی پیوسته معرفی شده بود. اما هم اکنون این الگوریتم در نسخه های تغییر یافته خود، به خوبی جهت حل مسائل گسسته نیز مورد استفاده قرار می گیرد.

بهینه سازی تک معیاره و چند معیاره
یک مسئله بهینه سازی تک معیاره (Single Objective)، دارای تنها یک تابع هدف می باشد. مثالی از این نوع مسئله بهینه سازی به صورت زیر می باشد.

\begin{array}{l}  {f_1} = 20 + {x^2} + {y^2} - 10*(\cos (2\pi x) + \cos (2\pi y)) \\   x,y \in [ - 10,10] \\   \end{array}

اما در یک مسئله چند معیاره (Multi Objective)، تعداد تابع هدف هایی که بطور همزمان بهینه می شوند بیش از یک تا است. مثال از این نوع مسئله بهینه سازی به صورت زیر می باشد.

\begin{array}{l}  {f_1} = 10 + {x^2} + {y^2} - 10*(\cos (\pi x) + \cos (\pi y)) \\   {f_2} = 20 + {x^3} + {y^3} - 20*(\cos (2\pi x) + \cos (2\pi y)) \\   x,y \in [ - 10,10] \\   \end{array}
این مسئله دارای دو تابع هدف می باشد که باید بطور همزمان بهینه شوند. اگر فرض کنیم که توابع فوق مسائل مینیمم سازی هستند، در این صورت به عنوان مثال جواب ({f_1},{f_2}) = (10,11) در مقابل جواب ({f_1},{f_2}) = (20,22) بهتر بوده و انتخاب مناسب تری می باشد. اما در مقابل آن جواب (یعنی ({f_1},{f_2}) = (10,11))، جواب ({f_1},{f_2}) = (9,12) نه بهتر است نه بدتر. در حقیقت از دید {f_2} جواب اول بهتر است و از دید {f_1} جواب دوم. مجموعه جوابهایی که هیچ برتری نسبت به هم ندارند تشکیل یک منحنی را در صفحه می دهند که به نام منحنی پرتو (Pareto) شناخته می شود. شکل زیر یک منحنی پرتو مربوط به یک مسئله بهینه سازی نوعی را نشان می دهد.

 

منحنی پرتو در بر دارنده همه ی جوابهای مناسبی است که نسبت به همدیگر هیچ برتری ای ندراند. معمولاً در یک مسئله بهینه سازی چند معیاره، با دادن اهمیتی (وزنی) به هر یک از توابع هدف و جمع بستن آنها، مسئله را تبدیل به یک مسئله تک معیاره می کنند. این کار در حقیقت قطع کردن یک خط با منحنی پرتو است که به یک جواب معین می رسد.

حل مسائل بهینه سازی چند هدفه و رسیدن به منحنی پرتو، به تنهایی مبحث مستقل و مهمی از حوزه بهینه سازی می باشد. نسخه های ویژه الگوریتم رقابت استعماری برای حل مسائل بهینه سازی چند هدفه پس از انتشار بر روی سایت قرار خواهد گرفت.

——————————————–
مراجع: در تهیه این متن از بخش هایی از سمینار کارشناسی ارشد جناب آقای سید مصطفی کلامی هریس استفاده شده است.

_____________________________________________
نظرات شما در انتهای این پست برای سایر خوانندگان، بسیار مفید خواهد بود. می توانید نظر خود را با اکانت سرویس های مختلف و یا به عنوان ناشناس در این پست درج نمائید.
صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.

برنامه‌ريزي ژنتيک چیست؟

شكل: جمعيت کوچک توابع چندجمله‌اي در برنامه‌ريزي ژنتيک

برنامه‌ريزي ژنتيک (Genetic Programming)، که به اختصار GP نامیده می شود، از الگوريتم‌هاي ژنتيک براي نوشتن برنامه‌هاي کامپيوتري استفاده مي‌کند. در اين حالت متغيرها، ساختار‌هاي برنامه‌ريزي هستند و خروجي نيز ميزان توانايي برنامه در رسيدن به اهدافش است. تغييرات کوچکي در عملگر‌هاي الگوريتم ژنتيک همانند جهش، بازتوليد و ارزيابي تابع هزينه براي استفاده از آن‌ها در GP، مورد نياز هستند. در حقيقت GP برنامه‌ي‌ کامپيوتري‌اي است که برنامه‌هاي کامپيوتري ديگر را مي‌نويسد. هر کروموزوم در جمعيت اوليه GP، از تعدادي تابع تصادفي و ترمينال‌ها تشکيل يافته است. مثالهايي از اين توابع تصادفي، عمليات جمع، تفريق، تقسيم، ضرب و توابع مثلثاتي هستند. ترمينال‌ها نيز شامل متغير‌ها و ثابت‌هاي برنامه هستند. شکل فوق جمعيت کوچک توابع چندجمله‌اي را نشان مي‌دهد.

هر برنامه در جمعيت، اجرا شده و هزينه‌ي آن به دست مي‌آيد. هزينه، نشان دهنده‌ي ميزان توانايي برنامه در حل مسئله مورد نظر است. پژوهشگران زيادي، GP را براي حل مسائل مختلفي شامل تحليل خودکار کنترل‌کننده‌ها، مدارها و آنتن‌ها استفاده کرده‌اند. اما در کنار استفاده فراوان آن، هنوز در مورد قوام (Robustness) نتايج بدست آمده از GP، اطمينان کافي وجود ندارد.
معادل برنامه ریزی ژنتیک را می توان در مورد الگوریتم رقابت استعماری نیز اعمال کرده و به “برنامه ریزی استعماری” یا به عبارت دیگر Imperialist Programming رسید. یعنی الگوریتمی که از الگوریتم رقابت استعماری برای نوشتن برنامه های دیگر و نیز اهداف تقریب تابعی استفاده می کند.

 

_____________________________________________
نظرات شما در انتهای این پست برای سایر خوانندگان، بسیار مفید خواهد بود. می توانید نظر خود را با اکانت سرویس های مختلف و یا به عنوان ناشناس در این پست درج نمائید.
صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.