नेटलोगो: वयस्कों और बच्चों दोनों के लिए





कई जटिल प्रणालियों की जांच केवल मॉडलिंग द्वारा की जा सकती है। बड़ी संख्या में स्वतंत्र वस्तुओं से युक्त प्रणालियों के लिए, जैसे कि भीड़ का व्यवहार, बहुकोशिकीय जीवों का विकास, या सैन्य संचालन, एजेंट मॉडलिंग सबसे उपयुक्त है। इसके लिए कई प्रणालियां तैयार की गई हैं, उदाहरण के लिए, रूसी स्वामित्व वाली AnyLogic

मैं नेटलोगो भाषा के बारे में बात करना चाहता हूं, जो शिक्षा में खुद को साबित कर चुका है, लेकिन वयस्क कार्यों के लिए भी उपयुक्त है।



वाक्य-विन्यास



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

टीमों (प्रक्रियाओं) की घोषणा की जाती है
to  [  ]  end
      
      







नेटलोगो के कार्यों को "संवाददाताओं" कहा जाता है और थोड़ा अलग तरीके से घोषित किया जाता है:



 to-reporter  [  ]  report   end
      
      







कंपाइलर प्रत्येक प्रक्रिया या कार्य के बारे में "arity" ("valency") जानता है और फिर से समूहीकरण का उपयोग करने की आवश्यकता नहीं है। सच है, उच्च आदेशों के कार्यों को गलत किया जा सकता है - फिर उसे कोष्ठक के रूप में एक संकेत की आवश्यकता होती है।



हमारे कार्य परिभाषित हैं:



 to-report inc [x] report x + 1 end to-report add [xy] report x + y end
      
      







फिर आप लिख सकते हैं
 add add inc 1 inc 2 inc 3
      
      



और एक अच्छी तरह से योग्य नौ प्राप्त करें।

यह उसी तरह काम करता है
 map inc [1 2 3]
      
      



जो [२ ३ ४] की सूची देता है। और जोड़ने के लिए, आपको पहले से ही कोष्ठक लिखना होगा
 (map add [1 2 3] [4 5 6])
      
      







एजेंटों



एजेंट तीन रूपों में आते हैं - कछुए (कछुए - वे उनके बिना कैसे हो सकते हैं), संचार (लिंक) और स्पॉट (पैच - वे अंतरिक्ष में जगह हैं)। कछुए और रिश्तों के लिए, आप एक उपयोगकर्ता-परिभाषित नस्ल निर्दिष्ट कर सकते हैं। एक ही प्रकार के एजेंटों को संबंधित सेट (एजेंटसेट) में जोड़ा जाता है - कछुए, लिंक और पथ। एक ही नस्ल के प्रतिनिधियों को भी एक सेट में जोड़ा जाता है। टीम द्वारा एक नई नस्ल बनाई जाती है
 breed [ninjas ninja]
      
      



जहां निंजा नस्ल का नाम है, और निन्जा उस संग्रह का नाम है जो इस नस्ल के सभी एजेंटों को एक साथ लाता है।

एक विशेष एजेंट भी है - पर्यवेक्षक।



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



एक एजेंट या एजेंटों का समूह किसी टीम के लिए संदर्भ हो सकता है। एजेंटों के संदर्भ में कार्यकारी आदेश उनके साथ काम करने का मुख्य तंत्र है।

 ask turtles [fd 1]
      
      



यह कोड सभी कछुओं को एक कदम आगे बढ़ाने के लिए कहेगा।
 ask patch 17 13 [set pcolor pink]
      
      



और यह नरम गुलाबी रंग में निर्देशांक (17,13) के साथ क्षेत्र को चित्रित करेगा।



नस्ल को गतिशील रूप से सेट किया जा सकता है
 ask turtle 1 [set bread ninjas] ask ninja 1 [set pcolor black]
      
      







चर



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

गुंजाइश स्थिर है, जो उच्च-क्रम के कार्यों के उपयोग को सरल करता है।

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



वैश्विक चर का वर्णन किया गया है
 global [1 2 ...]
      
      



अपना
 turtles-own [3 4 ...] ninjas-own [5 6 ...]
      
      



स्थानीय चर कमांड द्वारा बनाए जाते हैं
 let 7 _
      
      







उच्च आदेश कार्य



कुछ मानक फ़ंक्शंस, जैसे कि मानचित्र, एक तर्क के रूप में एक और फ़ंक्शन प्राप्त करते हैं। वे केवल फ़ंक्शन के नाम के पास होने या बंद होने का संकेत दे सकते हैं। क्लोजर [] में संलग्न एक कोड है। यह एक बंद है, एक सूची नहीं है, संकलक संदर्भ से अनुमान लगाता है। चर '?', '? 1', '2' और इसी तरह औपचारिक मापदंडों के रूप में उपयोग किया जाता है।

अपने उच्च-क्रम के कार्यों का उपयोग करना अधिक जटिल है। आप एक चर असाइन कर सकते हैं या किसी अन्य फ़ंक्शन को विशेष कार्य फ़ंक्शन का उपयोग करके एक मान फ़ंक्शन पास कर सकते हैं, और रनर्सॉल्ट (या कमांड के लिए रन) का उपयोग करके एक चर से फ़ंक्शन को कॉल कर सकते हैं।
 to test1 [f] show (runresult f 1) show (map f [2 3 4]) end test1 (task [? + 2])
      
      





व्यक्तिगत रूप से, मैं इस दृष्टिकोण को उन कार्यों और चर के पृथक्करण के साथ मानता हूं जो कार्यों को असफल होने के लिए संदर्भित करते हैं, लेकिन इसे लागू किया जाता है, उदाहरण के लिए, कॉमन लिस्प में, और इसके अपने समर्थक हैं।



इंटरफ़ेस और ग्राफिक्स





कार्यक्रम में तीन टैब (टैब) हैं: "इंटरफ़ेस", प्रलेखन और कोड संपादक। टैब "इंटरफ़ेस" में ग्राफिक ऑब्जेक्ट्स का एक क्षेत्र (दुनिया की एक छवि सहित), पाठ आउटपुट और REPL का एक क्षेत्र है। REPL में, आप उन मोड्स को स्विच कर सकते हैं जो यह निर्दिष्ट करते हैं कि किस संदर्भ में कमांड को चलाया जा रहा है - "ऑब्जर्वर", "कछुए", "स्पॉट" और "संचार"। REPL सीमित है - आप इसमें चर, नस्लों, प्रक्रियाओं और कार्यों का वर्णन नहीं कर सकते हैं (वे संदर्भ से बाहर हैं), आपको कोड संपादक पर जाना होगा।



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

उदाहरण के लिए, यदि हम "प्लॉट 1" नाम के साथ एक "ग्राफ" बनाते हैं, तो कमांड
 set-current-plot "Class Histogram" histogram map [position ? [red green blue]] ([color] of turtles)
      
      



लाल, हरे और नीले रंग में कछुए के वितरण का एक ग्राफ बनाएं (यह मानते हुए कि अन्य नहीं मिलते हैं)।



मॉडल लाइब्रेरी



नेटलोगो शैक्षिक और मनोरंजन से लेकर अनुसंधान तक मॉडल की एक विस्तृत लाइब्रेरी के साथ आता है। कुछ मॉडल विशेष हार्डवेयर के साथ संवाद कर सकते हैं, जैसे कि GoGo बोर्ड

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



All Articles