درباره موفقیت كامپیوتر در شكست دادن قهرمانان بازی شطرنج حتماً شنیدهاید. به راستی كامپیوتر چگونه شطرنج بازی میكند؟ این سؤال جالبی است. به نظر من بهترین پاسخ را میتوانید از برنامهنویسان بازیهای شطرنج كامپیوتری بپرسید. این مقاله تحقیقی در همین زمینه است. در اینجا كوشیدهام مدل برنامهنویسی شطرنج و شیوه تجزیه و تحلیل بازی از نگاه كامپیوتر را تشریح كنم. اطلاعاتی را كه در اینجا آوردهام، همه از سایت برنامهنویسان بازیهای كامپیوتری، بهویژه برنامهنویسان بازی شطرنج، استخراج شدهاند.
● چرا بررسی شطرنج كامپیوتری؟
ممكن است بپرسید بررسی آناتومی یك برنامه شطرنج اصلاً چه فایده
ای دارد؟ پاسخ را در دو سه نكته میتوانم خلاصه كنم. در وهله نخست، بررسی آناتومی یك بازی شطرنج از لحاظ تئوری هوشمصنوعی میتواند نمونه بسیار جالبی از كاربرد این علم تلقی شود. در بسیاری مواقع وقتی گفته میشود هوش مصنوعی، برای بسیاری از مردم واقعاً سؤال است كه این هوش از كجا میآید و چگونه شكل میگیرد. شطرنج یكی از جاهایی است كه میتوانید ببینید چگونه یك سری معادلات ریاضی كه ظاهری ساده، اما باطنی پیچیده دارند، به تدریج در پیچ و خم پردازشهای بعدی مبنای هوشمندی ماشین۱ را فراهم میكنند.
گذشته از این، بررسی مكانیزم شطرنج
بازیِ كامپیوتر یك موضوع تأملبرانگیز است و به شما نوعی بینش شبه فلسفی درباره تفاوت رویكرد انسان و ماشین نسبت به نوع خاصی از معماها میدهد. ضمن اینكه، دریچه ذهن شما را به روی برخی اشتباهات رایج ذهن انسان بازمیكند كه منجر به تصمیمگیریهای اشتباه و در نتیجه پیامدهای نامطلوب میشوند. از این رهیافت میتوانید ببینید كه از دیدگاه علمی یكی از نظریههای مربوط به مبنای اشتباهكردن انسان هنگام تصمیمگیری میان گزینههای مختلف چیست.
آگاهی از این مسئله می
تواند برای هركارشناس كامپیوتر، آن هم در دنیایی كه یك اشتباه كوچك میتواند به مدد شبكه جهانی اطلاعات در عرض چند ثانیه سراسر كره زمین را درنوردد و همچون ویروسهای مخرب كامپیوتری، پیامدهای وخیمی را ایجاد كند، مهم و آموزنده باشد.
این موضوع نكته دیگری را نیز روشن می
كند و آن اینكه، چگونه برنامهنویسان باهوشی كه توسعهدهنده مدل برنامهنویسی شطرنج بودهاند، به منطق این اشتباهات پیبردهاند و سعی كردهاند به كامپیوتر یاد دهند با پیشبینی این اشتباهات، از انسان پیشدستی كند. جالب اینجاست كه در مدل برنامهنویسی شطرنج، دغدغه كامپیوتر نه سرمایهگذاری روی اشتباهات حریف، بلكه چارهجویی در مورد اشتباهات احتمالی خودش است! از آن جالبتر اینكه، بازی شطرنج جزء بازیهای اصطلاحاً <با اطلاعات كامل> طبقهبندی میشود. بازیهایی كه هر دو طرف دستشان برای یكدیگر رو شده است.
بنابراین، وقتی می
فهمیم كه بهرغم اطلاع طرفین از وضعیت مهرههای یكدیگر، این همه پیچیدگی در تجزیه و تحلیل وضعیتهای پیش رو وجود دارد، میتوانید حدس بزنید علت این همه ناكامی آدمیزاد در پیشبینی سرنوشت بسیاری از تحولات چیست؛ آن هم هنگامی كه دست حریف برایش رو نیست.
در نهایت، مطالعه و بررسی مدل برنامه
نویسی شطرنج یك تمرین فكری خوب و آموزنده برای همه برنامهنویسان ماجراجوست و می تواند ذهن كاوشگر آنان را بیش از پیش ورزیده كند. به قول معروف، هم فال است و هم تماشا!
● اثر افق

كالبد یك نرم
افزار شطرنج از قسمتهای مختلفی تشكیل شده است كه كمی جلوتر خواهم گفت، اما اجازه بدهید برای ورود به بحث، شما را با یكی از چالشهای همیشگی برنامهنویسان شطرنج آشنا كنم تا ببینید كامپیوتر برای موفقیت در یك بازی شطرنج، با چه معماهای غامضی دست و پنجه نرم میكند.
لابد شنیده
اید كه كامپیوتر هنگام شطرنج بازی تا چند مرحله جلوتر را در ذهن خودش مرور میكند و پیامدهای هر یك از حركتهای فرضی را در هر مرحله ارزیابی میكند. واقعاً هم همینطور است.
حالا فرض كنید یك نرم
افزار طوری برنامهریزی شده است كه تا هفت مرحله جلوتر را میتواند محاسبه و ارزیابی كند. تصور كنید یك كامپیوتر با استفاده از چنین الگویی ناگهان متوجه شود كه ممكن است در پنج نوبت دیگر مُهرهِ وزیرِ خودش را از دست بدهد و حتماً میدانید مهره وزیر چقدر مهم است.
بنابراین، باید جایی در منطق نرم
افزارِ شطرنج، به كامپیوتر گفته شده باشد كه در تصمیمسازی برای حركت بعدی خودت <به وضعیت مهره وزیر اولویت بده.> البته از لحاظ تئوریِ مدرن شطرنج، میتوان پرسید كه آیا واقعاً ارزش یك مهره وزیر در سراسر یك بازی یكسان است؟ و آیا باید یك شطرنج باز در هر شرایطی به حفظ جان این مهره بیش از هر مهره دیگر اهمیت بدهد؟
اگر پاسخ منفی باشد، وضعیت خیلی پیچیده
تر خواهد شد، ولی فعلاً بیایید برای ساده شدن صورت مسئله، فكر كنیم كه منطق تصمیمسازی كامپیوتر چنین باشد.
در آن صورت نتیجه بدیهی این منطق این خواهد بود كه كامپیوتر شروع به بررسی سناریوهای مختلف نجات جان وزیر در پنج نوبت دیگر كند و در این میان به این نتیجه برسد كه بهترین گزینه این است كه مهره اسب خود را در همین نوبت قربانی كند تا با افزودن فلان حركت در نوبت سوم، دستیابی حریف به این هدف را دست كم تا نوبت هشتم به تعویق بیندازد. اما مشكل اینجاست كه این كامپیوتر می
تواند تا هفت نوبت جلوتر را محاسبه كند. بنابراین، عملاً تا یك دست دیگر بازی نكند، نمیتواند پیشبینی كند در نوبت هشتم چه اتفاقی خواهد افتاد.
از دیدگاه كامپیوتر، عدم روِیت یك معضل در افق دیدش به معنی نبودن آن معضل است. بنابراین، وقتی با انجام
دادن یك حركت میتوان آن معضل را تا عمق هفت مرحله از میدان دید خارج كرد، شاید به این معنی باشد كه مشكل حل شده است، ولی چنین نیست. چون در همان گام اول یك اسب فدا میشود، یك نوبت بازی انجام میشود و دوباره همان مشكل (تهدید شدن وزیر) در افق دید كامپیوتر ظاهر میشود. پس مشكل حل نشد و كامپیوتر اشتباه كرد.
در شطرنج كامپیوتری كه اولین بار توسط هانس برلینر مطرح شد، از این جهت جالب است كه به
گونه طنزآمیزی تبلور ماهیت بعضی از خطاهای انسانی نیز هست. به راستی خیلی از ما آدمها دقیقاً به دلیل همین كوتهبینی، اشتباه میكنیم. یعنی بارها در زندگی تصور میكنیم وقتی مشكلی در افق دیدمان نیست، یعنی آن مشكل وجود ندارد؛ در حالی كه مشكل وجود دارد و كافی است یك گام به جلو برداریم تا آن را ببینیم، ولی تا آن گام را برنداریم، از دیدنش ناتوان هستیم. درست مثل زمانی كه یك بطری نوشابه گازدار را ناگهان بدون حضورذهن باز میكنیم و تازه وقتی آن را باز كردیم و گازش بیرون جهید و پیراهنمان را كثیف كرد، یادمان میافتد كه باید در بطری را آرام باز میكردیم.
اولین درسی كه از اثر افق می
توان گرفت این است كه پیدا كردن وضعیتی كه نرمافزار بتواند قدرت نسبی نیروها را در وضعیت كنونی سبك و سنگین كند، اصلاً خیلی مهم نیست؛ زیرا این ارزیابی ماهیت پویا بودن نیروها را در طول زمان درنظر نگرفته است. ارزیابی كنونی به درد آرایش كنونی میخورد، ولی چون لحظه بعد آرایش نیروها عوض میشود، ارزیابی كنونی شاید به كلی بیهوده باشد!!
به زبان ریاضیات مهندسی، می
توان گفت كه وقتی شرایط اولیه یك معادله ریاضی ثابت باشد، یك كامپیوتر میتواند این معادله را هرچند هم پیچیده باشد، به سادگی حل كند. اما اگر بلافاصله در ثانیه بعدی شرایط اولیه تغییر كند، آن هم تغییری كه خودش تابعی از چگونگی اولین برخورد شما با معادله است، در آن صورت حل این معادله ممكن است از لحاظ نظری تا بینهایت به تعویق بیفتد.
درس دیگری كه از این پدیده می
توان گرفت این است كه دنبال كردن خط سیر تحولات در هرجهت تا عمق x مرحله كار بیهودهای است. بعضی از مسیرها مهمترند. این مسیرها را باید تا عمق مثلاً ده یا پانزده نوبت بازی دنبال كرد و بعضی دیگر را باید تا عمق پنج مرحله دنبال و بعد از آن را رها كرد. اشتباه است اگر همه مسیرها را تا عمق مثلاً هفت نوبت دنبال كنیم. در این صورت چگونه باید تشخیص دهیم كدام مسیر اهمیت استراتژیك بیشتری دارد و كدامیك از مسیرها كم اهمیتتر هستند؟
این چیزی است كه یك انسان هوشمند گاهی به صورت خودآگاه و گاهی ناخودآگاه انجام می دهد. به همین دلیل وقتی مثلاً شیئی را در اتاقمان گم می
كنیم، تمام اتاق را به شعاع سه متر زیر و رو نمیكنیم. این كار نادرست است. پس با خود میگوییم كجاها را باید دقیقتر بگردیم؟ كجاها را باید یك نگاه سطحی بیندازیم؟ شما از كجا میفهمید برخی مناطق داخل اتاقتان اهمیت بیشتری برای پیدا كردن یك شی گمشده دارد؟