आनुवंशिक प्रोग्रामिंग के लिए किस भाषा का उपयोग करना है


15

एक असाइनमेंट के हिस्से के रूप में मुझे एक आनुवंशिक प्रोग्रामिंग एल्गोरिदम लिखना होगा जो वायुमंडलीय प्रदूषक स्तरों की भविष्यवाणी करता है। चूंकि मेरे पास कोई अनुभव नहीं है, क्या कोई मुझे प्रोग्रामिंग भाषाओं के प्रस्तावों की ओर संकेत कर सकता है जिसमें विकसित कार्यक्रम लिखे जाएंगे

स्पष्टता: मैं यह नहीं पूछ रहा हूं कि मैं आनुवंशिक एल्गोरिथ्म को लिखने वाली भाषा क्या होगी (जैसा कि मैं स्वयं निर्णय लेने में सक्षम होऊंगा), मैं पूछ रहा हूं कि विकसित प्रोग्राम को किस प्रोग्रामिंग भाषा में बनाया जाना चाहिए।

मेरे प्रशिक्षक ने लिस्प को सुझाव दिया, लेकिन मुझे यह विचार पसंद नहीं है --- पहले मुझे कुछ प्रकार के सार सिंटेक्स ट्री पर काम करना होगा, दूसरी बात यह है कि पेड़ की संरचना पर मज़बूती से क्रॉसओवर करना एक गड़बड़ हो सकता है।

मैं इसके बजाय कुछ ऐसी चीज़ों का उपयोग करूँगा जो आनुवंशिक प्रोग्रामिंग जैसे स्लैश / ए के लिए समर्पित हैं । स्लैश को एएसटीएस पर काम करने की आवश्यकता नहीं होती है --- बायटेकोड में प्रोग्राम केवल एक प्रकार की चीटियां होती हैं जिन्हें किसी भी प्रकार के आवश्यक आक्रमण में बदला जा सकता है क्योंकि प्रत्येक इंट सरणी कुछ स्लैश / ए प्रोग्राम का प्रतिनिधित्व करती है।

अतिरिक्त टिप्पणी:

  • मैं एएसटी में हेरफेर करने से बचना चाहता हूं!
  • यह समस्या कठिन है (शायद शेयर मूल्यों की भविष्यवाणी के रूप में कठिन नहीं है)। यह इस तथ्य के कारण है कि (संभवतः) हमारे पास पर्याप्त इनपुट जानकारी नहीं है (कुछ छिपे हुए पैरामीटर हैं)। एक मॉडल बनाना जो बेहतर प्रदर्शन करता है वह मॉडल जो रिटर्न का मतलब कुछ हद तक चुनौती है (मतलब मॉडल में 35% एमएपीई है), अधिकांश मॉडल में लगभग 25% का एमएपीई है, सबसे अच्छा 20% है।
  • मैं एक ऐसी भाषा रखना चाहता हूं, जो कई विशेषताओं के साथ डेटासेट का प्रबंधन करती है कि मुझे यकीन नहीं है कि ये महत्वपूर्ण हैं। (स्लैश / ए का यहां नुकसान है --- इस भाषा में इनपुट सुविधाओं को क्रमिक रूप से पढ़ा जाता है --- इसलिए कुछ विशेषताओं का उपयोग बड़ी अक्षमता के साथ किया जाएगा)।
  • मैं इसे पायथन में प्रोग्राम करने में सक्षम होना चाहता हूं, इसलिए अजगर लिबास बहुत अच्छा होगा --- लेकिन मैं सी / सी ++ (कोई जावा, कोई मतलाब, आदि) के लिए बाइंडिंग नहीं कर सकता।

मुझे पता है कि यह एक सर्वेक्षण प्रश्न है, इसलिए यदि यह इस तरह के प्रश्न के लिए जल्दी है, तो कृपया इसे बंद करें, लेकिन मुझे लगता है कि यह पर्याप्त विशिष्ट है।

जवाबों:


14

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

आपको जल्दी पेड़ और रैखिक जीपी के बीच चयन करना होगा। लिस्प पेड़ है, स्लैश / ए रैखिक है। पेशेवरों और विपक्षों को समझने के लिए दोनों पर पढ़ें, लेकिन आपने जो लिखा है उससे मैं एक साधारण पेड़ GP प्रणाली का सुझाव दूंगा। अपना स्वयं का लिखना बहुत कठिन नहीं है, लेकिन मौजूदा पायथन कार्यान्वयन हैं। नीचे ये सामान्य रूप से पायथन में विकासवादी एल्गोरिदम के लिए हैं, लेकिन सभी जीपी नहीं हैं और कुछ निष्क्रिय हैं:

  1. PyGressionGP (अजगर में प्रतीकात्मक प्रतिगमन के लिए जीपी) - http://code.google.com/p/pygressiongp/
  2. PyGene - https://github.com/blaa/PyGene
  3. पायथन में एक सरल आनुवंशिक प्रोग्रामिंग - http://zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve - ब्लॉग भी देखें - http://blog.christianperone.com - और यह पोस्ट - http://blog.christianperone.com/?p= 549
  5. esec (पायथन में विकासवादी संगणना) - http://code.google.com/p/esec/
  6. पीच - http://code.google.com/p/peach/
  7. PyBrain (बहुत कुछ, न केवल NN) - http://pybrain.org/
  8. dione - http://dione.sourceforge.net/
  9. PyGEP (जेनेटिक एक्सप्रेशन प्रोग्रामिंग) - http://code.google.com/p/pygep/
  10. deap (वितरित विकासवादी एल्गोरिदम) - http://code.google.com/p/deap/

इसके अलावा, जाने-माने GP लेखकों Poli, Langdon और McPhee द्वारा GP पर (मुफ्त) परिचयात्मक पुस्तक देखें:

जेनेटिक प्रोग्रामिंग के लिए एक फील्ड गाइड - http://www.gp-field-guide.org.uk/


क्या आपके पास लिनियर और ट्री जीपी के पेशेवरों और विपक्षों के लिए कोई संदर्भ है?
जेबी

मैंने कुछ तुलनाएँ देखी हैं लेकिन कोई ठोस संदर्भ नहीं मिला है। आप देख सकते हैं कि 2000 के दशक में बन्जाफ़ और ब्रैमियर ने क्या प्रकाशित किया - उन्होंने रैखिक जीपी पर काफी काम किया और 2007 में एलजीपी पर एक पुस्तक प्रकाशित की जो मुझे लगता है।
ग्राहम जोन्स

हम्म ... ये लोग एकजुट क्यों नहीं होते?
vonPetrushev

मुझे यकीन नहीं है कि आपका क्या मतलब है - क्यों पेड़ और रैखिक जीपी लोग एकजुट नहीं होते हैं? कोई धार्मिक विभाजन नहीं है, वे एक ही विचार के अलग-अलग स्वाद हैं (और अन्य लोग भी हैं, जैसे कि जीन एक्सप्रेशन प्रोगामिंग (GEP) - gen-expression-programming.com )।
ग्राहम जोन्स

1
मैं नहीं कह रहा हूँ कि पेड़ जीपी बुराई या sth है। मैं सिर्फ अपना खुद का कार्यान्वयन करना चाहता था, और रैखिक इतना आसान है। मैंने स्क्रैच से 4 घंटे की तरह अजगर के प्रोटोटाइप का काम किया था।
जेबी

4

यदि आप एक कार्यक्रम विकसित करने जा रहे हैं, तो आपको वैसे भी एक सिंटैक्स ट्री में हेरफेर करने की संभावना है; इस तरह आप जो भी प्रोग्राम विकसित करेंगे, वह स्वतः ही सही रूप से सही हो जाएगा।

भाषा का चयन करते समय दो बातें आपको ध्यान में रखनी होंगी।

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

आप संभवतः एक लक्षित भाषा का उपयोग करना चाहेंगे जिसे आप पहले से परिचित हैं। मैं खुद पायथन से परिचित नहीं हूं, लेकिन AFAIK ने उपरोक्त मानदंडों को संतुष्ट किया है, इसलिए यह आपकी लक्षित भाषा के लिए एक अच्छा विकल्प होना चाहिए।


1
देखें github.com/arturadib/slash-a --- इस भाषा में आपके पास कोई एएसटी हेरफेर नहीं है! प्रोग्राम को बायटेकोड की एक सरणी के रूप में पुन: पेश किया जाता है और चूंकि प्रत्येक सरणी एक सही प्रोग्राम है आप जो भी आनुवंशिक ऑपरेशन चाहते हैं उसका उपयोग कर सकते हैं।
जेबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.