Big iT Blog

تراوشات ذهنی یه جوجه دانشجوی iT



نوشته های ماه اردیبهشت, ۱۳۸۸

رسم خوب اوج گرفتن

Posted by محمد رزاقی On اردیبهشت - ۱۰ - ۱۳۸۸ADD COMMENTS

عقاب وقتی می‌خواهد به ارتفاع بالاتری صعود کند، در لبه‌ی یک صخره، به انتظار یک اتفاق می‌نشیند!

می‌دانید اتفاق چیست؟ گردبادی که از رو‌به‌رو بیاید!

عقاب به محض این‌که ‌آمدن گردباد را حس‌کرد، بال‌های خود را می‌گشاید و اجازه می‌دهد ‌باد، او را با خود بلند کند.

عقاب به محض این‌که ‌آمدن گردباد را حس‌کرد، بال‌های خود را می‌گشاید و اجازه می‌دهد ‌باد، او را با خود بلند کند.

به محض این‌که طوفان قصد سرنگونی عقاب را کرد، این پرنده‌ی بلند‌پرواز، سر خود را به‌سوی آسمان بلند می‌کند و عمود بر طوفان می‌ایستد و مانند گلوله‌ی توپی، به سمت بالا پرتاب ‌می‌شود. او آن‌قدر با کمک باد مخالف، اوج ‌می‌گیرد تا به ارتفاع موردنظر برسد و آن‌گاه با چرخش خود به‌سوی قله‌ی موردنظر، در بالاترین نقطه‌ی کوهستان، مأوا می‌گزیند.

خوب به شیوه‌ی عقاب برای بالارفتن دقت کنید. او منتظر حادثه می‌ماند، حادثه‌ای که برای مرغ‌های زمینی، یک مصیبت و بلاست. او منتظر طوفان می‌نشیند تا از انرژی پنهان در گردباد، به نفع خود استفاده کند.

وقتی طوفان از راه می‌رسد، عقاب به‌جای زانوی غم بغل‌گرفتن و در کنج سنگ‌ها پناه‌گرفتن، جشن می‌گیرد و خود را به بالاترین نقطه‌ی وزش باد می‌رساند و از آن‌جا، سنگین‌ترین ضربه‌های گردباد را به نفع خود به‌کار می‌گیرد؛ عقاب از نیروی مهاجم، به نفع خویش استفاده می‌کند.

او نه‌تنها از نیروی مخالف نمی‌هراسد، بلکه منتظر آن نیز می‌نشیند‌ چراکه می‌داند این انرژی پنهان در نیروی مخالف است که می‌تواند او را به فضای بالاتر پرتاب کند.

انرژی اوج، به رایگان به کسی داده نمی‌شود. به‌طور اساسی در قانون بقای طبیعت، تقلای بقای نیروهای منفی، ایجاب می‌کند که تعداد نیروهای مخالف در زندگی، همیشه بیش‌تر از جریان موافق شما باشد.

پس اگر قرار است نیروی کمکی برای صعود شما حاصل گردد، قاعدتاً باید این نیرو از سوی مخالفان شما تأمین شود‌ بنابراین وقتی اتفاقی خلاف میل شما رخ‌می‌دهد، به‌جای عقب‌نشینی و سرخوردگی و واگذار کردن میدان، بی‌درنگ عقاب‌گونه جشن بگیرید و این رخداد ناخوشایند را به فال نیک گرفته و سعی‌کنید ‌در لابه‌لای این حادثه‌ی به‌ظاهر نامطلوب، خواسته و طلب موردنظر خود را پیدا کنید و با استفاده از نیروی مخالف، خود را به خواسته‌ی خویش نزدیک سازید.

نیرویی که قرار است باعث صعود شما در زندگی شود، توسط همان کسانی فراهم می‌شود که درحال حاضر، مخالف جدی شما هستند و قصد نابودی‌تان ‌را دارند.

این شما هستید که باید منتظر فرصت باشید و با تأمل و آمادگی و صبر و تدبیر به‌موقع، از این نیرو برای بالا‌رفتن و اوج‌گرفتن استفا‌ده کنید.

پس هرگز از وجود سختی و زحمت و نیروی مخالف در زندگی و کار و تحصیل و… خود گله‌مند نباشید. این‌ها مخازن انرژی پرواز شما هستند و اگر نباشند، شاید هرگز صعودی در زندگی‌تان حاصل نگردد.

به‌جای دست روی دست گذاشتن و از وجود مشکل‌ها و مخالفت‌ها گله‌‌کردن، کمی چشم دل خود را باز کنید و به حکمت پنهان در مصیبت‌ها و سختی‌های زندگی بیندیشید.

خالق هستی با هیچ موجودی حتی بدترین مخلوقات عالم هم دشمنی ندارد و اگر اتفاقی رخ‌می‌دهد که به‌ظاهر، آزاردهنده و ناخوشایند است، شک نکنید که او در هر‌چه رقم می‌زند، خیر و برکت و سعادت پنهان است. این ما هستیم که باید شجاعت رویارویی با جریان‌های مخالف را داشته باشیم و در وقت مناسب، بال‌های خود را بگشاییم و چرخش صعود خود به سمت بالا را تجربه کنیم.

با شنیدن شغل هر کس

Posted by محمد رزاقی On اردیبهشت - ۱۰ - ۱۳۸۸ADD COMMENTS

با شنیدن شغل هر کس می گوییم :

کارمند بانک: می تونی یه وام واسه ما جور کنی؟

مهندس کامپیوتر: من کامپیوترم ویروسی شده می‌تونی ویندوزم رو عوض کنی؟

پزشک عمومی: می‌تونی برای چهارشنبه که بچه‌ام نرفته مدرسه یه گواهی بنویسی؟

دندانپزشک: بیا این دندون عقل من رو نگاه کن ببین سیاه شده باید بکشمش یا پرشکنم؟

تعمیرکار ماشین: این ماشین من نمی‌دونم چرا هی صدای اضافی می‌ده، می‌تونی بیاییه نیگا بهش بندازی؟

بازیگر: واسه کسایی که میخوان بازیگر بشن چه نصیحتی دارید؟

مدیر یه جایی: می‌شه واسه این بهرام ما یه کار جور کنی؟

موبایل فروش: آقا این گوشی ۳۳۱۰ مارو می‌شه با یه گوشی دیگهعوض کنی؟

معلم: این حسن ما یه خورده تو ریاضی‌اش بازیگوشی می‌کنه می‌شه این پنج‌شنبه‌یقبل از امتحان ریاضی‌اش شام تشریف بیارین خونه ما سر راه این اتحادارو هم یه باربراش بگین؟

نماینده مجلس: این شهرام ما خیلی پسر گلیه می‌خواد زن بگیره می‌شه کمک کنیدمعافی این بچه‌رو بگیریم؟

کارمند سازمان سنجش: سؤالای کنکور سال بعد رو نداری؟

نویسنده: یه روز بیا سر فرصت قصه زندگیمو برات تعریف کنم کتابش کنی

معمار: این خونه مون باید کفش سرامیک شه و آشپزخونه‌اش اُپن، فکر می‌کنی چندروزه تموم می‌کنی؟

طلا فروش: الان اوضاع سکه چجوریاس؟

اقتصاد‌دان: بالاخره این بنزین رو می‌خوان چی‌کار کنن؟ یه سوال دیگه: می‌دونیاصلاً‌ درآمد نفتی ایران چقده؟

وکیل: من اگه بخوام حضانت بچه‌ام رو بگیرم چی‌کار باید بکنم؟

روان‌شناس: من الان یه چند وقتیه بچه‌ام شبا جاشو خیس می‌کنه، روزا همبینبش‌فعاله، شوهرم هم شیش ماهه خونه نیومده، این اواخر همه موهاشو کنده بود،‌خودمم فکر کنم افسردگی گرفتم، می‌خوام طلاق بگیرم، بعدشم خودکشی،‌سم هم تهیهکردم!!!!حالا چی‌کار می‌تونی برام بکنی؟

تایپیست: یه پایان نامه دارم ۹۵۸ صفحه اصلاً وقت ندارم تایپش کنم،‌ نظر توچیه؟

واقعاً چرا اینجوریه که همیشه با دیدن بقیه یاد درد و مشکلای خودمونمی‌افتیم؟

اشاره :
درباره موفقیت کامپیوتر در شکست دادن قهرمانان بازی شطرنج حتماً شنیده‌اید. به
راستی کامپیوتر چگونه شطرنج بازی می‌کند؟ این سؤال جالبی است. به نظر من بهترین
پاسخ را می‌توانید از برنامه‌نویسان بازی‌های شطرنج کامپیوتری بپرسید. این مقاله
تحقیقی در همین زمینه است. در اینجا کوشیده‌ام مدل برنامه‌نویسی شطرنج و شیوه تجزیه
و تحلیل بازی از نگاه کامپیوتر را تشریح کنم. اطلاعاتی را که در اینجا آورده‌ام،
همه از سایت برنامه‌نویسان بازی‌های کامپیوتری، به‌ویژه برنامه‌نویسان بازی شطرنج،
استخراج شده‌اند.

چرا بررسی شطرنج کامپیوتری؟
ممکن است بپرسید بررسی آناتومی یک برنامه شطرنج اصلاً چه فایده‌ای دارد؟ پاسخ را در دو سه نکته می‌توانم خلاصه کنم. در وهله نخست، بررسی آناتومی یک بازی شطرنج از لحاظ تئوری هوش‌مصنوعی می‌تواند نمونه بسیار جالبی از کاربرد این علم تلقی شود. در بسیاری مواقع وقتی گفته می‌شود هوش مصنوعی، برای بسیاری از مردم واقعاً سؤال است که این هوش از کجا می‌آید و چگونه شکل می‌گیرد. شطرنج یکی از جاهایی است که می‌توانید ببینید چگونه یک سری معادلات ریاضی که ظاهری ساده، اما باطنی پیچیده دارند، به تدریج در پیچ و خم پردازش‌های بعدی مبنای هوشمندی ماشین۱ را فراهم می‌کنند.

گذشته از این، بررسی مکانیزم شطرنج‌بازیِ کامپیوتر یک موضوع تأمل‌برانگیز است و به شما نوعی بینش شبه فلسفی درباره تفاوت رویکرد انسان و ماشین نسبت به نوع خاصی از معماها می‌دهد. ضمن این‌که، دریچه ذهن شما را به روی برخی اشتباهات رایج ذهن انسان بازمی‌کند که منجر به تصمیم‌گیری‌های اشتباه و در نتیجه پیامدهای نامطلوب می‌شوند. از این رهیافت می‌توانید ببینید که از دیدگاه علمی یکی از نظریه‌های مربوط به مبنای اشتباه‌کردن انسان هنگام تصمیم‌گیری میان گزینه‌های مختلف چیست.

آگاهی از این مسئله می‌تواند برای هرکارشناس کامپیوتر، آن هم در دنیایی که یک اشتباه کوچک می‌تواند به مدد شبکه جهانی اطلاعات در عرض چند ثانیه سراسر کره زمین را درنوردد و همچون ویروس‌های مخرب کامپیوتری، پیامدهای وخیمی را ایجاد کند، مهم و آموزنده باشد.

این موضوع نکته دیگری را نیز روشن می‌کند و آن این‌که، چگونه برنامه‌نویسان باهوشی که توسعه‌دهنده مدل برنامه‌نویسی شطرنج بوده‌اند، به منطق این اشتباهات پی‌برده‌اند و سعی کرده‌اند به کامپیوتر یاد دهند با پیش‌بینی این اشتباهات، از انسان پیش‌دستی کند. جالب اینجاست که در مدل برنامه‌نویسی شطرنج، دغدغه کامپیوتر نه سرمایه‌گذاری روی اشتباهات حریف، بلکه چاره‌جویی در مورد اشتباهات احتمالی خودش است! از آن جالب‌تر این‌که، بازی شطرنج جزء بازی‌های اصطلاحاً <با اطلاعات کامل> طبقه‌بندی می‌شود. بازی‌هایی که هر دو طرف دستشان برای یکدیگر رو شده است.

بنابراین، وقتی می‌فهمیم که به‌رغم اطلا‌ع طرفین از وضعیت مهره‌های یکدیگر، این همه پیچیدگی در تجزیه ‌و تحلیل وضعیت‌های پیش رو وجود دارد، می‌توانید حدس بزنید علت این همه ناکامی آدمیزاد در پیش‌بینی سرنوشت بسیاری از تحولات چیست؛ آن هم هنگامی که دست حریف برایش رو نیست.

در نهایت، مطالعه و بررسی مدل برنامه‌نویسی شطرنج یک تمرین فکری خوب و آموزنده برای همه برنامه‌نویسان ماجراجوست و می تواند ذهن کاوشگر آنان را بیش از پیش ورزیده کند. به قول معروف، هم فال است و هم تماشا!

اثر افق‌
کالبد یک نرم‌افزار شطرنج از قسمت‌های مختلفی تشکیل شده است که کمی جلوتر خواهم گفت، اما اجازه بدهید برای ورود به بحث، شما را با یکی از چالش‌های همیشگی برنامه‌نویسان شطرنج آشنا کنم تا ببینید کامپیوتر برای موفقیت در یک بازی شطرنج، با چه معماهای غامضی دست و پنجه نرم‌ می‌کند.

لابد شنیده‌اید که کامپیوتر هنگام شطرنج بازی تا چند مرحله جلوتر را در ذهن خودش مرور می‌کند و پیامدهای هر یک از حرکت‌های فرضی را در هر مرحله ارزیابی می‌کند. واقعاً هم همین‌طور است.

حالا فرض کنید یک نرم‌افزار طوری برنامه‌ریزی شده است که تا هفت مرحله جلوتر را می‌تواند محاسبه و ارزیابی کند. تصور کنید یک کامپیوتر با استفاده از چنین الگویی ناگهان متوجه ‌شود که ممکن است در پنج نوبت دیگر مُهرهِ وزیرِ خودش را از دست بدهد و حتماً می‌دانید مهره وزیر چقدر مهم است.

بنابراین، باید جایی در منطق نرم‌افزارِ شطرنج، به کامپیوتر گفته شده باشد که در تصمیم‌سازی برای حرکت بعدی خودت <به وضعیت مهره وزیر اولویت بده.> البته از لحاظ تئوریِ مدرن شطرنج، می‌توان پرسید که آیا واقعاً ارزش یک مهره وزیر در سراسر یک بازی یکسان است؟ و آیا باید یک شطرنج باز در هر شرایطی به حفظ جان این مهره بیش از هر مهره دیگر اهمیت بدهد؟

اگر پاسخ منفی باشد، وضعیت خیلی پیچیده‌تر خواهد شد، ولی فعلاً بیایید برای ساده شدن صورت مسئله، فکر کنیم که منطق تصمیم‌سازی کامپیوتر چنین باشد. در آن صورت نتیجه بدیهی این منطق این خواهد بود که کامپیوتر شروع به بررسی سناریوهای مختلف نجات جان وزیر در پنج نوبت دیگر کند و در این میان به این نتیجه برسد که بهترین گزینه این است که مهره اسب خود را در همین نوبت قربانی کند تا با افزودن فلان حرکت در نوبت سوم، دستیابی حریف به این هدف را دست کم تا نوبت هشتم به تعویق بیندازد. اما مشکل اینجاست که این کامپیوتر می‌تواند تا هفت نوبت جلوتر را محاسبه‌ کند. بنابراین، عملاً تا یک دست دیگر بازی نکند، نمی‌تواند پیش‌بینی کند در نوبت هشتم چه اتفاقی خواهد افتاد.

از دیدگاه کامپیوتر، عدم روِیت یک معضل در افق دیدش به معنی نبودن آن معضل است. بنابراین، وقتی با انجام‌دادن یک حرکت می‌توان آن معضل را تا عمق هفت مرحله از میدان دید خارج کرد، شاید به این معنی باشد که مشکل حل شده است، ولی چنین نیست. چون در همان گام اول یک اسب فدا می‌شود، یک نوبت بازی انجام می‌شود و دوباره همان مشکل (تهدید شدن وزیر) در افق دید کامپیوتر ظاهر می‌شود. پس مشکل حل نشد و کامپیوتر اشتباه کرد.

<اثر افق> در شطرنج کامپیوتری که اولین بار توسط هانس برلینر مطرح شد، از این جهت جالب است که به‌گونه طنزآمیزی تبلور ماهیت بعضی از خطاهای انسانی نیز هست. به راستی خیلی از ما آدم‌ها دقیقاً به دلیل همین کوته‌بینی، اشتباه می‌کنیم. یعنی بارها در زندگی تصور می‌کنیم وقتی مشکلی در افق دیدمان نیست، یعنی آن مشکل وجود ندارد؛ در حالی که مشکل وجود دارد و کافی است یک گام به جلو برداریم تا آن را ببینیم، ولی تا آن گام را برنداریم، از دیدنش ناتوان هستیم. درست مثل زمانی که یک بطری نوشابه گازدار را ناگهان بدون حضورذهن باز می‌کنیم و تازه وقتی آن را باز کردیم و گازش بیرون جهید و پیراهنمان را کثیف کرد، یادمان می‌افتد که باید در بطری را آرام باز می‌کردیم.

اولین درسی که از اثر افق می‌توان گرفت این است که پیدا کردن وضعیتی که نرم‌افزار بتواند قدرت نسبی نیروها را در وضعیت کنونی سبک و سنگین کند، اصلاً خیلی مهم نیست؛ زیرا این ارزیابی ماهیت پویا بودن نیروها را در طول زمان درنظر نگرفته است. ارزیابی کنونی به درد آرایش کنونی می‌خورد، ولی چون لحظه بعد آرایش نیروها عوض می‌شود، ارزیابی کنونی شاید به کلی بیهوده باشد!!

به زبان ریاضیات مهندسی، می‌توان گفت که وقتی شرایط اولیه یک معادله ریاضی ثابت باشد، یک کامپیوتر می‌تواند این معادله را هرچند هم پیچیده باشد، به سادگی حل کند. اما اگر بلافاصله در ثانیه بعدی شرایط اولیه تغییر کند، آن هم تغییری که خودش تابعی از چگونگی اولین برخورد شما با معادله است، در آن صورت حل این معادله ممکن است از لحاظ نظری تا بی‌نهایت به تعویق بیفتد.

درس دیگری که از این پدیده می‌توان گرفت این است که دنبال کردن خط سیر تحولات در هرجهت تا عمق x مرحله کار بیهوده‌ای است. بعضی از مسیرها مهم‌ترند. این مسیرها را باید تا عمق مثلاً ده یا پانزده نوبت بازی دنبال کرد و بعضی دیگر را باید تا عمق پنج مرحله دنبال و بعد از آن را رها کرد. اشتباه است اگر همه مسیرها را تا عمق مثلاً هفت نوبت دنبال کنیم. در این صورت چگونه باید تشخیص دهیم کدام مسیر اهمیت استراتژیک بیشتری دارد و کدام‌یک از مسیرها کم اهمیت‌تر هستند؟

این چیزی است که یک انسان هوشمند گاهی به صورت خودآگاه و گاهی ناخودآگاه انجام می دهد. به همین دلیل وقتی مثلاً شیئی را در اتاقمان گم می‌کنیم، تمام اتاق را به شعاع سه متر زیر و رو نمی‌کنیم. این کار نادرست است. پس با خود می‌گوییم کجاها را باید دقیق‌تر بگردیم؟ کجاها را باید یک نگاه سطحی بیندازیم؟ شما از کجا می‌فهمید برخی مناطق داخل اتاقتان اهمیت بیشتری برای پیدا کردن یک شی گمشده دارد؟

نوعی از هوش مصنوعی در بازی شطرنج به همین ترتیب شکل می‌گیرد. در واقع این هوش مصنوعی بیشتر معطوف به هوشمندی در انتخاب مسیرهای مهم‌تر برای دنبال کردن تحولات هستند. خوشبختانه چندین الگوریتم ریاضی جالب تاکنون عرضه شده‌اند تا بتوان اثر افق را شکست داد و ماورای آن را دید. بسط‌های ویژه Deep Blue از جمله همین الگوریتم‌ها هستند. (احتمالاً بلافاصله می توانید حدس بزنید چرا کامپیوتر Deep Blue سرانجام توانست کاسپاروف، قهرمان جهانی شطرنج، را شکست دهد.)

آناتومی یک نرم‌افزار شطرنج‌
اثر افق یک موضوع مهم در معماری فکری یک نرم‌افزار شطرنج است، ولی تمامِ مسئله‌ای نیست که کامپیوتر باید حل کند. اثر افق فقط یک جنبه از مشکلات تکنیک‌های جست‌وجو است و تکنیک‌های جست‌وجو یکی از چهار ستون اصلی هر نرم‌افزار شطرنج هستند. کامپیوتر باید به حل سه مسئله محوری دیگر نیز فکر کند: چیدمان مهره‌ها، تولید حرکت، و ارزیابی، به ترتیب سه موضوع مهم دیگری است که هر نرم‌افزار شطرنج باید به آن فکر کند و در ادامه نیز به بررسی این چهار رکن می‌پردازیم.

چیدمان مهره‌هاImage Hosting at ImageHosting.com
چیدمان مهره‌ها، عبارت است از تصویرسازی کامپیوتر از صفحه بازی. کامپیوتر چگونه باید صفحه بازی را <ببیند>؟ چگونه باید بفهمد این مهره‌ها کجا هستند؟

چگونه باید فهمید الان پنج مهره سیاه، هفت مهره سفید را تهدید می‌کنند؟ نرم‌افزارهای شطرنج عمدتاً از تکنیکی به نام bitboard برای دیدن صفحه بازی استفاده می‌کنند.

بیت بورد که ظاهراً اختراع شطرنج بازان شوروی سابق است، متشکل از یک آرایه ۶۴ بیتی است که متناظر با ۶۴ خانه شطرنج درنظرگرفته شده‌اند.

نرم‌افزارهای امروزی شطرنج از تعداد بسیار زیادی بیت‌بورد برای به تصویر کشیدن وضعیت مهره‌ها در ذهن خود استفاده می‌کنند. هر بیت از این آرایه ممکن است صفر یا یک باشد. وضعیت <یک> به معنی اشغال بودن خانه و وضعیت <صفر> به معنی خالی بودن خانه متناظر در صفحه شطرنج است. مثلاً یک بیت‌بورد ممکن است مربوط به خانه‌هایی باشد که توسط فیل سیاه اشغال شده‌اند. یک بیت بورد دیگر ممکن است مربوط به خانه‌هایی باشد که مهره‌های سفید،‌ مهره‌های سیاه را مورد حمله قرار داده‌اند و یک بیت بورد دیگر نشان دهد اسبی که در خانه ۴e قرار دارد، کدام خانه‌ها را زیر نفوذ خود دارد.

تولید حرکت‌
<تولید حرکت> قسمت دیگری از وظیفه نرم‌افزار است و منظور از آن این است که هنگامی که نوبت بازی به کامپیوتر می‌رسد، قبل از این که تصمیم بگیرد چه کار کند، باید بداند حرکت‌های مجاز او کدامند. در وهله نخست ممکن است به نظر برسد این کار آسان است، ولی به یاد بیاورید که هر مهره شطرنج قوانین حرکتی خاصی دارد. مثلاً شاهی که در حالت کیش است، قابل حرکت دادن نیست.

همچنین فیل به صورت قطری حرکت می‌کند. اسب به صورت حرف ‌L مانور می‌دهد. رخ حرکت‌های عمودی و افقی دارد و وزیر ترکیبی از قدرت حرکتی رخ و فیل را به صورت همزمان در اختیار دارد، اما از شیوه حرکتی منحصر به فرد اسب بی‌بهره است. بنابراین ترکیب قوانین حرکتی این مهره‌ها – آن هم با درنظر گرفتن این واقعیت که برخی خانه‌ها هم‌اکنون اشغال هستند – وضعیت پیچیده‌ای را ایجاد می‌کند که محاسبه همه حالت‌های مجاز، به شدت توان پردازشی کامپیوتر را طلب می‌کند.

خوشبختانه در مدل نرم‌افزاری شطرنج از قوانین این بازی چندین ساختار یا آرایش داده‌ای مختلف استخراج شده است که می‌توانید آن‌ها را نوعی از <محاسبات قبلاً انجام شده> بنامید. این‌ها در واقع الگوهای آرایشی خاصی هستند که می‌توانند مسیر محاسبه برای به دست آوردن تمام حرکت‌های مجاز بعدی را کوتاه کنند.

تکنیک‌های جست‌وجو
<تکنیک‌های جست‌وجو> قلب هر نرم‌افزار شطرنج هستند. منظور از <جست‌وجو> یافتن حرکت‌های خوب و مجاز بعدی است. مجاز بودنشان در مرحله تولید حرکت شناسایی شده است و ارزیابی میزان خوب یا بد بودن این حرکت‌ها و سرانجام انتخاب یکی از آن‌ها می‌ماند. این کار به واقع مشکل است. چنان که دیدید، اثر افق یکی از مسائلی است که باید حل شود. جست‌وجو در پایه‌ای‌ترین شکل آن با معادله‌ای به صورت b به توان n توصیف می‌شود که در آن b اصطلاحاً فاکتور انشعاب و n عمق حرکت است.

فاکتور انشعاب تعداد حرکت‌های مجاز از سوی هر دو حریف در هر نوبت بازی است و عمق عبارت از تعداد نوبت‌هایی است که قرار است به ارزیابی حرکت‌های طرفین بپردازیم. بنابراین، نتیجه این معادله یک منحنی نمایی است که به سرعت رشد می‌کند و تنوع فوق‌العاده زیادی را در انواع حالت‌های ممکن به وجود می‌آورد. خوشبختانه الگوریتم‌های خیلی خوبی برای محاسبه انواع حالت‌های پیش رو ابداع شده‌اند.

البته این الگوریتم‌ها برای رویارویی با مقولاتی مانند اثر افق طراحی نشده‌اند، بلکه صرفاً مسیر ارزیابی حالت‌های مختلف سود و زیان انجام دادن انواع حرکت‌های مجاز را کوتاه می‌کنند. از جمله الگوریتم‌های موفق می‌توان به الگوریتم نگا اسکوت، الگوریتم MTD)f) و الگورتیم تکرارشونده آلفابتا اشاره کرد.

اما علاوه بر الگوریتم‌های اصلی، در محاسبه حرکت‌های بعدی باید به فکر راهکارهایی برای مقابله با اثر افق نیز بود. مثلاً تیم توسعه کامپیوتر Deep Blue مفهوم <بسط‌های ویژه> یا Singular Extensions را توسعه دادند. این تکنیک می‌گوید: واضح است که در بازی شطرنج بعضی حرکت‌ها خیلی مؤثرتر و مهم‌تر از حرکت‌های دیگرند و نباید خیلی وقت تلف کرد تا به درست بودن آن ها پی برد.

به تعبیر خودمان، نباید در مورد انتخاب این حرکت‌ها زیاد تأمل کرد. مثلاً ممکن است به این نتیجه برسید که با دو حرکت دیگر می‌توانید وزیر حریف را بگیرید. تئوری بسط‌های ویژه می‌گوید وقتی به چنین موقعیت‌هایی برخورد می‌کنید، هوشمندانه‌تر این است که وقت بیشتری بگذارید و تا چند نوبت، بیشتر از مقدار پیش فرض خودتان برای محاسبه حرکت‌های بعدی، این مسیر را دنبال کنید؛ مبادا دام یا اشتباهی در کار باشد! این کار بهتر از این است که ماشین وار همه مسیرها را به یک اندازه دنبال کنید.

ارزیابی‌
سرانجام مسئله چهارم دیگری که باید کامپیوتر در فکر آن باشد، مسئله <ارزیابی> وضعیت کلی بازی است. چگونه کامپیوتر باید بفهمد که الان از حریفش جلو است یا عقب؟ آیا در شرف پیروزی است یا شکست؟ باید برای نجات از شکست یا به تعویق انداختن آن برنامه‌ریزی کند یا به فکر تسریع پیروزی قریب‌الوقوع خود باشد؟ معمای <ارزیابی بازی> از جمله مهم‌ترین مسائل پیش روی برنامه‌نویسان شطرنج است. مسئله <تکنیک‌های جست‌وجو> حتی در پیچیده‌ترین شکلش در سرتاسر ساختار بازی شطرنج تابع یک سری قواعد عمومی است: اگرعمل A اتفاق بیفتد و سپس واکنش B روی دهد، آن‌گاه احتمال وقوع حالت C وجود دارد.

این مسیر ممکن است دوباره پس از دو نوبت بازیِ طرفین تکرار شود. در حالی که مسئله <ارزیابی> یک مسئله راهبردی و خاص هر مورد بازی شطرنج است و امکان ندارد آرایش کنونی بازی، تعداد مهره‌های طرفین و وضعیت قوت و ضعف آن‌ها پس از یک نوبت بازی طرفین مانند نوبت قبلی باشد. <ارزیابی> در ساده‌ترین شکلش شامل بررسی این واقعیت است که هر یک از دو حریف در هر مقطعی از بازی چند مهره دارند و این مهره‌ها صرف نظر از چیدمانشان چه ارزشی دارند. این در حقیقت نوعی ارزیابی کمّی از وضعیت بازی است.

تئوری شطرنج برای هر نوع مهره وزن مخصوصی قائل است. مثلاً می‌گویند وزیر نُه امتیاز می‌ارزد، رخ پنج، فیل چهار، اسب سه و پیاده یک امتیاز. به این ترتیب نرم افزار می‌تواند از فرمول (Sum (Ni * Vi استفاده کند که در آن مجموعِ حاصل‌ضرب Ni در Vi ‌به ازای هر نوع مهره برای یک حریف محاسبه می‌شود. در اینجا Ni تعداد مهره‌هایی از یک نوع و Vi ارزش هر نوع مهره است.

اما ارزیابی کمّی کافی نیست. باید دید این مهره‌ها از نظر عملی چقدر کارآمد هستند. شاید یک وزیر که بالقوه می‌تواند خطر بزرگی باشد، به جهت آچمز شدن در شرایطی که او را ناگزیر از پاسبانی از جان شاه کرده است، عملاً در مراحل میانی یا پایانی بازی کارایی محدودی داشته باشد. به هرحال برای ارزیابی بازی معادلات مختلفی نوشته شده است که در هر نرم‌افزار از بعضی از آن‌ها استفاده می‌شود. طبیعی است که هرچه این معادلات جامع‌نگرتر باشند، دقت نرم‌افزار بیشتر می‌شود. خود تکنیک ارزیابی چند رکن دارد: توازن کمی قوا، قدرت مانور و میزان نفوذ مهره‌ها روی خانه‌های مختلف صفحه بازی، توسعه بازی، آرایش پیاده نظام، و امنیت شاه، از جمله مهم‌ترین ارکان ارزیابی هستند.

به عنوان مثال، تئوری کلاسیک شطرنج تأکید دارد که مهره‌های ضعیف‌تر بازی مثل فیل و اسب باید هرچه سریع‌تر به وسط معرکه آورده شوند. شاه خوب است که هرچه سریع‌تر به فکر رفتن به قلعه باشد و مهره‌های رخ و وزیر بهتر است در جای خود آرام بنشینند تا بازی به لحظات استراتژیک و سرنوشت‌ساز خود نزدیک شود. در تئوری مدرن شطرنج به جنبه‌های پیشرفته‌تری از بازی نیز اندیشیده می‌‌شود.

مثلاً این‌که مهرهایی مانند اسب و فیل باید سریعاً در فکر فتح مرکز باشند تا هم از حملات وزیر حمایت کنند و هم فضا را برای مانور دادن رخ‌ها باز کنند. معادلات و تکنیک‌های ارزیابی در حقیقت می‌توانند به این مسئله پاسخ دهند که اگر کامپیوتر بخواهد از یک استراتژی معین برای پیروزی استفاده کند (مثلاً فتح مرکز)، چگونه باید میزان تحقق این اهداف میانی را ارزیابی و بررسی کند. تکنیک‌های ارزیابی همچنین می‌توانند به این مسئله فکر کنند که آرایش پیاده نظام چگونه است؟ مثلاً تا چه اندازه نزدیک بودن پیاده‌ها به یکدیگر شعاع عمل آن‌ها را محدود یا باز کرده است. چقدر شانس پیروزی برای وزیر شدن یک پیاده وجود دارد و مواردی از این قبیل.

جمع بندی‌
به این ترتیب می‌توان مدل هوشمند مصنوعی در یک نرم‌افزار شطرنج را چنین خلاصه کرد: این هوشمندی چهار رکن دارد:

یکم: <بینایی> نرم‌افزار
دوم: آگاهی از قوانین بازی‌
سوم: هوشمندی در جست‌وجو برای یافتن بهترین حرکت بعدی
چهارم: هوشمندی در سنجش وضعیت کنونی و ارزیابی میزان تحقق استراتژی انتخاب شده برای رسیدن به پیروزی نهایی یا دستیابی به اهداف میانی

پی نوشت‌
لا‌زم به ذکر است که تلقی هوشمندانه بودن محاسبات نرم‌افزارهای شطرنج‌باز، محل بحث فراوان است و عده‌ای عقیده دارند که چنین نرم‌افزارهایی را نباید هوشمند به حساب آورد. در نتیجه در این نوشتار، هوشمند بودن نرم‌افزار شطرنج‌باز، نظر شخصی نویسنده است.

پروژه بازی اسنیک(snak)به زبان پاسکال

Posted by محمد رزاقی On اردیبهشت - ۸ - ۱۳۸۸۱ COMMENT

با سلام
این پروژه همان بازی اسنیک(Snak) به زبان پاسکاله که خانم ظفری مقدم ارسال کردن.
فایل حاوی پروژه در نرم افزار MS Word ذخیره شده و شما برای کامپایل و اجرای آن نیاز به یک کامپایلر زبان Pascal دارید.
بعد از کامپایل برنامه می توانید آن را به حالت EXE در آورده و بعد آن را اجرا کنید و صحت و درستس آن را امتحان کنید.
دانلود فایل پروژه بازی اسنک(Sneik) به زبان پاسکال

با سلام
همون طوری که می دونید کتاب++How to pragram C نوشته Deitel&Deitel به گفته اکثر مدرسان و همچنین صاحب نظران حرفه برنامه نویسی از جمله جناب استاد موحدیان این کتاب یکی از بهترین مراجع زبان ++C می باشد که هم کتاب خیلی کامل و هم خیلی گرونه.
این کتاب دارای ۸۷۲ صفحه هست که نسخه pdf اش رو می تونید از لینک زیر دانلود کنید.
لینک دانلود کتاب ++How to program C نوشته Deitel&Deitel