Продолжая использовать сайт, вы даете свое согласие на работу с этими файлами.
برنامهنویسی ژنتیک
برنامهنویسی ژنتیک یکی از روشهای هوش مصنوعی است که بر پایه آن، برنامههای رایانهای به صورت مجموعه ای از ژنها کدگذاری میشوند. سپس این ژنها با استفاده از الگوریتم فرگشتی (که معمولاً الگوریتم ژنتیک است) تغییر داده میشوند. این روش یکی از کاربردهای الگوریتمهای ژنتیک است که در آن، فضای پاسخ شامل برنامههای رایانهای است. پاسخهای مسئله برنامههای رایانهای هستند که قادر به اجرای مناسب وظیفهٔ از پیش تعریفشده باشند. روشهای به کار رفته در تبدیل برنامهها به کروموزوم مصنوعی و ارزیابی برازش آن در مقایسه با وظیفهٔ از پیش تعریفشده همچنان موضوع پژوهش هستند.
تاریخچه
میتوان پیشنهاد آلن تورینگ در دههٔ ۱۹۵۰ را نخستین پیشنهاد ثبت شده برای تکامل برنامهها دانست. هرچند سی سال طول کشید تا ریچارد فورسیت موفقیت تکامل برنامههای کوچک را که به شکل درخت ارائه شده بودند، نشان دهد. فورسیت از این روش برای دستهبندی شواهد صحنهٔ جرم استفاده کرد.
ایدهٔ برنامههای تکاملی که در زبان لیسپ آغاز شده بود، توسط دانشجویان جان هالند پیگیری شد و هنگامی که نخستین کنفرانس الگوریتم ژنتیک را در پیتسبورگ برگزار کردند، نایکل کرامر برنامههای تکاملی را در دو زبان طراحی شدهٔ ویژه منتشر کرد. در سال ۱۹۸۸ جان کوزا طرح خود را برای اختراع الگوریتم ژنتیک در برنامهنویسی تکاملی به ثبت رساند.
کوزا مطالعات خود را ادامه داد و ۲۰۵ مقاله دربارهٔ «برنامهنویسی ژنتیک» که توسط دیوید گولدبرگ نامگذاری شده بود، منتشر کرد. البته در واقع مجموعهٔ ۴ کتابی او که از سال ۱۹۹۲ همراه ویدئوهای آموزشی منتشر شد، برنامهنویسی ژنتیک را بنیان نهاد.
کوزا در سال ۱۹۹۶ کنفرانس سالانهٔ برنامهنویسی ژنتیک را راهاندازی کرد. در سال ۲۰۰۰ نخستین مجلهٔ اختصاصی آن منتشر شد و سه سال بعد، ریک ریولو کارگاه سالانهٔ برنامهنویسی ژنتیک تئوری و عملی را تأسیس کرد.
تعریف برنامه
برنامهنویسی ژنتیک برنامههای رایانهای را که به صورت سنتی با ساختار درختی در حافظه تعریف میشوند، تکامل میدهد. میتوان درختان را به سادگی در روشی بازگشتی ارزیابی کرد. هر گره درخت یک تابع عملگر دارد و هر گره ترمینال شامل یک عملوند است. به این ترتیب، به سادگی میتوان عبارات ریاضی را تکامل داد و ارزیابی کرد. برنامهنویسی ژنتیک علاقهمند به استفاده از برنامههایی است که به صورت طبیعی دارای ساختار درختی باشند. (برای نمونه زبانهای برنامهنویسی تابعی)
ساختارهای بدون درخت نیز پیشنهاد شدهاند و با موفقیت به اجرا درآمده اند. برای نمونه برنامهنویسی ژنتیک خطی برای برنامههای دستوری سنتیتر مناسب است.µGP از گراف چندگانه برای ایجاد برنامههایی که دستور زبان اسمبلی را بهطور کامل بیان میکنند، بهره میگیرد. برنامهنویسی ژنتیک دکارتی روش دیگری است که به جای ساختار درختی از ساختار گراف استفاده میکند.
انتخاب
در فرایند انتخاب، افراد مشخصی از نسل فعلی انتخاب میشوند تا والدین نسل بعدی باشند. این افراد با روشهای احتمالاتی به گونهای انتخاب میشوند که افراد با عملکرد بهتر بخت بالاتری برای انتخاب داشته باشند.
کاربرد
برنامهنویسی ژنتیک با موفقیت به عنوان ابزار برنامهنویسی خودکار، ابزار یادگیری ماشین و موتور حل مسألهٔ خودکار به کار رفتهاست. این روش به ویژه در دامنههایی که شکل دقیق پاسخ شناخته شده نیست یا پاسخ تقریبی قابل پذیرش است، قابل استفاده است.