जेनेटिक प्रोग्रामिंग कंप्यूटर आपके लिए प्रोग्राम लिखने का एक तरीका है!
एमएस वर्ड की तरह "प्रोग्राम" न सोचें, "प्रोग्राम" को निम्न के रूप में सोचें:
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")
कई अन्य के बीच) को कैसे संभालता है ।
समीकरणों को विकसित करना बहुत उबाऊ है। यह और अधिक दिलचस्प हो जाता है यदि आपका टर्मिनल सेट निम्न जैसा दिखता है: (आग, भावना शत्रु, चाल, ...) और आपका फिटनेस फ़ंक्शन आपके स्वास्थ्य और मार्शल राक्षसों के मृत शरीर की संख्या को मापता है।
मैंने यह सबसे स्मृति से लिखा था लेकिन यह मूल विचार है। मैंने अपने कॉलेज के वर्षों में कुछ जीपी किया। आपको निश्चित रूप से इसके साथ खेलना चाहिए। सभी शब्दावली को समझने के बारे में चिंता न करें, बस कुछ मुफ्त जीपी सिस्टम डाउनलोड करें, इसके लिए एक महसूस करने के लिए कुछ उदाहरणों के माध्यम से चलाएं और अपने स्वयं के दिलचस्प उदाहरण बनाएं (विभिन्न डेटा सेटों के बीच संबंधों को ढूंढें, इसे गेम में हुक करने का प्रयास करें। एपीआई, आदि)