आनुवंशिक एल्गोरिदम / आनुवंशिक प्रोग्रामिंग समाधान के अच्छे उदाहरण क्या हैं? [बन्द है]


227

जेनेटिक एल्गोरिदम (जीए) और आनुवंशिक प्रोग्रामिंग (जीपी) अनुसंधान के दिलचस्प क्षेत्र हैं।

मैं उन विशिष्ट समस्याओं के बारे में जानना चाहता हूं, जिन्हें आपने GA / GP और उन पुस्तकालयों / चौखटों का उपयोग करके हल किया है, यदि आपने अपना रोल नहीं किया है।

प्रशन:

  • जीए / जीपी को हल करने के लिए आपने किन समस्याओं का उपयोग किया है?
  • आपने किन पुस्तकालयों / चौखटों का उपयोग किया?

मैं पहले हाथ के अनुभवों की तलाश कर रहा हूं, इसलिए कृपया जवाब न दें जब तक कि आपके पास ऐसा न हो।


28
@ जेसन: उस Google चीज़ के सुझाव के लिए धन्यवाद। हालांकि यह कुछ उपयोगी प्रतीत होता है मैं यह देखने में विफल रहता हूं कि यह इस सवाल का जवाब कैसे दे सकता है क्योंकि यह विशेष रूप से एसओ-उपयोगकर्ताओं को जीए / जीपी-अनुभव के साथ संबोधित कर रहा है।
नोरव 14


13
"हम उम्मीद करते हैं कि उत्तर ... विशिष्ट विशेषज्ञता द्वारा समर्थित हैं ..." जाँचें! "[टी] उनके सवाल पर बहस, बहस, मतदान या विस्तारित चर्चा की संभावना होगी।" असत्य। कई उत्तर हैं, लेकिन यह एक सर्वेक्षण नहीं है और टिप्पणियों में बहुत सारी टिप्पणियां या बहस नहीं हैं। इसे बंद क्यों किया गया?
एड्रियन मैक्कार्थी

आनुवांशिक प्रोग्रामिंग के लिए यूरेका
साइमन

जवाबों:


146

होमवर्क नहीं

एक पेशेवर प्रोग्रामर (1995) के रूप में मेरी पहली नौकरी एस एंड पी 500 वायदा के लिए एक आनुवंशिक-एल्गोरिथ्म आधारित स्वचालित व्यापार प्रणाली लिख रही थी। अनुप्रयोग को Visual Basic 3 [!] में लिखा गया था और मुझे नहीं पता कि मैंने तब कुछ कैसे किया, क्योंकि VB3 में कक्षाएं भी नहीं थीं।

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

जनसंख्या के प्रत्येक मूल्यांकन के बाद, जीवित बचे लोगों को यादृच्छिक रूप से (केवल दो माता-पिता से बिट्स मिश्रण करके) क्रॉस-ब्रेड किया गया था, एक जीन की संभावना के रूप में एक माता-पिता के रूप में चुना गया था जो कि उत्पादित लाभ के लिए आनुपातिक है। मैंने चीज़ों को थोड़ा-थोड़ा करने के लिए पॉइंट म्यूटेशन की संभावना को भी जोड़ा। इसके कुछ सौ पीढ़ियों के बाद, मैं जीन की आबादी के साथ समाप्त हो गया, जो $ 5000 के औसत में लगभग 10000 डॉलर हो सकती है, जिसमें मृत्यु / टूटने की संभावना नहीं है (ऐतिहासिक डेटा पर, निश्चित रूप से)।

दुर्भाग्य से, मुझे इस प्रणाली का उपयोग करने का मौका कभी नहीं मिला, क्योंकि मेरे मालिक ने पारंपरिक तरीके से व्यापार करने के 3 महीने से भी कम समय में $ 100,000 के करीब खो दिया, और उन्होंने परियोजना के साथ जारी रखने की इच्छा खो दी। रेट्रोस्पेक्ट में, मुझे लगता है कि सिस्टम ने बहुत अधिक मुनाफा कमाया होगा - इसलिए नहीं कि मैं जरूरी कुछ भी सही कर रहा था, बल्कि इसलिए कि जिन जीनों का उत्पादन मैंने किया है, वे लगभग 5 के द्वारा खरीद के आदेशों (जैसा कि ऑर्डर बेचने के विरोध में) के पक्षपाती थे। 1 का अनुपात। और जैसा कि हम अपने 20/20 के संकेत के साथ जानते हैं, बाजार 1995 के बाद थोड़ा बढ़ गया।


9
"मुझे लगता है कि सिस्टम ने भारी मुनाफा कमाया होगा" - हाँ, मैंने शर्त लगाई कि यह पूरी तरह से बैकटैस्टिंग वातावरण में काम करेगा;;
जोएल

30
@Joel: बेशक यह किया है, लेकिन यही कारण है कि मुझे नहीं लगता कि यह लाभदायक होगा। बेचने के बजाय खरीदने के प्रति भारी पूर्वाग्रह के कारण इसने पैसा कमाया होगा। एक प्रणाली जिसने 1995 और 1999 के बीच यादृच्छिक समय में एस एंड पी 500 वायदा खरीदा (बिना किसी तरह के जीए बकवास के बिना) ने कई टन धन कमाया होगा, लेकिन हम इसे पूर्वव्यापी में ही जानते हैं।
मुसैनेसिस

10
जोएल शायद "ओवरफिटिंग" की बात कर रहा था।
एरिक नॉर्मैंड

10
आपको परीक्षण के लिए अपने ऐतिहासिक डेटा को थोड़ा आरक्षित करना होगा। क्रॉस-गुना सत्यापन करने के लिए सबसे अच्छा है।
एरिक नॉर्मैंड

"आकार" से आपका क्या तात्पर्य है each of which corresponded to a specific shape in the minute-by-minute price data?
CodyBugstein

89

मैंने थोड़ा क्रिटेटर बनाया जो इस छोटी सी दुनिया में रहता था। उनके पास एक तंत्रिका नेटवर्क मस्तिष्क था जो दुनिया से कुछ इनपुट प्राप्त करता था और आउटपुट अन्य कार्यों के बीच आंदोलन के लिए एक वेक्टर था। उनका दिमाग "जीन" था।

कार्यक्रम की शुरुआत यादृच्छिक दिमाग वाले आलोचकों की एक यादृच्छिक आबादी के साथ हुई थी। इनपुट और आउटपुट न्यूरॉन्स स्थिर थे लेकिन बीच में जो था वह नहीं था।

पर्यावरण में भोजन और खतरे थे। खाद्य ऊर्जा में वृद्धि हुई है और जब आपके पास पर्याप्त ऊर्जा है, तो आप संभोग कर सकते हैं। खतरे ऊर्जा को कम कर देंगे और यदि ऊर्जा 0 थी, तो वे मर गए।

अंततः जीव दुनिया भर में घूमने और भोजन खोजने और खतरों से बचने के लिए विकसित हुए।

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

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

तो यहाँ क्या सबक है? संचार का अर्थ है सहयोग। जैसे ही आप एक ऐसे तत्व का परिचय देते हैं जहां दूसरे का मतलब होता है कि आप कुछ हासिल करते हैं, तो सहयोग नष्ट हो जाता है।

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

संपादित करें:

मैंने इसे C ++ में बिना किसी फ्रेमवर्क का उपयोग करते हुए लिखा। अपना खुद का न्यूरल नेट और जीए कोड लिखा। एरिक, यह कहने के लिए धन्यवाद कि यह प्रशंसनीय है। लोग आमतौर पर GA की शक्तियों पर विश्वास नहीं करते (हालांकि सीमाएं स्पष्ट हैं) जब तक वे इसके साथ नहीं खेले। जीए सरल है लेकिन सरलीकृत नहीं है।

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

यहाँ जीवित रहने के उदाहरण के लिए डेमो कोड है: http://www.mempko.com/darcs/neural/demos/eaters/ निर्देश बनाएँ:

  • डार्क्स, लिबेरोस्ट, लिबेल्ग्रो, जीसीसी, सेमीके, स्थापित करें
  • darcs clone --lazy http://www.mempko.com/darcs/neural/
  • cd neural
  • cmake .
  • make
  • cd demos/eaters
  • ./eaters

खाने वाले स्क्रीनशॉट


10
और इस कहानी के साथ जाने के लिए आपका ट्यूरिंग पुरस्कार कहाँ है? आपके पास विज्ञान में कुछ पागल उन्नति होनी चाहिए ताकि इस तरह का प्रयोग कुछ भी हो लेकिन रोडरनर भी हो।
सैन जैसिंटो

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

2
यह थोड़ी सी भी नकली नहीं है ... मेरे नए साल के बाद गर्मियों में, मैंने सी # में XNA का उपयोग करके मस्ती के लिए एक परियोजना बनाई, जिसमें तंत्रिका नेटवर्क, माइनस जीए और अलग-अलग लक्षणों के असंख्य के साथ जीवों की आबादी थी। । उदाहरण के लिए, एक जीन ने अपनी दृष्टि को नियंत्रित किया - उच्चतर मतलब आगे की दृष्टि, कम का मतलब व्यापक दृष्टि त्रिज्या। बाधाओं और भोजन को बेतरतीब ढंग से रखा जाएगा, और जीव भोजन खाकर अपनी ऊर्जा की भरपाई करेंगे। लक्षण उनमें से बेतरतीब ढंग से उत्पन्न गाऊसी संख्याओं को जोड़कर उत्परिवर्तन करेंगे, जिसके परिणामस्वरूप सामान्य रूप से वास्तविक विकास में जीन वितरित किए जाते हैं।
फिलिप गिनी

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

1
मुझे उनकी वेबसाइट में कुछ सबूत मिले: www.mempko.com/darcs/neural वह कहता है "मैंने थोड़ी दुनिया में छोटे लोगों का एक बड़ा उदाहरण दिया, जो अस्तित्व के लिए विकसित हो रहा है।" यहाँ उदाहरण कोड है: mempko.com/darcs/neural/demos/ थियेटर्स
ग्वारडा

51

जनवरी 2004 में, मुझे फिलिप्स न्यू डिस्प्ले टेक्नोलॉजीज द्वारा संपर्क किया गया था, जो पहली बार वाणिज्यिक ई-स्याही के लिए इलेक्ट्रॉनिक्स का निर्माण कर रहे थे, सोनी लिबरी, जो अमेज़ॅन किंडल से पहले ही जापान में जारी किया गया था, और अन्य लोगों ने अमेरिका में बाजार मारा था। एक यूरोप।

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

इसलिए प्रत्येक चालक के वोल्टेज को व्यक्तिगत रूप से अनुकूलित करना सवाल से बाहर था। मूल्यों के संभावित संयोजन की संख्या अरबों में थी, और एक विशेष कैमरे के लिए एक संयोजन के मूल्यांकन में लगभग 1 मिनट का समय लगा। इंजीनियरों ने कई मानक अनुकूलन तकनीकों की कोशिश की थी, लेकिन कुछ भी करीब नहीं आएगा।

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

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

मुझे इसके लिए एक प्रतिशत का भुगतान नहीं मिला, लेकिन मुझे 'डींग मारने' का अधिकार मिला। उन्होंने कहा कि वे पहले से ही बजट से अधिक थे, इसलिए मुझे पता था कि इससे पहले कि मैं इस पर काम करना शुरू करूं, सौदा क्या था। और यह GA के अनुप्रयोगों के लिए एक शानदार कहानी है। :)


23
"ओवर बजट" बात फनी है। बेशक उनके पास आपको भुगतान करने के लिए पैसे थे लेकिन उन्होंने नहीं चुना। यह वास्तव में बेकार है और दिखाता है कि बड़े व्यवसाय अच्छे प्रोग्रामर का लाभ कैसे उठा सकते हैं।
मार्टिन कैपोडिसी

50

मैंने अपनी शादी के रिसेप्शन पर बैठने के काम को अनुकूलित करने के लिए GA का उपयोग किया। 10 टेबल पर 80 मेहमान। मूल्यांकन समारोह लोगों को उनकी तिथियों के साथ रखने, लोगों को किसी चीज़ को एक साथ रखने और अलग-अलग तालिकाओं पर अत्यधिक विपरीत विचारों वाले लोगों को रखने पर आधारित था।

मैंने इसे कई बार चलाया। हर बार, मुझे नौ अच्छी टेबल मिलीं, और सभी विषम गेंदों के साथ। अंत में, मेरी पत्नी ने बैठने का काम किया।

मेरे ट्रैवलिंग सेल्समैन ऑप्टिमाइज़र ने यात्रा कार्यक्रम के लिए क्रोमोसोम की एक उपन्यास मैपिंग का इस्तेमाल किया, जिसने इसे अवैध पर्यटन उत्पन्न करने के जोखिम के बिना गुणसूत्रों को प्रजनन और उत्परिवर्तित करने के लिए तुच्छ बना दिया।

अपडेट : क्योंकि कुछ लोगों ने पूछा है कि कैसे ...

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

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

इस प्रकार गुणसूत्र बेतरतीब ढंग से उत्पन्न, उत्परिवर्तित और दूसरों के साथ पार हो सकते हैं और हमेशा एक वैध समाधान का उत्पादन करेंगे।


और वह उपन्यास मानचित्रण क्या था?
मैनुअल एरोज

4
@ मैनुअल: सीधे "गुणसूत्र" में दौरे को एन्कोडिंग करने के बजाय, मैंने एक रूपांतरण को एक समाधान में तब्दील करने वाले रूपांतरण को एन्कोड किया। सूचकांक में शहरों के बीच परिवर्तन बस स्वैप हैं। इसलिए उन्हें किसी भी पुराने तरीके से पुनर्संयोजित किया जा सकता है और फिर भी हमेशा एक ऐसा दौरा उत्पन्न होता है जो हर शहर में एक बार आता है।
एड्रियन मैक्कार्थी

धन्यवाद! मैं स्वैपिंग पहलू के साथ थोड़ा भ्रमित हूं। प्रत्येक गुणसूत्र स्वैप करने के लिए अनुक्रमित की एक सूची को एन्कोड करता है - इसका मतलब यह नहीं है कि एक सूचकांक गुणसूत्र में एक से अधिक बार दिखाई दे सकता है?
user3019612

1
चोमोसोम में सी 1, सी 2, सी 3, ..., सीएन है। "समाधान" एक सरणी है। अपनी संदर्भ सूची के साथ आरंभ करें। फिर, गुणसूत्र में अनुक्रमणिका के प्रत्येक जोड़े के लिए, समाधान में दो तत्वों को स्वैप करें ( temp = a[c1]; a[c1] = a[c2]; a[c2] = temp)। इससे कोई फर्क नहीं पड़ता कि दो सूचकांक समान हैं, क्योंकि इसमें अभी भी हर अतिथि (या शहर) बिल्कुल एक बार होगा।
एड्रियन मैकार्थी

33

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

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

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

यह समाप्त होने वाले धोखाधड़ी के विशाल बहुमत की पहचान करने के लिए समाप्त हो गया, लेकिन यह सबसे धोखाधड़ी-प्रवण वस्तुओं पर 1% से नीचे नहीं मिल सका (यह देखते हुए कि आने वाले लेनदेन का 90% धोखाधड़ी हो सकता है, जो बहुत अच्छा कर रहा था)।

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

सभी ने इसमें कुछ ऐसे गफ़्स से परहेज किया, जो दर्जनों धोखाधड़ी संकेतकों के सापेक्ष मूल्यों को मैन्युअल रूप से जोड़ने की कोशिश कर रहे थे, और लगातार बेहतर समाधान के साथ आया था, जो मैं हाथ से बना सकता था। AFAIK, यह अभी भी उपयोग में है (लगभग 3 साल बाद मैंने इसे लिखा)।


मुझे लगता है कि आप पैरामीटर को ट्विक करने के लिए एक तंत्रिका नेटवर्क का उपयोग कर सकते थे (हालांकि इसे हाथ से करने की तुलना में अधिक प्रभावी होने में अधिक समय लगेगा)।
एलेक्सपिनो98

21

फुटबॉल टिपिंग। मैंने AFL (ऑस्ट्रेलियाई नियम फुटबॉल) में खेल के सप्ताह से सप्ताह के परिणामों की भविष्यवाणी करने के लिए GA प्रणाली का निर्माण किया।

कुछ साल पहले मैं मानक काम फुटबॉल पूल से ऊब गया था, हर कोई बस ऑनलाइन जा रहा था और प्रेस में कुछ पंडित से पिक्स ले रहा था। इसलिए, मुझे लगा कि प्रसारण पत्रकारिता की बड़ी कंपनियों को मारना मुश्किल नहीं है, ठीक है? मेरा पहला विचार मैसी रेटिंग से परिणाम लेना था और फिर प्रसिद्धि और महिमा जीतने के बाद सीजन के अंत में मेरी रणनीति को प्रकट करना था। हालाँकि, जिन कारणों से मैंने कभी खोजा नहीं है कि मैसी एएफएल को ट्रैक नहीं करते हैं। मुझ में निंदक का मानना ​​है कि यह इसलिए है क्योंकि प्रत्येक एएफएल खेल का परिणाम मूल रूप से यादृच्छिक मौका बन गया है, लेकिन हाल के नियम परिवर्तनों की मेरी शिकायत एक अलग फोरम में है।

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

व्यवहार में, सिस्टम को ऐसे समाधान मिलेंगे, जो पिछले खेल परिणामों के 90% से अधिक सटीक भविष्यवाणी करते हैं। इसके बाद आगामी सप्ताह के लिए लगभग 60-80% खेल को सफलतापूर्वक चुना जाएगा (वह सप्ताह है जो प्रशिक्षण सेट में नहीं है)।

परिणाम: पैक के ठीक ऊपर। कोई बड़ा नकद पुरस्कार और न ही एक प्रणाली जिसका उपयोग मैं वेगास को हराने के लिए कर सकता था। हालांकि यह मजेदार था।

मैंने सब कुछ खरोंच से बनाया, कोई भी ढांचा इस्तेमाल नहीं किया।


21

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

पिछले कुछ दिनों में मैं रेडिट पर इस लेख को देखने के बाद पोकर के लिए "कोल्ड डेक" खोजने के लिए एक विकासवादी कार्यक्रम के साथ खेल रहा हूं । यह फिलहाल काफी संतोषजनक नहीं है लेकिन मुझे लगता है कि मैं इसमें सुधार कर सकता हूं।

मैं अपने खुद के ढांचे है कि मैं विकासवादी एल्गोरिथम के लिए इस्तेमाल करते हैं।


17

मैंने 3 डी लेजर सरफेस प्रोफाइल सिस्टम के लिए होम ब्रू जीए विकसित किया, मेरी कंपनी 1992 में माल उद्योग के लिए विकसित हुई। इस प्रणाली ने 3 आयामी त्रिभुज पर भरोसा किया और एक कस्टम लेजर लाइन स्कैनर, 512x512 कैमरा (कस्टम कैप्चर hw के साथ) का उपयोग किया। कैमरा और लेजर के बीच की दूरी कभी भी सटीक नहीं थी और कैमरों का केंद्र बिंदु 256,256 की स्थिति में नहीं पाया गया था, जिसकी आपको उम्मीद थी!

मानक ज्यामिति और सिम्युलेटेड एनीलिंग स्टाइल समीकरण हल का उपयोग करके अंशांकन मापदंडों को आज़माना और काम करना एक बुरा सपना था।

जेनेटिक एल्गोरिथ्म को एक शाम में मार दिया गया था और मैंने इसे जांचने के लिए एक अंशांकन क्यूब बनाया। मैं घन आयामों को उच्च सटीकता के लिए जानता था और इस प्रकार यह विचार था कि मेरा GA प्रत्येक स्कैनिंग इकाई के लिए कस्टम ट्राइएंग्यूलेशन मापदंडों का एक सेट विकसित कर सकता है जो उत्पादन विविधताओं को दूर करेगा।

चाल ने एक ट्रीट का काम किया। मैं कम से कम कहने के लिए भड़क गया था! लगभग 10 पीढ़ियों के भीतर मेरी 'वर्चुअल' क्यूब (कच्चे स्कैन से उत्पन्न और अंशांकन मापदंडों से निर्मित) वास्तव में एक क्यूब की तरह दिखती थी! लगभग ५० पीढ़ियों के बाद मुझे अपनी आवश्यकता का अंशांकन प्राप्त हुआ।


11

इसका अक्सर एक सटीक रंग संयोजन प्राप्त करना मुश्किल होता है जब आप अपने घर को पेंट करने की योजना बना रहे होते हैं। अक्सर, आपके मन में कुछ रंग होता है, लेकिन यह रंगों में से एक नहीं है, विक्रेता आपको दिखाता है।

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

रंग पुरुष उसके साथ एक सॉफ्टवेयर प्रोग्राम है जो जीए इस्तेमाल किया ले जाने के लिए इस्तेमाल किया। वह 4 अलग-अलग रंगों से शुरू करता था- प्रत्येक को कोडित क्रोमोसोम के रूप में कोडित किया जाता था (जिसका डिकोड किया गया मान RGB मान होगा)। उपभोक्ता 4 रंगों में से 1 को चुनता है (जो कि वह सबसे नज़दीकी है / जो उसके दिमाग में है)। कार्यक्रम तब उस व्यक्ति को अधिकतम फिटनेस प्रदान करेगा और म्यूटेशन / क्रॉसओवर का उपयोग करके अगली पीढ़ी को स्थानांतरित करेगा । उपरोक्त चरणों को तब तक दोहराया जाएगा जब तक कि उपभोक्ता को सटीक रंग नहीं मिल गया था और तब रंग का आदमी उसे आरजीबी संयोजन बताता था!

रंग को अधिकतम फिटनेस प्रदान करने से उपभोक्ता के मन में जो कुछ भी होता है, वह बंद हो जाता है, रंग आदमी के कार्यक्रम में रंग में परिवर्तित होने की संभावना बढ़ जाती है, उपभोक्ता के मन में वास्तव में है। मुझे यह बहुत मजेदार लगा!

अब जब मुझे एक -1 मिल गया है, अगर आप अधिक -1, pls की योजना बना रहे हैं। ऐसा करने का कारण स्पष्ट करें!


6
मैं आपको नीचा दिखाने वाला नहीं हूं, लेकिन मैं अनुमान लगा रहा हूं कि ऐसा इसलिए है क्योंकि आपने खुद ऐसा नहीं किया है। ओपी ने विशेष रूप से उन चीजों के लिए कहा जो आपने खुद किया था।
जप्ते

यह रिचर्ड डॉकिंस की बायोमॉर्फ का एक सरलीकृत संस्करण है।
निक जॉनसन

1
रंग के बारे में मजेदार बात यह है कि आप इसे अपने दम पर नहीं मान सकते हैं। रंग सलाहकार केवल एक रंग के साथ नहीं बदलते हैं - वे पैलेट और योजनाओं में आते हैं। इसका कोई मतलब नहीं है कि सिर्फ एक रंग का चयन किया जाए। मैं नीचे नहीं गया, लेकिन आपका उत्तर GA की परिभाषा को बढ़ा रहा है। आप एक रंग को कैसे बदलते / काटते हैं? यह अधिक ईमानदारी से एक सीमित डेटासेट को पुनरावृत्त करने का प्रदर्शन है।
कर्क ब्रॉडहर्स्ट

2
यह शायद डाउनवोट्स को समझाता है: यह पहाड़ी की तरह अधिक लगता है, जीए नहीं।
एरिक नॉर्मैंड

8

कुछ हफ़्ते पहले, मैंने ग्राफ़ लेआउट की समस्या को हल करने के लिए आनुवंशिक एल्गोरिदम का उपयोग करते हुए SO पर एक समाधान सुझाया था । यह विवश अनुकूलन समस्या का एक उदाहरण है।

मशीन लर्निंग के क्षेत्र में भी, मैंने खरोंच से c / c ++ में GA-आधारित वर्गीकरण नियमों की रूपरेखा को लागू किया।
मैंने कृत्रिम न्यूरल नेटवर्क (एएनएन) के प्रशिक्षण के लिए एक नमूना परियोजना में जीए का उपयोग किया है, जैसा कि प्रसिद्ध बैकप्रॉपैगमेंट एल्गोरिथ्म का उपयोग करने के विपरीत है ।

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


हैलो अमरो। क्या आपने बैकप्रॉप और जीए के साथ प्राप्त परिणामों के बीच पूर्ण तुलना की? यदि हां, तो क्या आप हमारे साथ तुलना परिणाम साझा कर सकते हैं? आपने दो NN के लिए क्रॉसओवर चरण को कैसे लागू किया?
लामासु

@lmsasu: कुछ भी नहीं फैंसी: जनसंख्या में प्रत्येक स्ट्रिंग या गुणसूत्र नेटवर्क के वजन और पूर्वाग्रह मूल्यों का प्रतिनिधित्व करता है, और एक सरल या 2 अंक क्रॉसओवर ऑपरेटर का उपयोग किया गया था। मुझे जो याद आता है, उससे नेटवर्क को GA का उपयोग करने में प्रशिक्षित होने में काफी समय लगा। मेरा कार्यान्वयन कुछ और की तुलना में अवधारणा का प्रमाण था ( आभासी खानों को नियंत्रित करने के एक खिलौने के उदाहरण के लिए यहां देखें ) ... वैसे भी वहां बहुत सारे कागजात होने चाहिए जो कि जीए का उपयोग करके न केवल वजन जानने के लिए चर्चा करते हैं, बल्कि विकसित भी होते हैं नेटवर्क संरचना।
अमरो

8

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

मैं प्रारंभिक आबादी को बाहर निकलने वाले डिफ़ॉल्ट झंडों के साथ ले जा सकता था, लेकिन जो दिलचस्प था वह यह था कि एल्गोरिथ्म O3 ऑप्टिमाइज़ेशन स्तर के समान कॉन्फ़िगरेशन के समान था (लेकिन वास्तव में कई परीक्षणों में तेज था)।

संपादित करें: इसके अलावा, मैंने असाइनमेंट के लिए पायथन में अपना स्वयं का आनुवंशिक एल्गोरिथ्म फ्रेमवर्क लिखा है, और विभिन्न बेंचमार्क को चलाने के लिए सिर्फ पोपेन कमांड का उपयोग किया है, हालांकि अगर यह एक आकलन असाइनमेंट नहीं था तो मैंने pyEvolve को देखा होगा।


7

सबसे पहले, "जेनेटिक प्रोग्रामिंग" जोनाथन कोज़ा (अमेज़ॅन पर ) कई उदाहरणों के साथ आनुवंशिक और विकासवादी एल्गोरिथ्म / प्रोग्रामिंग तकनीकों पर बहुत अधिक पुस्तक है। मैं अत्यधिक इसे जाँचने का सुझाव देता हूँ।

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


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

7

मैं मौजूदा कार्यक्रमों में स्वचालित रूप से बग को ठीक करने के लिए इवोल्यूशनरी कम्प्यूटेशन (ईसी) के उपयोग की जांच करने वाली टीम का हिस्सा हूं। हमने वास्तविक विश्व सॉफ्टवेयर परियोजनाओं में कई वास्तविक बग्स की सफलतापूर्वक मरम्मत की है ( इस परियोजना के होमपेज को देखें )।

हमारे पास इस ईसी मरम्मत तकनीक के दो अनुप्रयोग हैं।

  • पहली ( कोड और प्रजनन जानकारी परियोजना पृष्ठ के माध्यम से उपलब्ध है ) अमूर्त सिंटैक्स पेड़ों को विकसित करता है जो मौजूदा सी कार्यक्रमों से पार्स किए गए हैं और हमारे स्वयं के कस्टम ईसी इंजन का उपयोग करके ओकेमेल में लागू किया गया है।

  • दूसरी ( कोड और प्रजनन जानकारी परियोजना पृष्ठ के माध्यम से उपलब्ध है ), परियोजना में मेरा व्यक्तिगत योगदान, x86 असेंबली या जावा बाइट कोड विकसित करता है जो कई प्रोग्रामिंग भाषाओं में लिखे गए कार्यक्रमों से संकलित किया गया है। यह एप्लिकेशन क्लोजर में लागू किया गया है और यह अपने स्वयं के कस्टम निर्मित ईसी इंजन का भी उपयोग करता है।

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


6

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


5

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

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


4

मैंने कई समस्याओं को हल करने के लिए "GALAB" नाम का एक पूर्ण GA ढांचा बनाया:

  • ओवरलैप और रिक्त स्थानों को कम करने के लिए जीएसएम एएनटी (बीटीएस) का पता लगाना।
  • संसाधन बाधा परियोजना समयबद्धन।
  • विकासवादी चित्र निर्माण। ( एवोपिक )
  • ट्रैवलिंग सेल्समैन की समस्या
  • एन-क्वीन और एन-कलर समस्याएं।
  • नाइट के दौरे और समस्याएँ।
  • जादू वर्ग और सुडोकू पहेली।
  • स्ट्रिंग संपीड़न, सुपरस्ट्रिंग समस्या के आधार पर।
  • 2 डी पैकेजिंग समस्या।
  • छोटे कृत्रिम जीवन एपीपी।
  • रूबिक पहेली।

हां, इसका स्रोत मेरी जीए पुस्तक के तहत प्रकाशित हुआ है ।
एमएसएम

4

मैंने एक बार मेमोरी पतों के लिए हैश फ़ंक्शन को ऑप्टिमाइज़ करने के लिए GA का उपयोग किया था। पते 4K या 8K पृष्ठ के आकार के थे, इसलिए उन्होंने पता के बिट पैटर्न में कुछ पूर्वानुमान दिखाया (कम से कम महत्वपूर्ण बिट्स सभी शून्य; मध्य बिट नियमित रूप से बढ़ाना, आदि) मूल हैश फ़ंक्शन "चंकी" था - यह क्लस्टर हिट्स में शामिल था। हर तीसरे हैश बाल्टी पर। बेहतर एल्गोरिथ्म में लगभग पूर्ण वितरण था।


3

मुझे नहीं पता कि होमवर्क मायने रखता है ...

अपनी पढ़ाई के दौरान हमने ट्रैवलिंग सेल्समैन की समस्या को हल करने के लिए अपना कार्यक्रम तैयार किया।

यह विचार कई मानदंडों (तुलना, समस्या, प्रदर्शन, आदि का नक्शा बनाने में कठिनाई) पर तुलना करने के लिए था और हमने अन्य तकनीकों का भी इस्तेमाल किया जैसे कि सिमिलिंग एनीलिंग

यह बहुत अच्छी तरह से काम किया, लेकिन हमें यह समझने में थोड़ा समय लगा कि कैसे 'प्रजनन' चरण को सही तरीके से किया जाए: समस्या को जेनेटिक प्रोग्रामिंग के लिए उपयुक्त किसी चीज़ में हाथ से मॉडलिंग करना वास्तव में मुझे सबसे कठिन भाग के रूप में आया ...

यह एक दिलचस्प पाठ्यक्रम था क्योंकि हमने तंत्रिका नेटवर्क और इस तरह के साथ भी डब किया था।

मैं जानना चाहता हूं कि क्या किसी ने 'प्रोडक्शन' कोड में इस तरह की प्रोग्रामिंग का इस्तेमाल किया है।


3

मैंने संगीत के फ़्रीक्वेंसी स्पेक्ट्रम से उपयोगी पैटर्न निकालने के लिए एक साधारण GA बनाया, जैसा कि इसे बजाया जा रहा था। आउटपुट का उपयोग एक winamp प्लगइन में ग्राफिकल प्रभाव को चलाने के लिए किया गया था।

  • इनपुट: कुछ एफएफटी फ्रेम (फ्लोट्स के 2 डी सरणी की कल्पना करें)
  • आउटपुट: सिंगल फ्लोट वैल्यू (इनपुट्स का भारित योग), जो 0.0 या 1.0 से अधिक है
  • जीन: इनपुट वजन
  • फिटनेस फ़ंक्शन: समझदार सीमा के भीतर कर्तव्य चक्र, नाड़ी की चौड़ाई और बीपीएम का संयोजन।

मुझे स्पेक्ट्रम के विभिन्न भागों के साथ-साथ अलग-अलग BPM सीमाओं के साथ कुछ GAs मिला था, इसलिए वे उसी पैटर्न की ओर अभिसरण नहीं करते थे। प्रत्येक आबादी से शीर्ष 4 से आउटपुट रेंडरिंग इंजन को भेजे गए थे।

एक दिलचस्प दुष्प्रभाव यह था कि आबादी में औसत फिटनेस संगीत में बदलाव के लिए एक अच्छा संकेतक था, हालांकि यह पता लगाने में आमतौर पर 4-5 सेकंड लगते थे।


3

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

आप यहां कोड पा सकते हैं ।

इस एल्गोरिदम के साथ आप जो समाधान पा सकते हैं, उसकी तुलना अत्याधुनिक एल्गोरिदम SPEA-2 और NSGA के साथ एक वैज्ञानिक कार्य में की गई है, और यह साबित हो गया है कि एल्गोरिथ्म आप पर निर्भर करता है कि तुलनात्मक रूप से या उससे भी बेहतर प्रदर्शन करता है। प्रदर्शन को मापने के लिए, और विशेष रूप से अनुकूलन-समस्या पर निर्भर करता है जिसे आप देख रहे हैं।

आप इसे यहाँ पा सकते हैं ।

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

मेरी थीसिस जो इस फ्रेमवर्क को प्रोजेक्ट चयन समस्या पर लागू करती है: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf

उसके बाद मैंने भाग्य 500 में से एक में एक पोर्टफोलियो प्रबंधन विभाग में काम किया, जहां उन्होंने एक वाणिज्यिक सॉफ़्टवेयर का उपयोग किया, जिसने परियोजना चयन समस्या / पोर्टफोलियो अनुकूलन के लिए जीए भी लागू किया।

आगे के संसाधन:

फ्रेमवर्क का दस्तावेज़ीकरण: http://thomaskremmel.com/mpoems/mpoems_in_java_document.pdf

mPOEMS प्रस्तुति पेपर: http://portal.acm.org/citation.cfm?id=1792634.1792653

वास्तव में थोड़े उत्साह के साथ हर कोई आसानी से जेनेरिक ढांचे के कोड को एक मनमाने बहु-उद्देश्य अनुकूलन समस्या के लिए अनुकूलित कर सकता है।


2

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

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


2

Codechef.com (जिस तरह से, मासिक प्रोग्रामिंग प्रतियोगिताओं के माध्यम से महान साइट) पर एक प्रतियोगिता थी, जहां किसी को एक अनचाहे सुडोकु को हल करना चाहिए था (किसी को यथासंभव गलत कॉलम / पंक्तियों / आदि के साथ जितना संभव हो उतना करीब आना चाहिए)।

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

मैं इस मामले में एक नियतात्मक दृष्टिकोण के बारे में नहीं सोच सकता था, क्योंकि सुडोकू 300x300 था और खोज को बहुत लंबा समय लगेगा।


2

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


2

स्कूल में एक सेमिनार में, हम संगीत मोड में आधारित संगीत उत्पन्न करने के लिए एक एप्लीकेशन विकसित करते हैं। कार्यक्रम जावा में बनाया गया था और आउटपुट गीत के साथ एक मिडी फ़ाइल था। हम संगीत उत्पन्न करने के लिए GA के विशिष्ट aproachs का उपयोग कर रहे हैं। मुझे लगता है कि नई रचनाओं का पता लगाने के लिए यह कार्यक्रम उपयोगी हो सकता है।


महान मैंने कुछ इसी तरह की कोशिश की है: लिंक
टोडर बालाबानोव

2

अंडरग्रेड में, हमने बुद्धिमान निर्णय लेने के लिए इन-गेम रोबोट को सिखाने के लिए NERO (तंत्रिका नेटवर्क और आनुवंशिक एल्गोरिथ्म का संयोजन) का उपयोग किया। यह बहुत अच्छा था।


2

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

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

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

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

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


1

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

मैंने पर्ल का उपयोग किया, और खुद को सब कुछ कोडित किया। मैं आज चीजों को अलग तरह से करता।


1

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

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


1

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

व्यक्ति पेड़ों के रूप में थे जो इनपुट के रूप में 3x3 पिक्सेल क्षेत्र लेते थे, कुछ गणना करते थे, और केंद्र पिक्सेल को संशोधित करने के तरीके के बारे में निर्णय लेते थे। पारंपरिक तरीके से साफ की गई छवि (यानी स्टैकिंग एक्सपोज़र) के साथ आउटपुट की तुलना करके फिटनेस को आंका गया।

यह वास्तव में काम किया है, लेकिन मूल दृष्टिकोण को आगे बढ़ाने के लिए पर्याप्त रूप से पर्याप्त नहीं है। अगर मुझे अपनी थीसिस पर समय की कमी नहीं थी, तो हो सकता है कि मैंने आनुवंशिक भागों को एल्गोरिथम के लिए उपलब्ध करवाया हो। मुझे पूरा यकीन है कि मैं इसमें काफी सुधार कर सकता था।

पुस्तकालयों का उपयोग किया जाता है: यदि मैं सही ढंग से याद करता हूं, खगोलीय छवि डेटा प्रसंस्करण और I / O के लिए IRAF और cfitsio।


1

मैंने अपनी युवावस्था में जीए के साथ प्रयोग किया। मैंने पायथन में एक सिम्युलेटर लिखा था जो निम्नानुसार काम करता था।

जीन ने एक तंत्रिका नेटवर्क के वजन को कूटबद्ध किया।

तंत्रिका नेटवर्क के इनपुट "एंटीना" थे जो स्पर्श का पता लगाते थे। उच्च मूल्यों का मतलब बहुत करीब था और 0 का मतलब स्पर्श नहीं था।

आउटपुट दो "पहियों" के लिए थे। अगर दोनों पहिए आगे बढ़ गए, तो आदमी आगे चला गया। यदि पहिए विपरीत दिशाओं में थे, तो आदमी मुड़ गया। आउटपुट की ताकत ने पहिया मोड़ की गति निर्धारित की।

एक साधारण भूलभुलैया उत्पन्न हुई। यह वास्तव में सरल था - बेवकूफ भी। स्क्रीन के निचले भाग में शुरुआत और सबसे ऊपर एक गोल था, जिसके बीच में चार दीवारें थीं। प्रत्येक दीवार में बेतरतीब ढंग से एक जगह थी, इसलिए हमेशा एक रास्ता था।

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

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

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

एक विशेषता जो मैंने जोड़ी थी वह व्यक्तियों के बीच संबंधितता को ट्रैक करने के लिए एक रंग वेक्टर में जीन में डालना था। कुछ पीढ़ियों के बाद, वे सभी एक ही रंग होंगे, जो मुझे बताते हैं कि मेरे पास बेहतर प्रजनन रणनीति होनी चाहिए।

मैंने उन्हें एक बेहतर रणनीति विकसित करने की कोशिश की। मैं तंत्रिका जाल को जटिल करता हूं - एक मेमोरी और सब कुछ जोड़ना। यह मदद नहीं की। मैंने हमेशा एक ही रणनीति देखी।

मैंने अलग-अलग जीन पूल होने जैसी विभिन्न चीजों की कोशिश की जो केवल 100 पीढ़ियों के बाद पुन: संयोजित हो गई। लेकिन कुछ भी उन्हें बेहतर रणनीति के लिए प्रेरित नहीं करेगा। शायद यह असंभव था।

एक और दिलचस्प बात समय के साथ फिटनेस को रेखांकन कर रही है। निश्चित पैटर्न थे, जैसे अधिकतम फिटनेस नीचे जाने से पहले। मैंने उस संभावना के बारे में विकास की किताब पर कभी बात नहीं की है।

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