مسئلهای که باید حل میکردم
پیش از رفتن سراغ تاکتیک پیچیده، یک خط پایهٔ قابل توضیح میخواستم. ربات باید کارت مجاز بدهد و حداقل تفاوت شریک و حریف را بفهمد.
پیادهسازی در نسخهٔ فعلی
HokmBasicBotCardStrategy.ChooseCard از HokmLegalCardValidator کارتهای مجاز را میگیرد. آغاز دور کارت کمهزینه میخواهد؛ وقتی شریک جلو هست کارت کمقدرت و وقتی حریف جلو هست کمترین کارت برنده را جستوجو میکنه.
تصمیم و هزینهٔ طراحی
اگر بردن ممکن نباشد، انتخاب کمهزینه ادامه مییابد. HokmBotCardSelectionReason علت را گزارش میکنه و انتخاب از ردشدن ورودی جدا هست.
مرزهای فعلی
این راهبرد حافظهٔ پیشرفته یا جستوجوی آینده نداره. از اسم Bot نمیتوانم مهارت انسانی یا درصد برد خاص نتیجه بگیرم؛ ارزش آن بیشتر در داشتن یک رفتار پایهٔ قابل فهم هست.
انتخاب کمهزینه با دلیل قابل خواندن
در این بات پایه، کمهزینهترین کارت لزوماً پایینترین رتبهٔ کل دست نیست. CompareCardForLowestPower ابتدا حکم بودن را مقایسه میکنه و کارت غیرحکم را در اولویت حفظ هزینهٔ کمتر میگذارد؛ بعد قدرت رتبه و در تساوی، ترتیب خال را میسنجد. این تصمیم یک سیاست مشخص برای نگه داشتن حکم هست. وقتی بات آغازکنندهٔ دور هست، ChooseLowestSafeCard همین مقایسه را استفاده میکنه. واژهٔ Safe در نام متد نباید به معنای تضمین برد تعبیر بشه؛ روش پایه هنوز شواهد خالی بودن خال حریف یا خطر آینده را مدل نمیکنه.
اگر همتیمی فعلاً برنده باشد، بات همان انتخاب کمهزینه را پیشنهاد میکنه. اگر حریف برنده باشد، ChooseLowestWinningCard تمام کارتهای مجاز را بررسی میکنه و فقط گزینههایی را نگه میدارد که CanCardBeatCurrentWinner میپذیرد. در این مقایسه، حکم میتواند غیرحکم را ببرد و غیرحکم نمیتواند حکم حاضر را شکست دهد؛ در باقی حالتها خال آغاز و قدرت رتبه تعیینکنندهاند. این منطق برندهٔ فعلیِ دور ناقص را میسنجد، نه برندهٔ قطعی پس از بازی همهٔ نفرات. هنوز ممکنه بازیکن بعدی کارت بات را شکست دهد.
ChooseCard برای ورودی ناقص، پیکربندی نامعتبر، دور کامل و نبودن کارت مجاز نتیجهٔ Rejected میدهد. در مسیر موفق، HokmBotCardSelectionReason توضیح میدهد انتخاب مربوط به آغاز دور، حمایت از شریک، بردن حریف یا دور انداختن کارت بوده. این خروجی برای بررسی رفتار ارزشمندتر از دیدن صرف یک کارت هست، چون تغییر سیاست را میشود به شاخهٔ تصمیم نسبت داد. با این حال، ChooseCard کارت را از دست حذف نمیکنه و نوبت را جلو نمیبرد. پیشنهاد استراتژی باید از مسیر اجرای معتبر عبور کنه؛ تصمیم هوش مصنوعی جای اعمال قانون بازی را نمیگیرد.
چیزی که از این مرحله یاد گرفتم
برای من، چنین رباتی یک نقطهٔ مقایسه بود. اضافهکردن هوشمندی بعدی باید نشان دهد کدوم تصمیم را بهتر میکنه، نه اینکه قانونیبودن کارت را دوباره از نو تعریف کنه.
مثال عملی ربات قانونی حکم
اگر بخواهی ربات قانونی حکم را در یک پروژهٔ کوچک بررسی کنی، بهتر است از یک موقعیت محدود شروع کنی. ربات در هر نوبت ابتدا فهرست کارتهای مجاز را میگیرد و بعد یک گزینه را انتخاب میکند. ورودی را ثابت نگه دار و نتیجهٔ مورد انتظار را پیش از اجرای نسخه بنویس. این کار کمک میکند تفاوت میان رفتار منطقی و چیزی که صرفاً روی صفحه دیده میشود روشن بماند. سناریوی این بخش آموزشی است و ادعای نتیجهٔ واقعی یک آزمایش روی کاربران دلو ندارد.
خطای رایج و علت آن
تلاش برای هوشمندی پیش از کامل شدن اعتبارسنجی، خطای قانون را شبیه تصمیم ضعیف نشان میدهد. این خطا معمولاً وقتی پنهان میماند که فقط مسیر موفق و ظاهر نهایی را ببینیم. برای پیدا کردن علت، آخرین وضعیت درست را از نخستین وضعیت نادرست جدا کن و ببین تغییر دقیقاً در کدام مرز رخ داده است. کیفیت تصمیم مرحلهٔ بعدی است؛ نخست باید همهٔ حرکتها قانونی باشند. اگر این تفاوت در قرارداد مشخص نباشد، اصلاح یک نشانه ممکن است همان مسئله را در بخش دیگری دوباره ایجاد کند.
چطور نتیجه را بررسی کنیم؟
ربات نباید با داشتن خال شروع کارت نامرتبط بدهد، حتی وقتی گزینهٔ سودآور به نظر میرسد. اجرای یکباره برای نتیجهگیری کافی نیست؛ یک بار مسیر معمول و بار دیگر همان موقعیت را با ورودی مرزی یا تکرار اقدام بررسی کن. اگر نتیجه فرق دارد، ورودی و شرایط اجرا را همراه خروجی نگه دار تا مقایسه قابل بازسازی باشد. جدول زیر خلاصهٔ مشخصات همین سناریو است و برای ثبت نتیجهٔ بررسی به کار میآید.
| بخش بررسی | آنچه باید ثبت شود |
|---|---|
| موقعیت آزمایشی | ربات در هر نوبت ابتدا فهرست کارتهای مجاز را میگیرد و بعد یک گزینه را انتخاب میکند. |
| ریسک اصلی | تلاش برای هوشمندی پیش از کامل شدن اعتبارسنجی، خطای قانون را شبیه تصمیم ضعیف نشان میدهد. |
| روش بررسی | ربات نباید با داشتن خال شروع کارت نامرتبط بدهد، حتی وقتی گزینهٔ سودآور به نظر میرسد. |
| مرز نتیجهگیری | کیفیت تصمیم مرحلهٔ بعدی است؛ نخست باید همهٔ حرکتها قانونی باشند. |
پرسشهای کاربردی دربارهٔ ربات قانونی حکم
از کجا شروع کنم؟
از همان موقعیت محدود این مطلب شروع کن: ربات در هر نوبت ابتدا فهرست کارتهای مجاز را میگیرد و بعد یک گزینه را انتخاب میکند. ابتدا نتیجهٔ مورد انتظار را مشخص کن و بعد سراغ پیادهسازی یا ابزار برو. وقتی مسیر پایه قابل توضیح و بررسی شد، میتوان حالتهای بیشتری اضافه کرد. ساخت همهٔ حالتها از ابتدا، فهم علت خطا را سختتر میکند.
چه زمانی میتوانم بگویم این بخش درست کار میکند؟
زمانی که رفتار در موقعیت تعریفشده با قرارداد سازگار باشد و محدودیتهای آن روشن بمانند. ربات نباید با داشتن خال شروع کارت نامرتبط بدهد، حتی وقتی گزینهٔ سودآور به نظر میرسد. موفقیت در این آزمون دربارهٔ همان سناریو شاهد میدهد؛ از آن نمیتوان بدون بررسی دربارهٔ همهٔ دستگاهها، همهٔ قوانین محلی یا همهٔ حجمهای داده نتیجه گرفت. کیفیت تصمیم مرحلهٔ بعدی است؛ نخست باید همهٔ حرکتها قانونی باشند.
برای ادامهٔ همین موضوع، هستهٔ مشترک دلو؛ یک میز برای چند بازی و بازی دلو را ببین. زمینهٔ ساخت این پروژهها و معرفی سازنده در صفحهٔ کیان پاک نعمت آمده است.




