जेनेटिक प्रोग्रामिंग (जीपी)

आर्टिफिशियल इंटेलिजेंस में, जेनेटिक प्रोग्रामिंग (जीपी) कार्यक्रमों को विकसित करने की एक तकनीक है, जो कार्यक्रमों की आबादी के लिए प्राकृतिक आनुवंशिक प्रक्रियाओं के अनुरूप संचालन को लागू करके किसी विशेष कार्य के लिए अनुपयुक्त (सामान्यतः यादृच्छिक) कार्यक्रमों की आबादी से प्रारंभ होती है।

संचालन हैं: पूर्वनिर्धारित योग्यता माप के अनुसार प्रजनन (क्रॉसओवर) और उत्परिवर्तन के लिए योग्यतम कार्यक्रमों का चयन, सामान्यतः वांछित कार्य में प्रवीणता। क्रॉसओवर ऑपरेशन में नई पीढ़ी के कार्यक्रमों का हिस्सा बनने वाली नई और अलग संतान पैदा करने के लिए चयनित जोड़े (माता-पिता) के यादृच्छिक भागों की अदला-बदली सम्मिलित है। उत्परिवर्तन में प्रोग्राम के कुछ यादृच्छिक भाग को प्रोग्राम के कुछ अन्य यादृच्छिक भाग के साथ प्रतिस्थापित करना सम्मिलित है।पुनरुत्पादन के लिए नहीं चुने गए कुछ कार्यक्रमों की वर्तमान पीढ़ी से नई पीढ़ी में नकल की जाती है। फिर चयन और अन्य कार्यों को नई पीढ़ी के कार्यक्रमों पर पुनरावर्ती रूप से लागू किया जाता है।

सामान्यतः, प्रत्येक नई पीढ़ी के सदस्य पिछली पीढ़ी के सदस्यों की तुलना में औसतन अधिक योग्य होते हैं, और सबसे अच्छी पीढ़ी का कार्यक्रम प्रायः पिछली पीढ़ियों के सर्वश्रेष्ठ पीढ़ी के कार्यक्रमों से श्रेष्ठतर होता है। विकास की समाप्ति प्रायः तब होती है जब कोई व्यक्तिगत कार्यक्रम पूर्वनिर्धारित दक्षता या योग्यता स्तर तक पहुँच जाता है।

ऐसा हो सकता है और प्रायः होता है कि एल्गोरिथम के एक विशेष रन के परिणामस्वरूप समय से पहले कुछ स्थानीय अधिकतम अभिसरण होता है जो विश्व स्तर पर इष्टतम या अच्छा समाधान नहीं है। एक बहुत अच्छा परिणाम उत्पन्न करने के लिए सामान्यतः कई रन (दर्जनों से सैकड़ों) आवश्यक होते हैं। पैथोलॉजी से बचने के लिए बड़े प्रारंभिक जनसंख्या आकार और व्यक्तियों की परिवर्तनशीलता के लिए भी आवश्यक हो सकता है।

इतिहास
कार्यक्रमों को विकसित करने के प्रस्ताव का पहला रिकॉर्ड संभवत: 1950 में एलन ट्यूरिंग का है। जॉन हॉलैंड के 'एडाप्टेशन इन नेचुरल एंड आर्टिफिशियल सिस्टम्स' के प्रकाशन से पहले 25 साल का अंतराल था, जिसने विज्ञान की सैद्धांतिक और अनुभवजन्य नींव रखी। 1981 में, रिचर्ड फोर्सिथ ने यूके होम ऑफिस के लिए अपराध दृश्य साक्ष्य के वर्गीकरण के प्रदर्शन के लिए पेड़ों के रूप में प्रस्तुत छोटे कार्यक्रमों के सफल विकास का प्रदर्शन किया। यद्यपि कार्यक्रमों को विकसित करने का विचार, प्रारंभ में कंप्यूटर भाषा लिस्प में, जॉन हॉलैंड के छात्रों के बीच प्रचलित था, यह तब तक नहीं था जब तक उन्होंने पिट्सबर्ग में पहला जेनेटिक एल्गोरिदम (जीए) सम्मेलन आयोजित नहीं किया था कि निकेल क्रैमर ने दो विशेष रूप से डिज़ाइन की गई भाषाओं में विकसित कार्यक्रम प्रकाशित किए, जिसमें आधुनिक "ट्री-आधारित" जेनेटिक प्रोग्रामिंग (अर्थात, पेड़-आधारित संरचनाओं में व्यवस्थित प्रक्रियात्मक भाषाएँ और उपयुक्त रूप से परिभाषित जीए-ऑपरेटरों द्वारा संचालित) का पहला कथन सम्मिलित था। 1988 में, जॉन कोज़ा (जॉन हॉलैंड के पीएचडी छात्र भी) ने कार्यक्रम के विकास के लिए जीए के अपने आविष्कार का पेटेंट कराया। इसके बाद आर्टिफिशियल इंटेलिजेंस आईजेसीएआई-89 पर अंतर्राष्ट्रीय संयुक्त सम्मेलन में प्रकाशन किया गया। कोजा ने इसके बाद "जेनेटिक प्रोग्रामिंग" (जीपी) पर 205 प्रकाशन किए, जिसका नाम डेविड गोल्डबर्ग ने दिया, जो जॉन हॉलैंड के पीएचडी छात्र भी हैं। तथापि, यह कोज़ा द्वारा 4 पुस्तकों की श्रृंखला है, जो 1992 में वीडियो के साथ प्रारम्भ हुई, जिसने वास्तव में जीपी की स्थापना की। इसके बाद, 10,000 प्रविष्टियों को पार करते हुए जेनेटिक प्रोग्रामिंग ग्रंथ सूची के साथ प्रकाशनों की संख्या में भारी विस्तार हुआ। 2010 में, कोजा ने 77 परिणाम सूचीबद्ध किए जहां जेनेटिक प्रोग्रामिंग मानव प्रतिस्पर्धी थी।

1996 में, कोजा ने वार्षिक जेनेटिक प्रोग्रामिंग सम्मेलन प्रारंभ किया, जिसके बाद 1998 में वार्षिक यूरोजीपी सम्मेलन, और कोज़ा द्वारा संपादित जीपी श्रृंखला में पहली पुस्तक हुई। 1998 में पहली जीपी पाठ्यपुस्तक भी देखी गई। जीपी फलता-फूलता रहा, जिससे पहली विशेषज्ञ जीपी पत्रिका और तीन साल बाद (2003) वार्षिक जेनेटिक प्रोग्रामिंग थ्योरी एंड प्रैक्टिस (जीपीटीपी) कार्यशाला की स्थापना रिक रिओलो द्वारा की गई। विभिन्न प्रकार के सम्मेलनों और संबंधित पत्रिकाओं में जेनेटिक प्रोग्रामिंग पेपर प्रकाशित होते रहते हैं। आज उन्नीस जीपी पुस्तकें हैं जिनमें छात्रों के लिए कई हैं।

जीपी में मूलभूत कार्य
प्रारंभिक कार्य जो वर्तमान आनुवंशिक प्रोग्रामिंग अनुसंधान विषयों और अनुप्रयोगों के लिए चरण निर्धारित करता है, विविध है, और इसमें सॉफ्टवेयर संश्लेषण और मरम्मत, भविष्य कहनेवाला प्रतिरूपण, डेटा खनन, वित्तीय प्रतिरूपण, नरम सेंसर, डिज़ाइन, और छवि प्रसंस्करण सम्मिलित हैं। कुछ क्षेत्रों में अनुप्रयोग, जैसे डिज़ाइन, प्रायः मध्यवर्ती अभ्यावेदन का उपयोग करते हैं, जैसे कि फ्रेड ग्रौ के सेलुलर एन्कोडिंग। वित्त, रासायनिक उद्योग, जैव सूचना विज्ञान और इस्पात उद्योग सहित कई क्षेत्रों में औद्योगिक उत्थान महत्वपूर्ण रहा है।

कार्यक्रम का प्रतिनिधित्व
आनुवंशिक प्रतिनिधित्व

जीपी कंप्यूटर प्रोग्राम विकसित करता है, पारंपरिक रूप से स्मृति में वृक्ष संरचनाओं के रूप में दर्शाया जाता है। पुनरावर्ती तरीके से पेड़ों का आसानी से मूल्यांकन किया जा सकता है। प्रत्येक ट्री नोड में एक ऑपरेटर फ़ंक्शन होता है और प्रत्येक टर्मिनल नोड में एक ऑपरेंड होता है, जिससे गणितीय अभिव्यक्तियों को विकसित करना और मूल्यांकन करना आसान हो जाता है। इस प्रकार पारंपरिक रूप से जीपी प्रोग्रामिंग भाषाओं के उपयोग का समर्थन करता है जो स्वाभाविक रूप से वृक्ष संरचनाओं को ग्रहण करते हैं (उदाहरण के लिए, लिस्प; अन्य कार्यात्मक प्रोग्रामिंग भाषाएं भी उपयुक्त हैं)।

गैर-वृक्ष अभ्यावेदन का सुझाव दिया गया है और सफलतापूर्वक कार्यान्वित किया गया है, जैसे कि रेखीय आनुवंशिक प्रोग्रामिंग जो अधिक पारंपरिक अनिवार्य भाषाओं के अनुकूल है [देखें, उदाहरण के लिए, बंझाफ एट अल। (1998)]। वाणिज्यिक जीपी सॉफ्टवेयर डिसिपुलस बाइनरी मशीन कोड ("एआईएम") के स्वत: प्रेरण का उपयोग करता है। श्रेष्ठतर प्रदर्शन प्राप्त करने के लिए। माइक्रोजीपी किसी दिए गए असेंबली भाषा के सिंटैक्स का पूरी तरह से उपयोग करने वाले प्रोग्राम उत्पन्न करने के लिए निर्देशित मल्टीग्राफ का उपयोग करता है। बहु अभिव्यक्ति प्रोग्रामिंग एन्कोडिंग समाधानों के लिए तीन-पता कोड का उपयोग करती है। अन्य कार्यक्रम अभ्यावेदन जिन पर महत्वपूर्ण अनुसंधान और विकास किए गए हैं, उनमें स्टैक-आधारित आभासी मशीनों के लिए कार्यक्रम सम्मिलित हैं,  और पूर्णांकों के अनुक्रम जिन्हें व्याकरण के माध्यम से मनमाने ढंग से प्रोग्रामिंग भाषाओं में मैप किया जाता है।  कार्टेशियन जेनेटिक प्रोग्रामिंग जीपी का दूसरा रूप है, जो कंप्यूटर प्रोग्राम को एन्कोड करने के लिए सामान्य वृक्ष आधारित प्रतिनिधित्व के बजाय ग्राफ प्रतिनिधित्व का उपयोग करता है।

अधिकांश अभ्यावेदन में संरचनात्मक रूप से अप्रभावी कोड (इंट्रॉन) होते हैं। ऐसे गैर-कोडिंग जीन बेकार लग सकते हैं क्योंकि किसी एक व्यक्ति के प्रदर्शन पर उनका कोई प्रभाव नहीं पड़ता है। तथापि, वे भिन्नता संचालकों के तहत अलग-अलग संतान पैदा करने की संभावनाओं को बदल देते हैं, और इस प्रकार व्यक्ति के परिवर्तनशील गुणों को बदल देते हैं। ऐसे गैर-कोडिंग जीन की अनुमति देने वाले प्रोग्राम अभ्यावेदन का उपयोग करते समय प्रयोगों में तेजी से अभिसरण दिखाई देता है, प्रोग्राम अभ्यावेदन की तुलना में जिसमें कोई गैर-कोडिंग जीन नहीं होता है।

चयन
चयन एक ऐसी प्रक्रिया है जिसके द्वारा वर्तमान पीढ़ी से कुछ व्यक्तियों का चयन किया जाता है जो अगली पीढ़ी के लिए माता-पिता के रूप में काम करेंगे। व्यक्तियों को संभाव्य रूप से इस तरह चुना जाता है कि श्रेष्ठतर प्रदर्शन करने वाले व्यक्तियों के चुने जाने की संभावना अधिक होती है। जीपी में सबसे अधिक उपयोग की जाने वाली चयन पद्धति टूर्नामेंट चयन है, यद्यपि अन्य तरीकों जैसे कि फिटनेस आनुपातिक चयन, लेक्सिकेज चयन, और अन्य को कई जीपी समस्याओं के लिए श्रेष्ठतर प्रदर्शन करने के लिए प्रदर्शित किया गया है।

अभिजात्यवाद, जिसमें वर्तमान पीढ़ी से सर्वश्रेष्ठ व्यक्ति (या सर्वश्रेष्ठ एन व्यक्तियों) के साथ अगली पीढ़ी को बीजारोपण करना सम्मिलित है, एक तकनीक है जिसे कभी-कभी प्रतिगमन से बचने के लिए नियोजित किया जाता है।

क्रॉसओवर
जेनेटिक प्रोग्रामिंग में एक या दो बच्चों के माता-पिता बनने के लिए दो स्वस्थ व्यक्तियों को जनसंख्या से चुना जाता है। ट्री जेनेटिक प्रोग्रामिंग में, इन माता-पिता को पेड़ों की तरह उल्टे लिस्प के रूप में दर्शाया जाता है, जिसके शीर्ष पर रूट नोड होते हैं। प्रत्येक पेरेंट में सबट्री क्रॉसओवर में एक सबट्री को यादृच्छिक रूप से चुना जाता है। (एनीमेशन में पीले रंग के साथ हाइलाइट किया गया।) रूट डोनिंग पैरेंट में (बाईं ओर के एनिमेशन में) चुने गए सबट्री को हटा दिया जाता है और एक नया चाइल्ड ट्री देने के लिए दूसरे पैरेंट से निरुद्देश्यता से चुने गए सबट्री की एक प्रतिलिपि के साथ बदल दिया जाता है।

कभी-कभी दो चाइल्ड क्रॉसओवर का उपयोग किया जाता है, जिस स्थिति में हटाए गए सबट्री (बाईं ओर के एनीमेशन में) को केवल हटाया नहीं जाता है, बल्कि दूसरे माता-पिता की कॉपी में कॉपी किया जाता है (यहाँ दाईं ओर) इसके यादृच्छिक रूप से चुने गए (प्रतिलिपि में) को प्रतिस्थापित करता है। सबट्री। इस प्रकार का सबट्री क्रॉसओवर दो उपयुक्त ट्री लेता है और दो चाइल्ड ट्री उत्पन्न करता है।

उत्परिवर्तन
जेनेटिक प्रोग्रामिंग में कई तरह के उत्परिवर्तन होते हैं। वे एक फिट वाक्य रचनात्मक रूप से सही माता-पिता से प्रारंभ करते हैं और यादृच्छिक रूप से एक वाक्य रचनात्मक रूप से सही बच्चे को बनाने का लक्ष्य रखते हैं। एनीमेशन में एक सबट्री को निरुद्देश्यता से चुना जाता है (पीले रंग से हाइलाइट किया गया)। इसे हटा दिया जाता है और एक निरुद्देश्यता से से उत्पन्न सबट्री द्वारा प्रतिस्थापित किया जाता है।

अन्य उत्परिवर्तन ऑपरेटर पेड़ के एक पत्ते (बाहरी नोड) का चयन करते हैं और इसे यादृच्छिक रूप से चुने गए पत्ते से बदल देते हैं। एक और उत्परिवर्तन यादृच्छिक रूप से एक कार्य (आंतरिक नोड) का चयन करना है और इसे दूसरे कार्य के साथ समान एरिटी (इनपुट की संख्या) के साथ बदलना है। लहरा उत्परिवर्तन निरुद्देश्यता से एक सबट्री चुनता है और इसे अपने भीतर एक सबट्री से बदल देता है। इस प्रकार लहरा उत्परिवर्तन बच्चे को छोटा बनाने की गारंटी है। पत्ता और समान एरिटी फ़ंक्शन प्रतिस्थापन सुनिश्चित करता है कि बच्चा माता-पिता के समान आकार का है। जबकि सबट्री उत्परिवर्तन (एनीमेशन में), कार्य और टर्मिनल सेट के आधार पर, पेड़ के आकार को बढ़ाने या घटाने के लिए पूर्वाग्रह हो सकता है। अन्य सबट्री आधारित उत्परिवर्तन प्रतिस्थापन सबट्री के आकार और इस प्रकार चाइल्ड ट्री के आकार को सावधानीपूर्वक नियंत्रित करने का प्रयास करते हैं। इसी तरह कई प्रकार के रैखिक आनुवंशिक प्रोग्रामिंग उत्परिवर्तन हैं, जिनमें से प्रत्येक यह सुनिश्चित करने की कोशिश करता है कि उत्परिवर्तित बच्चा अभी भी वाक्य-विन्यास की दृष्टि से सही है।

अनुप्रयोग
जीपी को स्वचालित प्रोग्रामिंग टूल, यंत्र अधिगम टूल और स्वचालित समस्या-समाधान इंजन के रूप में सफलतापूर्वक उपयोग किया गया है। जीपी उन डोमेन में विशेष रूप से उपयोगी है जहां समाधान का सटीक रूप पहले से ज्ञात नहीं है या अनुमानित समाधान स्वीकार्य है (संभवतः क्योंकि सटीक समाधान खोजना बहुत कठिन है)। जीपी के कुछ अनुप्रयोग वक्र फिटिंग, डेटा मॉडलिंग, प्रतीकात्मक प्रतिगमन, फीचर चयन, वर्गीकरण इत्यादि हैं। जॉन आर कोजा ने 76 उदाहरणों का उल्लेख किया है जहां जेनेटिक प्रोग्रामिंग ऐसे परिणाम उत्पन्न करने में सक्षम है जो मानव-निर्मित परिणामों (मानव कहा जाता है) के साथ प्रतिस्पर्धी हैं। - प्रतिस्पर्धी परिणाम)। 2004 के बाद से, वार्षिक जेनेटिक एंड इवोल्यूशनरी कंप्यूटेशन कॉन्फ्रेंस (जीईसीसीओ) मानव प्रतिस्पर्धी पुरस्कार (जिसे ह्यूमीज़ कहा जाता है) प्रतियोगिता आयोजित करता है, जहां किसी भी प्रकार के अनुवांशिक और विकासवादी संगणना द्वारा उत्पादित मानव-प्रतिस्पर्धी परिणामों के लिए नकद पुरस्कार प्रस्तुत किए जाते हैं। जीपी ने वर्षों से इस प्रतियोगिता में कई पुरस्कार जीते हैं।

2022 में, यह दिखाया गया था कि ईईजी ब्रेनवेव डेटा से गिरने की स्वायत्त पहचान में सुधार के लिए यंत्र अधिगम पाइपलाइनों की जेनेटिक प्रोग्रामिंग का लाभ उठाया जा सकता है।

मेटा-जेनेटिक प्रोग्रामिंग
मेटा-जेनेटिक प्रोग्रामिंग जेनेटिक प्रोग्रामिंग का उपयोग करके जेनेटिक प्रोग्रामिंग सिस्टम विकसित करने की मेटा-लर्निंग तकनीक है। यह सुझाव देता है कि क्रोमोसोम, क्रॉसओवर और उत्परिवर्तन स्वयं विकसित हुए थे, इसलिए उनके वास्तविक जीवन समकक्षों की तरह मानव प्रोग्रामर द्वारा निर्धारित किए जाने के बजाय स्वयं को बदलने की अनुमति दी जानी चाहिए। मेटा-जीपी औपचारिक रूप से 1987 में जुरगेन श्मिटहुबर द्वारा प्रस्तावित किया गया था। डौग लेनैट यूरिस्को पहले का प्रयास है जो एक ही तकनीक हो सकता है। यह एक पुनरावर्ती लेकिन समाप्ति एल्गोरिथ्म है, जिससे यह अनंत पुनरावर्तन से बचने की अनुमति देता है। मेटा-जेनेटिक प्रोग्रामिंग के लिए "ऑटोकॉन्स्ट्रक्टिव इवोल्यूशन" दृष्टिकोण में, संतानों के उत्पादन और विविधता के तरीकों को स्वयं विकसित कार्यक्रमों के भीतर एन्कोड किया जाता है, और कार्यक्रमों को जनसंख्या में जोड़ने के लिए नए कार्यक्रमों का निर्माण करने के लिए निष्पादित किया जाता है। इस विचार के आलोचक प्रायः कहते हैं कि यह दृष्टिकोण अत्यधिक व्यापक है। तथापि, परिणामों के एक सामान्य वर्ग पर फिटनेस मानदंड को सीमित करना संभव हो सकता है, और इसलिए एक विकसित जीपी प्राप्त करें जो उप-वर्गों के लिए अधिक कुशलता से परिणाम देगा। यह मानव चलने वाले एल्गोरिदम के उत्पादन के लिए एक मेटा विकसित जीपी का रूप ले सकता है जो तब मानव चलने, कूदने आदि को विकसित करने के लिए उपयोग किया जाता है। मेटा जीपी पर लागू फिटनेस मानदंड केवल दक्षता में से एक होगा।

यह भी देखें

 * जैव-प्रेरित कंप्यूटिंग
 * कार्टेशियन जेनेटिक प्रोग्रामिंग
 * सहप्रसरण मैट्रिक्स अनुकूलन विकास रणनीति (सीएमए-ईएस)
 * फिटनेस सन्निकटन
 * जीन अभिव्यक्ति प्रोग्रामिंग
 * आनुवंशिक सुधार
 * आनुवंशिक प्रतिनिधित्व
 * व्याकरणिक विकास
 * आगमनात्मक प्रोग्रामिंग
 * रैखिक आनुवंशिक प्रोग्रामिंग
 * बहु अभिव्यक्ति प्रोग्रामिंग
 * स्कीमा का प्रसार

बाहरी संबंध

 * Aymen S Saket & Mark C Sinclair
 * Genetic Programming and Evolvable Machines, a journal
 * Evo2 for genetic programming
 * GP bibliography
 * The Hitch-Hiker's Guide to Evolutionary Computation
 * Riccardo Poli, William B. Langdon,Nicholas F. McPhee, John R. Koza, "A Field Guide to Genetic Programming" (2008)
 * Genetic Programming, a community maintained resource