2010-07-01 14 views
12

पर क्रॉसओवर और उत्परिवर्तन लागू करना मैं एक जेनेटिक एल्गोरिदम के साथ खेल रहा हूं जिसमें मैं ग्राफ विकसित करना चाहता हूं। क्या गुणसूत्र ग्राफ होते समय क्रॉसओवर और उत्परिवर्तन लागू करने का कोई तरीका पता है?ग्राफ़ (आनुवंशिक एल्गोरिदम)

या क्या मुझे ग्राफ के लिए कोडिंग याद आ रही है जो मुझे "नियमित" क्रॉसओवर और बिट स्ट्रिंग्स पर उत्परिवर्तन लागू करने देती है?

बहुत बहुत धन्यवाद! कोई मदद, भले ही यह मेरी समस्या से सीधे संबंधित न हो, की सराहना की जाती है!

मैनुअल

उत्तर

12

पर इस बारे में कुछ जानकारी मिल सकती है मैं केन स्टेनली के NEAT algorithm का उपयोग करने का Sandor's suggestion पसंद है।

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

इसे पूरा करने के लिए, एनईएटी क्रॉसओवर के दौरान दो जीनोम के जीन "लाइन अप" करने के लिए प्रत्येक जीन से जुड़े historical markings का उपयोग करता है (एक प्रक्रिया जीवविज्ञानी कॉल synapsis)। उदाहरण के लिए:

crossover with different topologies in NEAT http://natekohl.net/media/neat-crossover.png

(इस उदाहरण में, प्रत्येक जीन एक बॉक्स है और दो नोड्स के बीच एक कनेक्शन का प्रतिनिधित्व करता है प्रत्येक जीन के शीर्ष पर संख्या है कि जीन के लिए अंकन ऐतिहासिक है।।)

सारांश में: ऐतिहासिक चिह्नों के आधार पर जीन को अस्तर बनाना महंगे स्थलीय विश्लेषण के बिना दो नेटवर्कों के बीच क्रॉसओवर करने का एक सिद्धांत है।

+0

NEAT उन में चक्र/पुनरावृत्ति के साथ नेटवर्क के लिए अनुमति देता है। मूल्यांकन के दौरान आप इसे कैसे संभालेंगे? –

+0

@iliacholy यह आमतौर पर उस समस्या पर निर्भर करता है जिसे आप हल करने का प्रयास कर रहे हैं। नियंत्रण कार्यों (जैसे ध्रुव-संतुलन रोबोट) के लिए आवर्ती कनेक्शन उपयोगी हो सकते हैं क्योंकि वे समय के साथ मूल्यों के डेरिवेटिव की गणना करने का एक तरीका प्रदान कर सकते हैं। नेटवर्क का मूल्यांकन करते समय, आप प्रत्येक टाइमस्टेप के मूल्यों का एक एकल प्रचार कर सकते हैं, या आउटपुट स्थिर होने तक आप मूल्यों को प्रसारित करते रहें ... मुझे यकीन नहीं है कि कोई एकल 'दाएं' उत्तर है या नहीं। :) –

0

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

3

आप Genetic Programming को भी आजमा सकते हैं। एक पेड़ पेड़ के सबसे नज़दीकी चीज होगा और जीपी पेड़ का उपयोग करता है ... यदि आप अभी भी जीपी के बजाए जीए का उपयोग करना चाहते हैं तो एक जीपी पर क्रॉसओवर कैसे किया जाता है और यह आपको एक विचार दे सकता है कि इसे कैसे किया जाए अपने जीए के रेखांकन पर:

  1. आप संभोग के लिए 2 नमूनों का चयन करें:

    Crossover http://www.geneticprogramming.com/Tutorial/cross1.gif

    यहाँ कैसे पेड़ों (और रेखांकन) के लिए विदेशी काम करता है।

  2. आप एक अभिभावक से एक यादृच्छिक नोड उठाते हैं और इसे अन्य माता-पिता में यादृच्छिक नोड के साथ स्वैप करते हैं।
  3. परिणामी पेड़ संतान हैं।
1

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

वैकल्पिक रूप से, यदि आप एक ग्राउंड को आसन्न मैट्रिक्स के रूप में प्रस्तुत कर रहे हैं, तो आप matrices में तत्वों को स्वैप/म्यूटेट कर सकते हैं (जैसे कि दो-आयामी बिट स्ट्रिंग का उपयोग करना)।

+0

मैं समझने की कोशिश कर रहा हूं: तकनीकी रूप से, आसन्न मैट्रिस का उपयोग करके सबग्राफ कैसे स्वैप करेंगे? – Rodolphe

1

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

आप एक निश्चित टोपोलॉजी है, तो दोनों क्रोसओवर और उत्परिवर्तन काफी आसान कर रहे हैं (यह मानते हुए कि आप केवल नेटवर्क का वजन विकसित):

क्रॉसओवर: एक माता पिता से कुछ वजन ले, दूसरे से बाकी है, यदि आप एक सरणी या सूची के रूप में वजन का प्रतिनिधित्व करते हैं तो बहुत आसानी से किया जा सकता है। अधिक जानकारी या विकल्पों के लिए http://en.wikipedia.org/wiki/Crossover_%28genetic_algorithm%29 देखें।

उत्परिवर्तन: बस कुछ वजन का चयन करें और उन्हें थोड़ा समायोजित करें।

कुछ अन्य सामान (जैसे सक्रियण फ़ंक्शन) विकसित करना इनके समान ही है।

यदि आप टोपोलॉजी विकसित करना चाहते हैं तो चीजें अधिक दिलचस्प हो जाती हैं। एक अतिरिक्त नोड जोड़ने की संभावनाएं हैं, जैसे कि एक नोड जोड़ने (संभवतः दो पहले से मौजूद नोड्स से जुड़ा हुआ), कनेक्शन को विभाजित करना (ए-> बी के बजाय ए-> सी-> बी), कनेक्शन जोड़ना, या विरोधियों इनमे से।

लेकिन क्रॉसओवर बहुत आसान नहीं होगा (कम से कम अगर नोड्स की संख्या तय नहीं की जाती है), क्योंकि आप शायद "मिलान" नोड्स (जहां मिलान कुछ भी हो सकता है, लेकिन संभवतः इसी तरह से संबंधित " भूमिका ", या नेटवर्क में एक समान जगह)। यदि आप इसे भी करना चाहते हैं तो मैं अत्यधिक मौजूदा तकनीकों का अध्ययन करने की अत्यधिक अनुशंसा करता हूं। एक जिसे मैं जानता हूं और पसंद करता हूं उसे NEAT कहा जाता है। आप
http://en.wikipedia.org/wiki/Neuroevolution_of_augmenting_topologies
http://nn.cs.utexas.edu/?neat
और http://www.cs.ucf.edu/~kstanley/neat.html

संबंधित मुद्दे