रैखिक आनुवंशिक प्रोग्रामिंग

From Vigyanwiki

लीनियर जेनेटिक प्रोग्रामिंग लीनियर प्रोग्रामिंग से असंबंधित है।

लीनियर जेनेटिक प्रोग्रामिंग (एलजीपी)[1] जेनेटिक प्रोग्रामिंग की विशेष विधि है जिसमें किसी सरंध्रता में कंप्यूटर प्रोग्राम को इम्पेरटिवे प्रोग्रामिंग लैंग्वेज या मशीन कोड से निर्देश (कंप्यूटर विज्ञान) के अनुक्रम के रूप में दर्शाया जाता है। विशेषण "लीनियर" इस तथ्य से उत्पन्न होता है कि निर्देशों का अनुक्रम सामान्यतः लीनियर तरीके से निष्पादित होता है। अन्य प्रोग्राम की तरह, एलजीपी में डेटा प्रवाह को ग्राफ के रूप में तैयार किया जा सकता है जो प्रोसेसर रजिस्टर सामग्री के संभावित एकाधिक उपयोग और संरचनात्मक रूप से गैर-प्रभावी कोड (इंट्रोन्स) के अस्तित्व की कल्पना करेगा जो कि अधिक सामान्य ट्री-आधारित जेनेटिक प्रोग्रामिंग (टीजीपी) संस्करण से इस जेनेटिक प्रतिनिधित्व के दो मुख्य अंतर हैं।[2][3][4]

अन्य जेनेटिक प्रोग्रामिंग विधियों की तरह, लीनियर जेनेटिक प्रोग्रामिंग को प्रोग्राम सरंध्रता को चलाने के लिए डेटा के इनपुट की आवश्यकता होती है। फिर, फिटनेस फ़ंक्शन का उपयोग करके प्रोग्राम के आउटपुट (उसके व्यवहार) को कुछ लक्ष्य व्यवहार के विरुद्ध आंका जाता है। चूंकि, ऊपर बताए गए दो मुख्य अंतरों के कारण एलजीपी सामान्यतः ट्री जेनेटिक प्रोग्रामिंग की तुलना में अधिक कुशल है: मध्यवर्ती परिणाम (रजिस्टरों में संग्रहीत) का पुन: उपयोग किया जा सकता है और सरल इंट्रोन निष्कासन कलन विधि सम्मिलित है।[1]जिसे इच्छित डेटा पर प्रोग्राम चलाने से पहले सभी गैर-प्रभावी कोड को हटाने के लिए निष्पादित किया जा सकता है। ट्री में अत्यधिक बाधित डेटा प्रवाह और टीजीपी में सभी ट्री नोड्स को निष्पादित करने की सामान्य विधि की तुलना में इन दो अंतरों के परिणामस्वरूप अधिकांशतः संक्षिप्त समाधान और पर्याप्त संगणनात्मक बचत होती है।

लीनियर जेनेटिक प्रोग्रामिंग को तंत्र मॉडलिंग और तंत्र नियंत्रण सहित कई प्रांत में काफी सफलता के साथ लागू किया गया है।[5][6][7][8]

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

एलजीपी प्रोग्राम के उदाहरण

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

R4 = R2 AND R3
R0 = R1 OR R4
R0 = R3 AND R0
R4 = R2 AND R4   # This is a non-effective instruction
R0 = R0 OR R2

R1, R2, R3 को इनपुट (रीड-ओनली) रजिस्टर के रूप में घोषित किया जाना है, जबकि R0 और R4 को गणना (रीड-राइट) रजिस्टर के रूप में घोषित किया गया है। यह प्रोग्राम बहुत सरल है, इसमें केवल 5 निर्देश हैं। लेकिन उत्परिवर्तन और विनिमय संचालक प्रोग्राम की लंबाई, साथ ही इसके प्रत्येक निर्देश की सामग्री को बढ़ाने के लिए काम कर सकते हैं।

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

एक और सरल प्रोग्राम, यह एलजीपी लैंग्वेज में लिखा गया है Slash/A स्लैश द्वारा अलग किए गए निर्देशों की श्रृंखला जैसा दिखता है:

input/   # gets an input from user and saves it to register F
0/       # sets register I = 0
save/    # saves content of F into data vector D[I] (i.e. D[0] := F)
input/   # gets another input, saves to F
add/     # adds to F current data pointed to by I (i.e. F := F + D[0])
output/. # outputs result from F

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

यह भी देखें

टिप्पणियाँ

  1. 1.0 1.1 M. Brameier, W. Banzhaf, "Linear Genetic Programming", Springer, New York, 2007
  2. Brameier, M.: "On linear genetic programming Archived 2007-06-29 at the Wayback Machine", Dortmund, 2003
  3. W. Banzhaf, P. Nordin, R. Keller, F. Francone, Genetic Programming - An Introduction, Morgan Kaufmann, Heidelberg/San Francisco, 1998
  4. Poli, R.; Langdon, W. B.; McPhee, N. F. (2008). जेनेटिक प्रोग्रामिंग के लिए एक फील्ड गाइड. Lulu.com, freely available from the internet. ISBN 978-1-4092-0073-4.
  5. M. Brameier, W. Banzhaf, A Comparison of Linear Genetic Programming and Neural Networks in Medical Data Mining", IEEE Transactions on Evolutionary Computation, 5 (2001) 17-26
  6. A. Guven, Linear genetic programming for time-series modelling of daily flow rate, J. Earth Systems Science, 118 (2009) 137-146
  7. R. Li, B.R. Noack, L. Cordier, J. Boree, F. Harambat, Drag reduction of a car model by linear genetic programming control, Experiments in Fluids, 58 (2017) 103
  8. P.-Y. Passagia, A. Quansah, N. Mazellier, G.Y. Cornejo Maceda, A. Kourta, Real-time feedback stall control of an airfoil at large Reynolds numbers using linear genetic programming, Physics of Fluids, 34 (2022) 045108
  9. Foundations of Genetic Programming.


बाहरी संबंध

  • Slash/A A programming language and C++ library specifically designed for linear GP
  • DigitalBiology.NET Vertical search engine for GA/GP resources
  • Discipulus Genetic-Programming Software
  • MicroGP Genetic-Programming Software (open source)
  • [1]