চেকার / খসড়াগুলির জন্য এআই কীভাবে প্রয়োগ করবেন?


21

আমি এই চেকারদের খেলাটি দেখেছি এবং আমি ভাবছিলাম যে এআই কীভাবে কার্যকর করা হয়েছিল।

আমি কীভাবে চেকারদের জন্য একটি এআই বাস্তবায়ন করব (খসড়া, ড্যাম, ডেম)? কোন পরিচিত অ্যালগরিদম আছে?


সকলকে ভীষণ ধন্যবাদ আমি এই টিকিট টোক গেম টিউটোরিয়াল ব্লগ পোস্টটি দেখে খুব অবাক হই ।

সুতরাং, আমি ড্যাম গেম অ্যালগরিদম ওপেন সোর্স কোড এবং ব্লগ পোস্ট চাই .. কোন সহায়ক লিঙ্ক বা কোনও ডক ফাইল আছে ..? আমাকে বুঝতে দাও..


আপনি ঠিক কি জানতে চান? চেকারদের (বা খসড়া / ড্যাম / ডামা) জন্য এআই কীভাবে প্রয়োগ করবেন?
বাম্মজ্যাক

হ্যাঁ, হুবহু .. আমাকে দামার জন্য এআই প্রয়োগ করতে হবে .. কীভাবে শুরু করবেন ..? আপনি কি আমাকে সাহায্য করতে পারেন .. আমার কেবলমাত্র পদার্থবিজ্ঞানের বেস গেমের অভিজ্ঞতা আছে .. ধন্যবাদ ..
সলিড সফট

ওপেন সোর্স চেকারদের জন্য কেবল নেট অনুসন্ধান করা আমাকে বেশ কয়েকটি ফলাফল দিয়েছে। এখানে পাইথনের একটি এবং জাভাতে একটি ... এর ভিত্তিতে কিছু কাজ করা খুব কঠিন হওয়া উচিত নয়?
বাম্মজ্যাক

ধন্যবাদ টেট্রাড .. আমি এর নিয়মটি ভুলে গিয়েছিলাম এবং উত্তর হিসাবে এটি পোস্ট করেছি .. ধন্যবাদ ..
সলিড সফট

উত্তর:


28

ওহ আমি এই গেমগুলি ভালবাসি!

কম্পিউটারটি গেম খেলার জন্য প্রথমে প্রথমে জিনিসগুলির প্রয়োজন:

  1. কাজ করার জন্য একটি কাঠামো
  2. নিয়ম দ্বারা খেলা
  3. দিকে কাজ করার জন্য একটি জয়ের শর্ত

একসাথে এই এক টুকরা মোকাবেলা করা যাক।


গঠন

যেহেতু বোর্ডটি একটি 8x8 গ্রিড (তবে সহজেই স্কেল করতে পারে), এবং প্রতিটি গ্রিডের স্থান পাঁচটি রাজ্যের মধ্যে একটিতে উপস্থিত থাকতে পারে, আসুন সেই রাজ্যগুলি সংজ্ঞায়িত করুন:

[EMPTY, WHITE_PIECE, BLACK_PIECE, WHITE_PIECE_PROMOTED, BLACK_PIECE_PROMOTED]

সম্মানিতভাবে ENUM'd করতে:

[0, 1, 2, 3, 4]

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

BOARD_ARRAY = array(8, 8)

এটি আমাদের একটি 8 x 8 অ্যারে দেবে যেখানে আমরা পূর্ণসংখ্যা (আমাদের এনামগুলি আগে থেকে) সংরক্ষণ করতে পারি:

(
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
)

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

(
[0, 0, 0, 0, 0, 0, 0, 0],
[2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0],
)

(মনে রাখবেন 2 'BLACK_PIECE' উপস্থাপন করে এবং 1 'WHITE_PIECE' উপস্থাপন করে)

সুতরাং এখন কম্পিউটারের সাথে কাজ করার একটি কাঠামো রয়েছে। পদক্ষেপ 1 সম্পূর্ণ!


বিধি

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

আমাদের দেওয়া কোনও পদক্ষেপ 'আইনী' কিনা তা পরীক্ষা করার একটি উপায় তৈরি করতে হবে। যার অর্থ আমাদের প্রথমে একটি 'চাল' উপস্থাপনের জন্য কিছু উপায় প্রয়োজন। একটি উপায় অ্যারে অবস্থান ব্যবহার করা হবে; উদাহরণস্বরূপ [0, 0] থেকে [0, 1] এ কোনও টুকরো স্থানান্তরিত করার জন্য, আমরা এমন একটি ফাংশন তৈরি করতে পারি যা এই পদক্ষেপের পরে বোর্ড আপডেট করবে। তাই পিছনে ফিরে:

MY_MOVE = array( [0, 0], [0, 1] )

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

MY_MOVE = array( [0, 0], [0, 2] )

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

MY_MOVE = array ( [0, 0], [0, 2], [0, 4] )

এটি আমাদের বোর্ডের যে কোনও পদক্ষেপের বর্ণনা দেওয়ার একটি উপায় দেয়। হ্যাঁ! এখন যেহেতু আমি প্রশ্নে সঠিক গেমের নিয়মগুলি পুরোপুরি বুঝতে পারছি না (যদিও আমি আমার দিনে কানাডিয়ান চেকারদের মধ্যে কিছুটা খেলেছি) সঠিক পদক্ষেপের বৈধতা আপনার দ্বারা সংজ্ঞায়িত করা দরকার। এই বিন্দু পর্যন্ত একটি ভাল প্রবাহ দেখতে হবে:

FUNCTION_FIND_ALL_LEGAL_MOVES( MY_BOARD ) Returns: array ALL_LEGAL_MOVES
FUNCTION_FIND_BEST_MOVE( MY_BOARD, ALL_LEGAL_MOVES ) Returns: array MY_MOVE
FUNCTION_DO_MOVE( MY_BOARD, MY_MOVE ) Throws: error ILLEGAL_MOVE Updates: MY_BOARD
repeat from start for each turn

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


জয়লাভ

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

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

আপনি কৌশলগুলিও তৈরি করতে পারেন, যেমন: যদি এমন কোনও টুকরোগুলি থাকে যা লাফিয়ে যায় তবে সেই টুকরোটি সংরক্ষণ করুন বা যদি কোনও টুকরা অন্য এক টুকরো টুকরো টুকরো করতে সক্ষম হয় তবে সেই লাফটি করুন।


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


বাস্তবায়নের উপর কয়েকটি শব্দ

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

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

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

+Board State+          +All Possible Moves+               +Best Move+
([0,0,1,2,3],[3..)     ([0,1],[0,2]), ([7,6],[7,7],[5..)  ([7,6],[7,7])
([0,0,2,2,3],[3..)     ([0,1],[0,2]), ([7,6],[7,7],[5..)  ([5,5],[5,4])
([0,0,1,3,3],[3..)     ([0,1],[0,2]), ([7,6],[7,7],[5..)  ([4,4],[4,3])
etc...

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

দুর্দান্ত এখন এই ডাটাবেস তৈরি করা যাক। প্রথমে আমাদের প্রতিটি বোর্ডের অবস্থা গণনা করা দরকার। এটি একটি দুর্দান্ত বড় দুষ্টু লুপের সাহায্যে করা যেতে পারে, যদি কেউ কিছু সময় ব্যয় করতে এবং এটির কাজ করতে চায় তবে তা দুর্দান্ত। অ্যারেটিকে একটি বড় সংখ্যা হিসাবে দেখুন, তারপরে বেস 5 (0, 1, 2, 3, 4) ব্যতীত উপরের দিকে গণনা করুন এবং শর্ত করুন যে প্রতিটি খেলোয়াড়ের কেবল 16 টি টুকরা থাকতে পারে।

এই মুহুর্তে আমাদের প্রতিটি বোর্ডের স্টেট থাকা উচিত এবং সমস্ত সম্ভাব্য পদক্ষেপ গণনা করে যেতে পারি।

সমস্ত সম্ভাব্য পদক্ষেপ গণনা করা হলে প্যাথফাইন্ডিংয়ের সর্বোত্তম সম্ভাব্য পদক্ষেপের মজাদার অংশটি আসে। এখান থেকেই আমার জ্ঞান কমতে শুরু করে এবং মিনিম্যাক্স বা এ * এর মতো জিনিসগুলি খেলতে শুরু করে। দুঃখিত আমি এতে আরও সাহায্য করতে পারি না: /


4
আপনি সেই পোস্টে প্রচুর প্রচেষ্টা করেছেন যা প্রশংসনীয়। তবে আপনি কীভাবে এআই বাস্তবায়ন করবেন সে প্রশ্নের উত্তর দিচ্ছেন না। আপনি যদি সে সম্পর্কে কিছুটা বিশদভাবে বর্ণনা করতে পারেন (বা উপযুক্ত লিঙ্কগুলি সরবরাহ করুন) তবে আপনার উত্তরটি কিছু উন্নয়নের প্রাপ্য হবে :)
বাম্মজ্যাক

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

আমি যা বোঝাতে চাইছিলাম তা সিসকোআইপিফোনের পোস্টের লাইনের সাথে কিছু ছিল ... এআইকে কীভাবে বাস্তবায়িত করা যায় যাতে এটি আপনার বিপক্ষে খেলতে পারে :)
বামমজ্যাক

আপনার প্রচেষ্টার জন্য +1 হ্যাঁ। আমি প্রকৃত এআই যুক্তি হিসাবে বিশেষত একটি বাস্তবায়ন দৃষ্টিকোণ থেকে আগ্রহী হবে।
কিংবদন্তি

আহ, গ্যাচ্চ্যা, আমি এখনই এটি লিখব, আমি এটিই করেছি কেবলমাত্র এসকিউএল ডাটাবেসের সাথে ... সুতরাং আমরা দেখব কীভাবে এটি বেরিয়ে আসে ...
অ্যাড্রিয়ান সেলি

31

গেমের যেকোন পর্যায়ে কোনও খেলোয়াড়ের পক্ষে সম্ভাব্য চালের পরিমাণ বেশ কম * (প্রায় ৫) এর অর্থ হ'ল কয়েকটি চালচলনের কথা চিন্তা করা, প্রতিটি সম্ভাব্য পদক্ষেপের মূল্যায়ন করা এবং সেরা পদক্ষেপটি নির্বাচন করাই কার্যকরী।

এই পদ্ধতির নাম মিনিম্যাক্স (উইকিপিডিয়া)

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

মিনিম্যাক্স সিদ্ধান্ত গাছ

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

*তবে খসড়াগুলি হ'ল সর্বোচ্চ ব্রাঞ্চিং ফ্যাক্টর যা সম্পূর্ণরূপে সমাধান হয়েছে


3
এ কারণেই আমি স্ট্যাকটি পছন্দ করি, আপনি প্রয়োজনীয় তত্ত্বটি পোস্ট করেছিলেন এবং যে কোনও তত্ত্বটি প্লপড হওয়ার জন্য আমি একটি বড় গর্ত দিয়ে আবেদন পোস্ট করেছি <<3 স্ট্যাক
অ্যাড্রিয়ান সেলি

5

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


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