প্রস্থ-প্রথম অনুসন্ধানে পরিদর্শন করা রাজ্যগুলির খোঁজ রাখা


10

সুতরাং আমি একটি স্লাইডিং ব্লক ধাঁধা (নম্বর টাইপ) এ বিএফএস বাস্তবায়নের চেষ্টা করছিলাম । এখন আমি যে প্রধান জিনিসটি লক্ষ্য করেছি তা হ'ল যদি আপনার একটি 4*4বোর্ড থাকে তবে রাষ্ট্রগুলির সংখ্যা 16!এত বেশি হতে পারে যে আমি আগে থেকে সমস্ত রাজ্যকে গণনা করতে পারি না।

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

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


1
পার্শ্ব দ্রষ্টব্য: আমি এই প্রশ্নটি পোস্ট করার জন্য আরও উপযুক্ত স্ট্যাকের কথা ভাবতে পারি না। আমি সচেতন জানি বাস্তবায়ন বিশদগুলি এই স্ট্যাকটিতে সাধারণত স্বাগত নয়।
দত্তআ

2
ইমো এটি এসই এর জন্য একটি দুর্দান্ত প্রশ্ন: এআই কারণ এটি কেবল বাস্তবায়নের নয়, ধারণাটিই। উল্লেখ করার দরকার নেই, প্রশ্নটি কয়েক ঘন্টার মধ্যে 4 টি বৈধ উত্তর আকর্ষণ করেছিল। (অনুসন্ধানের জন্য শিরোনাম সম্পাদনা, এবং একটি বিএফএস ট্যাগ তৈরির স্বাধীনতা নিয়েছে)
ডিউকঝো

উত্তর:


8

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

  • উপাদান সন্নিবেশ
  • উপাদানগুলি ইতিমধ্যে সেখানে আছে কিনা তা পরীক্ষা করে দেখানো হচ্ছে

খুব সুন্দর প্রতিটি প্রোগ্রামিং ভাষার ইতিমধ্যে একটি ডেটা স্ট্রাকচারের জন্য সমর্থন থাকা উচিত যা ধ্রুবক ( ) সময়ে এই উভয় ক্রিয়াকলাপ সম্পাদন করতে পারে । উদাহরণ স্বরূপ:O(1)

  • set পাইথনে
  • HashSet জাভাতে

প্রথম নজরে, এটি দেখে মনে হতে পারে যে আপনি যে কোনও রাজ্যের এই ধরণের সেটগুলিতে দেখেন সেগুলি ব্যয়বহুল মেমরি-ভিত্তিক হবে, তবে আপনার সীমান্তের জন্য আপনার ইতিমধ্যে যে স্মৃতি প্রয়োজন তার তুলনায় এটি খুব খারাপ নয়; যদি আপনার শাখাবিন্যাস ফ্যাক্টর , আপনার সীমান্ত দ্বারা বৃদ্ধি পায় নোড যে আপনার পরিদর্শন প্রতি উপাদানের (অপসারণ "দর্শন" এটা, যোগ করার জন্য সীমান্ত থেকে নোড , নতুন উত্তরাধিকারী / শিশু) যেহেতু আপনার সেট শুধুমাত্র দ্বারা বৃদ্ধি পায় অতিরিক্ত নোড প্রতি পরিদর্শন নোডbb11b1

সিউডোকোডে, এই জাতীয় সেট (আসুন এটির নাম দিন closed_set, উইকিপিডিয়ায় সিউডোকোডের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য নীচে ব্রাডথ-ফার্স্ট অনুসন্ধানে ব্যবহার করা যেতে পারে:

frontier = First-In-First-Out Queue
frontier.add(initial_state)

closed_set = set()

while frontier not empty:
    current = frontier.remove_next()

    if current == goal_state:
        return something

    for each child in current.generate_children()
        if child not in closed_set:    // This operation should be supported in O(1) time regardless of closed_set's current size
            frontier.add(child)

    closed_set.add(current)    // this should also run in O(1) time

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


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

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


1
আমি এটি করতে সক্ষম হব তবে তুলনার সময় দ্রুত বৃদ্ধি পেতে শুরু করবে
দত্তআ

3
@ দত্তএ কোনও তুলনার সময় দ্রুত বৃদ্ধি করা উচিত নয়। এই সেটগুলি, হ্যাশ সেটগুলি বা আপনার পছন্দের ভাষায় যাকে যা বলা হোক না কেন, তাদের কোনও প্রদত্ত রাষ্ট্র রয়েছে কিনা তা পরীক্ষা করতে সক্ষম হওয়া উচিতS ধ্রুবক গণনা জটিলতার সাথে O(1), ইতিমধ্যে তারা কতগুলি উপাদান রয়েছে তা নির্বিশেষে । তারা তালিকাভুক্ত নয়, তারা ইতিমধ্যে ধারণ করে কিনা তা পরীক্ষা করে নাSবর্তমানে বিদ্যমান প্রতিটি উপাদানের সাথে তুলনা করে।
ডেনিস সুমারস

1
@ দত্তআ আমি সেটটি কীভাবে ব্যবহৃত হবে তা বর্ণনা করার জন্য কিছু সিউডোকোড যুক্ত করেছি, আশা করি এটি কিছু স্পষ্ট করে দিতে পারে। নোট করুন যে আমরা কখনই পুরোটি লুপ করি না closed_set, এর আকারটি কখনই আমাদের (অ্যাসিপটোটিক) গণনার সময়কে প্রভাবিত করে না।
ডেনিস সুমারস

1
আসলে আমি সি ++ ব্যবহার করে এটি করছিলাম আমার হ্যাশ করার কোনও ধারণা নেই ... অনুমান করি আমি এখন
পাইথনটি

3
@ দত্তএ সি ++ তে আপনি সম্ভবত একটি স্টাডি ::
আনর্ডারড_সেট

16

ডেনিস সোয়েমারের উত্তর সঠিক: বিএফএস গ্রাফ অনুসন্ধানে দেখা রাষ্ট্রগুলির উপর নজর রাখতে আপনার একটি হ্যাশসেট বা অনুরূপ কাঠামো ব্যবহার করা উচিত।

তবে এটি আপনার প্রশ্নের পুরো উত্তর দেয় না। আপনি ঠিক বলেছেন, সবচেয়ে খারাপ ক্ষেত্রে, বিএফএসের পরে আপনার 16 টি সঞ্চয় করতে হবে! নোড। যদিও সেটে সন্নিবেশ এবং চেকের সময়গুলি ও (1) হবে, তবুও আপনার একটি অযৌক্তিক পরিমাণ স্মৃতি দরকার।

এটি ঠিক করতে, বিএফএস ব্যবহার করবেন না । এটি সমস্যার সহজতম ব্যতীত সকলের জন্য অবিচল, কারণ এটির জন্য সময় এবং মেমরি উভয়ই প্রয়োজন যা নিকটতম লক্ষ্য স্থিতির দূরত্বে ক্ষতিকারক।

আরও অনেক মেমরি-দক্ষ অ্যালগরিদম হ'ল পুনরাবৃত্তির গভীরতা । এটিতে বিএফএসের সমস্ত কাঙ্ক্ষিত বৈশিষ্ট্য রয়েছে তবে এটি কেবল ও (এন) মেমরি ব্যবহার করে, যেখানে নিকটস্থ সমাধানে পৌঁছানোর জন্য পদক্ষেপের সংখ্যা n is এটি এখনও কিছুটা সময় নিতে পারে তবে আপনি সিপিইউ সম্পর্কিত সীমাবদ্ধতার অনেক আগে মেমরির সীমাগুলিকে আঘাত করবেন।

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


2
হ্যাঁ, দক্ষতার সাথে ধাঁধাটি সমাধান করতে চান এমন লোকদের জন্য এটি ব্যবহারিকভাবে কার্যকর উত্তর। আমার উত্তরটি এমন লোকদের জন্য যারা বিএফএস ব্যবহারের জন্য জোর দিয়েছিলেন (কারণ তারা কেবল এটি কার্যকরভাবে দেখতে চায়, বা কীভাবে এটি বাস্তবায়ন করতে পারে বা যে কোনও কারণেই শিখতে পারে)। নোট করুন যে BFS আশা করি সংরক্ষণ করার প্রয়োজন হবে না16!উপায় দ্বারা নোড; এটি কেবলমাত্র সবচেয়ে খারাপ পরিস্থিতি, এটি সম্ভবত সময়ের আগে সমাধান খুঁজে পেতে সক্ষম হবে।
ডেনিস সুমারস 14:32 এ

@ ডেনিসোসিমারস ঠিক আছে..আপনিও ঠিক আছেন..আমি আমার দক্ষতা অর্জনের চেষ্টা করছিলাম ... আমি পরে আরও উন্নত অনুসন্ধান পদ্ধতিতে চলে যাব
দত্ত এএ

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

2
@ ডুকঝো বিএফএস সাধারণত তখনই ব্যবহৃত হয় যখন কোনও সম্পূর্ণ সমাধান অনুসন্ধান করা হয়। এটিকে তাড়াতাড়ি থামানোর জন্য আপনার একটি ফাংশন প্রয়োজন যা বিভিন্ন আংশিক সমাধানের তুলনামূলক মানের অনুমান করে তবে আপনার যদি এই ধরনের ফাংশন থাকে তবে আপনি সম্ভবত পরিবর্তে এ * ব্যবহার করতে পারেন!
জন ডুয়েস্ট

"গেমের গতি সংখ্যা" বলার পরিবর্তে, আমি "লক্ষ্যটিতে পৌঁছানোর ন্যূনতম সংখ্যা" সুপারিশ করব আমি গেমের প্রতিটি চাল হিসাবে 16 টির মধ্যে আপনাকে নিয়ে যাওয়া হিসাবে চলন সংখ্যাটি মনে করব! অন্য যাকে বলে যে এটি পুনরাবৃত্ত গভীরতার ব্যবহারের চেয়ে অনেক বেশি মেমরি।
নটথ্যগুই

7

প্রদত্ত উত্তরগুলি সাধারণত সত্য হলেও , 15-ধাঁধার একটি বিএফএস কেবল যথেষ্ট সম্ভাব্য নয়, এটি 2005 সালেও করা হয়েছিল! পদ্ধতির বর্ণনা দেয় এমন কাগজগুলি এখানে পাওয়া যাবে:

http://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf

কয়েকটি মূল বিষয়:

  • এটি করার জন্য, বাহ্যিক মেমরিটি প্রয়োজন ছিল - এটি হল বিএফএস র‌্যামের পরিবর্তে স্টোরেজের জন্য হার্ড ড্রাইভ ব্যবহার করেছিল।
  • প্রকৃতপক্ষে কেবলমাত্র 15 টি! / 2 রাজ্য রয়েছে, যেহেতু রাষ্ট্রীয় জায়গার দুটি পারস্পরিক অপ্রয়োজনীয় উপাদান রয়েছে।
  • এটি স্লাইডিং টাইল ধাঁধাতে কাজ করে কারণ রাষ্ট্রের স্পেসগুলি স্তর থেকে স্তর পর্যন্ত সত্যই ধীরে ধীরে বৃদ্ধি পায়। এর অর্থ হ'ল যে কোনও স্তরের জন্য প্রয়োজনীয় মোট স্মৃতি রাষ্ট্রের স্থানের পূর্ণ আকারের চেয়ে অনেক ছোট। (এটি রুবিকের কিউবের মতো রাষ্ট্রীয় জায়গার সাথে বিপরীতে দেখা যায়, যেখানে রাষ্ট্রীয় স্থানটি আরও দ্রুত বৃদ্ধি পায়))
  • স্লাইডিং-টাইল ধাঁধাটি পুনঃনির্দেশিত হওয়ার কারণে, আপনাকে কেবলমাত্র বর্তমান বা পূর্ববর্তী স্তরের নকলগুলি নিয়ে চিন্তা করতে হবে। নির্দেশিত জায়গায় আপনি অনুসন্ধানের আগের কোনও স্তরে নকল তৈরি করতে পারেন যা জিনিসগুলিকে আরও জটিল করে তুলেছে।
  • কর্ফের মূল কাজটিতে (উপরে লিঙ্কিত) তারা আসলে অনুসন্ধানের ফলাফল সংরক্ষণ করেনি - অনুসন্ধানটি কেবল প্রতিটি স্তরে কত রাজ্য ছিল তা গণনা করা হয়েছিল। আপনি যদি প্রথম ফলাফলগুলি সংরক্ষণ করতে চান তবে আপনার ডাব্লুএমবিএফএসের মতো কিছু দরকার ( http://www.cs.du.edu/~sturte ਵੰਤ / papers / bfs_min_write.pdf )
  • রাষ্ট্রগুলি যখন ডিস্কে সঞ্চিত থাকে তখন পূর্ববর্তী স্তরগুলির থেকে রাজ্যের তুলনা করার জন্য তিনটি প্রাথমিক পন্থা রয়েছে।
    • প্রথমটি বাছাই-ভিত্তিক। যদি আপনি উত্তরসূরিদের দুটি ফাইল বাছাই করেন তবে নকলগুলি খুঁজে পেতে আপনি লিনিয়ার ক্রমে স্ক্যান করতে পারেন।
    • দ্বিতীয়টি হ্যাশ-ভিত্তিক। যদি আপনি উত্তরাধিকারীদের ফাইলে গ্রুপ করার জন্য একটি হ্যাশ ফাংশন ব্যবহার করেন তবে ডুপ্লিকেটগুলি পরীক্ষা করার জন্য আপনি সম্পূর্ণ স্টেট স্পেসের চেয়ে ছোট যে ফাইলগুলি লোড করতে পারেন। (এখানে লক্ষ্য করুন যে এখানে দুটি হ্যাশ ফাংশন রয়েছে - একটি ফাইলকে একটি রাষ্ট্র পাঠাতে এবং অন্যটি সেই ফাইলের মধ্যে রাষ্ট্রের পার্থক্য করতে))
    • তৃতীয়টি নকল সনাক্তকরণের কাঠামোগত। এটি হ্যাশ-ভিত্তিক সনাক্তকরণের একটি ফর্ম, তবে এটি এমনভাবে করা হয়েছে যাতে ডুপ্লিকেটগুলি তত্ক্ষণাত্ পরীক্ষা করা যায় যখন সেগুলি সমস্ত উত্পন্ন হওয়ার পরে পরিবর্তিত হয়।

এখানে আরও অনেক কিছু বলার আছে, তবে উপরের কাগজগুলি আরও অনেক বেশি বিবরণ দেয়।


এটি একটি দুর্দান্ত উত্তর ... তবে আমার মতো নুবুদের জন্য নয়:) ... আমি কোনও প্রোগ্রামারের বিশেষজ্ঞ নই ..
দত্তআ

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

@ নটথ্যাটগুই একটি অপরিবর্তিত গ্রাফে একজন বাবা-মা এবং একটি শিশু বিএফএসে যে গভীরতা পাওয়া যায় তার চেয়ে বেশি দূরত্বে 1 থেকে দূরে থাকে। এটি একবার খুঁজে পাওয়া গেলে, অপরিবর্তিত প্রান্তটি গ্যারান্টি দেয় যে অন্যটি তত্ক্ষণাত পরে পাওয়া যাবে। তবে, নির্দেশিত গ্রাফের মধ্যে, 10 গভীরতার একটি রাষ্ট্র গভীরতা 2 এ শিশু তৈরি করতে পারে, কারণ 2 গভীরতার শিশুটির অন্য প্রান্তে ফিরে কোন প্রান্ত থাকতে হবে না (এটি এটি গভীরতার 10 এর পরিবর্তে 3 গভীরতা তৈরি করবে) ।
নাথান এস

@ নট থাটগুই আপনি যদি একটি বৃত্তে 3 টি টাইল সরিয়ে নিয়ে যান তবে আপনি একটি চক্র তৈরি করেন তবে একটি বিএফএস একই সাথে উভয় দিকেই অন্বেষণ করবে, সুতরাং এটি আপনাকে সত্যিকারের অগভীর গভীরতায় ফিরিয়ে আনবে না। সম্পূর্ণ 3x2 স্লাইডিং টাইলটি এই ডেমোতে দেখানো হয়েছে, এবং চক্রগুলি কীভাবে ঘটে তা দেখতে আপনি ট্র্যাক করতে পারেন: মুভিংই
নাথান এস

1
বিস্ময়ে। এসই স্বাগত: এআই!
DukeZhou

3

হাস্যকরভাবে উত্তরটি হ'ল "আপনি যে সিস্টেমটি চান তা ব্যবহার করুন।" একটি হ্যাশসেট একটি ভাল ধারণা। তবে, দেখা যাচ্ছে যে মেমরির ব্যবহার সম্পর্কে আপনার উদ্বেগ ভিত্তিহীন। বিএফএস এই ধরণের সমস্যায় এত খারাপ, যে এটি আপনার জন্য এই সমস্যাটি সমাধান করে।

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

এর অর্থ হ'ল, আপনি যখন আপনার বিএফএসের শেষ প্লাইটি প্রক্রিয়া করছেন তখন আপনার কমপক্ষে 16! / 3 টি মেমরিতে থাকতে হবে। আপনার পূর্ববর্তী-পরিদর্শন করা তালিকাটি মেমরির সাথেও খাপ খায় তা নিশ্চিত করার জন্য আপনি যে পদ্ধতির ব্যবহার করেছেন তা নিশ্চিত করার জন্য যে মেমরির সাথে ফিট রয়েছে তা যথেষ্ট হবে।

অন্যরা যেমন উল্লেখ করেছে, এটি ব্যবহারের জন্য সেরা অ্যালগরিদম নয়। একটি অ্যালগরিদম ব্যবহার করুন যা সমস্যার জন্য আরও ভাল ফিট।


2

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

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

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


1

গেম এপ্রোচ

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

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

উপ-সিকোয়েন্স বংশোদ্ভূত

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

একটি যুক্তিসঙ্গত বৈষম্য (ত্রুটি) ফাংশনটি হ'ল সমস্ত এক্স বৈষম্যের যোগফল এবং সমস্ত y বৈষম্যের যোগফল এবং সংখ্যার তাত্পর্যপূর্ণভাবে প্রতিনিধিত্ব করে যে খোলার জায়গার (মধ্যম, প্রান্ত) ফলস্বরূপ স্থাপনের ফলে তিনটি স্তরের আন্দোলনের স্বাধীনতার কোনটি বিদ্যমান? , কোণে)।

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

যদি ব্লক 1 থেকে 15 এর খালি স্থান এবং অবস্থানগুলি নিবলগুলির একটি অ্যারে হিসাবে এনকোড করা থাকে তবে কেবল অ্যালগরিদমকে দ্রুত করে তোলে, কেবল যোগ, বিয়োগ এবং বিট-ওয়াইজ অপারেশনগুলির প্রয়োজন। আটটি মুভ ব্রুট ফোর্স কৌশলগুলি পুনরাবৃত্তি করা অসম্পূর্ণতা শূন্যে না আসা পর্যন্ত পুনরাবৃত্তি হতে পারে।

সারসংক্ষেপ

এই অ্যালগরিদমটি চক্র করতে পারে না কারণ ইতিমধ্যে সম্পূর্ণরূপে প্রারম্ভিক রাষ্ট্র ব্যতীত প্রাথমিক অবস্থা নির্বিশেষে সর্বদা আটটি চলনের ক্রমবিন্যাসের মধ্যে কমপক্ষে একটি থাকে যা বৈষম্য হ্রাস করে।

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