# जेनेटिक एल्गोरिथमहरू ## [पाठ अघि क्विज](https://ff-quizzes.netlify.app/en/ai/quiz/41) **जेनेटिक एल्गोरिथमहरू** (GA) कृत्रिम बुद्धिमत्ताको **उत्क्रमणात्मक दृष्टिकोण**मा आधारित छन्, जसमा जनसंख्याको उत्क्रमण विधिहरू प्रयोग गरेर कुनै समस्या समाधानको लागि उत्तम समाधान प्राप्त गरिन्छ। यी एल्गोरिथमहरू सन् १९७५ मा [जोन हेनरी हल्याण्ड](https://wikipedia.org/wiki/John_Henry_Holland) द्वारा प्रस्तावित गरिएको थियो। जेनेटिक एल्गोरिथमहरू निम्न विचारहरूमा आधारित छन्: * समस्याको वैध समाधानलाई **जीनहरू**को रूपमा प्रतिनिधित्व गर्न सकिन्छ। * **क्रसओभर**ले दुई समाधानलाई मिलाएर नयाँ वैध समाधान प्राप्त गर्न मद्दत गर्दछ। * **चयन**ले कुनै **फिटनेस फङ्सन** प्रयोग गरेर अधिकतम समाधानहरू चयन गर्न मद्दत गर्दछ। * **म्युटेसनहरू**लाई परिचय गराएर अनुकूलनलाई अस्थिर बनाइन्छ र स्थानीय न्यूनतमबाट बाहिर निकालिन्छ। यदि तपाईं जेनेटिक एल्गोरिथम कार्यान्वयन गर्न चाहनुहुन्छ भने, तपाईंलाई निम्न आवश्यक छ: * **जीनहरू** g∈Γ प्रयोग गरेर समस्या समाधानको कोडिङ विधि पत्ता लगाउनुहोस्। * जीनहरूको सेट Γमा **फिटनेस फङ्सन** fit: Γ→**R** परिभाषित गर्नुहोस्। सानो फङ्सन मानहरू राम्रो समाधानसँग मेल खान्छ। * दुई जीनहरूलाई मिलाएर नयाँ वैध समाधान प्राप्त गर्न **क्रसओभर** मेकानिज्म परिभाषित गर्नुहोस् crossover: Γ2→Γ। * **म्युटेसन** मेकानिज्म परिभाषित गर्नुहोस् mutate: Γ→Γ। धेरै अवस्थामा, क्रसओभर र म्युटेसन जीनहरूलाई संख्यात्मक अनुक्रम वा बिट भेक्टरको रूपमा हेरफेर गर्ने सरल एल्गोरिथमहरू हुन्। जेनेटिक एल्गोरिथमको विशिष्ट कार्यान्वयन केस अनुसार फरक हुन सक्छ, तर समग्र संरचना निम्नानुसार छ: 1. प्रारम्भिक जनसंख्या चयन गर्नुहोस् G⊂Γ 2. यस चरणमा प्रदर्शन गरिने अपरेशनहरू मध्ये एकलाई अनियमित रूपमा चयन गर्नुहोस्: क्रसओभर वा म्युटेसन 3. **क्रसओभर**: * अनियमित रूपमा दुई जीनहरू चयन गर्नुहोस् g1, g2 ∈ G * क्रसओभर गणना गर्नुहोस् g=crossover(g1,g2) * यदि fit(g)1) वा fit(g)2) - जनसंख्यामा सम्बन्धित जीनलाई g द्वारा प्रतिस्थापन गर्नुहोस्। 4. **म्युटेसन** - अनियमित रूपमा जीन g∈G चयन गर्नुहोस् र यसलाई mutate(g) द्वारा प्रतिस्थापन गर्नुहोस्। 5. चरण २ बाट दोहोर्याउनुहोस्, जबसम्म fit को मान पर्याप्त सानो हुँदैन वा चरणहरूको सीमामा पुग्दैन। ## सामान्य कार्यहरू जेनेटिक एल्गोरिथमहरूले सामान्यतया समाधान गर्ने कार्यहरूमा समावेश छन्: 1. तालिका अनुकूलन 1. उत्तम प्याकिङ 1. उत्तम काट्ने विधि 1. थकानपूर्ण खोजलाई तीव्र बनाउने ## ✍️ अभ्यास: जेनेटिक एल्गोरिथमहरू निम्न नोटबुकहरूमा आफ्नो सिकाइ जारी राख्नुहोस्: [यस नोटबुकमा जानुहोस्](Genetic.ipynb) जेनेटिक एल्गोरिथमहरूको प्रयोगका दुई उदाहरणहरू हेर्न: 1. खजाना निष्पक्ष विभाजन 1. ८ क्वीन समस्या ## निष्कर्ष जेनेटिक एल्गोरिथमहरू धेरै समस्याहरू समाधान गर्न प्रयोग गरिन्छ, जसमा रसद र खोज समस्याहरू समावेश छन्। यो क्षेत्र मनोविज्ञान र कम्प्युटर विज्ञानको विषयहरूलाई मिलाएर गरिएको अनुसन्धानबाट प्रेरित छ। ## 🚀 चुनौती "जेनेटिक एल्गोरिथमहरू कार्यान्वयन गर्न सरल छन्, तर तिनीहरूको व्यवहार बुझ्न गाह्रो छ।" [स्रोत](https://wikipedia.org/wiki/Genetic_algorithm) कुनै जेनेटिक एल्गोरिथमको कार्यान्वयन जस्तै सुडोकु पजल समाधान गर्ने विधि खोज्नुहोस्, र यसले कसरी काम गर्छ भन्ने कुरा स्केच वा फ्लोचार्टको रूपमा व्याख्या गर्नुहोस्। ## [पाठ पछि क्विज](https://ff-quizzes.netlify.app/en/ai/quiz/42) ## समीक्षा र आत्म अध्ययन [यो उत्कृष्ट भिडियो](https://www.youtube.com/watch?v=qv6UVOQ0F44) हेर्नुहोस् जसले कम्प्युटरले जेनेटिक एल्गोरिथमद्वारा प्रशिक्षित न्युरल नेटवर्क प्रयोग गरेर सुपर मारियो खेल्न सिक्न सक्ने कुरा बताउँछ। हामी यस्तो खेल खेल्न कम्प्युटर सिक्नको बारेमा [अर्को खण्डमा](../22-DeepRL/README.md) थप सिक्नेछौं। ## [असाइनमेन्ट: डायोफेन्टाइन समीकरण](Diophantine.ipynb) तपाईंको लक्ष्य तथाकथित **डायोफेन्टाइन समीकरण** - पूर्णांक जरा भएको समीकरण समाधान गर्नु हो। उदाहरणका लागि, समीकरण a+2b+3c+4d=30 विचार गर्नुहोस्। तपाईंले यस समीकरणलाई सन्तुष्ट पार्ने पूर्णांक जरा पत्ता लगाउनुपर्छ। *यो असाइनमेन्ट [यो पोस्ट](https://habr.com/post/128704/)बाट प्रेरित छ।* सुझावहरू: 1. जराहरूलाई [0;30] अन्तरालमा विचार गर्न सक्नुहुन्छ। 1. जीनको रूपमा, जराको मानहरूको सूची प्रयोग गर्न विचार गर्नुहोस्। [Diophantine.ipynb](Diophantine.ipynb)लाई सुरुवात बिन्दुको रूपमा प्रयोग गर्नुहोस्। ---