आनुवंशिक प्रोग्रामिंग [बंद]


13

मैं हाल ही में Reddit को ब्राउज़ कर रहा था और एक पोस्ट के माध्यम से "जावास्क्रिप्ट आनुवंशिक एल्गोरिथ्म" के उदाहरण से जुड़ा हुआ था। मैं वास्तव में आनुवंशिक एल्गोरिदम और प्रोग्रामिंग की अवधारणाओं से मोहित हो गया हूं, हालांकि कुछ Googling के बाद भी मैं अभी भी थोड़ा भ्रमित हूं। यह कैसे काम करता है?

मुझे लगता है कि शब्दावली शब्द मुझे और कुछ से भ्रमित कर रहे हैं। मैं संक्षिप्त उदाहरण और शायद स्पष्टीकरण की सराहना करूंगा। बस आनुवंशिक प्रोग्रामिंग की अवधारणा और मैं इसे अपनी परियोजनाओं में कैसे लागू कर सकता हूं और क्यों?


1
Mat Buckland द्वारा "AI Techniques for Game Programming" ( amazon.com/Techniques-Programming-Premier-Press-Development/dp/… ) नामक एक अच्छी पुस्तक है जिसमें आधी पुस्तक में आनुवंशिक एल्गोरिदम शामिल हैं। पुस्तक का शीर्षक थोड़ा सा मिथ्या नाम है, यह GA और तंत्रिका जाल पर एक पुस्तक है। यह विषय के लिए एक महान पहचान है।
स्टीवन एवर्स

जवाबों:


19

ऐसा लगता है कि आप जेनेटिक एल्गोरिथम के बारे में बात कर रहे हैं-इसलिए जेनेटिक प्रोग्रामिंग की तुलना में अधिक, लेकिन यहां आपकी समझ में मेरा योगदान है।


यह उन हिस्सों के संदर्भ में जीए के बारे में सोचना आसान हो सकता है जो वे से बने हैं।

तो मान लीजिए कि आपको किसी प्रकार की समस्या है। पहली चीज जो आपको चाहिए वह यह व्यक्त करने का एक तरीका है कि समाधान क्या दिखेगा। यदि आपको A, B, C, D, E शहरों के साथ एक ट्रैवलिंग सेल्समैन की समस्या है, तो आप पहले से ही जानते हैं कि एक समाधान क्या दिख सकता है, शहरों के नामों की एक सरणी [B, C, A, D, E]।

यह जीन है

अन्यथा समस्या के संभावित समाधान के रूप में जाना जाता है। स्टीवन ए। लोव का उल्लेख करते हुए, बिट स्ट्रिंग्स जीन को एनकोड करने का सामान्य तरीका है, लेकिन यह आवश्यक नहीं है; यह सिर्फ कुछ चीजों को आसान बनाता है। महत्वपूर्ण हिस्सा यह है कि आपके पास इस सरणी-जैसे फैशन में समाधान का प्रतिनिधित्व करने का एक तरीका है।

अभी। आपको कैसे पता चलेगा कि समाधान कोई अच्छा है? आपको एक फ़ंक्शन की आवश्यकता है जो आपको बता सकता है, और समाधान को ग्रेड कर सकता है। तो, फिर से TSP के लिए आपके पास एक ऐसा फंक्शन हो सकता है जो पथ [B, C, A, D, E] का उपयोग करके यात्रा की गई दूरी को मापता है। आपके द्वारा असाइन किया गया 'ग्रेड' बस यात्रा की गई दूरी हो सकती है, लेकिन अधिक जटिल समस्याओं में आप यात्रा की लागत और अन्य चीजों जैसी चीजों को शामिल कर सकते हैं।

यह फिटनेस फंक्शन है

तो अब आप एक संभावित समाधान ले सकते हैं और पता लगा सकते हैं कि क्या यह कोई अच्छा है। आगे क्या होगा?

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

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

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

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

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

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


यह थोड़ा चिंताजनक था, इसलिए मुझे एक रूपक के साथ संक्षेप में बताएं:

  1. जीन लोग हैं: लोग समस्याओं को हल करते हैं
  2. फिटनेस फ़ंक्शंस ग्रेड हैं: लोगों को एक ग्रेड मिलता है कि वे किसी समस्या को कितनी अच्छी तरह से हल करते हैं
  3. आप एक नई आबादी के प्रजनन के लिए 2 लोगों का चयन करते हैं: आप बेहतर ग्रेड वाले लोगों को प्रजनन की बेहतर संभावना देते हैं
  4. जब माता-पिता प्रजनन करते हैं, तो वे बच्चे पैदा करने के लिए गठबंधन करते हैं।
  5. आप शायद ही कभी और बेतरतीब ढंग से अपने बच्चों को म्यूट करते हैं
  6. आप नई आबादी के बच्चों को ग्रेड देते हैं
  7. धोये और दोहराएं

उम्मीद है की यह मदद करेगा।


यह एक महान व्याख्या है। मैंने हमेशा सोचा कि आनुवंशिक एल्गोरिदम को डार्विनियन एल्गोरिदम या विकासवादी एल्गोरिदम के रूप में बेहतर रूप से वर्णित किया गया है, लेकिन "आनुवंशिक" निश्चित रूप से यांत्रिकी का बेहतर वर्णन करता है (यदि इसका समग्र विचार नहीं है)। मैं उन्हें डार्विनियन आनुवंशिक एल्गोरिदम कहूँगा।
स्टीवन लू

क्या कॉनवे का जीवन का खेल आनुवंशिक एल्गोरिथम है?
फ्लोरियन मार्गाइन

@ फ़्लोरियन मार्गाइन: जीवन का खेल एक कोशिकीय ऑटोमोटन है, एक असंबंधित अवधारणा (इस तथ्य से शुरू होकर कि जीवन का खेल पूरी तरह से निर्धारक है, जबकि जीए स्टोकेस्टिक है)।
स्क्रैप्टप

1
यह है, हाथ नीचे, जीए मैंने कभी सुना है का सबसे अच्छा विवरण। मैंने कई मौकों पर अतीत में उल्लिखित आनुवांशिक एल्गोरिदम देखे हैं, आमतौर पर ऑफहैंड एक्सप्लेंट के साथ, लेकिन वास्तव में कभी नहीं समझा कि वे अब तक क्या थे। धन्यवाद!
ताले

काश मैंने यह स्पष्टीकरण तब देखा होता जब मैंने पहली बार GA सीखना शुरू किया!
एरोहोम यिसरेल

7

एक बिट-स्ट्रिंग के रूप में एक समस्या का समाधान सांकेतिक शब्दों में बदलना

एक फ़ंक्शन (जिसे "फिटनेस" फ़ंक्शन कहा जाता है) लिखें, जो मूल्यांकन करता है कि कैसे 'अच्छा' एन्कोडेड समाधान को थोड़ा-स्ट्रिंग दिया जाता है - परिणाम आमतौर पर 0 और 1 के बीच की संख्या होती है

बेतरतीब ढंग से इन बिट स्ट्रिंग्स का एक गुच्छा उत्पन्न करते हैं और उनकी फिटनेस का मूल्यांकन करते हैं

गुच्छा में से कुछ का चयन करें - आम तौर पर अधिक फिट वाले - और उन्हें कुछ नए बिट-स्ट्रिंग्स (क्रॉसओवर) बनाने के लिए आधे और स्वैप हिस्सों में काट लें

फिर कभी-कभी, कुछ नए बिट-स्ट्रिंग्स (म्यूटेशन) में कुछ बिट्स को बेतरतीब ढंग से फ्लिप करें

एक अच्छा समाधान विकसित होने तक दोहराएं

ऐसा क्यों करें: कुछ समस्याओं के समाधान के बड़े पैमाने पर संभव स्थान हैं, इतना बड़ा है कि सभी संभावनाओं का मूल्यांकन अव्यावहारिक है (cf ट्रैवलिंग मैनमैन सोसाइटी)

मैं खोज, अनुकूलन और मशीन लर्निंग में जेनेटिक एल्गोरिदम पुस्तक की अत्यधिक अनुशंसा करता हूं


"जेनेटिक एल्गोरिदम" पर अमेज़ॅन की खोज से मुझे चार पृष्ठों का सामान मिला। मैंने केवल पहले पृष्ठ को देखा, लेकिन उनमें से किसी भी पुस्तक का शीर्षक "जेनेटिक एल्गोरिदम" नहीं था। क्या आप पुस्तक पर अधिक विवरण प्रदान कर सकते हैं, जैसे पूर्ण शीर्षक और लेखक?
डेविड थॉर्नले

चुनौती: एक आनुवंशिक एल्गोरिथ्म के रूप में उत्तर को पुनर्स्थापित करें। [-:
veryfoolish

@ डेविड लिंक जोड़ा गया; 1989 में प्रकाशित किया गया था, इसलिए अब और बेहतर हो सकते हैं, लेकिन यह एक अच्छी तरह से पता लगाया
स्टीवन ए। लोव

1
@veryfoolish: सबसे पहले, प्रश्न को एक बंधे हुए असतत-अंतरिक्ष समाधान के रूप में शांत करें
स्टीवन ए। लोव

@ डेविड जेनेटिक एल्गोरिदम भी कृत्रिम बुद्धि के बारे में एक बड़ी पुस्तक में एक या दो अध्याय होने की संभावना है।
बैरी ब्राउन

6

जेनेटिक प्रोग्रामिंग कंप्यूटर आपके लिए प्रोग्राम लिखने का एक तरीका है!

एमएस वर्ड की तरह "प्रोग्राम" न सोचें, "प्रोग्राम" को निम्न के रूप में सोचें:

function(x){ return x*2; }

यह फ़ंक्शन (या प्रोग्राम), अपने आप से, अस्तित्व का कारण नहीं है। हम समस्याओं के समाधान की तलाश कर रहे हैं। यदि आपको दो संख्याओं का योग खोजने की आवश्यकता है, तो आप केवल कैलकुलेटर खोलें और गणित करें। क्या होगा अगर कोई आपको निम्न तालिका दिया और बीच के रिश्ते को बाहर आंकड़ा करने के लिए कहा resultऔर xऔर y:

x   y   result
99  1   (3.02)
79  88   2.01 
21  62   5.01 
84  52  (6.58)
12  70   5.54 
67  18   0.73 

यह डेटा आपका "प्रशिक्षण" डेटा है। आपका कंप्यूटर इस डेटा का उपयोग कुछ परिकल्पना उत्पन्न करने के लिए करेगा, फिर आप वास्तविक डेटा के खिलाफ इसका परीक्षण करेंगे।

कहते हैं कि आप आंकड़े नहीं जानते हैं और यह तय करना मुश्किल है कि यह पता लगाना बहुत मुश्किल है, इसलिए आपको यह पता लगाने के लिए कंप्यूटर मिलेगा।

कंप्यूटर को बेतरतीब ढंग से जंगली अनुमान उत्पन्न करें

आपके पास कंप्यूटर एक मिलियन उत्तर उत्पन्न करता है, और देखें कि क्या उनमें से कोई भी छड़ी (अनुमान ... एक मिलियन बार!)। निम्नलिखित अनुमानों के एक जोड़े का एक उदाहरण है:

function(x,y){ return x+y; } // wrong
function(x,y){ return x/1*1*1*1*1*1+y; } //wrong, silly

आप इसे जानते हैं या नहीं कर सकते हैं, लेकिन कार्यों या कार्यक्रमों को पेड़ों के रूप में भी दर्शाया जा सकता है, उदाहरण के लिए, दूसरा कार्य होगा:

(+ (/ x (* 1 (* 1 (* 1 (* 1 (* 1 1)))) y)

आप इसे एक पेड़ की तरह अधिक बना सकते हैं जैसे कि इसे इंडेंट करके (btw, रिवर्स पॉलिश नोटेशन और लिस्प सिंटैक्स देखें ... लेकिन आप समझेंगे कि हम क्यों इस तरह के कार्यक्रमों का प्रतिनिधित्व करते हैं):

(+ 
    (/ x 
        (* 1 
            (* 1 
                (* 1 
                    (* 1 
                        (* 1 1)))) 
    y)

( +दोनों में से "पत्ते" के साथ शीर्ष पर है /और y/अपने आप में कई बच्चे हैं आदि)

यही कारण है कि आपने आनुवंशिक प्रोग्रामिंग में "पेड़ों" के बारे में बहुत कुछ पढ़ा है। किसी भी मामले में, हम के मूल्यों में प्लग xऔर yइस समारोह में है और यह हमें गलत जवाब देता है। आश्चर्य की बात नहीं है क्योंकि हम बेतरतीब ढंग से यह उत्पन्न किया।

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

क्या जीपी अलग बनाता है

यहाँ वह है जो आनुवंशिक प्रोग्रामिंग को जंगली अनुमानों से अलग बनाता है। आप मिलियन अनुमानों का एक और दौर करने का निर्णय लेते हैं; हालाँकि, आप इसे थोड़ा और समझदारी से करते हैं। आप शीर्ष 10% अनुमान (जो वास्तविक मूल्यों के करीब थे) लेते हैं और उन्हें दूसरी पीढ़ी का हिस्सा बनाते हैं। आप इनमें से कई समाधान भी लेते हैं (शायद वही 10% ... मुझे याद नहीं है) और "उन्हें मिश्रण करने" का फैसला करें।

आप बेतरतीब ढंग से दो समाधान चुनते हैं, बेतरतीब ढंग से उप-पेड़ उठाते हैं और उन्हें स्वैप करना शुरू करते हैं। तो समाधान ए का एक हिस्सा समाधान बी और इसके विपरीत समाप्त होता है - आप बस उन्हें "पार" कर देते हैं। आप कुछ उपाय भी करते हैं और बस उन्हें "म्यूट" कर देते हैं ... कुछ उपप्रकार लेते हैं और इसे थोड़ा 'पेंच' करते हैं (अरे, यदि समाधान भयानक है, तो 'बिना किसी कारण के साथ पंगा लेना' वास्तव में इसे बेहतर कर सकता है)।

यह सोचने का एक अच्छा तरीका निम्नलिखित है: आपके माँ और पिताजी में कुछ विशेषताएं हैं - बाल रंग, ऊंचाई, बीमारी की संभावना, आदि। आप एक बच्चे के रूप में अपने माता-पिता दोनों से अलग-अलग गुण प्राप्त करते हैं। यदि आपके माता-पिता दोनों ओलंपिक एथलीट थे, तो आप भी सुपर एथलीट होंगे, है ना? ठीक है, जीवविज्ञानी, समाजशास्त्री और यहां तक ​​कि इतिहासकार भी इस विचार के साथ मुद्दा उठा सकते हैं, लेकिन कंप्यूटर वैज्ञानिक यहां यूजीनिक्स की नैतिकता से चिंतित नहीं हैं। उन्होंने बस एक "सिस्टम" देखा जो बहुत अच्छा काम कर रहा है समाधान प्रदान करता है, इसलिए उन्होंने इसे सॉफ्टवेयर में मॉडल करने का फैसला किया।

यदि यह वास्तव में जीव विज्ञान से मेल नहीं खाता है, लेकिन फिर भी अच्छे उत्तर प्रदान करता है ... कई कंप्यूटर वैज्ञानिक सामूहिक रूप से कहते हैं "जो भी हो, और शब्दावली के लिए धन्यवाद।" यह भी ध्यान दें कि आपके सभी भाई-बहन समान रूप से एक जैसे नहीं हैं ... यहां तक ​​कि उनके माता-पिता भी समान हैं। प्रत्येक व्यक्ति में जीन होता है जो किसी भी कारण से उत्परिवर्तित होता है (कृपया इसे जीवविज्ञानी को न दिखाएं, बिंदु शब्दावली के बहुत पीछे की प्रेरणा को समझना है)।

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

हम इसे बहुत बड़ी संख्या में पीढ़ियों तक जारी रखते हैं। प्रत्येक पीढ़ी (उम्मीद) बेहतर और बेहतर समाधान प्रदान करती है, जब तक कि हमें सही जवाब नहीं मिलता। उदाहरण के लिए:

(+ (- 2.2 (/ x 11) (* 7 (cos y))))

खैर यह देखो, यह सही है!
(मैंने इसे http://en.wikipedia.org/wiki/Genetic_programming से कॉपी किया है , जिसमें इस पेड़ का ग्राफिक प्रतिनिधित्व भी है)

फुटकर चीज

कुछ महत्वपूर्ण मुद्दे हैं, जैसे कि आप कैसे तय करते हैं कि +, -, *, /, cos, sin, tanआपके जीपी सिस्टम में कौन से "टर्मिनल" उपलब्ध हैं, आप फिटनेस फ़ंक्शन कैसे लिखते हैं और सिस्टम गैर-संवेदी कार्यक्रमों जैसे ( (1 + cos)या (2 / "hello")कई अन्य के बीच) को कैसे संभालता है ।

समीकरणों को विकसित करना बहुत उबाऊ है। यह और अधिक दिलचस्प हो जाता है यदि आपका टर्मिनल सेट निम्न जैसा दिखता है: (आग, भावना शत्रु, चाल, ...) और आपका फिटनेस फ़ंक्शन आपके स्वास्थ्य और मार्शल राक्षसों के मृत शरीर की संख्या को मापता है।

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


1

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

तब से हालात बदल गए हैं। .NET के पास अब खुद का एक एक्सप्रेशनट्री एपीआई है, जो शायद लेख में वर्णित एक से अधिक # सी में एक अधिक सुरुचिपूर्ण जीपी कार्यान्वयन की अनुमति देगा। लेकिन जीपी कैसे काम करता है, इसकी समझ पाने के लिए यह काफी अच्छा है।

यहां आप जीपी पर एक मुफ्त ईबुक डाउनलोड कर सकते हैं, जिसमें एक बहुत छोटा जावा कोड उदाहरण भी शामिल है जो आपको दिलचस्प भी लग सकता है।


-1

आनुवंशिक एल्गोरिथम और आनुवंशिक प्रोग्रामिंग संबंधित हैं, लेकिन विभिन्न अवधारणाएं हैं।

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

आनुवंशिक प्रोग्रामिंग (जीपी) और भी अधिक जटिल है: यहां, आप उनके डीएनए (बिटस्ट्रिंग्स) द्वारा कार्यक्रमों का प्रतिनिधित्व नहीं करते हैं, लेकिन उन पेड़ों को पार्स करते हैं जिन्हें आप प्रजनन करते हैं और चुनते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.