পটভূমি
মেনেস ( এম আচিন ই দুর্বল) এন oughts একটি য় সি Rosses ই ngine) খেলা একপ্রকার খেলা 1960-এর দশকে ব্রিটিশ কম্পিউটার বিজ্ঞানী ডোনাল্ড Michie দ্বারা নির্মিত একটি প্রাথমিক অগভীর মেশিন লার্নিং আলগোরিদিম হয়। এটি মূলত 304 ম্যাচবাক্সগুলির সাথে বাস্তবায়িত হয়েছিল, প্রতিটি বোর্ডের অবস্থান সহ লেবেলযুক্ত এবং রঙিন পুঁতিযুক্ত (নয়টি রঙের মধ্যে একটি, সম্ভাব্য পদক্ষেপের প্রতিনিধিত্ব করে)। মিচি গণনা করেছেন যে এই 304 টি ম্যাচবক্সগুলি বোর্ডে প্রতিটি পদক্ষেপের জন্য যথেষ্ট ছিল were
আপনার মধ্যে আরও গাণিতিক বুঝতে পারবেন যে প্রকৃতপক্ষে এনএন্ডসি বোর্ডে নফটস, ক্রস এবং খালিগুলির সংমিশ্রণ রয়েছে 19,683; যাইহোক, তিনি এই সংখ্যাটি হ্রাস করার উপায়গুলি গণনা করেছিলেন (অ্যালগোরিদমের গতি বাড়ানোর জন্য, এবং ম্যাচবক্সগুলিতে কাটা পড়ার সম্ভাবনা!)। প্রথমত, তিনি অ-সম্ভাব্য সমস্ত পদক্ষেপগুলি সরিয়েছেন, যেমন:
-------
|X|0|X|
| |0| |
|X|X| |
-------
(দুটি বাদুড় এবং চারটি ক্রস)
এরপরে, তিনি আবর্তনের জন্য ক্ষতিপূরণ দিয়েছিলেন। উদাহরণস্বরূপ, যদি ম্যাচবক্সে আমরা দেখতে পাই:
-------
| |0|0|
|X| |X|
| |0| |
-------
আমরা একই বাক্সটি ব্যবহার করতে পারি
-------
| |X| |
|0| |0|
| |X|0|
-------
অতএব, বর্ণিত রঙিন পুঁতিগুলি পরম অবস্থানগুলি নয় বরং আপেক্ষিক অবস্থানগুলিকে উপস্থাপন করে। উদাহরণস্বরূপ, যদি আমরা বলেছিলাম যে লাল জপমালা মানে উপরের বাম, তবে আমরা বাক্সের উপরের চিত্রটি একবার দেখে নিই:
-------
| |0|0|
|X| |X|
| |0| |
-------
সুতরাং আমরা জানতে চাই যে এটি বোর্ডের ক্ষেত্রে, তারপরে লাল জপমালাটির অর্থ হবে:
-------
|R|0|0|
|X| |X|
| |0| |
-------
তবে এটি যদি বোর্ড হয়:
-------
| |X| |
|0| |0|
| |X|0|
-------
লাল জপমালা মানে
-------
| |X|R|
|0| |0|
| |X|0|
-------
এই রূপান্তরগুলি ঘূর্ণন এবং বিপরীতকরণের জন্য প্রয়োগ করা হয়েছে (তির্যক সহ সমস্ত দিকের)) আবার একবারে আপনার কেবল প্রতিটি ম্যাচবক্স সংরক্ষণ করতে হবে: প্রতিটি রূপান্তরের জন্য আলাদা ভার্চুয়াল বাক্স তৈরি করবেন না!
মিচি তৈরি করা অন্য সরলকরণটি ছিল কম্পিউটারটি প্রথমে চলে যায় তা নিশ্চিত করা। এইভাবে, তিনি বাক্স বাক্সের প্রায় পঞ্চমাংশ সরিয়ে, প্রথম স্তরের সমস্ত পদক্ষেপ সরিয়ে ফেলতে পারেন। অবশেষে, তিনি সমস্ত গেম-এন্ডিং বাক্সগুলি সরিয়ে ফেললেন (এই পদক্ষেপগুলিতে কোনও 'সামগ্রী' বা চালচলনের প্রয়োজন নেই)।
ডান, এখন নিজেই অ্যালগোরিদমে (এটি খুব সাধারণ)
- প্রথমে পুঁতির রঙগুলি কী উপস্থাপন করে তা সিদ্ধান্ত নিন। বোর্ডে প্রতিটি ফাঁকা স্থানকে উপস্থাপন করতে আপনার 9 রঙের প্রয়োজন।
- গেমের শুরুতে 304 টি ম্যাচবক্সের প্রত্যেকটিতে পুঁতি রয়েছে। পুঁতিগুলি এলোমেলো রঙের (তাই ডুপ্লিকেটগুলি ভাল), তাদের সম্ভাব্য চলন হওয়া উচিত (সুতরাং যদি বোর্ডের রাজ্যের চিত্রটি মাঝের ডানদিকে একটি 'ও' চিত্রিত করে, তবে আপনি মাঝের- প্রতিনিধিত্বকারী জপমালা ব্যবহার করতে পারবেন না- ডান)।
- প্রতিবার এটি MENACE (X) এর পালা হওয়ার সাথে সাথে বর্তমান বোর্ড পজিশনের সাথে ম্যাচবক্সটি সন্ধান করুন (বা এটির কিছু রূপান্তর) এটিতে মুদ্রিত।
- ম্যাচবক্সটি খুলুন এবং এলোমেলোভাবে সেখানে কোনও পুঁতি বেছে নিন।
- ম্যাচবক্সে চিত্রটিতে উঠতে কীভাবে বোর্ডের স্থিতিটি রূপান্তরিত হয়েছে তা সন্ধান করুন (উদাহরণস্বরূপ 90deg এন্টিকলোকের দিকে ঘোরানো)। তারপরে, সেই রূপান্তরটি পুঁতিতে প্রয়োগ করুন (যেমন উপরে-বামটি বাম-বামে পরিণত হয়)।
- সেই স্কোয়ারে একটি এক্স রাখুন। ম্যাচবক্স থেকে নির্বাচিত জপমালা সরান। ফলস্বরূপ বাক্সটি যদি খালি ছেড়ে যায়, তবে বাক্সে তিনটি এলোমেলো (সম্ভাব্য) জপমালা রাখুন এবং সরানোর জন্য তার মধ্যে একটি বেছে নিন।
- খেলা শেষ না হওয়া পর্যন্ত 3-6 পুনরাবৃত্তি করুন।
- MENACE গেমটি জিতে থাকলে, MENACE নিয়ে যাওয়া প্রতিটি ম্যাচবক্সে ফিরে যান। তারপরে, সেই পদক্ষেপে এটি কী রঙের পুঁতি ব্যবহার করেছে তা পিছনে ট্রেস করুন। সেই রঙের পুঁতির দুটি রঙ বাক্সে রাখুন (যাতে মূল পুঁতিটি + আরও একটি থাকে, এর ফলে MENACE এর সম্ভাবনা বাড়িয়ে দেয় যা পরের বার যখন to অবস্থানে পৌঁছে যায়)
- MENACE গেমটি হেরে গেলে কিছুই করবেন না ( করবেন না) নিয়েছিল প্রতিস্থাপন )।
- যদি MENACE গেমটি আকর্ষণ করে, তবে এর প্রতিটি চালগুলিতে ব্যবহৃত পুঁতিটি প্রতিস্থাপন করুন, তবে অতিরিক্ত কোনও যোগ করবেন না, যাতে আপনি যা শুরু করেছিলেন তা রেখেই চলে যান।
এটি আমাদের কাছে একটি অ্যালগোরিদম ফেলেছে যা খুব সহজ, তবে কার্যকর করা কঠিন। এটি আপনার চ্যালেঞ্জের ভিত্তি তৈরি করে।
আপনি যদি এখনও বিভ্রান্ত থাকেন তবে দেখুন http://chalkdustmagazine.com/features/menace-machine-educable-noughts-crosses-engine/ - আমি যখন এই অ্যালগরিদম সম্পর্কে জানলাম তখনই এটি পড়েছিলাম
চ্যালেঞ্জ
কম্পিউটারের সাথে টিক-ট্যাক-টোয়ের একটি খেলা খেলুন। প্রতিটি পদক্ষেপে, ম্যাচবাক্সগুলির সমস্ত বিষয়বস্তু আউটপুট করুন।
ইনপুট
- প্রোগ্রামটির শুরুতে একটি নম্বর বলে আপনি MENACE এর বিরুদ্ধে কয়টি গেম খেলতে চান
- তারপরে, MENACE এর প্রথম ঘুরার পরে, আপনি আপনার দুটি পদক্ষেপের স্ট্রিং হিসাবে নিজের পদক্ষেপটি ইনপুট করুন, প্রথম অক্ষরটি "এল", "আর", বা "এম" (বাম, ডান বা মাঝখানে) Y অক্ষকে উল্লেখ করে। তারপরে আপনি এক্স অক্ষটি উল্লেখ করে অন্য একটি অক্ষর (আবার "এল", "আর" বা "এম") ইনপুট করুন। সমস্ত চাল এবং গেমগুলির জন্য পুনরাবৃত্তি করুন।
আউটপুট
- প্রতিটি নতুন গেমের শুরুতে, "নতুন গেম" আউটপুট দেয়।
- প্লেয়ারের প্রতিটি পদক্ষেপের পরে, বোর্ডকে কোনও যুক্তিসঙ্গত ফর্ম্যাটে আউটপুট করুন। এটি দেখতে সুন্দর লাগবে না (যেমন বোর্ডের অবস্থানগুলিকে উপস্থাপন করে এমন অ্যারেগুলি ঠিক আছে)।
- প্লেয়ারের প্রতিটি পদক্ষেপের পরে, মেনেসিকে একটি পদক্ষেপ নেওয়া উচিত। MENACE এর সরানোর পরে বোর্ডটিকে আউটপুট দিন
- প্রতিটি গেমের পরে, সমস্ত 304 ম্যাচবক্সের সামগ্রীগুলি আউটপুট করুন। জপমালা একটি বর্ণ, রঙ, চরিত্রের নাম বা আপনার পছন্দ মতো স্ট্রিং বা পূর্ণসংখ্যার (কোনও পয়েন্টার, বেনাম ফাংশন ইত্যাদি) দ্বারা প্রতিনিধিত্ব করতে পারে ।
বিধি
- এটি কোড-গল্ফ , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
- MENACE এর প্রতিক্রিয়া দেখে আমার অবশ্যই চালিত ইনপুট করতে সক্ষম হব। না 'আপনার সমস্ত পদক্ষেপগুলি এই ফাংশনে প্রবেশ করুন এবং গেমটি কীভাবে কার্যকর হয় তা দেখুন'।
- বোর্ড অবশ্যই গেমসের মধ্যে সাফ করতে হবে।
- ম্যাচবক্সগুলি অবশ্যই গেমগুলির মধ্যে পরিষ্কার করা উচিত নয় (এটি মেশিন লার্নিংটিকে পুনরায় সেট করবে)
- আপনার অবশ্যই 304 ম্যাচবক্স থাকতে হবে। যে কোনও ব্যক্তি সমস্ত 19,683 ম্যাচবক্সের সাহায্যে এই অ্যালগরিদমটি প্রয়োগ করতে পারে, তবে শিখতে ধীর গতির (কারণ এটির জন্য প্রচুর প্রয়োজন দরকারী সামগ্রী সহ পেতে গেম )।
- আউটপুটটি যেকোন যুক্তিসঙ্গত ফর্ম্যাটে থাকতে পারে এবং পিপিসিজি মান অনুযায়ী ইনপুট নেওয়া যেতে পারে (যতক্ষণ না এটি নিয়ম 2 মেনে চলে)। আপনার যদি ইনপুট ফর্ম্যাটটি সামঞ্জস্য করতে হয় (' ইনপুট ' বিভাগে বর্ণিত ) তবে এটি যতক্ষণ তা বোঝায় ততক্ষণ ঠিক।
- যখন কোনও খেলোয়াড় জিতে যায় (একটি সারিতে তিনটি ত্রিভুজের, অনুভূমিকভাবে বা উল্লম্বভাবে পেয়ে) বা যদি কোন ড্র হয় (বোর্ড পূর্ণ থাকে এবং বিজয়ী না হয়)
- যদিও মেন্যাসে সম্ভাব্য পদক্ষেপগুলি করা দরকার (এবং প্রতিটি ম্যাচবক্সের ভিতরে কেবল সম্ভাব্য পুঁতি থাকতে পারে), চ্যালেঞ্জের জন্য আপনাকে ব্যবহারকারীর ইনপুটটিকে বৈধতা দেওয়ার দরকার নেই। যদি তারা কোনও ভুল টাইপ করে থাকে তবে আপনার প্রোগ্রামটি যা কিছু করতে পারে (সম্পূর্ণ পাগল হয়ে যায়, ত্রুটি ছুঁড়ে ফেলা ইত্যাদি) - আপনি ধরে নিতে পারেন ইনপুটটি সঠিক।
[[0, 2, 6], [4, 8, 4, 3, 3], [7, 7, 7, 7, 7, 7, 7, 8], [1], ... [3, 3, 5, 4]]
।