কৌশলগত আরপিজির জন্য একটি * অ্যালগরিদম?


15

আমি সি ++ তে সত্যই দুর্বল কৌশলগত আরপিজি লেখার সাথে গোলযোগ করছি। এখন পর্যন্ত আমার কাছে একটি 2 ডি টাইল মানচিত্র রয়েছে এবং সবেমাত্র উইকিপিডিয়ায় সিউডোকোডের উপর ভিত্তি করে এ * অ্যালগরিদম কাজ করছে ।

তবে আসল কৌশলগত আরপিজি কেবল একটি সমতল বিমানের সেরা পথ খুঁজে পায় না এবং সেখানে চলে যায়। এগুলির সাধারণত চলন সীমার সীমিত থাকে এবং অবশ্যই উপরে বা নীচে উপরে উঠতে হবে। আপনি যদি কখনও ফাইনাল ফ্যান্টাসি কৌশল খেলেন তবে এগুলি মুভ এবং জাম্পের পরিসংখ্যান দ্বারা প্রভাবিত হবে। এখানেই আমি হারিয়ে যাই। আমি কীভাবে * * অ্যালগোরিদমকে এমনভাবে পরিবর্তন করব যাতে এটি কোনও লক্ষ্যের দিকে সবচেয়ে ভাল পথ খুঁজে পায় তবে পথটি কেবল এতগুলি টাইল দীর্ঘ? আমার উচ্চতার পার্থক্যগুলি কীভাবে নেওয়া উচিত এবং পরিসংখ্যানগুলি অ্যাকাউন্টে নেওয়া উচিত? আমি কীভাবে ফাঁক দিয়ে জাম্পিং বাস্তবায়ন করব?

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


5
আমি জানি না কেন সরানোর পরিসীমা একটি সমস্যা। সবচেয়ে সংক্ষিপ্ত পথটি আবিষ্কার করুন এবং তারপরে, সেই পথ ধরে 'গতি' স্কোয়ারগুলি সরান।
মাকিং হাঁস

উত্তর:


33

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

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


10
'কৌশলগত অবস্থান' সম্পর্কে ভাল পয়েন্ট, তবে এই সিদ্ধান্তগুলি বেসিক প্যাথফাইন্ডিংয়ের চেয়ে উচ্চ স্তরে প্রয়োগ করা যেতে পারে। অন্যদিকে, প্যাথফাইন্ডিং অ্যালগরিদমের নোডগুলিতে ব্যয় প্রয়োগ করা যা কোনও ধরণের কৌশলগত বিশ্লেষক দ্বারা উত্পন্ন হয় ভাল বিকল্প হতে পারে। উদাহরণস্বরূপ, যদি শত্রুপক্ষের অঞ্চল জুড়ে দৃষ্টিশক্তি থাকে তবে সেই অঞ্চলে নোডগুলি তৈরি করুন খুব বেশি ব্যয় হবে।
DrMcCleod

1
@ ডিআরএমসি ক্লিওড: প্রকৃতপক্ষে এবং এটিই আমি "বা আরও সঠিকভাবে বোঝাতে চাইছি এটি সম্পূর্ণ গল্প নয়"। প্রসেসিংয়ের অংশটি করার জন্য আপনি অবশ্যই এ * বা অন্য একটি অ্যালগরিদম ব্যবহার করতে পারেন, তবে আমি মনে করি যে অঞ্চলগুলি পেরিয়ে যাওয়ার পরে যেখানে কোনও ইউনিট আগুনের কবলে পড়তে পারে তার জন্য নড়াচড়া ব্যয়ের মাধ্যমে দেখা নোডগুলি এড়ানোর চেষ্টা করার মতো উপায়গুলি এড়িয়ে যাব a ঝুঁকি / পুরষ্কার গণনা, আইএমও।
জ্যাক এইডলি

13

আপনি যখন কোনও ইউনিটের সম্ভাব্য সমস্ত চলমান বিকল্প চান, তখন ডিজকস্ট্রার অ্যালগরিদম ব্যবহার করুন ।

এ * এবং ডিজকস্ট্রার মধ্যে পার্থক্য হ'ল ডিজকસ્ત્રা আপনাকে প্রদত্ত ব্যয়ের সাহায্যে প্রাপ্ত সমস্ত সম্ভাব্য সংক্ষিপ্ততম রুট দেয় এবং যদি সেগুলির কোনও এখনও আপনার গন্তব্যে পৌঁছে না, তবে এটি ব্যয় এক এক করে বৃদ্ধি করে এবং অবিরত থাকবে। অন্যদিকে, এ * প্রথমে সেই রুটগুলি গণনা করতে পছন্দ করে যেখানে গন্তব্যে পৌঁছানোর ভাল সুযোগ রয়েছে।

সুতরাং আপনি যখন বিন্দু A থেকে পয়েন্ট বি পর্যন্ত সর্বাধিক সংক্ষিপ্ত পথ চান, তখন এ * একটি ভাল পছন্দ। তবে আপনি যদি সমস্ত সম্ভাব্য চলাচলের বিকল্পগুলি এবং সেগুলির প্রত্যেকের সংক্ষিপ্ততম পথ চান, তবে ডিজকস্ট্রা হ'ল আপনি যা চান তা ঠিক।

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

জাম্প সম্পর্কিত: এগুলি এবং ডিজকস্ট্র উভয় ক্ষেত্রে এগুলিকে আরও একটি প্রান্ত হিসাবে উপস্থাপিত করা যেতে পারে। তাদের নিয়মিত প্রান্ত বা অন্যরকম ভ্রমণ করার মতো একই ব্যয়ও হতে পারে। আপনি অ্যালগরিদমে একটি "জাম্প হাইট" পরামিতিও পাস করতে পারেন যা একটি নির্দিষ্ট উচ্চতা অতিক্রমকারী জাম্প-এজগুলি উপেক্ষা করতে অ্যালগরিদমকে বলে।


9
এখানে উল্লেখ করা মূল্যবান যে A*সত্যিকার অর্থেই ডিজকস্ট্রার একটি সাধারণীকরণ, সুতরাং আপনি যদি একটিটি বুঝতে পারেন তবে অন্যটিকে বোঝা খুব কঠিন হওয়া উচিত নয়।
কিউবিক

8
প্রকৃতপক্ষে, যদি আপনার কাছে এমন এক তাত্ত্বিক ধারণা থাকে যা কেবলমাত্র আপনার এ * অ্যালগরিদমে 0 করে দেয়, অভিনন্দন! আপনি সবেমাত্র ডিজকস্ট্রার অ্যালগরিদম লিখেছেন।
ইয়ান

9
"দিজকસ્ત્રা আপনাকে প্রদত্ত ব্যয়ের সাথে সমস্ত সংক্ষিপ্ততম রুটগুলি অর্জনযোগ্য করে দেয় এবং যদি এগুলির মধ্যে কেউ এখনও আপনার গন্তব্যে পৌঁছায় না, তবে এটি ব্যয় এক করে বাড়িয়ে দেয় এবং অব্যাহত থাকে" - এটি কীভাবে কাজ করে না তা কী ফলাফল করে is এটি আসলে ওজনযুক্ত গ্রাফগুলিতে প্রস্থের প্রথম অনুসন্ধানের কেবলমাত্র একটি সাধারণীকরণ। এটি একটি সংক্ষিপ্ততম পথ খুঁজে পায়। এ * কেবলমাত্র এটির একটি সাধারণীকরণ, যখন আপনার কাছে দূরত্ব-হিউরিস্টিক উপলব্ধ থাকে।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

1
কেন এটি এত upvated হয় তা নিশ্চিত নয়। একটি বাস্তববাদী দৃষ্টিকোণ থেকে, Dijkstra অপ্রচলিত। এটি সিএসে শিক্ষামূলক এবং historicalতিহাসিক কারণে শেখানো হয়। এমনকি এ * গুরুতর কাজের জন্য অপ্রচলিত; গুগল ম্যাপস অবশ্যই এটি ব্যবহার করে না। আপনি আজকাল আরকগ্রাফের রূপগুলি খুঁজছেন।
এমসাল্টারস 29:39

2
কৌশলগত আরপিজির মতো সাধারণ সমস্যার জন্য @ এসএমএল্টার ডিজকস্ট্রা এবং এ * পুরোপুরি সূক্ষ্ম অ্যালগরিদম। বৈধ চলন (টাইলস) এর একটি খুব সংকীর্ণ পরিসীমা রয়েছে এবং বলা টাইলগুলি (অরথাগোনাল, কখনও কখনও তির্যক) এবং সাধারণত একটি মোটামুটি সংক্ষিপ্ত সর্বোচ্চ পন্থা: এসকিউআরটি (অ্যারেনা উইথথ * অ্যারেনা হাইটাইট) অতিক্রম করার খুব সীমিত পরিমাণের উপায় রয়েছে। গণনামূলকভাবে, আধুনিক মেশিনে পার্থক্যটি নগণ্য কারণ সম্ভবত মোটামুটি ছোট মানগুলি কেন তাই যখন এখানে বর্ণিত উদ্দেশ্যগুলির জন্য সরল একটি যথেষ্ট হয় তখন কেন আরও জটিল বাস্তবায়ন নিয়ে বিরক্ত করবেন?
ভালথেক

2

অন্য উত্তরের কিছু ভাল তথ্য রয়েছে, তাই সেগুলি নিশ্চিত করে পড়ুন।

তবে, আপনার প্রশ্নের উত্তর দেওয়ার জন্য: আপনি যে সিউডোকোডের সাথে লিঙ্ক করেছেন তার উপর ভিত্তি করে আপনার একরকম ক্রিয়াকলাপ রয়েছে heuristic_cost_estimateযেখানে আপনি টাইলি থেকে টাইলবি পর্যন্ত ব্যয় নির্ধারণ করছেন (ধরে নিচ্ছেন তারা সংলগ্ন)। এই খরচের জন্য ফ্ল্যাট (1) ব্যবহার না করে, টাইলের পরিসংখ্যান এবং ইউনিট পরিসংখ্যান এবং সম্ভবত প্রান্তের পরিসংখ্যানগুলি অন্তর্ভুক্ত করার জন্য আপনাকে এটিকে সামঞ্জস্য করতে হবে।

উদাহরণ স্বরূপ:

if (edge == JUMP && !unit.canJump()) 
    return INF;
if (tile.Type == Forest && unit.moveType == HORSE) 
    return 2;
//Other cases here
//-----
else 
    return 1;

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

চ্যালেঞ্জ:
আপনি যদি আরও উন্নত হতে চান, আপনি সম্ভবত এক্স দূরত্বের মধ্যে সমস্ত স্থান সন্ধানের পরামর্শ হিসাবে জিক্সট্রা ব্যবহার করতে চান, তবে আপনি সেই তালিকার প্রতিটি স্থানকে "সেরা" জায়গার জন্য লক্ষ্য, প্রতিরক্ষা করার ঘনিষ্ঠতার ভিত্তিতে মূল্যায়ন করতে চান শক্তি, আপনি that অবস্থান থেকে আক্রমণ করা যায় কি না ইত্যাদি etc. তথ্যের উপর ভিত্তি করে আপনি একটি টাইল বেছে নেবেন, এবং জিক্সস্ট্রাস ব্যবহার করে আপনি যে পথটি গণনা করেছেন সেখানে অনুসরণ করুন।


1

আরোহণ এবং ফাঁকগুলি বেশ তুচ্ছ কারণ তারা কেবল ব্যয় পরিবর্তন করে mod প্যাথফাইন্ডিং (এবং বেশিরভাগ কৌশলগত এআই) হ'ল সমস্ত পরিদর্শনযোগ্য নোডগুলিতে ব্যয় যোগ করে এবং তা হ্রাস করা। একটি দুর্গম পাহাড়ের অসীম (খুব, খুব উচ্চ) ব্যয় হবে, opালুগুলির স্বাভাবিকের চেয়ে বেশি দাম পড়বে ইত্যাদি have

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

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

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


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

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