অ্যালগরিদম খুঁজে পাথ?


24

আমি প্রথমে স্ট্যাক ওভারফ্লোতে এই প্রশ্নটি পোস্ট করেছি, তবে আমার ধারণা যে কেউ এখানে ভিডিও গেমগুলিতে খুব আগ্রহী নয় ...

সমস্ত ধরণের গেমগুলিতে ব্যবহৃত কিছু অ্যালগরিদম সন্ধানের জন্য কী কী? (সমস্ত ধরণের যেখানে চরিত্রগুলি যেভাবেই চলুন) ডিজকস্ট্রার কি পুরো ব্যবহৃত হয়? আমি ভেবে দেখব না, যেহেতু এটি কোথাও পেতে সঠিক পদক্ষেপগুলি খুঁজে বের করে না, তাই না? যদি আমি এটি সঠিকভাবে বুঝতে পারি তবে এটি কেবল নির্ধারণ করে যে কোন বস্তুটি নিকটতম। আমি সত্যিই কোনও কোডের দিকে তাকিয়ে আছি না; কেবল কিছু গবেষণা করছেন, যদিও আপনি সিউডোকোড বা অন্য কিছু পেস্ট করেন তবে তা ঠিক হবে (আমি জাভা এবং সি ++ বুঝতে পারি)। আমি মূলত সাধারণভাবে পাথ সন্ধানের একটি দ্রুত ওভারভিউ খুঁজছি।

আমি জানি A * 2D গেমগুলিতে ব্যবহার করা অ্যালগরিদমের মতো। এটি দুর্দান্ত এবং সব কিছু, তবে 2 ডি গেমগুলি কি গ্রিড ভিত্তিক নয়? বয়সগুলির সাম্রাজ্যের মতো বিষয়, বা লিঙ্কের জাগরণ। নেভিগেট করার জন্য আলাদা আলাদা বর্গক্ষেত্র নেই, তাই তারা কী করবে?

3 ডি গেমগুলি কী করে? আমি এই জিনিসটি http://www.ai-blog.net/archives/000152.html পড়েছি , যা আমি শুনেছি বিষয়টির উপর একটি দুর্দান্ত কর্তৃত্ব, তবে সত্যিকার অর্থে এটি কীভাবে ব্যাখ্যা করবে না, একবার মেসগুলি সেট হয়ে গেলে, পথ সন্ধান করা হয়েছে। যদি এ * তারা যা ব্যবহার করে থাকে, তখন 3D পরিবেশে এরকম কিছু কীভাবে হয়? এবং স্প্লিংগুলি কোণার জন্য ঠিক কীভাবে কাজ করে?


2
আমার মনে হয় এসই এর প্রশ্নোত্তর বিন্যাসের জন্য এই প্রশ্নটি খুব বেশি মুক্ত। FAQ
জন ম্যাকডোনাল্ড 21

1
আপনি যে গেমগুলি উল্লেখ করেছেন সেগুলি মানচিত্রকে A * এর জন্য কোনও উপায় বা অন্য কোনও উপায়ে ভেঙে ফেলতে হবে। এই ভাঙ্গন প্রক্রিয়াটিতে স্কোয়ার গ্রিড জড়িত থাকতে হবে না এবং এটি করার বিভিন্ন উপায় রয়েছে you youtube.com/watch?v=nGC_kBCoHYc এই ভিডটি দেখুন , একটি ভাল খেলা এটি তৈরি করে যাতে খেলোয়াড়রা তারা কী তা বলতে না পারে আসলে পর্দার পিছনে করছেন।
জিয়াওচুয়ান ইউ

1
এখানে অনেকগুলি প্রশ্ন রয়েছে, সুতরাং আমি সত্যিই কোনও উত্তর লিখতে পারি না, তবে আমি লক্ষ করব যে ডিজকস্ট্রার কোনও পথ ফেরায়, এবং বেশিরভাগ প্যাথফাইন্ডিং অ্যালগরিদমগুলি বহুমুখী। আপনি আপনার বিশ্বকে, 2 ডি বা 3 ডি সংযুক্ত গ্রাফে রূপান্তর করেন এবং এটিতে একটি প্যাথফাইন্ডিং অ্যালগরিদম চালান।
গ্রেগরি অ্যাভেরি-ওয়েয়ার

কেবলমাত্র রেফারেন্সের জন্য: আমি স্ট্যাক ওভারফ্লোতে প্রশ্নের উত্তর দিয়েছি ।
জুলিয়ান

1
আমাকে অভিমান করার অনুমতি দিন। জিডিএসইতে এখানে ঘনিষ্ঠ ভোটের তুলনায় এই প্রশ্নটি এসওতে 4 টি আপগেট পেয়েছে । আমি সাহায্য করতে পারি না কিন্তু অনুভব করতে পারি যে এই সাইটের মডারেটররা অত্যধিক আক্রমণাত্মক হচ্ছে। অবশ্যই, আমি দেখতে পাচ্ছি যে এফএকিউ-এ উল্লিখিত নির্দেশিকাগুলির বিপরীতে প্রশ্নটি কীভাবে চলে, কিন্তু উদ্ধৃত করে, সেই নির্দেশিকাগুলি যাতে এড়াতে পারে তার জন্য যথাযথ diminishing the usefulness of our site। এই প্রশ্নটি ইতিমধ্যে 3 বার পছন্দ হয়েছে যা এটি প্রমাণ করে যে এটি কিছু ব্যবহারকারীর পক্ষে কার্যকর ছিল। সুতরাং আমি সাহায্য করতে পারছি না কিন্তু অনুভব করতে পারি যে এটি বন্ধ করার জন্য ভোট দেওয়া এবং পরিণামে অপসারণের ঝুঁকি, এটি আরও অনেক প্রতিরোধক।
ডেভিড গাউভিয়া

উত্তর:


62

একসাথে অনেকগুলি প্রশ্ন, সুতরাং একটি সুনির্দিষ্ট উত্তর দেওয়া কিন্তু এই বিষয়গুলির কয়েকটি নিয়ে আলোচনা করা শক্ত। আমি উত্তরটি দুটি ভাগে ভাগ করব এবং যথাসম্ভব যথাযথভাবে সমাধান করার চেষ্টা করব। আমি এই তালিকাগুলির একটিও সম্পূর্ণ হওয়ার দাবি করি না , তবে সেগুলি আমি স্মরণ করতে পারি এমন বিভিন্ন পদ্ধতি're


পর্ব 1 - প্যাথফাইন্ডিং অ্যালগরিদম

শুরুর জন্য, আছে প্যাথফাইন্ডিং বাস্তবায়নের অনেকগুলি উপায় রয়েছে তবে এগুলির সমস্তই স্বল্পতম পথে ফিরে আসে না বা দক্ষ বা এমনকি নির্ভরযোগ্যও হয় না। এই ক্ষেত্রে:

  • আদিম পদ্ধতি যা "সামনে তাকান না" এবং একবারে একটি পদক্ষেপ নেয়:

    • র্যান্ডম ব্যাকস্টেপিং - লক্ষ্যটির দিকনির্দেশে একবারে একটি পদক্ষেপ নিন। যদি কোনও প্রতিবন্ধকতার মুখোমুখি হয় তবে এলোমেলো দিকের দিকে কিছুটা ব্যাকস্টেপ করে আবার চেষ্টা করে এটিকে ঘিরে কাজ করার চেষ্টা করুন। মোটেই নির্ভরযোগ্য নয় এবং বিভিন্ন পরিস্থিতিতে আটকে যাবেন।

    • বাধা ট্রেসিং - অন্য পদ্ধতি, এলোমেলো ব্যাকস্টেপিংয়ের অনুরূপ তবে এলোমেলোভাবে পিছনে ফিরে আসার পরিবর্তে, যখন কোনও সংঘর্ষের ঘটনাটি পাওয়া যায় তখন বস্তুর চারপাশে ট্রেস করা শুরু করুন, যেন আপনি ডান হাতটি প্রাচীরের সাথে আটকে গিয়েছিলেন এবং এটির স্পর্শে সরে যেতে হয়েছিল। একবার কোনও সংঘর্ষ না হয়ে গোলের দিকে যেতে থাকে। আবারও অনেক পরিস্থিতিতে আটকে যেতে পারে।

  • পদ্ধতিগুলি যা একবারে পুরো পথটি সন্ধান করার জন্য প্রত্যাশায়:

    • প্রস্থের প্রথম সন্ধান - একসাথে বাচ্চাদের প্রতিটি স্তরে গিয়ে সাধারণ গ্রাফ ট্র্যাভারসাল, যখন পথ খুঁজে পাওয়া যায় তখন থামুন। যদি গ্রাফ অপ্রকাশিত হয় (অর্থাত্ প্রতিটি সংলগ্ন নোডের মধ্যে দূরত্ব সর্বদা একই থাকে) তবে খুব দক্ষতার সাথে না হলেও এটি সংক্ষিপ্ততম পথটি খুঁজে পায়। ভারিত গ্রাফের জন্য এটি সবচেয়ে সংক্ষিপ্ততম পথটি ফিরে না আসতে পারে তবে এটি উপস্থিত থাকলে সর্বদা এটি খুঁজে পাবে।

    • গভীরতা প্রথম সন্ধান - গ্রাফটি অতিক্রম করার আরেকটি উপায়, তবে স্তরটিকে স্তরে পর্যায় নেওয়ার পরিবর্তে অ্যালগরিদম প্রথমে গ্রাফের গভীরে অনুসন্ধান করার চেষ্টা করে। এই পদ্ধতির সমস্যা হতে পারে যদি অনুসন্ধানের গভীরতা সীমাবদ্ধ না হয়, বিশেষত পুনরাবৃত্তির প্রয়োগকারী ব্যবহারের সময়, যা স্ট্যাকের ওভারফ্লো হতে পারে, তাই একটি স্ট্যাক ব্যবহার করে পুনরাবৃত্তভাবে এটি প্রয়োগ করা সাধারণত নিরাপদ।

    • সেরা প্রথম অনুসন্ধান - প্রস্থের প্রথম সন্ধানের অনুরূপ তবে একটি হিউরিস্টিক ব্যবহার করে যা সবচেয়ে প্রতিশ্রুতিশীল প্রতিবেশীকে প্রথমে পছন্দ করে। ফিরে আসা পথটি সংক্ষিপ্ত নাও হতে পারে তবে এটি প্রথম প্রস্থের অনুসন্ধানের চেয়ে দ্রুত চালানো। এ * এক প্রকার বেস্ট ফার্স্ট সার্চ।

    • ডিজকস্ট্রার পদ্ধতি - পরিদর্শন করা প্রতিটি নোড থেকে শুরু থেকে মোট ব্যয়ের উপর নজর রাখে এবং গ্রাফটি অতিক্রম করার সর্বোত্তম ক্রম নির্ধারণ করতে এটি ব্যবহার করে। ওজনযুক্ত গ্রাফগুলির সাথে কাজ করে এবং সবচেয়ে সংক্ষিপ্ত পথে ফেরত দেয় তবে এতে প্রচুর অনুসন্ধান জড়িত হতে পারে।

    • এ * - ডিজকস্ট্রার অনুরূপ তবে সর্বোত্তম সিদ্ধান্ত নেওয়ার জন্য প্রতিটি নোড কীভাবে লক্ষ্যের কাছাকাছি যায় তার সম্ভাবনা অনুমান করার জন্যও এটি একটি হিউরিস্টিক ব্যবহার করে। এই তাত্ত্বিকতার কারণে, এ * আরও বেশি সময়োপযোগী ওয়েটগ্রাফের মধ্যে সবচেয়ে স্বল্পতম পথ খুঁজে পায়।

  • তারপরে এ * (বা সাধারণভাবে প্যাথফাইন্ডিং অপটিমাইজেশন) এর বিভিন্নতা রয়েছে যা এটিকে কিছু নির্দিষ্ট সংস্থার সাথে দ্রুত বা আরও বেশি খাপ খাইয়ে নিয়ে যায়, যেমন ( সম্পর্কিত উত্তর এবং cstheory.SE এর একটি বিস্তৃত তালিকা দেখুন) ):

    • LPA * - এ * এর অনুরূপ তবে যখন গ্রাফের একটি ছোট পরিবর্তন করা হয় তখন আরও দ্রুত সর্বোত্তম পাথে পুনরায় গণনা করতে পারে
    • ডি * লাইট - এলপিএ * এর উপর ভিত্তি করে এটি একই কাজ করে তবে গ্রাফ পরিবর্তনগুলি করার সময় "স্টার্ট পয়েন্ট" সমাপ্তির দিকে এগিয়ে যাওয়ার একক হিসাবে ধরে নেওয়া হয়
    • এইচপিএ * (শ্রেণিবিন্যাস) - অনুসন্ধানের গতি বাড়ানোর জন্য বিভিন্ন বিমূর্ত স্তর স্তরে বেশ কয়েকটি স্তর ব্যবহার করে। উদাহরণস্বরূপ, একটি উচ্চ স্তরের স্তরটি কেবল কক্ষগুলিকে সংযুক্ত করতে পারে, যখন একটি নিম্ন স্তরের স্তর বাধা এড়ানোর যত্ন নেয়।
    • আইডিএ * (স্বল্প গভীরকরণ) - পুনরাবৃত্তির গভীরতা ব্যবহার করে নিয়মিত এ * এর তুলনায় মেমরির ব্যবহার হ্রাস করে।
    • এসএমএ * (সরল স্মৃতি-গণ্ডিযুক্ত) - অনুসন্ধান চালিয়ে যাওয়ার জন্য কেবল উপলব্ধ মেমরির ব্যবহার করে।
    • জাম্প পয়েন্ট অনুসন্ধান - এরিকের উল্লেখ করার জন্য মন্তব্যে ক্রেডিট! ইউনিফর্ম-ব্যয়যুক্ত গ্রিড মানচিত্রের লিঙ্ক ফাইন্ডিং ( লিঙ্ক )।

পার্ট 2 - স্পেস প্রতিনিধিত্ব অনুসন্ধান করুন

এবং অবশেষে এই প্রশ্নের সমাধান করতে:

আমি জানি A * 2D গেমগুলিতে ব্যবহার করা অ্যালগরিদমের মতো। এটি দুর্দান্ত এবং সব কিছু, তবে 2 ডি গেমগুলি কি গ্রিড ভিত্তিক নয়?

এখানে দুটি বড় ভুল ধারণা! আসলে:

  1. গেমটি 2 ডি বা 3 ডি হয় কিনা তা * কোনও গুরুত্ব দেয় না এবং উভয় ক্ষেত্রেই এটি সমানভাবে উপযুক্ত।
  2. এ * যে কোনও গ্রাফের উপস্থাপনার অধীনে কাজ করে , তাই পৃথিবী গ্রিড কিনা তা বিবেচ্য নয়।

সুতরাং যদি বিশ্বের গ্রিড হওয়ার প্রয়োজন না হয় তবে আপনি অন্য কোন উপায়ে এটি উপস্থাপন করতে পারেন? পাথ ফাইন্ডিংয়ের জন্য বিশ্ব স্থানকে ভাগ করার উপায়গুলির একটি সংক্ষিপ্ত বিবরণ এখানে দেওয়া হয়েছে এবং এর বেশিরভাগই 2D এবং 3 ডি উভয়ের জন্যই কাজ করে:

  • আয়তক্ষেত্রাকার গ্রিড - গ্রিডের প্রতিটি কক্ষের সাথে বর্গক্ষেত্রের নিয়মিত গ্রিডে পার্টিশন ওয়ার্ল্ড গ্রাফের একটি নোড এবং দুটি অব্যবস্থাপিত নোডের মধ্যে সংযোগ একটি প্রান্ত।

    এখানে চিত্র বর্ণনা লিখুন

  • কোয়াডট্রি - স্থানটি বিভক্ত করার আরেকটি উপায়, তবে নিয়মিত আকারের কোষগুলির গ্রিডে বিভক্ত না হয়ে চারটি অংশে বিভাজন, তারপরে পুনরাবৃত্তভাবে এগুলির প্রতিটিকে আবার চারটিতে ভাগ করুন। তৃতীয় মাত্রা যুক্ত করা এটি অষ্ট্রি করে তোলে ।

    এখানে চিত্র বর্ণনা লিখুন

  • উত্তল বহুভুজ - চলনযোগ্য অঞ্চলটি পারস্পরিক সংযুক্ত উত্তল বহুভুজগুলির একটি জালকে বিভাজন। প্রতিটি বহুভুজ একটি নোডে পরিণত হয় এবং ভাগ করা প্রান্তগুলি গ্রাফের প্রান্ত হয়। উদাহরণস্বরূপ এগুলি ত্রিভুজ হতে পারে এবং স্তরের সম্পদ তৈরি করার সময় কখনও কখনও কোনও শিল্পীর দ্বারা তৈরি জালও হতে পারে। প্রায়শই নেভিগেশন জাল হিসাবে উল্লেখ করা হয় । এই লিঙ্কটি দেখুন । এখানে একটি খুব জনপ্রিয় নেভিগেশন জাল নির্মাণ টুলসেট: পুনঃনির্মাণ

    এখানে চিত্র বর্ণনা লিখুন

  • দৃশ্যমানতার বিন্দু - সর্বাধিক সাধারণ উপায় হ'ল প্রতিবন্ধকের উত্তল কোণগুলির প্রতিটিের বাইরে একটি নোড স্থাপন করা এবং তারপরে প্রতিটি জোড় নোডগুলি একে অপরকে দেখতে পেল । এই লিঙ্কটি পরীক্ষা করুন । নোডগুলি যদিও শীর্ষে থাকতে হবে না, এবং মানচিত্রে ডিজাইনার নিজে হাতে স্থাপন করতে পারেন। সেক্ষেত্রে সিস্টেমটি প্রায়শই ওয়ে পয়েন্ট গ্রাফ হিসাবে উল্লেখ করা হয় ।

    এখানে চিত্র বর্ণনা লিখুন


1
দুটি লিঙ্ক: 1) মিক্কো মনোনেন কিলজোন 3 এর পথ সন্ধানের কাজটি করেছেন এবং তার একটি খুব সুন্দর ব্লগ রয়েছে যেখানে তিনি রেকাস্টের (নবমেশ জেনারেটর) এবং ডিটোর (পাথ সন্ধানকারী সরঞ্জামদণ্ড) এর উন্নয়ন প্রক্রিয়া নথিভুক্ত করেছেন, উভয়ই এমআইটি লাইসেন্সের অধীনে এবং উদাহরণস্বরূপ ব্যবহৃত হয়েছে মধ্যে হিসাব: Amalur এর সাম্রাজ্যের । ২) জাম্প পয়েন্ট অনুসন্ধান হ'ল গ্রিড-ভিত্তিক পাথ সন্ধানের ক্ষেত্রে সবচেয়ে বড় সাম্প্রতিক ঘটনাগুলির একটি।
এরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.