রোগুলেক ধাঁধা তৈরির জন্য দীর্ঘতম আলগরিদম


10

আমার কাছে কক্ষগুলি সমন্বিত একটি গ্রিড ভিত্তিক মানচিত্র রয়েছে, যেমন (এ = প্রবেশদ্বার, বি = প্রস্থান):

   0 1 2 3
  #########
0 # বি # #####
  #########
1 # ### #
  #########
২ # # #
  # # #
3 # # #
  #########
4 # ### #
  #########
5 ### এ #
  ### #
6 ### #
  #########

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

অন্য কথায়, আমি এ থেকে বি যাওয়ার দীর্ঘতম সম্ভাব্য পথটি খুঁজতে চেষ্টা করছি ।

(আমি সচেতন যে অ্যাসাইক্লিক গ্রাফগুলির জন্য এই সমস্যাটি সমাধান করা যেতে পারে; তবে এই ক্ষেত্রে চক্র থাকতে পারে))

সম্পাদনা: আরেকটি উদাহরণ যেখানে কক্ষগুলি বন্যারফিল ব্যবহার করে সংযুক্ত রয়েছে এবং প্রস্থানটি প্রবেশদ্বার থেকে সবচেয়ে দূরের ঘর হিসাবে বেছে নেওয়া হয়েছে:

   0 1 2 3
  #########
0 # বি # #
  # # - #####
1 # | # #
  ### # #
2 ### # #
  ### - # - ###
3 # | ###
  # - #######
4 # এ | #
  # # #
5 # # #
  # # #
6 # # #
  #########

দ্রষ্টব্য যে প্রস্থানটির পথটি সবচেয়ে দীর্ঘতম পথ নয়।


যদি আপনি প্লেয়ারটিকে দীর্ঘতম পথ অবলম্বন করতে বাধ্য করেন তবে আপনি আসলে একটি সরল পথ তৈরি করছেন যা জটিল বলে ভান করে। এইটা খারাপ.
o0 '

এটি খারাপ নয় (এটি রেল শ্যুটার শৈলীর ভিত্তি, উদাহরণস্বরূপ), তবে আপনার সচেতন হওয়া দরকার এবং এটির সাথে কাজ করার জন্য আপনার বাকী খেলাটি নকশা করা উচিত।

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

উত্তর:


11

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

আপনি প্রকৃত দীর্ঘ পথের মডেল তৈরি করার চেষ্টা করছেন না (যেমন কোনও রোবট যতটা সম্ভব মানচিত্রে যত বেশি অঞ্চল অনুসন্ধান করার চেষ্টা করছে)। আপনি কেবল খেলোয়াড়কে অনেক কক্ষ ঘুরে দেখার চেষ্টা করছেন।

সুতরাং, খেলোয়াড়টি এখন পর্যন্ত অন্বেষণ করা মানচিত্রের শতাংশের সমানুপাতিক হওয়ার সুযোগটি তৈরি করুন । ধরা যাক একটি স্তরে এক্স কক্ষ রয়েছে এবং প্লেয়ারের চরিত্রটি ওয়াই অন্বেষণ করেছে Next চ এর একটি তুচ্ছ উদাহরণ হতে পারে (ওয়াই * ওয়াই) / (এক্স * এক্স) - যেমন 10 টি কক্ষের জন্য, শেষ কক্ষের বাইরে বেরোনোর ​​100% সুযোগ রয়েছে, এটি শেষ ঘরের পাশের 81% সুযোগ - এবং কেবল একটি এটি প্রথম ঘরে 1% সুযোগ

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

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

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


গতিশীল প্রজন্ম যতক্ষণ না প্লেয়ারের নজরে না আসে ততক্ষণ বেশ সুন্দর ধারণা বলে মনে হয়। অন্যথায় আমি তাদের বেশ প্রতারিত মনে হবে বলে মনে করি। যদিও আমি বন্যার ফিলি ধারণাটি পছন্দ করি।
ব্যবহারকারী

2
ঠিক আছে, আপনার পুরো প্রস্তাবটি কোনও অর্থে প্লেয়ারকে প্রতারণা করছে। বিশ্ব মডেলের প্রয়োজন না পড়ায় গণিতটি পরিমার্জন করার জন্য আমাকে দোষ দিবেন না। ;) তবে আপনি এটিকে আরও স্বচ্ছল করতে ডিজাইনের কৌশলগুলি ব্যবহার করতে পারেন - উদাহরণস্বরূপ, প্রস্থানটি একটি প্রাইরি স্থাপন করা হয়, তবে এটির জন্য প্রয়োজনীয় কীটি আমি বর্ণিত পদ্ধতিতে তৈরি করা হয়, বা একটি দানবকে রাখা হয় যা এক্স এক্সপ্লোর করার পরে স্প্যান হয় that কক্ষ / এক্স দানবকে হত্যা, বা দরজা খোলার জন্য এক্স সুইচগুলি

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

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

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

6

সম্ভাব্য বিকল্প হ'ল প্রাইম / কৃসকল (চক্র নির্মূল করার জন্য) ব্যবহার করে একটি (সর্বোচ্চ?) বিস্তৃত গাছ তৈরি করা এবং বিস্তৃত গাছে traditionalতিহ্যবাহী দীর্ঘতম পথের অ্যালগরিদম প্রয়োগ করা।

তবে আমি উদ্বিগ্ন যে বিস্তৃত গাছ অ্যালগোরিদমটি খেলোয়াড়কে ক্রমাগত ব্যাকট্র্যাক করতে বাধ্য করে মৃত-শেষ শাখা তৈরি করার ঝোঁক রাখবে।

সম্পাদনা: একটি কৃষ্ণ-ভিত্তিক অ্যালগরিদম ব্যবহার এবং দীর্ঘতম শাখার শেষে প্রস্থান স্থাপনের ফলাফল:

   0 1 2 3
  #########
0 # এ | #
  # ##### - #
1 # # #
  ### #
2 ### #
  ### #
3 ### #
  ### - #####
4 # | #
  # - ##### - #
5 # ### #
  # - #######
6 # # বি #
  # # - #
7 # | #
  #########

1
আমি প্রিমকেও সুপারিশ করতে যাচ্ছিলাম :-), +1, আমি মনে করি ব্যাকট্র্যাকটিও অনেক গেমের একটি গুরুত্বপূর্ণ অঙ্গ ... ডায়াবলো ২ পরীক্ষা করে দেখুন
মিঃ গ্যান্ডো

2

এখানে কিছু ভাবার জন্য এখানে:

Connect each room with a door to another room.
N = 0.75*TotalNumberOfRooms
Until (pathSize > N) {
  Use A* pathing to get a path from A to B. (G being size of room, or # of monsters)
  if (pathSize < N) remove a connection/door
  if (noPath) choose a different door/connection
  if (room.doors < 1) choose a different door/connection
}

আমি পথ ধরে এলোমেলোভাবে দরজা সরিয়ে ফেলব, অন্যথায় আপনি প্রস্থান করার সময় 1 টি দরজা এবং শুরুতে প্রচুর দরজা দিয়ে শেষ করবেন।

আমি মনে করি এটি O(n^2)বড় মানচিত্রের জন্য এত দুর্দান্ত নয়।


নীতিগতভাবে একটি খুব মার্জিত সমাধান। নেক্সট বারের মতো আমার কনভলভ কৌশলগুলির আগে এই জাতীয় কিছু ভাবার চেষ্টা করা উচিত।
ব্যবহারকারী খুঁজে পাওয়া যায় নি

ভাল, মার্জিত হতে পারে তবে এটি একটি প্রসেসর হগ হতে চলেছে। O (n ^ 2) বড় মানচিত্রের সাথে ভাল স্কেল করবে না।
স্টিফেন ফুরলানি


1

আমি বিশ্বাস করি আপনার কাছে ইতিমধ্যে দুর্দান্ত উত্তর রয়েছে, তবে সমস্যাটির আমার তাত্ত্বিক সমাধানের এখানে 0.02 ডলার।

আপনি যা চান তা দীর্ঘতম পথ নয়, তবে সবচেয়ে দীর্ঘতম পথ। আপনি ঘরের সবচেয়ে সংক্ষিপ্ততম পথটি বিবেচনা করে এই ঘরটি খুব দূরের জায়গাটি চান। এটি সম্ভবত বিভ্রান্তিকর শোনায় তবে এটি গণনা করা খুব সহজ।

  1. আপনার শুরু কক্ষ থেকে শুরু করুন। এর প্রতিটি প্রতিবেশীকে চিহ্নিত করুন 1. এগুলি শুরু ঘর থেকে 1 দূরে।
  2. ১ টি চিহ্নিত প্রতিটি কক্ষের জন্য, এর প্রত্যেকটি চিহ্নবিহীন প্রতিবেশী দেখুন এবং তাদের ২ চিহ্নিত করুন They এগুলি শুরু থেকে 2 দূরে।
  3. যতক্ষণ না আপনি সমস্ত কক্ষ coveredেকে রেখেছেন ততক্ষণ চালিয়ে যান। সর্বাধিক সংখ্যা সহ ঘরটি শুরু থেকে খুব দূরে।

প্রকৃত দীর্ঘতম পাথ গণনা করা (10 টি কক্ষ বলার জন্য খুব বেশি সময় লাগবে না) কাজ করবে না কারণ আপনি প্লেয়ারটিকে দীর্ঘতম পথটি চালিয়ে নিতে পারবেন না। সুতরাং একে অপরের থেকে দূরে দূরে দুটি কক্ষে প্রবেশ এবং প্রস্থান করা আপনার সেরা বাজি। এটি সন্ধান করতে, এলোমেলো ঘর থেকে সবচেয়ে দূরের কক্ষটি গণনা করুন। তারপরে, সেই ঘরটি থেকে, দূরতম ঘরটি সন্ধান করুন। এটিকে বলা হয় গ্রাফের ব্যাস অনুসন্ধান করা, দয়া করে এটি গুগল করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.