با مسألهٔی 8-وزیر در شطرنج آشنا هستید: هشت وزیر در صفحه شطرنج باید به گونهای گذاشته شوند که هیچ کدام دیگری را مورد حمله قرار ندهد. نسخههای جالب مختلفی از این مسأله هست.
در این تمرین حالت سادهتری را مدنظر داریم: قرار دادن 8 قلعه (رخ یا Rook) به گونهای که هیچ کدام دیگری را مورد حمله قرار ندهد. میدانید که حرکت رخ در صفحه به صورت عمودی و افقی هست.
پاسخ این مسأله آسان است. هر جایگشت از اعداد از یک تا 8 میتواند یک پاسخ ممکن را مشخص نماید.
اما در اینجا مایلیم مسأله را با مشتقگیری خودکار در پای تورچ، مشابه با تمرین پازل ریاضی که پیش از این داشتید حل کنیم.
تابع هدفی باید بنویسید که در حالتی که در هر سطر و در هر ستون ماتریس فقط یک عدد 1 وجود داشته باشد و سایر عناصرش صفر باشد، کمینه باشد. سپس مشابه مسأله قبلی آنرا حل کنید.
هر یک از دانشجویان به تنهایی تکلیفهای عملی را انجام دهد.
برنامه شما به گونهای باشد که برای هر ماتریس NxN کار کند که N طول ضلع صفحه شطرنج است و به فرض خیلی بزرگ نیست، مثلا حداکثر 10. نیازی به گرفتن از ورودی نیست. همینکه N مقدار داده بشه کافی هست.
با دستور زیر میتونین یک ماتریس NxN با اعداد تصادفی با توزیع یکنواخت داشته باشین
torch.rand([N, N])
و اگر ماتریس بالا A باشد، مشتقگیری بر اساس ماتریس میتواند انجام شود و نیازی به مشتقگیری از تک تک عناصرش به صورت مجزا نیست.
خروجی را با یک کتابخانه مانند بسته زیر به صورت زیبا نشان دهید:
niklasf/python-chess: A chess library for Python, with move generation and validation, PGN parsing and writing, Polyglot opening book reading, Gaviota tablebase probing, Syzygy tablebase probing, and UCI/XBoard engine communication (github.com)
اختیاری: روند کار را هم در صورت امکان به صورت شماتیک با کتابخانه فوق در هر دور نمایش دهید، به گونهای که مثلا مشخص بشه در هر 10 اپک وضعیت صفحه چگونه تغییر میکند تا به جواب نهایی برسید.
این آگهی از وبسایت کارلنسر پیدا شده، با زدن دکمهی تماس با کارفرما، به وبسایت کارلنسر برین و از اونجا برای این شغل اقدام کنین.
هشدار
توجه داشته باشید که دریافت هزینه از کارجو برای استخدام با هر عنوانی غیرقانونی است. در صورت مواجهه با موارد مشکوک، با کلیک بر روی «گزارش مشکل آگهی» به ما در پیگیری تخلفات کمک کنید.