লক এবং কী দিয়ে পাথফাইন্ডিং?


22

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

এই ধাঁধাটি এই ছবির মতো জেলদা-স্টাইলের অন্ধকারের মতো:

জেলদা অন্ধকূপ

লক্ষ্যে পৌঁছতে আপনাকে বসকে অবশ্যই পরাজিত করতে হবে, যার জন্য গর্ত পেরিয়ে যেতে হবে, যার জন্য পালক সংগ্রহ করা দরকার, যা কী সংগ্রহ করতে হবে

জেলদা ডেনগিয়নগুলি লিনিয়ার হতে থাকে। তবে আমার সাধারণ সমস্যাটি সমাধান করা দরকার। তাই:

  • লক্ষ্যটির জন্য কীগুলির একটি সেট প্রয়োজন হতে পারে। সুতরাং হয়ত আপনাকে লাল কী বা নীল কীটি পাওয়া দরকার। বা দীর্ঘ জায়গায় কোনও আনলক দরজা থাকতে পারে!
  • এক ধরণের একাধিক দরজা এবং কী থাকতে পারে। যেমন মানচিত্রে একাধিক লাল কী থাকতে পারে এবং একটি সংগ্রহ করা সমস্ত লাল দরজা অ্যাক্সেসের অনুমতি দেবে।
  • লক্ষ্যটি অ্যাক্সেসযোগ্য হতে পারে কারণ লক দরজার পিছনে ডান কীগুলি রয়েছে

আমি কীভাবে এই জাতীয় মানচিত্রে পাথফাইন্ডিং সম্পাদন করব? অনুসন্ধান গ্রাফ দেখতে কেমন হবে?

দ্রষ্টব্য: অ্যাক্সেসযোগ্য লক্ষ্য সনাক্তকরণের শেষ পয়েন্টটি গুরুত্বপূর্ণ; উদাহরণস্বরূপ, * * লক্ষ্যটি অ্যাক্সেসযোগ্য হলে চূড়ান্ত অদক্ষ। আমি দক্ষতার সাথে এটি মোকাবেলা করতে চাই।

ধরে নিন যে এআই মানচিত্রে সমস্ত কিছুই জানেন।


4
এআইগুলি যখন কেবল জিনিসগুলি আনলক হয়ে যায় তখনই কেবল সেগুলি জানতে এবং আবিষ্কার করে? উদাহরণস্বরূপ, লক দরজার পিছনে পালক রয়েছে তা কি জানেন? এআই কি এই ধারণাগুলি বুঝতে পারে, "এটি একটি লক তাই আমার একটি চাবি দরকার" বা আরও সহজ কিছু এরকম, "আমার পথে কিছু বাধা আছে, তাই আমি এটি পেয়েছি এমন সমস্ত জিনিস চেষ্টা করে দেখুন door দরজাতে পালক? না No. দরজার চাবি? হ্যাঁ! "
টিম হল্ট

1
পশ্চাদগামী বনাম পিছনের দিকে এই প্রশ্নটিতে এই সমস্যাটির কিছু পূর্ববর্তী আলোচনা ছিল যা আপনার পক্ষে কার্যকর হতে পারে।
ডিএমগ্রিগরি

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

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

1
অফটোপিক, আমি
স্বভাবতই জেলিডার

উত্তর:


22

স্ট্যান্ডার্ড পাথফাইন্ডিং ভাল যথেষ্ট - আপনার রাজ্যগুলি হল আপনার বর্তমান অবস্থান + আপনার বর্তমান তালিকা in "চলমান" হ'ল হয় কক্ষগুলি পরিবর্তন করা বা তালিকা পরিবর্তন করা। এই উত্তরে আচ্ছাদিত নয়, তবে অতিরিক্ত অতিরিক্ত প্রচেষ্টা নয়, এটি এ * এর জন্য একটি ভাল শব্দতাত্ত্বিক লিখছেন - এটি লক্ষ্য থেকে কাছাকাছি একটি দরজা আনলক করা পছন্দ করে এটিকে দূরে সরিয়ে নিয়ে যাওয়ার বিষয়টিকে বেছে নেওয়ার দ্বারা অনুসন্ধানের গতি বাড়িয়ে তুলতে পারে it প্রায় দীর্ঘ পথ অনুসন্ধান করা, ইত্যাদি

এটি প্রথম এসেছিল এবং এটির একটি ডেমো রয়েছে বলে এই উত্তরটি অনেক উত্সাহ অর্জন করেছে, তবে আরও অনুকূলিত এবং বিশেষায়িত সমাধানের জন্য আপনাকে "এটি পিছনের দিকে করা আরও দ্রুত হয়" উত্তরটিও পড়তে হবে /gamedev/ / A / 150155/2624


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

পাথ ফাইন্ডিংয়ের কথা চিন্তা করার সময়, মনে রাখবেন যে সহজ পাথফাইন্ডিং অ্যালগরিদমগুলির উত্তরাধিকার হ'ল:

  • প্রস্থের প্রথম অনুসন্ধানটি আপনি যতটা সহজ পেতে পারেন।
  • জিক্স্ট্রার অ্যালগরিদমটি প্রথম প্রসারিত অনুসন্ধানের মতো তবে রাষ্ট্রগুলির মধ্যে "দূরত্ব" ভিন্ন
  • এ * জিক্সট্রাস যেখানে আপনার কাছে 'সঠিক দিকের সাধারণ জ্ঞান' রয়েছে যা একজন হিউরিস্টিক হিসাবে উপলব্ধ।

আমাদের ক্ষেত্রে, "অবস্থান + ইনভেন্টরি" এবং "দূরত্ব" কে "আন্দোলন বা আইটেমের ব্যবহার" হিসাবে কেবল "রাষ্ট্র" কে এনকোড করা আমাদের সমস্যা সমাধানের জন্য জিক্সট্রা বা এ * ব্যবহার করতে দেয়।

আপনার উদাহরণ স্তরের প্রদর্শিত এখানে কিছু আসল কোড রয়েছে। প্রথম স্নিপেটটি কেবল তুলনার জন্য - আপনি চূড়ান্ত সমাধানটি দেখতে চাইলে দ্বিতীয় ভাগে লাফ দিন। আমরা একটি জিক্স্ট্রার বাস্তবায়ন দিয়ে শুরু করি যা সঠিক পথটি খুঁজে পায় তবে আমরা সমস্ত বাধা এবং কী উপেক্ষা করেছি। (এটি ব্যবহার করে দেখুন, আপনি ঘর 0 -> 2 -> 3-> 4-> 6-> 5 থেকে শেষের জন্য এটি কেবল সূক্ষ্ম নির্দেশগুলি দেখতে পাবেন)

function Transition(cost, state) { this.cost = cost, this.state = state; }
// given a current room, return a room of next rooms we can go to. it costs 
// 1 action to move to another room.
function next(n) {
    var moves = []
    // simulate moving to a room
    var move = room => new Transition(1, room)
    if (n == 0) moves.push(move(2))
    else if ( n == 1) moves.push(move(2))
    else if ( n == 2) moves.push(move(0), move(1), move(3))
    else if ( n == 3) moves.push(move(2), move(4), move(6))
    else if ( n == 4) moves.push(move(3))
    else if ( n == 5) moves.push(move(6))
    else if ( n == 6) moves.push(move(5), move(3))
    return moves
}

// Standard Djikstra's algorithm. keep a list of visited and unvisited nodes
// and iteratively find the "cheapest" next node to visit.
function calc_Djikstra(cost, goal, history, nextStates, visited) {

    if (!nextStates.length) return ['did not find goal', history]

    var action = nextStates.pop()
    cost += action.cost
    var cur = action.state

    if (cur == goal) return ['found!', history.concat([cur])]
    if (history.length > 15) return ['we got lost', history]

    var notVisited = (visit) => {
        return visited.filter(v => JSON.stringify(v) == JSON.stringify(visit.state)).length === 0;
    };
    nextStates = nextStates.concat(next(cur).filter(notVisited))
    nextStates.sort()

    visited.push(cur)
    return calc_Djikstra(cost, goal, history.concat([cur]), nextStates, visited)
}

console.log(calc_Djikstra(0, 5, [], [new Transition(0, 0)], []))

সুতরাং, আমরা এই কোডটিতে কীভাবে আইটেম এবং কী যুক্ত করব? সরল! প্রতিটি "রাষ্ট্র" পরিবর্তে কেবলমাত্র রুম নম্বর শুরু করে, এটি এখন ঘরের একটি টিপল এবং আমাদের ইনভেন্টরি স্টেট:

 // Now, each state is a [room, haskey, hasfeather, killedboss] tuple
function State(room, k, f, b) { this.room = room; this.k = k; this.f = f; this.b = b }

ট্রানজিশনগুলি এখন (ব্যয়, ঘর) টিউপল থেকে একটি (ব্যয়, রাজ্য) টুপলে রূপান্তরিত হয়, তারপরে "অন্য ঘরে চলে যাওয়া" এবং "কোনও জিনিস তোলা" উভয়ই এনকোড করতে পারে

// move(3) keeps inventory but sets the room to 3
var move = room => new Transition(1, new State(room, cur.k, cur.f, cur.b))
// pickup("k") keeps room number but increments the key count
var pickup = (cost, item) => {
    var n = Object.assign({}, cur)
    n[item]++;
    return new Transition(cost, new State(cur.room, n.k, n.f, n.b));
};

অবশেষে, আমরা জিক্সট্রা ফাংশনে কিছু ছোট-ছোট ধরনের-সম্পর্কিত পরিবর্তনগুলি করেছি (উদাহরণস্বরূপ, এটি এখনও পুরো রাজ্যের পরিবর্তে কেবলমাত্র গোলরুমের সংখ্যায় মিলছে), এবং আমরা আমাদের পূর্ণ উত্তর পাই! নোট করুন মুদ্রিত ফলাফলটি প্রথমে চাটিটি তুলতে 4 ঘরে যায়, তারপরে পালকটি তুলতে 1 রুমে যায়, পরে রুম 6 এ যায়, বসকে হত্যা করে, তারপর ঘরে 5 এ যায়)

// Now, each state is a [room, haskey, hasfeather, killedboss] tuple
function State(room, k, f, b) { this.room = room; this.k = k; this.f = f; this.b = b }
function Transition(cost, state, msg) { this.cost = cost, this.state = state; this.msg = msg; }

function next(cur) {
var moves = []
// simulate moving to a room
var n = cur.room
var move = room => new Transition(1, new State(room, cur.k, cur.f, cur.b), "move to " + room)
var pickup = (cost, item) => {
	var n = Object.assign({}, cur)
	n[item]++;
	return new Transition(cost, new State(cur.room, n.k, n.f, n.b), {
		"k": "pick up key",
		"f": "pick up feather",
		"b": "SLAY BOSS!!!!"}[item]);
};

if (n == 0) moves.push(move(2))
else if ( n == 1) { }
else if ( n == 2) moves.push(move(0), move(3))
else if ( n == 3) moves.push(move(2), move(4))
else if ( n == 4) moves.push(move(3))
else if ( n == 5) { }
else if ( n == 6) { }

// if we have a key, then we can move between rooms 1 and 2
if (cur.k && n == 1) moves.push(move(2));
if (cur.k && n == 2) moves.push(move(1));

// if we have a feather, then we can move between rooms 3 and 6
if (cur.f && n == 3) moves.push(move(6));
if (cur.f && n == 6) moves.push(move(3));

// if killed the boss, then we can move between rooms 5 and 6
if (cur.b && n == 5) moves.push(move(6));
if (cur.b && n == 6) moves.push(move(5));

if (n == 4 && !cur.k) moves.push(pickup(0, 'k'))
if (n == 1 && !cur.f) moves.push(pickup(0, 'f'))
if (n == 6 && !cur.b) moves.push(pickup(100, 'b'))	
return moves
}

var notVisited = (visitedList) => (visit) => {
return visitedList.filter(v => JSON.stringify(v) == JSON.stringify(visit.state)).length === 0;
};

// Standard Djikstra's algorithm. keep a list of visited and unvisited nodes
// and iteratively find the "cheapest" next node to visit.
function calc_Djikstra(cost, goal, history, nextStates, visited) {

if (!nextStates.length) return ['No path exists', history]

var action = nextStates.pop()
cost += action.cost
var cur = action.state

if (cur.room == goal) return history.concat([action.msg])
if (history.length > 15) return ['we got lost', history]

nextStates = nextStates.concat(next(cur).filter(notVisited(visited)))
nextStates.sort()

visited.push(cur)
return calc_Djikstra(cost, goal, history.concat([action.msg]), nextStates, visited)
o}

console.log(calc_Djikstra(0, 5, [], [new Transition(0, new State(0, 0, 0, 0), 'start')], []))

তাত্ত্বিকভাবে, এটি বিএফএস-এর সাথেও কাজ করে এবং আমাদের জিক্সট্রাগুলির জন্য ব্যয় ফাংশনের প্রয়োজন পড়েনি, তবে ব্যয় থাকা আমাদের এটি বলতে দেয় "একটি চাবি তোলা সহজ প্রচেষ্টা নয়, তবে বসের সাথে লড়াই করা সত্যিই কঠিন, এবং আমরা বরং পিছনে চাই বসের সাথে লড়াই করার চেয়ে 100 টি পদক্ষেপ, যদি আমাদের পছন্দ হয় তবে ":

if (n == 4 && !cur.k) moves.push(pickup(0, 'k'))
if (n == 1 && !cur.f) moves.push(pickup(0, 'f'))
if (n == 6 && !cur.b) moves.push(pickup(100, 'b'))

হ্যাঁ, অনুসন্ধান গ্রাফের ইনভেন্টরি / কী স্টেট সহ একটি সমাধান। যদিও আমি বর্ধিত স্থানের প্রয়োজনীয়তা সম্পর্কে উদ্বিগ্ন - 4 কী সহ একটি মানচিত্রে কী-কম গ্রাফের স্থানের 16 গুণ প্রয়োজন।
কংগ্রেসবঙ্গাস

8
@ কংগসবঙ্গাস এনপি-সম্পূর্ণ ভ্রমণ ভ্রমণকারীর সমস্যায় আপনাকে স্বাগতম। কোন সাধারণ সমাধান নেই যা বহু-কালীন সময়ে সমাধান করবে।
ratchet freak

1
@ কনগাসবঙ্গাস আমি সাধারণত মনে করি না যে আপনার অনুসন্ধান গ্রাফটি এত বেশি ওভারহেড হতে চলেছে তবে আপনি যদি স্থান সম্পর্কে উদ্বিগ্ন হন তবে আপনার ডেটাটি প্যাক করুন - আপনি ঘর সূচকটির জন্য 24-বিট ব্যবহার করতে পারেন (16 মিলিয়ন কক্ষগুলি হওয়া উচিত) যে কারও পক্ষে যথেষ্ট হবে) এবং গেট হিসাবে ব্যবহার করতে আগ্রহী আইটেমগুলির জন্য কিছুটা (8 টি আলাদা আলাদা) bit যদি আপনি অভিনবতা পেতে চান, আপনি আইটেমগুলিকে আরও ছোট বিটগুলিতে প্যাক করতে নির্ভরতা ব্যবহার করতে পারেন, যেমন "কী" এবং "বস" এর জন্য একই বিটটি ব্যবহার করুন যেহেতু একটি পরোক্ষ ট্রান্সজিট ডিপেন্ডেন্সি রয়েছে
জিমি

@ জিমি এটি ব্যক্তিগত না হলেও, আমি আমার উত্তরের উল্লেখকে প্রশংসা করি :)
জিব স্মার্ট

13

পিছনে A * কৌশলটি করবে

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

এই উত্তরের নীচে আমার একটি ব্রেক-ডাউন রয়েছে এটি কীভাবে আপনার দেওয়া উদাহরণটিকে পরিচালনা করে।

বিস্তারিত

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

যদি আনলকড-ডোর শাখাটি কীটি সন্ধান করে তবে এটি এআই এজেন্টের সন্ধান চালিয়ে যেতে পারে।

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

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


অ্যাকশন

আপনার নির্দিষ্ট উদাহরণে, লক্ষ্য থেকে শুরুতে পাথফাইন্ডিং:

  1. আমরা দ্রুত একটি বসার দরজা সম্মুখীন। শাখা এ দরজা দিয়ে চালিয়ে যায়, এখন লড়াইয়ের জন্য বসের সন্ধান করছে। শাখা বি ঘরে আটকে থেকে যায়, খুব শীঘ্রই এর মেয়াদ শেষ হয়ে যাবে যখন খুঁজে পাওয়া যায় যে কোনও উপায় নেই।

  2. ব্রাঞ্চ এ মনিবকে খুঁজে বের করে এখনই সূচনা খুঁজছে, তবে একটি গর্তের মুখোমুখি।

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

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

  5. শাখা ডি দ্রুত পালকটি সন্ধান করে এবং কীটি সন্ধান করতে চালিয়ে যায়। এটিকে আবার তালাবদ্ধ দরজা দিয়ে যাওয়ার অনুমতি দেওয়া হয়েছে, যেহেতু এটি এখনও চাবিটি সন্ধান করছে (এবং এটি সময়মতো পিছনের দিকে চলেছে)। তবে এটির কীটি একবার হয়ে গেলে, এটি তালাবদ্ধ দরজা দিয়ে যেতে পারবে না (যেহেতু এটি চাবিটি সন্ধান করার আগে লক দরজা দিয়ে যেতে পারত না)।

  6. শাখা A এবং D প্রতিযোগিতা অব্যাহত রাখে, তবে যখন শাখা A কীটিতে পৌঁছে, তখন পালকের সন্ধান করে এবং এটি পালকটিতে পৌঁছাতে ব্যর্থ হবে কারণ এটি আবার তালাবদ্ধ দরজা দিয়ে যেতে হয়েছিল। অন্যদিকে শাখা ডি, কীটি পৌঁছানোর পরে, স্টার্টটির দিকে মনোযোগ দেয় এবং কোনও জটিলতা ছাড়াই এটি খুঁজে পায়।

  7. শাখা ডি জিতেছে। এটি বিপরীত পথ খুঁজে পেয়েছে। চূড়ান্ত পথটি হল: শুরু -> কী -> পালক -> বস -> লক্ষ্য।


6

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

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

এছাড়াও, আমি এখানে জেনেরিক শব্দটি "লক" এবং "কী" ব্যবহার করতে যাচ্ছি, যদিও এটি অদৃশ্য এবং পালক হতে পারে। অর্থাত, পালক কাসম "লক" কে "আনলক" করে।

সমাধান পদ্ধতির

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

তবে এক্সপ্লোর করার সময় কয়েকটি নিয়ম শুরু হবে যা অগ্রাধিকার পরিবর্তন করতে পারে ...

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

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

"লকযোগ্য" কীগুলি দিয়ে আইডিয়াটি প্রসারিত করা হচ্ছে

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

সুতরাং কিছু বিধি যুক্ত করা হচ্ছে ...

  • যদি কোনও কীটি নেওয়া যায় না (এটি লক হয়ে গেছে), আপনার ইতিমধ্যে এতে থাকা প্রতিটি কী চেষ্টা করে দেখুন
  • যদি আপনি কোনও কী খুঁজে পান তবে আপনি আনলক করতে পারবেন না, এটি পরে মনে রাখবেন
  • যদি আপনি একটি নতুন কী সন্ধান করেন তবে এটি প্রতিটি পরিচিত লক কী এবং লক পাথের জন্য চেষ্টা করে দেখুন

এমনকি কোনও নির্দিষ্ট কী কী বহন করা কীভাবে অন্য কীটির প্রভাবকে অস্বীকার করতে পারে সে সম্পর্কে আমি পুরো বিষয়টিতেও won'tুকতে পারি না (কলসাল গুহাগুলি, রড পাখিটিকে ভয়ঙ্কর করে তোলে এবং পাখিটি তোলার আগে তা ফেলে দিতে হবে, তবে জাদুকরী সেতু তৈরি করার জন্য পরে এটি প্রয়োজন) ।

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