आवश्यकताओं को समझना
- सभी खिलाड़ियों के पास सीमित संख्या में शत्रु होते हैं।
सबसे पहले, हम खिलाड़ियों के स्पॉन पॉइंट्स के बारे में बात कर रहे हैं, न कि गेम में दिए गए पॉइंट पर खिलाड़ियों की वर्तमान स्थिति। बस उस रास्ते से हट रही है।
जब हम किसी ग्राफ़ के बारे में बात करते हैं तो आसन्न को अच्छी तरह से परिभाषित किया जाता है। हम उस मानचित्र के बारे में सोच सकते हैं जो मानचित्र पर नौगम्यता का प्रतिनिधित्व करता है - अब से "ग्राफ" पर।
यदि नोड में सबसे अधिक एक स्पॉन बिंदु हो सकता है, तो उनके "आसन्न" होने की बात समझ में आती है। ध्यान दें: मैं उन कारणों के लिए एक ही बिंदु पर नोड्स को बाधा नहीं बनाऊंगा, जो बाद में स्पष्ट होंगे।
ग्राफ बनाने के लिए हमें दीवारों, पुलों, सीढ़ी, टेलीपोर्टेशन पॉइंट जैसी चीजों पर विचार करने की आवश्यकता होगी, या यहां तक कि उड़ान की जगह पर विचार करें यदि कोई खिलाड़ी हो सकता है जो उड़ सकता है। प्रत्येक नोड एक ट्रैवर्सेबल स्थान का प्रतिनिधित्व करता है; प्रत्येक कनेक्शन एक संभावित आंदोलन का प्रतिनिधित्व करता है।
नोट: आकार और नोड्स के आकार को जानते हैं, और वास्तव में आसन्न नोड्स के साथ काम करते हैं। नोड्स को एक बिंदु न मानें। लंबाई के रूप में कनेक्शन पर विचार न करें। इसके अलावा, उत्तल नोड्स का उपयोग करें।
ग्राफ को पहले से तैयार किया जा सकता था (नक्शा एक डिजाइनर द्वारा बनाया गया था); अन्यथा, यह मक्खी पर बनाया जा सकता है अगर नक्शा यादृच्छिक रूप से उत्पन्न होता है।
- सभी खिलाड़ियों के पास आसन्न शत्रु का सामना करने की समान संभावना है।
मैं मानूंगा कि दुश्मन दूसरे खिलाड़ी हैं। फिर से, बस उस रास्ते से बाहर हो रही है।
प्रत्येक खिलाड़ी मानकर एक यादृच्छिक चलना, एक दिए गए बिंदु पर एक खिलाड़ी को खोजने की संभावना - एक सपाट स्थान पर, बाधाओं से मुक्त - दूरी बिंदु के एक (गाऊसी) फ़ंक्शन द्वारा दिया जाएगा - अब से " समारोह"।
चूंकि हम ग्राफ पर काम कर रहे हैं, इसलिए हम इसके बजाय ग्राफ पर मानों को एनोटेट करेंगे।
- मानचित्र का आकार खिलाड़ियों की संख्या के लिए आनुपातिक बढ़ाना नहीं है।
यदि हमारे पास प्रति नोड एकल स्पॉन बिंदु होने की बाधा है, तो अधिक खिलाड़ी जोड़ने के लिए हमें छोटे नोड्स की आवश्यकता होगी। यदि हम ग्राफ को तय करते हैं इससे पहले कि हम जानते हैं कि हमारे पास कितने खिलाड़ी होंगे, तो हमें विशेष गेम के लिए नोड्स को तोड़ना होगा।
- इन सीमाओं को मनमाने ढंग से अगम्य स्थानों के साथ लागू नहीं किया जाता है।
मैं समस्या को हल करने के लिए बाधाओं को जोड़ने का इरादा नहीं करता हूं। एयू गर्भनिरोधक , मुझे बाधाओं से घिरे काम करने की आवश्यकता है। यदि वे वहां नहीं होते, तो कार्यान्वयन सरल होता।
समाधान
हम एन स्पॉन पॉइंट्स को रखने की कोशिश कर रहे हैं, ताकि उन सभी स्पॉन पॉइंट्स पर किसी अन्य खिलाड़ी का सामना करने का मौका बराबर हो।
हम त्रुटि का एक उपाय प्राप्त कर सकते हैं क्योंकि अवसरों के बीच अंतर के योग के योग हैं। हम इसे कम करने की कोशिश कर रहे हैं (वास्तव में, हम इसे 0 पर बनाना चाहते हैं)।
ऐसा करने के लिए, हमें ग्राफ़ के प्रत्येक नोड पर एक खिलाड़ी से सामना करने का मौका जानना होगा।
उस मौके की गणना करने के लिए, शून्य से शुरू करें। किसी भी दिए गए नोड पर एक खिलाड़ी को खोजने का मौका, जब कोई खिलाड़ी नहीं है, शून्य है। और फिर, प्रत्येक स्पॉन बिंदु के लिए, एनोटेट मौका को जोड़ने वाले ग्राफ को चालू स्पॉन पॉइंट के लिए फ़ंक्शन के मान से चलाएं।
नोट 1: स्पॉन पॉइंट को जोड़ने या स्थानांतरित करने से सभी नक्शे के लिए खिलाड़ी से सामना करने की संभावना प्रभावित होगी।
नोट 2: प्रत्येक स्पॉन पॉइंट पर कितना प्रभाव पड़ता है, इस पर नज़र रखना, चीजों को आसान बना देगा।
नोट 3: चूंकि नोड्स का आकार है, आप त्रुटि के कितने करीब हो सकते हैं = शून्य नोड्स के आकार पर निर्भर करता है। आप मानों की सीमाओं के साथ काम करके अधिक सटीक हो सकते हैं (न्यूमुन और मैक्सिमुन मौका, नोड के भीतर स्पॉन बिंदुओं की विशेष स्थिति पर निर्भर करता है)।
स्पॉन पॉइंट्स को रैंडम पर रखें, फिर उन्हें इस तरह से हिलाना शुरू करें कि त्रुटि छोटी हो जाए (एक संभावित आंदोलन पर विचार करें, और यदि त्रुटि को कम करने के लिए इसे बनाए रखें, अन्यथा इसे वापस कर दें)। और ऐसा तब तक करते रहें जब तक कि हम और सुधार न कर सकें (सुधार के बिना बहुत सारे पुनरावृत्तियों, या त्रुटि शून्य)।
नोट 4: एक स्पॉन पॉइंट को स्थानांतरित करते समय, आप एक खिलाड़ी (स्पॉन पॉइंट को छोड़कर, जो आप स्थानांतरित करेंगे) का सामना करने के मौके का उपयोग बेतरतीब ढंग से स्पॉन पॉइंट के लिए एक नई स्थिति का चयन करने के लिए कर सकते हैं, ऐसी स्थिति जिसमें किसी खिलाड़ी के करीब आने का मौका हो मतलब अधिक होने की संभावना है। मैं आपको याद दिलाता हूं कि स्पॉन पॉइंट को स्थानांतरित करने से मतलब प्रभावित होगा।
अपेक्षित व्यवहार यह है कि स्पॉन पॉइंट जो बहुत करीब हैं एक साथ अलग हो जाते हैं और स्पॉन पॉइंट जो बहुत दूर हैं, बहुत करीब आ जाते हैं। जब तक वे संतुलन तक नहीं पहुंच जाते।
यदि किसी दिए गए पुनरावृत्ति पर आपके पास नोड पर कई स्पॉन पॉइंट होते हैं (जो कि संभावना नहीं है, क्योंकि उन्हें अलग-अलग चलना चाहिए, लेकिन संभव है कि आपके पास पर्याप्त बड़े नोड हैं), नोड को विभाजित करें और हल करना जारी रखें। नोड का कोई भी विभाजन मान्य है।
उपरोक्त समाधान त्रुटि = शून्य पर पहुंच जाएगा, लेकिन शून्य तक पहुंचने की गारंटी नहीं है। आप इसे तब तक चला सकते हैं जब तक कि यह एक स्थानीय न्यूनतम तक नहीं पहुंच जाता ... सिद्धांत रूप में, आप इसे नोड्स को बिल्कुल शून्य बनाने के लिए विभाजित कर सकते हैं ... फिर भी, यह स्पॉन बिंदु निर्देशांक को ट्विक करने के बराबर है!
नोड के भीतर स्पॉन पॉइंट को स्थानांतरित करने के लिए सिम्युलेटेड एनीलिंग का प्रयास करें। हालांकि, ईमानदारी से, इस तरह के विस्तार के साथ परेशान करने के लिए शायद यह लायक नहीं है।
मैं यह स्पष्ट करना चाहता हूं कि बाधाओं से मुक्त फ्लैट मानचित्र के लिए परिणाम समान रूप से वितरित अंक नहीं होंगे। इसके बजाय, यदि मानचित्र में किनारे हैं (यानी, यदि यह चारों ओर लपेटता नहीं है), तो किनारों के करीब अधिक स्पॉइंट बिंदु होगा, ऐसा इसलिए है क्योंकि केंद्र पर बिंदुओं को अधिक दिशाओं से पहुंचाया जा सकता है, जिससे मुठभेड़ की संभावना बढ़ जाती है अन्य खिलाड़ी वहाँ। इस प्रकार, क्षतिपूर्ति करने के लिए केंद्र के पास और बिंदु।