مقدمه نظریه تاریخی داروین بعنوان یک راه حل برای مسائل علمی استفاده می شود و انسانها به وسیله آن اعمال هوشمندانه خود را انجام میدهند و بر مبنای آن اقدام به برنامه نویسی مینمایند. نظریه داروین: "موجودات اولیه (تک سلولیها) در تلاش برای بقا شروع به تکامل کردهاند و در طی جریان تولید مثل و با همکاری طبیعت، موجودات کاملتری را بوجود آوردهاند، و این موجودات نیز به همین شکل تکامل را ادامه دادهاند. این تکامل در طی چندین هزار سال ادامه یافته تا موجودات فعلی بر روی زمین حاصل شدهاند". در اینجا یک سوال پیش میآید: چگونه یک موجود شکل و فرم موجودات پس از خود را تعیین میکند؟ برای جواب به این سوال به شرح فرآیند تولید مثل موجودات میپردازیم. برای تولید مقل یک موجود کروموزمهای والدین با هم ترکیب و سلول تخم را تشکیل میدهند. تکثیر این سلول تخم منجر به تشکیل فرزند تقریباً مشابه والدینش میشود که خصوصیات آنها را به همراه دارد.این روند باعث تکامل یک موجود میشود. در حین تشکیل سلول تخم تغییرات ناخواستهای درون کرموزومهای سلول بوجود میآید، که اگر این تغییرات کوچک باشند موجود اصلی اصلاح میشود و اگر این تغییرات بزرگ باشند منجر به تشکیل یک موجود جدید میشود. اگر موجود جدید نسبت به والدینش در تقابل با محیط برتری داشته باشد، در جریان زندگی موفقتر و امکان تولید مثل پیدا میکند و در نتیجه خصوصیاتش را به فرزندانش منتقل مینماید. نظریه داروین بر مبنای سه فاکتور اصلی بنا نهاده شدهاست: 1) تنوع: ترکیب شدن مشخصات والدین متفاوت باعث ترکیب شدن خصوصیات خوب آنها شده و یک موجود بهتر به وجود میآید. 2) تصادف: عامل ایجاد تغییرات در موجودات فرزند 3) انتخاب: این عمل توسط محیط انجام میشود، یعنی موجودات با شایستگی پایین احتمال ادامه حیات و تولید مثل کمتری دارند. (بقای شایستهترین) الگوریتمهای ژنتیک بر مبنای سه فاکتور فوق شکل گرفتند و با پیشرفت این الگوریتمها روشهای حل مساله به نام پردازش تکاملی به وجود آمدند. شاخههای پردازش تکاملی عبارتند از: 1) الگوریتمهای ژنتیک (Genetic Algorithms) 2) برنامهنویسی ژنتیک (Genetic Programming) 3) استراتژیهای تکاملی (Evolutionary Strategies) 4) برنامهنویسی تکاملی (Evolutionary Programming)
آشنایی با برنامهنویسی ژنتیک تاریخچه برنامهنویسی ژنتیک به اوایل دهه 90 میلادی باز میگردد. آقای John Koza بیشترین تلاش را برای پیشرفت شاخه برنامهنویسی ژنتیک انجام دادهاست. برنامهنویسی ژنتیک یکی از شاخههای پردازش تکاملی است که در آن با استفاده از الگوریتم ژنتیک و مفاهیم درختهای تجزیه، بجای نوشتن کد برنامه، به کامپیوتر این امکان را میدهیم که تنها با دانستن مفهوم کلی از کار، برنامه مورد نظر را برایم آماده و سپس اجرا و خروجی مطلوب ما را نمایش دهد.
برنامهنویسی ژنتیک چیست؟ آیا کامپیوتر این قابلیت را دارد که با بیان کار مد نظرمان بدون اعلام چگونگی انجامش ، آن را برایمان به انجام دهد؟ پاسخ به این سوال مثبت است. این قابلیت توسط برنامهنویسی ژنتیک فراهم شدهاست، به اینصورت که برنامهنویسی ژنتیک یک برنامه کامپیوتری برای یک مساله سطح بالا تولید میکند. بطور خلاصه هدف ما برنامهنویسی اتوماتیک است که با نامهای Automatic Programming یا Program Synthesis و یا Program Induction شناخته میشود. برآورده ساختن این هدف با استفاده از پرورش یک جمعیت از برنامههای کامپیوتری که با استفاده از مفاهیم تئوری داروین پرورش داده میشود، صورت میپذیرد. پرورش این جمعیت با استفاده از نسخه الهام گرفته از عملهای انتخاب و تولیدمثل بیولوژیکی صورت میگیرد، که این اعمال همان بازترکیبی و جهش میباشند که با ترکیب با اعمال انتخاب والدین و بازماندگان به این مهم دست پیدا میکنند.
قدمهای اولیه برنامه نویسی ژنتیک چه مراحلی را باید برای تهیه برنامه برای یک مساله سطح بالا با استفاده از برنامهنویسی ژنتیک انجام داد؟ در اولین قدم میبایست با انجام یکسری اعمال، برنامه سطح بالا را به فرم مناسب الگوریتم ژنتیک تبدیل نمود. برای این منظور میبایست پنج قدم اساسی زیر به وسیله عامل انسانی انجام شود: 1) تعیین یک مجموعه از عناصر پایانی برای این که یک برنامه کامپیوتری را بتوان به فرم کروموزومهای مورد نیاز الگوریتم ژنتیک (درخت تجزیه) تبدیل کرد، نیاز است که عناصر برگ گراف برنامه را مشخص نمود. این عناصر همان پایانیها یا Terminalها میباشند. عناصر پایانی، متغیرهای مستقل مساله، توابع بدون پارامتر ورودی یا ثابتهایی هستند که بصورت تصادفی ایجاد شدهاند. 2) مجموعه توابع اولیه که بایستی برنامه بر پایه آنها تولید شود. 3) معیار شایستگی معیار شایستگی وسیلهای است برای ارزیابی برنامههای تولید شده توسط الگوریتم ژنتیک و شناسایی برنامههای بهتر 4) تعیین پارامترهایی برای کنترل اجرای الگوریتم ژنتیک (مانند نوع انتخاب والدین و فرزندان، نرخ جهش و بازترکیبی و ...) 5) تعیین شرط خاتمه و روشی برای تعیین نتیجه اجرا.