برنامهنویسی ژنتیک
برنامهنویسی ژنتیک زیر مجموعهای از رایانش فرگشتی با هدف ایجاد برنامههای قابل اجرا جهت حل مسائل است. در این روش، فضای جستجو مجموعهای از برنامهها است. یک برنامه، یک داده ساختار تلقی میشود که میتواند مستقیماً توسط رایانه اجرا شود، یا اینکه به یک همچین برنامهای ترجمه شود یا اینکه توسط یک مفسر تفسیر شود. در این روش پاسخهای مسئله برنامههای رایانهای هستند که قادر به اجرای مناسب وظیفهٔ از پیش تعریفشده باشند. از مسائل باز در این حوزه میتوان به موارد زیر اشاره کرد:
تاریخچه
ویرایشمیتوان پیشنهاد آلن تورینگ در دههٔ ۱۹۵۰ را نخستین پیشنهاد ثبت شده برای تکامل برنامهها دانست.[۲] هرچند سی سال طول کشید تا ریچارد فورسیت موفقیت تکامل برنامههای کوچک را که به شکل درخت ارائه شده بودند، نشان دهد.[۳] فورسیت از این روش برای دستهبندی شواهد صحنهٔ جرم استفاده کرد.
ایدهٔ برنامههای تکاملی که در زبان لیسپ آغاز شده بود، توسط دانشجویان جان هالند پیگیری شد و هنگامی که نخستین کنفرانس الگوریتم ژنتیک را در پیتسبورگ برگزار کردند، نایکل کرامر برنامههای تکاملی را در دو زبان طراحی شدهٔ ویژه منتشر کرد.[۴] در سال ۱۹۸۸ جان کوزا طرح خود را برای اختراع الگوریتم ژنتیک در برنامهنویسی تکاملی به ثبت رساند.[۵]
کوزا مطالعات خود را ادامه داد و ۲۰۵ مقاله دربارهٔ «برنامهنویسی ژنتیک» که توسط دیوید گولدبرگ نامگذاری شده بود،[۶] منتشر کرد. البته در واقع مجموعهٔ ۴ کتابی او که از سال ۱۹۹۲ همراه ویدئوهای آموزشی منتشر شد،[۷][۸] برنامهنویسی ژنتیک را بنیان نهاد.
کوزا در سال ۱۹۹۶ کنفرانس سالانهٔ برنامهنویسی ژنتیک را راهاندازی کرد.[۹] در سال ۲۰۰۰ نخستین مجلهٔ اختصاصی آن منتشر شد[۱۰] و سه سال بعد، ریک ریولو کارگاه سالانهٔ برنامهنویسی ژنتیک تئوری و عملی را تأسیس کرد.[۱۱]
تعریف برنامه
ویرایشبرنامهنویسی ژنتیک برنامههای رایانهای را که به صورت سنتی با ساختار درختی در حافظه تعریف میشوند، تکامل میدهد.[۱۲] میتوان درختان را به سادگی در روشی بازگشتی ارزیابی کرد. هر گره درخت یک تابع عملگر دارد و هر گره ترمینال شامل یک عملوند است. به این ترتیب، به سادگی میتوان عبارات ریاضی را تکامل داد و ارزیابی کرد. برنامهنویسی ژنتیک علاقهمند به استفاده از برنامههایی است که به صورت طبیعی دارای ساختار درختی باشند. (برای نمونه زبانهای برنامهنویسی تابعی)
ساختارهای بدون درخت نیز پیشنهاد شدهاند و با موفقیت به اجرا درآمده اند. برای نمونه برنامهنویسی ژنتیک خطی برای برنامههای دستوری سنتیتر مناسب است.[۱۳] µGP از گراف چندگانه برای ایجاد برنامههایی که دستور زبان اسمبلی را بهطور کامل بیان میکنند، بهره میگیرد.[۱۴] برنامهنویسی ژنتیک دکارتی روش دیگری است که به جای ساختار درختی از ساختار گراف استفاده میکند.
انتخاب
ویرایشدر فرایند انتخاب، افراد مشخصی از نسل فعلی انتخاب میشوند تا والدین نسل بعدی باشند. این افراد با روشهای احتمالاتی به گونهای انتخاب میشوند که افراد با عملکرد بهتر بخت بالاتری برای انتخاب داشته باشند.[۱۵]
دستهبندیها
ویرایشانواع مختلف برنامهنویسی ژنتیک را میتوان به روشهای مختلف دستهبندی کرد. بر اساس روش نمایش برنامه، چند دستهبندی مطرح وجود دارد:
- برنامهنویسی ژنتیک استاندارد یا درختی: در این روش، یک درخت نحو یا عبارت نمایش دهنده یک برنامه است.
- برنامهنویسی ژنتیک بر اساس گراف: یک تعمیم به کل از برنامهنویسی ژنتیک درختی، برنامهنویسی ژنتیک بر اساس گراف است. شبکههای عصبی نیز میتوانند گونهای از این نوع در نظر گرفته شوند. چند نوع برنامهنویسی ژنتیک که در این دسته قرار میگیرند شامل برنامهنویسی ژنتیک موازی و توزیعشده[۱۶]و همچنین Cartesian GP[۱۷]هستند. علاوهبر این دو، Neuro-evolution of augmented topologies[۱۸]یا به اختصار NEAT نیز یک نوع دیگر است.
- نمایش ماشین حالات متناهی: در این نوع نمایش از گرافها اما به شیوهای دیگر استفاده میشود. یک برنامه، یک ماشین حالات متناهی است. یک نمونه که در این دستهبندی قرار میگیرد برنامهسازی تکاملی میباشد.
- برنامهنویسی ژنتیک نحوی (به انگلیسی: Grammatical GP): در این دستهبندی یک نحو مستقل از متن استفاده میشود. در رویکرد رایج، جستجو در فضایی انجام میشود که توسط یک نحو مستقل از متن غیرقطعی تعریف میشود.
- برنامهنویسی ژنتیک خطی: در این روش، یک برنامه فهرستی از دستورها است که به صورت پشت سر هم اجرا میشوند. معمولاً برای بدست آوردن یک کارکرد به اندازه کافی پیچیده و مناسب، تعدادی ثبات به عنوان حالت یا حافظه تعریف میشوند.
- برنامهنویسی ژنتیک پشتهای: نوعی از برنامهنویسی ژنتیک خطی است با این تفاوت که از هیچ ثباتی استفاده نمیشود. در عوض یک پشته به عنوان حافظه به کار گرفته میشود.
- برنامهنویسی ژنتیک سطح پایین: در این روش، برنامهها مستقیم یک زبان سطح پایین هستند. برای مثال بایتکد جاوا یا اسمبلی اکس۸۶.
کاربرد
ویرایشبرنامهنویسی ژنتیک با موفقیت به عنوان ابزار برنامهنویسی خودکار، ابزار یادگیری ماشین و موتور حل مسألهٔ خودکار به کار رفته است.[۱۵] این روش به ویژه در دامنههایی که شکل دقیق پاسخ شناخته شده نیست یا پاسخ تقریبی قابل پذیرش است، قابل استفاده است. از برنامهنویسی ژنتیک برای مسائل دستهبندی و همچنین مسائل رگرسیون در یادگیری ماشین استفاده شده است.[۱۹]
منابع
ویرایش- ↑ https://alfagroup.csail.mit.edu/sites/default/files/documents/2015%20Genetic%20Programming.%20James%20McDermott%20and%20Una-May%20O%27Reilly.%20Handbook%20of%20Computational%20Intelligence%2C%202015.pdf
- ↑ "Computing Machinery and Intelligence". www.cs.bham.ac.uk (به انگلیسی). Retrieved 2018-05-19.
- ↑ "BEAGLE A Darwinian Approach to Pattern Recognition". www.cs.bham.ac.uk (به انگلیسی). Retrieved 2018-05-19.
- ↑ "A representation for the Adaptive Generation of Simple Sequential Programs". www.cs.bham.ac.uk (به انگلیسی). Retrieved 2018-05-19.
- ↑ "Non-Linear Genetic Algorithms for Solving Problems". www.cs.bham.ac.uk (به انگلیسی). Retrieved 2018-05-19.
- ↑ Goldberg. D.E. (1983), Computer-aided gas pipeline operation using genetic algorithms and rule learning. Dissertation presented to the University of Michigan at Ann Arbor, Michigan, in partial fulfillment of the requirements for Ph.D.
- ↑ "Genetic Programming: On the Programming of Computers by Means of Natural Selection". www.cs.bham.ac.uk (به انگلیسی). Retrieved 2018-05-19.
- ↑ "Genetic Programming:The Movie". www.cs.bham.ac.uk (به انگلیسی). Retrieved 2018-05-19.
- ↑ "Genetic Programming 1996: Proceedings of the First Annual Conference". www.cs.bham.ac.uk (به انگلیسی). Retrieved 2018-05-19.
- ↑ Banzhaf, Wolfgang (2000-04-01). "Editorial Introduction". Genetic Programming and Evolvable Machines (به انگلیسی). 1 (1–2): 5–6. doi:10.1023/A:1010026829303. ISSN 1389-2576.
- ↑ "Genetic Programming Theory and Practice". www.cs.bham.ac.uk (به انگلیسی). Retrieved 2018-05-20.
- ↑ Nichael L. Cramer "A Representation for the Adaptive Generation of Simple Sequential Programs" بایگانیشده در ۴ دسامبر ۲۰۰۵ توسط Wayback Machine.
- ↑ Garnett Wilson and Wolfgang Banzhaf. "A Comparison of Cartesian Genetic Programming and Linear Genetic Programming".
- ↑ Giovanni Squillero. "µGP (MicroGP)".
- ↑ ۱۵٫۰ ۱۵٫۱ "A Field Guide to Genetic Programming". www.gp-field-guide.org.uk. Retrieved 2018-05-20.
- ↑ Corne، David؛ Dorigo، Marco؛ Glover، Fred (۱۹۹۹). «۲۷». New Ideas in Optimization, Advanced Topics in Computer Science. صص. ۴۰۳–۴۳۱. شابک ۰-۰۷-۷۰۹۵۰۶-۵.
- ↑ Thomson, Peter (2000). "Cartesian genetic programming" (به انگلیسی). doi:doi:10.1007/978-3-540-46239-2_9.
{{cite journal}}
: Cite journal requires|journal=
(help); Check|doi=
value (help); More than one of|نام خانوادگی1=
و|نام خانوادگی=
specified (help); More than one of|نام1=
و|نام=
specified (help) - ↑ Stanly، Kenneth O. Compositional pattern producing networks: A novel abstraction of development. Genetic Programming and Evolvable Machines. doi:10.1007/s10710-007-9028-8. شابک ۱۳۸۹-۲۵۷۶ مقدار
|شابک=
را بررسی کنید: length (کمک). کاراکتر line feed character در|عنوان=
در موقعیت 78 (کمک) - ↑ Zhang، M.؛ Smart، W. «Multiclass object classification using genetic
programming» [دستهبندی چند دسته اشیا با استفاده از برنامهنویسی ژنتیک]. ۳۰۰۵ جلد: ۳۶۹–۳۷۸. کاراکتر line feed character در
|عنوان=
در موقعیت 47 (کمک)