এমন কোনও অ্যালগরিদম রয়েছে কি, যেখানে যদি অসীম প্রক্রিয়াকরণ ক্ষমতা দেওয়া হয় তবে কোনও কম্পিউটার দাবা পুরোপুরি খেলতে পারে যাতে এটি কখনই হারাতে না পারে?
যদি তা হয় তবে আমি এর জন্য সিউডো কোডটি কোথায় খুঁজে পাব?
এমন কোনও অ্যালগরিদম রয়েছে কি, যেখানে যদি অসীম প্রক্রিয়াকরণ ক্ষমতা দেওয়া হয় তবে কোনও কম্পিউটার দাবা পুরোপুরি খেলতে পারে যাতে এটি কখনই হারাতে না পারে?
যদি তা হয় তবে আমি এর জন্য সিউডো কোডটি কোথায় খুঁজে পাব?
উত্তর:
একটি অ্যালগরিদম কি বিদ্যমান? হ্যাঁ। জেরমেলোর উপপাদ্য অনুসারে , দাবা-র মতো চূড়ান্ত নিরঙ্কুশ-নিখুঁত-তথ্য দ্বি-খেলোয়াড় গেমের জন্য তিনটি সম্ভাবনা রয়েছে: প্রথম খেলোয়াড়ের একটি বিজয়ী কৌশল থাকে, বা দ্বিতীয় খেলোয়াড়ের বিজয়ী কৌশল থাকে, অথবা উভয়ই খেলোয়াড় ড্র করতে বাধ্য করতে পারে। দাবা কোনটি তা আমরা এখনও (এখনও) জানি না। (অন্যদিকে, চেকারগুলি সমাধান করা হয়েছে : যে কোনও প্লেয়ারই ড্র করতে বাধ্য করতে পারে))
ধারণামূলকভাবে, অ্যালগরিদমটি বেশ সহজ: একটি সম্পূর্ণ গেম ট্রি তৈরি করুন , পাতাগুলি (গেম-শেষের অবস্থানগুলি) বিশ্লেষণ করুন, এবং হয় বিজয়ী প্রাথমিক পদক্ষেপ করুন, পদত্যাগ করুন বা একটি অঙ্কিত অফার করবেন।
সমস্যাটি বিশদে নিহিত রয়েছে: প্রায় 10 43 টি সম্ভাব্য অবস্থান রয়েছে, এবং আরও বেশি পরিমাণে চালনা (বেশিরভাগ অবস্থান একাধিক উপায়ে পৌঁছানো যেতে পারে)। এটির সুবিধা নিতে আপনার সত্যই আপনার অসীম-শক্তিশালী কম্পিউটারের প্রয়োজন, যেহেতু এই কম্পিউটারটি এই অ্যালগরিদমের সুবিধা নিতে পারে তা জ্ঞাত মহাবিশ্বের সাথে ফিট করতে পারে না, বা মহাবিশ্ব শেষ হওয়ার পরে কিছুক্ষণ গণনা শেষ করবে না।
Https://en.wikedia.org/wiki/Endgame_tablebase দেখুন ।
অসীম কম্পিউটার পাওয়ার দ্বারা, কেউ প্রারম্ভিক অবস্থানের জন্য এই জাতীয় একটি টেবিল তৈরি করতে পারে এবং দাবা সমাধান করতে পারে ।
অনুশীলনে, কেবলমাত্র "পুরুষ" (পদ্ম এবং টুকরো, বাদশাহর গণনা) সহ কেবলমাত্র অবস্থানগুলি বর্তমান সুপার কম্পিউটারগুলি ব্যবহার করে সমাধান করা হয়েছে, সুতরাং আমরা দাবা সমাধান থেকে খুব দূরে। সমস্যার জটিলতা টুকরো সংখ্যা সহকারে তাত্পর্যপূর্ণভাবে বৃদ্ধি পায়।
আপনার যদি সত্যিই অসীম প্রসেসিং শক্তি থাকে তবে এ জাতীয় একটি অ্যালগরিদম লিখতে আসলে তুচ্ছ হবে। যেহেতু দাবাতে সীমাবদ্ধ সংখ্যক সম্ভাব্য রাজ্য রয়েছে, ততক্ষণ আপনি তত্ক্ষণিকভাবে পুরোপুরি পুনরাবৃত্তি করতে পারবেন যতক্ষণ না আপনি নিখুঁত খেলার পথ খুঁজে না পান। এটি মারাত্মকভাবে অক্ষম হবে, তবে আপনার যদি অসীম প্রক্রিয়াকরণ ক্ষমতা থাকে তবে তাতে কিছু আসে যায় না।
প্রশ্নটিকে সরাসরি সম্বোধন করতে: হ্যাঁ এমন একটি অ্যালগরিদম রয়েছে। একে মিনিম্যাক্স বলা হয়। (এন্ডগ্যাম টেবিলবাসগুলি এই অ্যালগরিদম (পিছনের দিকে!) ব্যবহার করে তৈরি করা হয়, তবে সাধারণ প্লেইন সিম্পল মিনিম্যাক্স অ্যালগোরিদম আপনার যা দরকার তা হ'ল)। এই অ্যালগরিদম যে কোনও দুটি খেলোয়াড়কে পুরোপুরি শূন্য রাশি খেলা খেলতে পারে। সিউডোকোডটি এখানে সন্ধান করুন:
https://en.wikipedia.org/wiki/Minimax
নোট করুন যে এই অ্যালগরিদমের রূপগুলি আধুনিক কম্পিউটার দাবা প্রোগ্রামগুলি দ্বারা ব্যবহৃত হয়।
নিখুঁত দাবা খেলার জন্য কেবল একটি অ্যালগরিদমই নয়, একটি সংক্ষিপ্ত প্রোগ্রামও লেখা সম্ভব যা (যে অসীম সংস্থান দেওয়া হয়) কোনও নির্বোধের নিখুঁত-জ্ঞানের সীমাবদ্ধ-মেয়াদী দুই খেলোয়াড়ের খেলা পুরোপুরি খেলবে ।
গেম ইঞ্জিনটি এটি যে গেমটি খেলছে তার বিধিগুলিও জানতে হবে না। এটির জন্য প্রয়োজনীয় সমস্ত একটি "গেম স্টেট" এর একটি অস্বচ্ছ প্রতিনিধিত্ব এবং ফাংশন যা (ক) যে কোনও গেমের অবস্থা দেওয়া হলে পরবর্তী আইনি গেমের রাজ্যগুলির একটি তালিকা সরবরাহ করে এবং (খ) একটি গেমের রাজ্য দেওয়া হয়, সিদ্ধান্ত নেয় এটি খেলোয়াড়ের জন্য জয় কিনা? , খেলোয়াড় 2 এর জন্য একটি জয়, একটি ড্র, বা এটি শেষের অবস্থা নয়।
এই ফাংশনগুলি দেওয়া একটি সাধারণ পুনরাবৃত্ত আলগোরিদিম গেমটি "সলভ" করে।
পূর্ববর্তী জবাবগুলিতে এই সত্যটি দাবাপ্রগ্রামার (মিনিম্যাক্স) এবং অ্যাকিউমুলেশন (যিনি পাইথনটিতে প্রোগ্রামটির একটি সংস্করণ সরবরাহ করে) দ্বারা নির্দেশিত হয়েছে।
আমি 20 বছর আগে এই জাতীয় একটি প্রোগ্রাম লিখেছি। আমি এটি নিউটস-ও-ক্রস খেলে পরীক্ষা করে দেখেছি (আপনি আমেরিকান হলে টিক-ট্যাক-টো)। অবশ্যই এটি একটি নিখুঁত গেম খেলেছে Sure
অবশ্যই এটি কোনও গুরুতর গেমের জন্য যেকোন কল্পনাপ্রসূত কম্পিউটারে দ্রুত নেমে আসবে। কারণ এটি পুনরাবৃত্তিমূলক এটি কার্যকরভাবে স্ট্যাকের উপর পুরো গেম ট্রি তৈরি করছে, সুতরাং আপনি অন্যান্য উত্তরে উল্লিখিত দাবার 10 ^ 123 রাজ্যের বিশ্লেষণের কাছাকাছি যাওয়ার আগে আপনি একটি "স্ট্যাক ওভারফ্লো" (পাং খুব উদ্দেশ্যযুক্ত) পাবেন। তবে এটি মজাদার যে নীতিগতভাবে এই ছোট প্রোগ্রামটি কাজ করবে।
আমার জন্য এটি এআই সম্পর্কে আকর্ষণীয় কিছু বলেছেন: তবে আপনার মনে হয় অনেক "বুদ্ধি" ডিপ ব্লু বা গো জিরো দ্বারা প্রকাশিত হয়েছে, বা প্রকৃতপক্ষে কোনও মানুষ খেলেছে দাবা বা গো এমন একটি ধারণা রয়েছে যার মধ্যে এই গেমগুলি তুচ্ছ, ঠিক গণনাযোগ্য অনুকূল সমাধান। চ্যালেঞ্জ হ'ল যুক্তিসঙ্গত সময়ে অনুকূল সমাধান না হলেও কীভাবে ভাল পাওয়া যায়।
সরলতার জন্য চালগুলিগুলির অঙ্কন বা অসীম ক্রমগুলির সম্ভাবনাগুলি আমি এড়িয়ে যাব। একবার অ্যালগরিদম বোঝা গেলে, এই ক্ষেত্রে এটি প্রসারিত করা বিশেষত কঠিন নয়।
প্রথমত, কিছু সংজ্ঞা:
যে পদক্ষেপ খেলোয়াড়ের পক্ষে গেমটি জিতবে যে এই পদক্ষেপটি তৈরি করে সে একটি বিজয়ী পদক্ষেপ।
যে পদক্ষেপ খেলোয়াড়ের জন্য গেমটি হারায় যে এই পদক্ষেপটি তোলে এটি হারাতে যাওয়া পদক্ষেপ।
কমপক্ষে একটি জয়ের পদক্ষেপের সাথে অন্য খেলোয়াড়কে ছেড়ে যাওয়া যে কোনও পদক্ষেপ হ'ল একটি হারানো পদক্ষেপ। (যেহেতু প্রতিপক্ষ সেই পদক্ষেপ নিতে পারে এবং ক্ষতিতে বাধ্য করতে পারে))
অন্য খেলোয়াড়কে কেবল হারাতে পারা চালানো যে কোনও পদক্ষেপ এটি একটি বিজয়ী পদক্ষেপ। (আপনার প্রতিপক্ষ যে পদক্ষেপ নেয় তা আপনি জিততে পারবেন না you)
একটি নিখুঁত কৌশল মানে সর্বদা বিজয়ী পদক্ষেপ নেওয়া যদি কোনও অবশিষ্ট থাকে এবং পদত্যাগ করা হয় যখন কারও কাছে কেবল চালিকা বাকি থাকে।
এখন, একটি নিখুঁত কৌশল লেখা তুচ্ছ। কেবলমাত্র সমস্ত সম্ভাব্য মুভ ক্রমগুলি বিস্ফোরণ করুন এবং বিজয়ী / হারানো চালগুলি সনাক্ত করুন। অচলাবস্থাকে উপেক্ষা করে, শেষ পর্যন্ত এটি প্রতিটি পদক্ষেপকে জয়ী পদক্ষেপ বা হেরে যাওয়া পদক্ষেপ হিসাবে চিহ্নিত করবে।
এখন কৌশলটি তুচ্ছ। আপনার সমস্ত সম্ভাব্য পদক্ষেপ দেখুন। কোনও বিজয়ী পদক্ষেপ যদি থেকে যায় তবে একটি নিন এবং জিতে নিন। যদি কেবল হেরে যাওয়ার পদক্ষেপগুলি থেকে যায় তবে পদত্যাগ করুন, কারণ আপনার প্রতিপক্ষ আপনাকে হারাতে বাধ্য করতে পারে।
অচলাবস্থার সম্ভাবনা অন্তর্ভুক্ত করার জন্য কৌশলটি সামঞ্জস্য করা কঠিন নয়।
আপডেট : কেবলমাত্র এটি স্পষ্ট নয় তবে এটি কীভাবে প্রতিটি পদক্ষেপকে আরও বেশি জয়ী বা হারানো চাল হিসাবে চিহ্নিত করে, বিবেচনা করুন:
n
দীর্ঘতম সম্ভাব্য দাবা গেমের চাল সংখ্যাগুলি কল করুন। (আমরা আপাতত সীমাহীন ক্রমগুলি উপেক্ষা করছি, যদিও সেগুলি অন্তর্ভুক্ত করা কঠিন নয় not)n
আমাদের বিবেচনা করা উচিত পূর্ববর্তী পদক্ষেপের সাথে কোনও পদক্ষেপ নেই ।n-1
পূর্ববর্তী পদক্ষেপের সাথে প্রতিটি পদক্ষেপ হয় একটি বিজয়ী পদক্ষেপ বা হেরে যাওয়া পদক্ষেপ, যেহেতু n
চালগুলি দীর্ঘতম গেমটি শেষ করে।n-2
কেবল বিজয়ী চাল বা হারানো চালগুলি অনুসরণ করে এবং এটি নিজেই একটি বিজয়ী পদক্ষেপ বা হারানো পদক্ষেপ।1. d4
সঙ্গে ...resigns
?
ধরুন আপনি তিনটি ফাংশন আছে: win_state
, get_player
, এবং next_states
। এর ইনপুটটি win_state
একটি গেম স্টেট এবং শ্বেত চেকমেটে থাকলে আউটপুট -1 হয়, যদি এটি ড্র হয় তবে 0 যদি কালো চেকমেটে থাকে 1 এবং None
অন্যথায়। এর ইনপুটটি get_player
একটি গেম স্টেট এবং এর কালো রঙের পালা হলে আউটপুট -1 হয় এবং যদি সাদা রঙের হয় 1 ইনপুটটি next_states
পরবর্তী পরবর্তী খেলাগুলির তালিকার একটি তালিকা যা আইনী পদক্ষেপের ফলে আসতে পারে। তারপরে নিম্নলিখিত ফাংশনটি যখন কোনও গেমের অবস্থা এবং কোনও খেলোয়াড় দেওয়া হয়, আপনাকে সেই খেলোয়াড়ের জয়ের জন্য কী গেমের দিকে যেতে হবে তা আপনাকে বলা উচিত।
def best_state(game_state,player)
def best_result(game_state):
if win_state(game_state):
return(win_state)
else:
player = get_player(game_state)
return max([best_result(move)*player for move in next_states(game_state)])*player
cur_best_move = next_states(games_state)[0]
cur_best_outcome = -1
for state in next_states(game_state):
if best_result(state)*player > cur_best_outcome:
cur_best_outcome = best_result(state)*player
cur_best_move = state
return(best_move)
হ্যাঁ। এটি সহজ. এমনকি আপনার অসীম প্রক্রিয়াকরণ শক্তিও প্রয়োজন নেই। আপনার যা দরকার তা হ'ল একটি লুক টেবিল যা প্রতিটি সম্ভাব্য বোর্ড পজিশনের জন্য, সেই অবস্থানে খেলার জন্য সেরা পদক্ষেপ। এখানে সিউডো কোডটি রয়েছে:
def play-move(my-color, board-position):
return table-of-best-moves[my-color, board-position]
একমাত্র ধরাটি এই যে এই চেহারাটির টেবিলটি খুব, খুব বড় হতে পারে - সম্ভবত মিল্কিওয়ে গ্যালাক্সির চেয়েও বড় — এটি তৈরি করতে দীর্ঘ সময় লাগবে - সম্ভবত মহাবিশ্বের বর্তমান যুগের চেয়ে বেশি দীর্ঘ, যদি না থাকে দাবাতে কিছু অনাবৃত নিয়মিততা যা এটি আমরা এখন দেখতে পাই তার চেয়ে অনেক সহজ করে তোলে। তবে আপনার যদি এই চেহারা-সারণীটি থাকে, প্রতিবার একটি নিখুঁত পদক্ষেপ বেছে নেওয়ার সাবরোটাইন একটি সিপিইউ নির্দেশের মতোই সামান্য প্রয়োগ করা যেতে পারে।
এছাড়াও, দাবা সম্পর্কে আমাদের বর্তমান জ্ঞান দেওয়া, নিখুঁত খেলার গ্যারান্টি দেয় যে আপনি হারাবেন না তা নিশ্চিত হওয়ার কোনও উপায় নেই। উদাহরণস্বরূপ, নিখুঁত খেলা যদি হোয়াইটের পক্ষে জয়ের গ্যারান্টি দেয় তবে কালো পুরোপুরি খেলে এমনকি কালো হারাতে পারে।