আমি ধরে নিলাম আপনি মিন-ম্যাক্স, গাছ এবং ছাঁটাই, হিউরিস্টিক এবং অন্যান্য বেসিক সম্পর্কে ইতিমধ্যে জানেন এবং আমি এখানে যা লিখছি তা কেবলমাত্র কিছু বিবরণ যা অবমূল্যায়ন করা হতে পারে।
আমি কোম্পানির সাথে একটি বন্ধু কখনও কখনও আগে আমাদের নিজস্ব দাবা ইঞ্জিন লিখেছিলেন। আমি আমাদের কিছু সমস্যা এবং ধারণা ভাগ করে নিয়েছি এবং আমি আশা করি আপনি এগুলি দরকারী বলে মনে করেন।
যেহেতু আমরা উভয়ই জাভা প্রোগ্রামার ছিলাম আমাদের ভাষাটি আমাদের জাভা হতে পরিণত করেছিল এবং আমরা একটি অবজেক্ট ওরিয়েন্টেড পদ্ধতির সাথে শুরু করি। টুকরাগুলি বস্তু ছিল, বোর্ড ছিল বস্তু, ফাইল এবং র্যাঙ্ক (দাবা সাহিত্যে সারি এবং কলাম) বস্তু ছিল। এবং এটি ভুল ছিল। ওভারহেডটি বিশাল ছিল এবং প্রোগ্রামটি অনুসন্ধান ট্রিতে আরও 2 টি চাল (4 টি প্লাই) আরও যেতে লড়াই করছিল।
সুতরাং কিছু অনুসন্ধানের সাথে আমরা একটি উজ্জ্বল ধারণাটি শেষ করেছিলাম (যদিও আমাদের নয়!): টুকরো টুকরোকে প্রতিনিধিত্ব করে এবং দীর্ঘ সংখ্যার (bit৪ বিট) আকারে বোর্ড। এটি বোঝা যায় কারণ দাবা বোর্ডের 64 স্কোয়ার রয়েছে। বাকিগুলি কিছুটা ওয়াইজ অপারেশন ছিল (সিপিইউর খুব কাছে চলেছিল = অত্যন্ত দ্রুত)। উদাহরণস্বরূপ, একটি বাইনারি bit৪ বিট পূর্ণসংখ্যার বিবেচনা করুন যাতে এতে বোর্ডগুলি স্কোয়ারগুলি উপস্থাপন করছে যা আপনার টুকরা আক্রমণ করতে পারে। এখন আপনি যদি এই জাতীয় দুটি সংখ্যার মধ্যে একটি যৌক্তিক "এবং" সম্পাদন করেন তবে একটি শূন্য-ফলাফল বলে যে আপনার আক্রমণকারীদের সাথে একটি বর্গ রয়েছে। দাবা বোর্ড এবং টুকরো উপস্থাপন করার বিভিন্ন উপায় রয়েছে, সুতরাং:
1 - আপনার বোর্ড উপস্থাপনা সম্পর্কে সিদ্ধান্ত নিন
তারপরে আপনার দরকার এবং ডাটাবেস খোলার। দাবা খোলার কোনওভাবেই পিঁপড়ে সমাধান করা হয় এটির খাতা খোলার এবং খোলার পরামর্শ দেওয়া হয়। এক্ষেত্রে, ব্লিটজ গেমগুলিতে আপনার অতিরিক্ত সময় রয়েছে।
2 - নিজেকে একটি খোলার বইটি সন্ধান করুন।
আমরা এগুলি করেছিলাম, তবুও আমরা ভাল হতে অনেক দূরে ছিলাম:
3 - একটি ভাল দাবা ইঞ্জিন 6 টি চাল (12 প্লাই) এগিয়ে দেখতে সক্ষম হওয়া উচিত।
সুতরাং আমরা তখন যা করেছি, তা ছিল ডেড টাইম (যদি এটি হিউম্যান বনাম কম্পিউটার ইঞ্জিন) ব্যবহার করে।
4 - প্রতিপক্ষ যখন আপনার গাছের কিছু স্তর তৈরি করতে ভাবছে তখন সময়টি ব্যবহার করুন।
এবং এখনও আমরা 12 প্লিজ থেকে অনেক দূরে ছিলাম। আরও অধ্যয়ন দ্বারা, আমরা কিছু কৌশল আবিষ্কার করি! উদাহরণস্বরূপ গাছের একটি প্লাই এড়িয়ে পরবর্তী পরের প্লাই থেকে শুরু করার পরামর্শ দেওয়া হয়েছিল (যেমন কোনও প্রতিপক্ষ নেই)। ধারণাটি হ'ল যদি কোনও পদক্ষেপ চূড়ান্ত বোকা হয় তবে কেন সময় নষ্ট করা উচিত এবং সেই পদক্ষেপের বিরোধীদের কী প্রতিক্রিয়া রয়েছে তা দেখুন। তবে, একটি ভাল ইঞ্জিনকে ইডিয়োটিক মুভ এবং জিনিয়াস কুইন বলিদানের মধ্যে পার্থক্য করতে সক্ষম হওয়া উচিত।
5 - এই নির্দিষ্ট সমস্যা (দাবা) জন্য প্রোগ্রামিং কৌশল শিখুন ।
আমি এবং আমার বন্ধু, এই অবস্থায় এখনও খারাপ ছিলাম: / আমরা কী করতে পারতাম - এবং আমরা আংশিকভাবে করতাম- গণনা করা অবস্থানগুলি সংরক্ষণ করা। আপনি যদি কোনও অবস্থান গণনা করেন তবে ভবিষ্যতের জন্য এটি সংরক্ষণ করুন! অনুসন্ধান গাছের লুপগুলির জন্য একই। পয়েন্টটি ছিল দক্ষতার সাথে সংরক্ষণ / পুনরুদ্ধার:
6 - আপনার উত্পন্ন ডেটা সংরক্ষণ করুন ... দক্ষতার সাথে!
এবং পরিশেষে:
7 - সর্বাধিক অপ্টিমাইজেশন সহ কোড।
সিপিইউ সময় এবং মেমরি উভয় ক্ষেত্রেই এই সমস্যাটি অত্যন্ত ব্যয়বহুল। আপনার কোডটি খুব দক্ষতার সাথে লেখা খুব গুরুত্বপূর্ণ। মনে রাখবেন যে আমরা 35 এর শাখা ফ্যাক্টরের কথা বলছি This এর অর্থ একটি অর্থহীন "যদি" আপনার তাত্ত্বিকের 3.3792205e+18
কোথাও কোথাও আপনার অনুসন্ধানের গাছের গভীরে থাকলে "অকেজো" রূপান্তরিত হতে পারে ।
দাবা প্রোগ্রামিং একটি খুব আকর্ষণীয় চ্যালেঞ্জ এবং আপনি আপনার প্রোগ্রামিং ক্ষমতা একটি গুরুতর পরীক্ষার মধ্যে রাখতে পারেন যে সময়। আরও কয়েকটি পয়েন্ট রয়েছে যা আমি প্রস্তাব করতে পারি তবে আমি নিশ্চিত যে আপনি সেগুলি নিজেই আবিষ্কার করবেন। আরও অনেক পয়েন্ট যা আমি জানি না তবে আপনি সেগুলি ইন্টারনেটে খুঁজে পেতে পারেন!
গুড লাক এবং মজা আছে!
PS আমি জাভাস্ক্রিপ্ট খুব ভাল জানি না তবে কিছু আমাকে সমস্যার অসুবিধার ভিত্তিতে বলছে, সম্ভবত, সি ++ যে সমস্ত অফার করতে পারে তা বিবেচনা করে জাভাস্ক্রিপ্টটি ফেলে দেওয়া এবং সি ++ এ করা ভাল।