আমার অনুরূপ সমস্যা সমাধান করার দরকার ছিল: ক্রমাগত "ব্যয়" এবং বাধা পরিবর্তন করে বড় ধাঁধা জাতীয় গ্রিডে পাথ ফাইন্ডিং।
বিষয়টি হ'ল টাওয়ার ডিফেন্স গেমের জন্য তাদের সন্ধানের জন্য যে সত্তাগুলির পাথ সমাধান করা দরকার সেগুলির সংখ্যা সাধারণত গ্রাফের নোডের সংখ্যার চেয়ে অনেক বেশি larger এটি * পরিচালনা করার জন্য এ * সর্বাধিক উপযুক্ত অ্যালগরিদম নয় , কারণ প্রতিবার কিছু পরিবর্তন হওয়ার সাথে সাথে আপনি এটি নতুন করে সমাধান করতে হবে। ঠিক আছে যদি আপনার কেবল একটি পাথ খুঁজে পাওয়া প্রয়োজন তবে আমার ক্ষেত্রে আমার সত্তা হ্যান্ডেল করতে সক্ষম হওয়া প্রয়োজন যা বিভিন্ন জায়গায় উপস্থিত হতে পারে এবং প্রত্যেকটির নিজস্ব পথ রয়েছে।
ফ্লয়েড-Warshall অ্যালগরিদম অনেক বেশী উপযুক্ত, যদিও আমার ক্ষেত্রে আমি একটি কাস্টম অ্যালগরিদম যে যখনই একটি নোড পরিবর্তন, এটি পুনরায় হিসাব তার প্রতিবেশীদের থেকে যে নোড খরচ লিখেছিলেন, এবং তারপর যদি প্রতিবেশীদের পরিবর্তন করা হয়েছে এটা প্রার্থনা করা হয় পুনরাবৃত্তি তাদের উপর।
গেমের শুরুতে, আমি কেবলমাত্র আমার সমস্ত "গোল" নোডগুলিতে এই অ্যালগরিদমটি সরিয়ে ফেলি। তারপরে, যখনই কোনও একক নোড পরিবর্তন হয় (উদাহরণস্বরূপ, অ-পাসেরযোগ্য হয়ে যায়), আমি কেবল সেটিকে নোডে জ্বালিয়ে দিয়েছি এবং পরিবর্তনটি সমস্ত নোডগুলিতে প্রচারিত হবে যা প্রভাবিত হবে, এবং তারপরে বন্ধ হয়ে গেল। সুতরাং গ্লোবাল রিক্যালকুলেশনের কোনও প্রয়োজন নেই এবং অ্যালগরিদম এমন সংস্থার সংখ্যা থেকে সম্পূর্ণ স্বতন্ত্র যা পাথফাইন্ডিংয়ের প্রয়োজন হবে।
আমার অ্যালগরিদম মূলত (সিউডো কোড) এর মতো কিছু ছিল:
update_node method in Node class:
$old <- $my_score
find $neighbor node among all neighbors such that
$neighbor.score + distance_to($neighbor) is minimal
$my_score <- $neighbor.score + distance_to($neighbor)
$next_node <- $neighbor
if ($my_score != $old)
for each $neighbor
$neighbor.update_node()
নোড একটি লক্ষ্য বা কোনও ধরণের বাধা কিনা তার উপর নির্ভর করে প্রাথমিক স্কোর সহ।