এআই (মিনিম্যাক্স অ্যালগরিদম) সহ আরডুইনোতে টিক ট্যাক টো: 3 টি ধাপ
এআই (মিনিম্যাক্স অ্যালগরিদম) সহ আরডুইনোতে টিক ট্যাক টো: 3 টি ধাপ
Anonim
Image
Image
তৈরি করুন এবং খেলুন
তৈরি করুন এবং খেলুন

এই নির্দেশনায় আমি আপনাকে দেখাব কিভাবে একটি Arduino ব্যবহার করে একটি AI দিয়ে একটি Tic Tac Toe গেম তৈরি করতে হয়। আপনি হয় Arduino এর বিপক্ষে খেলতে পারেন অথবা Arduino নিজের বিরুদ্ধে খেলা দেখতে পারেন।

আমি "মিনিম্যাক্স অ্যালগরিদম" নামে একটি অ্যালগরিদম ব্যবহার করছি, যা কেবল টিক ট্যাকের জন্য এআই তৈরিতেই ব্যবহার করা যায় না, বরং ফোর ইন এ রো, চেকার বা এমনকি দাবার মতো অন্যান্য গেমের জন্যও ব্যবহার করা যেতে পারে। দাবার মতো গেমগুলি খুব জটিল এবং অ্যালগরিদমের আরও পরিমার্জিত সংস্করণ প্রয়োজন। আমাদের Tic Tac Toe গেমের জন্য, আমরা অ্যালগরিদমের সহজতম সংস্করণ ব্যবহার করতে পারি, যা তবুও বেশ চিত্তাকর্ষক। আসলে, এআই এত ভাল যে আরডুইনোকে পরাজিত করা অসম্ভব!

গেমটি তৈরি করা সহজ। আপনার কেবলমাত্র কয়েকটি উপাদান এবং আমার লেখা স্কেচ দরকার। আমি অ্যালগরিদমের আরও বিস্তারিত ব্যাখ্যা যোগ করেছি, যদি আপনি বুঝতে চান যে এটি কীভাবে কাজ করে।

ধাপ 1: তৈরি করুন এবং খেলুন

টিক ট্যাক টো গেমটি তৈরি করতে আপনার নিম্নলিখিত উপাদানগুলির প্রয়োজন হবে:

  • একটি Arduino Uno
  • 9 WS2812 RGB LEDs
  • 9 টি পুশ বোতাম
  • কিছু তার এবং জাম্পার তারগুলি

ফ্রিজিং স্কেচে দেখানো উপাদানগুলিকে ওয়্যার আপ করুন। তারপর আপনার Arduino এ কোড আপলোড করুন।

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

আপনি সিরিয়াল মনিটর খোলার মাধ্যমে Arduino "চিন্তা" দেখতে পারেন। প্রতিটি সম্ভাব্য পদক্ষেপের জন্য, অ্যালগরিদম একটি রেটিং গণনা করে যা নির্দেশ করে যে এই পদক্ষেপটি Arduino বা ড্র (0 এর মান) এর জন্য একটি জয় (10 এর মান) বা ক্ষতি (-10 এর মান) এর দিকে নিয়ে যাবে।

আপনি স্কেচের একেবারে শুরুতে "#define DEMO_MODE" লাইনটি অসম্পূর্ণ করে Arduino এর খেলা দেখতে পারেন। যদি আপনি সংশোধিত স্কেচ আপলোড করেন, Arduino এলোমেলোভাবে প্রথম পদক্ষেপ নেয় এবং তারপর প্রতিটি মোড়ের প্রতিটি খেলোয়াড়ের জন্য সেরা পদক্ষেপ নির্ধারণ করতে মিনিম্যাক্স অ্যালগরিদম ব্যবহার করে।

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

ধাপ 2: মিনিম্যাক্স অ্যালগরিদম

মিনিম্যাক্স অ্যালগরিদম
মিনিম্যাক্স অ্যালগরিদম

অ্যালগরিদম দুটি উপাদান নিয়ে গঠিত: একটি মূল্যায়ন ফাংশন এবং একটি অনুসন্ধান কৌশল। মূল্যায়ন ফাংশন এমন একটি ফাংশন যা বোর্ড পজিশনে একটি সংখ্যাসূচক মান নির্ধারণ করে। যদি অবস্থানটি একটি চূড়ান্ত অবস্থান হয় (যেমন, এমন একটি অবস্থান যেখানে নীল খেলোয়াড় বা লাল খেলোয়াড় জিতেছে বা যেখানে কোন খেলোয়াড় জিতেনি), মূল্যায়ন ফাংশনটি খুব সহজ: ধরা যাক আরডুইনো নীল খেলে এবং মানব খেলোয়াড় লাল খেলে । যদি অবস্থানটি নীলের জন্য একটি বিজয়ী অবস্থান হয়, ফাংশনটি সেই অবস্থানের জন্য 10 এর একটি মান নির্ধারণ করে; যদি এটি লাল রঙের জন্য একটি বিজয়ী অবস্থান হয়, ফাংশনটি অবস্থানের জন্য -10 এর একটি মান নির্ধারণ করে; এবং যদি অবস্থানটি ড্র হয় তবে ফাংশনটি 0 এর মান নির্ধারণ করে।

যখন এটি Arduino এর পালা, এটি একটি পদক্ষেপ বেছে নিতে চায় যা মূল্যায়ন ফাংশনের মানকে সর্বাধিক করে তোলে, কারণ মানটি সর্বাধিক করার অর্থ হল এটি একটি ড্র (10 এর চেয়ে বড়) এর উপর জয়কে পছন্দ করবে এবং হারানোর চেয়ে একটি ড্রকে প্রতিফলিত করবে (0 -10 এর চেয়ে বড়)। একটি অনুরূপ যুক্তি দ্বারা, প্রতিপক্ষ এমনভাবে খেলতে চায় যাতে সে মূল্যায়ন ফাংশনের মান কমিয়ে দেয়।

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

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

ধাপ 3: সমস্যা সমাধান এবং আরও পদক্ষেপ

যদি আপনি একটি বোতাম এবং বোতামের সাথে সংশ্লিষ্ট LED এর চেয়ে আলাদা LED টিপেন, আপনি সম্ভবত A0-A2 বা 4-6 মিশ্রিত পিনগুলিতে তারগুলি পেয়েছেন, অথবা আপনি ভুল ক্রমে LEDs সংযুক্ত করেছেন।

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

এই প্রকল্পের একটি সম্ভাব্য এক্সটেনশন হবে 4x4 বা এমনকি 5x5 টিক ট্যাক টো এর জন্য একটি AI তৈরির অ্যালগরিদম ব্যবহার করা। যাইহোক, মনে রাখবেন যে অ্যালগরিদম পরীক্ষা করার জন্য অবস্থানের সংখ্যা খুব দ্রুত বৃদ্ধি পায়। চূড়ান্ত নয় এমন অবস্থানের মান নির্ধারণ করে মূল্যায়ন ফাংশনকে আরও বুদ্ধিমান করার উপায়গুলি খুঁজে বের করতে হবে, সম্ভাব্য খেলোয়াড়ের জন্য অবস্থানটি ভাল বা খারাপ হওয়ার সম্ভাবনার উপর ভিত্তি করে। বিকল্প পদক্ষেপের তুলনায় যদি কোনো পদক্ষেপ আরও অন্বেষণের জন্য কম যোগ্য হয়ে ওঠে তবে আপনি প্রথম দিকে পুনরাবৃত্তি বন্ধ করে অনুসন্ধানকে আরও বুদ্ধিমান করার চেষ্টা করতে পারেন।

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

প্রস্তাবিত: