
सभी को शुभ दिन!
यहां तक कि विश्वविद्यालय में वरिष्ठ पाठ्यक्रमों में मैं बौद्धिक एजेंटों में शामिल होने लगा। यहां तक कि डिप्लोमा के लिए विषय मूल रूप से युद्ध के मैदान की नकल करने वाले वातावरण में शत्रुता में शामिल एजेंटों के निर्माण से जुड़ा था। लेकिन काम की वजह से मुझे विषय बदलना पड़ा।
मैं लंबे समय से ऐसा करना चाहता था, लेकिन सारा समय चला गया था। अब वे अंततः एजेंटों के लिए एक वातावरण बनाने के लिए तैयार हो गए, हालांकि इस तरह के पैमाने पर नहीं। इसलिए अगर किसी को दिलचस्पी है, तो इसमें शामिल हों! भंडार खुला है, नीचे लिंक है।
बुद्धिमान एजेंट।
सरल शब्दों में, एक एजेंट पर्यावरण में रखी गई एक इकाई है, जो सेंसर का उपयोग करके पर्यावरण को देखने में सक्षम है और एक्ट्यूएटर्स का उपयोग करके उस पर कार्य करता है।
सबसे सरल एजेंट योजना, जैसा कि विकिपीडिया कहता है, इस तरह दिखता है:

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

2 नियंत्रण स्क्रिप्ट प्रत्येक टैंक से जुड़ी होती हैं:
- टैंकबेहोर
- BasicTankControls (या इसके उपवर्ग)
टैंकबहेवियर एक मुख्य स्क्रिप्ट है जो पूरी तरह से एक टैंक का वर्णन करता है। यह स्क्रिप्ट चलती, शूटिंग और बाकी सभी तरीकों को लागू करती है। इस स्क्रिप्ट में BasicTankControls का लिंक भी है, जो टैंक नियंत्रण को लागू करता है। मूल स्क्रिप्ट इस प्रकार है:
public class BasicTankControls : MonoBehaviour { public void Init(TankBehavior tank) { this.tank = tank; } public virtual void Act(List<TankData> tanksData) {
यह टैंकबिहेयर स्क्रिप्ट में नियंत्रण स्क्रिप्ट को इनिशियलाइज़ करता है:
void Start () { ... controls = GetComponent<BasicTankControls>(); if(controls != null) { controls.Init(this); } ... }
इस विधि को हर शारीरिक टिक कहा जाता है:
void FixedUpdate() { if(controls != null) { GameObject[] tankObjects = GameObject.FindGameObjectsWithTag("Tank"); List<TankData> tanksData = new List<TankData>(); foreach (var item in tankObjects) { if (item.GetInstanceID() != this.GetInstanceID()) { tanksData.Add(item.GetComponent<TankBehavior>().GetData()); } } controls.Act(tanksData); } }
सबसे पहले, मैदान पर सभी टैंकों के बारे में डेटा एकत्र किया जाता है। इस प्रकार, एजेंट सेंसर द्वारा पर्यावरण के बारे में जानकारी का संग्रह नकली है। फिर यह जानकारी नियंत्रण स्क्रिप्ट को प्रेषित की जाती है, जो प्राप्त आंकड़ों के आधार पर, पर्यावरण पर प्रभाव डालेगी।
एक टैंक पर डेटा इस तरह दिखता है:
public class TankData { public TankData(int instanceId, Vector2 position, float health, Direction direction) { this.InstanceID = instanceId; this.Position = position; this.Health = health; this.Direction = direction; } public readonly int InstanceID; public readonly Vector2 Position; public readonly float Health; public readonly Direction Direction; }
वह मूल रूप से यह है। अब कार्य केवल टैंकों के लिए एक नियंत्रण स्क्रिप्ट लिखने के लिए है। मैंने किसी व्यक्ति के प्रबंधन के लिए एक स्क्रिप्ट लिखी है अगर कोई अचानक घटनाओं के दौरान हस्तक्षेप करना चाहता है:
public class HumanControls : BasicTankControls { public override void Act(List<TankData> tanksData) { if(Input.GetButton("Up")) { tank.MoveForward(); } else if (Input.GetButton("Down")) { tank.MoveBackward(); } if (Input.GetButtonDown("Left")) { tank.RotateLeft(); } else if (Input.GetButtonDown("Right")) { tank.RotateRight(); } if (Input.GetButton("Fire")) { tank.Fire(); } } }
टैंक व्यवहार
शुरू करने के लिए, मैं सरल स्वायत्त व्यवहार करने की योजना बनाता हूं, उदाहरण के लिए, यादृच्छिक दिशाओं में ड्राइविंग और शूटिंग। फिर दीवारों (शायद ध्वस्त) और बहुत मुख्यालय को जोड़ने का विचार है, जिसे कुछ को बचाने और दूसरों को नष्ट करने की आवश्यकता है। शायद संयुक्त कार्रवाई की योजना भी होगी।
लेकिन ये बहुत आशावादी योजनाएं हैं। मैंने खुद इसे पहले कभी नहीं लिखा है, इसलिए मुझे इसका अध्ययन करना होगा। किसी भी मदद और सलाह की सराहना की है! :)
भंडार का
लिंक ।