# जनुकात्मक अल्गोरिदम ## [पूर्व-व्याख्यान प्रश्नमंजूषा](https://ff-quizzes.netlify.app/en/ai/quiz/41) **जनुकात्मक अल्गोरिदम** (GA) हे AI साठी एक **उत्क्रांतीवर आधारित दृष्टिकोन** आहे, ज्यामध्ये लोकसंख्येच्या उत्क्रांतीच्या पद्धतींचा वापर करून दिलेल्या समस्येसाठी सर्वोत्तम उपाय शोधला जातो. हे 1975 मध्ये [जॉन हेन्री हॉलंड](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 चे पुरेसे छोटे मूल्य मिळेपर्यंत किंवा चरणांच्या मर्यादेपर्यंत पोहोचेपर्यंत चरण 2 पासून पुन्हा सुरू करा. ## सामान्य कार्ये जनुकात्मक अल्गोरिदमद्वारे सामान्यतः सोडवली जाणारी कार्ये: 1. वेळापत्रक ऑप्टिमायझेशन 1. सर्वोत्तम पॅकिंग 1. सर्वोत्तम कटिंग 1. exhaustive search वेगवान करणे ## ✍️ सराव: जनुकात्मक अल्गोरिदम खालील नोटबुक्समध्ये तुमचे शिक्षण सुरू ठेवा: [या नोटबुकमध्ये](Genetic.ipynb) जा आणि जनुकात्मक अल्गोरिदम वापरण्याचे दोन उदाहरणे पाहा: 1. खजिन्याचे न्याय्य विभाजन 1. 8 क्वीन समस्या ## निष्कर्ष जनुकात्मक अल्गोरिदम अनेक समस्या सोडवण्यासाठी वापरले जातात, ज्यामध्ये लॉजिस्टिक्स आणि शोध समस्या समाविष्ट आहेत. हे क्षेत्र मानसशास्त्र आणि संगणक विज्ञानाच्या विषयांचे संशोधन एकत्र करून प्रेरित झाले आहे. ## 🚀 आव्हान "जनुकात्मक अल्गोरिदम अंमलात आणणे सोपे आहे, परंतु त्यांचे वर्तन समजणे कठीण आहे." [स्रोत](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) वापरून सुरुवात करा. ---