অনুসন্ধানগুলি এড়ানোর বিষয়ে কিছু ধারণা যা ফলশ্রুতিতে ব্যর্থ পথে ডেকে আনে:
আইল্যান্ড আইডি
কার্যকরভাবে এ * অনুসন্ধানগুলি দ্রুত শেষ করার এক সস্তারতম উপায় হ'ল কোনও অনুসন্ধান না করা। যদি অঞ্চলগুলি সমস্ত এজেন্টের দ্বারা সত্যই দুর্গম হয় তবে বন্যা প্রতিটি অঞ্চলকে লোডে (বা পাইপলাইনে) একটি অনন্য আইল্যান্ড আইডি দিয়ে পূর্ণ করে । যখন চেক pathfinding যদি দ্বীপ আইডি পথের বংশোদ্ভুত সাথে মিলে যায় দ্বীপ আইডি গন্তব্য। যদি তারা না মেলে তবে অনুসন্ধানের কোনও অর্থ নেই - দুটি পয়েন্ট পৃথক, সংযুক্ত দ্বীপে রয়েছে। এটি কেবল তখনই সহায়তা করে যদি সমস্ত এজেন্টের জন্য সত্যিকারের দুর্গম নোড থাকে।
উপরের আবদ্ধ সীমাবদ্ধ
আমি সর্বাধিক সংখ্যক নোডের উপরের সীমাটি সীমাবদ্ধ করি যা অনুসন্ধান করা যায়। এটি দুর্গম অনুসন্ধানগুলিকে চিরকালের জন্য চালানো থেকে সহায়তা করে, তবে এর অর্থ হ'ল খুব দীর্ঘ যে কিছু পাসেবল অনুসন্ধানগুলি হারিয়ে যেতে পারে। এই নম্বরটি সুর করা দরকার, এবং এটি সত্যিই সমস্যার সমাধান করে না , তবে এটি দীর্ঘ অনুসন্ধানগুলির সাথে যুক্ত ব্যয়কে হ্রাস করে।
আপনি যা সন্ধান করছেন তা যদি এটি খুব বেশি সময় নিচ্ছে তবে নিম্নলিখিত কৌশলগুলি দরকারী:
এটিকে অ্যাসিক্রোনাস এবং সীমাবদ্ধকরণের করুন
অনুসন্ধানটি পৃথক থ্রেডে বা প্রতিটি ফ্রেমে কিছুটা চালিয়ে দেওয়া হোক যাতে গেমটি অনুসন্ধানের অপেক্ষায় অপেক্ষা না করে। চরিত্রের স্ক্র্যাচিং মাথা বা স্ট্যাম্পিং ফুট, বা অনুসন্ধান শেষ হওয়ার অপেক্ষায় যথাযথ যা কিছু রয়েছে তার অ্যানিমেশন প্রদর্শন করুন। এটি কার্যকরভাবে করতে, আমি অনুসন্ধানের রাজ্যটিকে পৃথক বস্তু হিসাবে রাখব এবং একাধিক রাজ্যের অস্তিত্বের অনুমতি দেব। যখন কোনও পাথটি অনুরোধ করা হয়, তখন একটি নিখরচায় রাষ্ট্রীয় অবজেক্টটি ধরুন এবং এটিকে সক্রিয় রাষ্ট্রের সামগ্রীর সারিতে যুক্ত করুন। আপনার প্যাথফাইন্ডিং আপডেটে, সক্রিয় আইটেমটি কাতারের সামনের অংশ থেকে টানুন এবং এ * চালান না যতক্ষণ না এটি এ পূর্ণ হয় বা খ। কিছুটা সীমাবদ্ধতার পুনরাবৃত্তি না চালানো হয়। যদি সম্পূর্ণ হয় তবে রাষ্ট্রীয় অবজেক্টটিকে ফ্রি স্টেট অবজেক্টের তালিকায় ফিরিয়ে দিন। যদি এটি সম্পন্ন না হয়, এটি 'সক্রিয় অনুসন্ধানসমূহ' এর শেষে রাখুন এবং পরবর্তীটিতে যান।
সঠিক তথ্য কাঠামো চয়ন করুন
আপনি সঠিক ডেটা স্ট্রাকচার ব্যবহার করেছেন তা নিশ্চিত করুন। আমার স্টেটঅবজেক্ট কীভাবে কাজ করে তা এখানে। পারফরম্যান্সের কারণে আমার সমস্ত নোড একটি সীমাবদ্ধ সংখ্যায় প্রাক বরাদ্দ - 1024 বা 2048 বলুন। আমি নোড পুল ব্যবহার করি যা নোডগুলির বরাদ্দকে গতি দেয় এবং এটি আমার ডেটা স্ট্রাকচারগুলিতে পয়েন্টারগুলির পরিবর্তে সূচকগুলি সংরক্ষণ করতে দেয় যা u16s হয় (বা আমার কাছে 255 সর্বাধিক নোড থাকে, যা আমি কিছু গেমগুলিতে করি)। আমার পাথফাইন্ডিংয়ের জন্য আমি খোলা তালিকার জন্য অগ্রাধিকারের সারিটি ব্যবহার করি, নোড অবজেক্টগুলিতে পয়েন্টার সঞ্চয় করি। এটি বাইনারি হিপ হিসাবে প্রয়োগ করা হয় এবং আমি ভাসমান পয়েন্টের মানগুলি পূর্ণসংখ্যার হিসাবে সারণি করি যেহেতু এগুলি সর্বদা ইতিবাচক এবং আমার প্ল্যাটফর্মের সাথে ধীর ভাসমান পয়েন্টের তুলনা হয়। আমি যে নোডগুলি দেখেছি সেগুলি ট্র্যাক রাখতে আমি আমার বদ্ধ মানচিত্রের জন্য একটি হ্যাশ টেবিল ব্যবহার করি। এটি ক্যাশে আকারগুলি সংরক্ষণ করতে নোড নয়, নোডআইডি সঞ্চয় করে।
আপনি যা পারেন ক্যাশে
আপনি যখন প্রথম কোনও নোডে যান এবং গন্তব্যটির দূরত্ব গণনা করেন, তখন রাজ্য অবজেক্টে নোডে থাকা ক্যাশে করুন। আপনি যদি নোডটি ঘুরে দেখেন তবে এটি আবার গণনা করার পরিবর্তে ক্যাশেড ফলাফলটি ব্যবহার করুন। আমার ক্ষেত্রে এটি পুনর্বিবেচিত নোডগুলিতে স্কোয়ার রুট না করতে সহায়তা করে। আপনি অন্যান্য মান রয়েছে যা আপনি প্রাক্কলন করতে এবং ক্যাশে করতে পারেন।
আরও যে অঞ্চলগুলি আপনি তদন্ত করতে পারেন: উভয় প্রান্ত থেকে অনুসন্ধান করতে দ্বি-মুখী পথচলা ব্যবহার করুন। আমি এটি করিনি তবে অন্যরা যেমন উল্লেখ করেছে যে এটি সাহায্য করতে পারে তবে তা সতর্কতা ছাড়া নয়। আমার তালিকার অন্য জিনিসটি চেষ্টা করার জন্য হায়ারার্কিকাল প্যাথফাইন্ডিং বা ক্লাস্টারিং পাথ সন্ধান করা। হাভোকাএ ডকুমেন্টেশনে একটি আকর্ষণীয় বর্ণনা রয়েছে এখানে তাদের ক্লাস্টারিং ধারণাটি বর্ণনা করা হয়েছে যা এখানে বর্ণিত এইচপিএ * বাস্তবায়নের চেয়ে আলাদা ।
শুভকামনা, এবং আপনি কী খুঁজে পান তা আমাদের জানান।