Artificial Intelligence - هوش مصنوعی  
انجمن را در گوگل محبوب کنيد :

بازگشت   Artificial Intelligence - هوش مصنوعی > مقدمات هوش مصنوعی > حل مسائل معروف هوش مصنوعي


 
تبليغات سايت
Iranian Association for the Advancement of Artificial Intelligence
ارسال تاپيک جديد  پاسخ
 
LinkBack ابزارهاي تاپيک نحوه نمايش
قديمي ۱۱-۸-۱۳۸۹, ۰۲:۲۲ بعد از ظهر   #1 (لینک دائم)
عضو فعال
 
آواتار maaheno
 
تاريخ عضويت: مهر ۱۳۸۹
محل سكونت: كرج
پست ها: 11
تشكرها: 134
30 تشكر در 5 پست
Lightbulb برنامه حل بازي 8 كد شده با سي شارپ

با سلام
توي برنامه هاي كه توي سايت هست چند مورد ارسال بازي 8 رو ديدم ولي اكثرا خود بازي رو گذاشتن نه حل اون رو.
من اين برنامه رو آماده كردم، با توجه به اينكه اصلا مايل نيستم به صورت يك پروژه درسي صرفا دانلود بشه و تحويل داده بشه فعلا فايل اجرايي رو قرار مي دم و نحوه كار با اون رو توضيح مي دم. بعد هم در مورد روش كارش توضيح مي دم و توي پست هاي بعد هم احتمالا كد برنامه رو قرار مي دم. (در صورتي كه روشي پيدا كنم كه نشه بصورت پروژه آماده استفاده كرد.)

در مورد خود برنامه:
1- بايد دات نت 2 رو داشته باشيد.
2- در وسط صفحه جدول اين معما ديده ميشه و با كليك روي هر خانه اگر اطراف اون خانه خالي باشه با اون جابجا مي شه.
3- همون طور كه مي دونيد از هر تركيبي از اعداد روي صفحه نميشه به خانه هاي مرتب شده رسيد و بنابراين بايد از خانه هاي مرتب شده شروع كرد و جابجايي ها رو انجام داد تا خانه هاي جدول در هم بشه. براي اين كار هم ميشه به صورت دستي روي هر خانه كليك كرد و هم ميشه از قسمتي كه براي اين امر آماده كردم استفاده كنيد. در پايين صفحه دو تا ليست كشويي قرار گرفته كه يكي تعداد دفعات درهم سازي رو مشخص ميكنه و ديگري هم سرعت عمل رو (براي اينكه روال درهم سازي رو بشه ديد) و با كليك روي دكمه درهم سازي جدول درهم ميشه.
4- در قسمت بالاي صفحه چند تا دكمه هست.
دكمه جديد: كه بازي جديد توليد مي كنه
دكمه محاسبه و توليد درخت : كه درخت بازي رو توليد مي كنه و جواب رو به دست مياره
دكمه نمايش مسير: كه جدول درهم شده رو مرتب مي كنه.
5- در قسمت چپ صفحه برنامه هم گزارشي از تعداد نود هاي توليد شده در درخت و تعداد نود هاي گسترش يافته و تعداد جابجايي ها تا رسيدن به جدول مرتب شده را نشان مي دهد.
6- بنابراين براي كار با برنامه ابتدا بايد جدول را درهم كنيد بعد روي دكمه محاسبه و توليد درخت كليك كرده و بعد روي نمايش مسير كليك كنيد.
اين كليت كار با برنامه تا بعد در مورد طرز كار مطلب بذارم
فايل ضميمه
نوع فايل: rar eight-exe.rar (204.2 كيلو بايت, 1008 نمايش)

ويرايش شده توسط maaheno; ۰۲-۱۱-۱۳۹۰ در ساعت ۰۴:۰۱ بعد از ظهر دليل: اصلاح فايل ضميمه
maaheno آفلاين است   پاسخ با نقل قول
از maaheno تشكر كرده اند:
Astaraki (۱۱-۸-۱۳۸۹), en_ahmad (۰۸-۳۰-۱۳۹۰), felfelrize (۰۳-۱۴-۱۳۹۳), jojepanbeyi (۰۹-۱۵-۱۳۹۰), lesanalgeib (۰۳-۱۳-۱۳۹۹), mardin200 (۰۲-۲۱-۱۳۹۰), mgmi (۰۸-۲۱-۱۳۹۱), mohamad_mahdi (۰۲-۱۰-۱۳۹۰), Nazlikiz (۰۳-۸-۱۳۹۰), saleh313k (۱۲-۱۱-۱۳۹۰), soodeh1010 (۰۲-۲۱-۱۳۹۰)

  #ADS
نشان دهنده تبلیغات
تبليغگر
 
 
 
تاريخ عضويت: -
محل سكونت: -
سن: 2010
پست ها: -
 

نشان دهنده تبلیغات is online  
قديمي ۰۲-۱۰-۱۳۹۰, ۰۸:۱۶ قبل از ظهر   #2 (لینک دائم)
عضو جدید
 
آواتار mohamad_mahdi
 
تاريخ عضويت: ارديبهشت ۱۳۹۰
پست ها: 2
تشكرها: 1
0 تشكر در 0 پست
پيش فرض

سلام از برنامه ممنون فقط سورسش رو هم بذار اگه برات مقدوره؟
mohamad_mahdi آفلاين است   پاسخ با نقل قول
قديمي ۰۲-۱۱-۱۳۹۰, ۰۳:۵۶ بعد از ظهر   #3 (لینک دائم)
عضو فعال
 
آواتار maaheno
 
تاريخ عضويت: مهر ۱۳۸۹
محل سكونت: كرج
پست ها: 11
تشكرها: 134
30 تشكر در 5 پست
Smile كد بازي 8 كد شده با سي شارپ

با سلام
گرچه فكر مي كردم كمي بيشتر از اين برنامه استقبال بشه اما به هر دليلي نشد.
خوب توي اين پست كد برنامه رو قرار مي دم در مورد كلاس هاي به كار رفته و عملكرد هركدوم هم توي پست بعدي توضيح مي دم
ضمنا توي اين برنامه از الگوريتم a* استفاده كردم و براي تابع هيورستيك هم از فاصله منهتن بنابراين توي كمترين تعداد مراحل راه حل رو پيدا مي كنه .
فايل ضميمه
نوع فايل: rar eight-eight.rar (920.8 كيلو بايت, 1152 نمايش)
maaheno آفلاين است   پاسخ با نقل قول
از maaheno تشكر كرده اند:
Astaraki (۰۲-۱۱-۱۳۹۰), felfelrize (۰۳-۱۴-۱۳۹۳), mardin200 (۰۲-۲۱-۱۳۹۰), masood (۱۲-۱۵-۱۳۹۰), sari-1369 (۰۸-۳۰-۱۳۹۱), soodeh1010 (۰۲-۲۱-۱۳۹۰)
قديمي ۰۲-۱۹-۱۳۹۰, ۱۱:۰۴ بعد از ظهر   #4 (لینک دائم)
عضو فعال
 
آواتار maaheno
 
تاريخ عضويت: مهر ۱۳۸۹
محل سكونت: كرج
پست ها: 11
تشكرها: 134
30 تشكر در 5 پست
پيش فرض

خب همونطور که قول دادم شرح کد ( البته ببخشید دیر شد )
در مورد الگوریتم و روش به کار رفته:
در این برنامه از سه کلاس استفاده کردم :
الف) کلاس نود (Node) که مربوط به اطلاعات هر حالت از قرار گیری اعداد روی صفحه، مقدار تابع منهتن در وضعیت خاص و ...
ب) کلاس صف اولویت که عناصر آن را وضعیت های ممکن از حالت شروع است و بر اساس دو مقدار فاصله طی شده (G(x)) و مقدار تابع اکتشافی اولویت آنها تعیین می گردد.
ب) کلاس عناصر صف (ObjectQueue) با توجه به اینکه باید در هر خانه از صف اولویت یک نمونه از کلاس نود قرار گیرد و با توجه به حجم بالایی از حافظه که ممکن است از این طریق هدر رود. عناصر مهم این کلاس به طور خلاصه شده و کم حجم در این کلاس قرار داده می شود و در صف اولویت قرار می گیرد و در هنگام نیاز به نوع اصلی یعنی کلاس نود تبدیل می شود.

برای کلاس نود به یکسری پارامتر نیاز داریم که شامل موارد زیر است:
1- یک ماتریس 3 در 3 که موقعیت اعداد در خانه های جدول را مشخص کند
2- یک عدد که مقدار تابع مکاشفه ای (فاصله منهتن) را نگه می دارد.
3- محل خانه خالی جدول
4- تعداد مراحل طی شده
5- و مقدار تابع h(x) که شامل جمع مراحل طی شده و مقدار تابع مکاشفه ای است.
در مورد توابع و یا متدهای کلاس صحبت نمی کنم و به اصل برنامه اشاره می کنم (البته اگر سوالی هست مطرح کنید)
همونطور که می دونید از هر چیدمانی از عناصر نمی توان به وضعیت مرتب شده رسید در واقع 9! حالت چیدمان عناصر امکان پذیر است و از نیمی از این تعداد برای ما قابل قبول هستند بنابراین باید از یک وضعیت مرتب شده خانه های جدول را درهم کنیم.
در این برنامه اساس کار مبنی بر حرکت دادن خانه خالی است.
خب تابع اصلی اجرای برنامه createTree() می باشد. در این تابع ابتدا وضعیت جاری جدول را در یک نمونه از کلاس نود قرار می گیرد پارامترهای کلاس را Set می کنیم. حالا این کلاس را در صف اولویت قرار داده و وارد حلقه اصلی برنامه می شویم.
کارهایی که در حلقه اصلی برنامه انجام می شود:
با اولویت ترین عنصر (ابتدای صف) برداشته می شود. سپس حالتهای بعدی را مشخص می کنیم (از طریق یافتن اینکه خانه خالی به چه خانه هایی امکان حرکت دارد با استفاده از تابع availableMove() از کلای نود) در مرحله بعد به تعداد خانه هایی که امکان حرکت وجود دارد، یک نمونه از کلاس نود ایجاد شده و در هرکدام، خانه خالی را به یکی از سمت های مجاز برده و پارامترهای آن را ازجمله فاصله منهتن را حساب کرده و سپس آن را در صف اواویت قرار می دهیم. ضمنا مسیر حرکت نیز درآرایه ای به نام path نگهداری می شودیعنی قبل از قرار گرفتن عنصر در صف در این آرایه مشخص می شود که یک وضعیت خاص از وضعیت آغازین چه حرکتهایی را انجام داده تا به این وضعیت برسد. شکل زیر کلیات این کار را نشان می دهد:

در صورتی که فاصله منهتن یکی از نود های تولیدی صفر شود یعنی مسئله حل شده و بنابراین از حلقه اصلی خارج می شویم. در غیر این صورت به ابتدای حلقه بازگشته و با اولویت ترین نود را انتخاب کرده و مراحل بالا را دوباره انجام می دهیم.
نکته قابل ذکر این که یک نود بعد از خروج از صف علنا از صف کنار گذاشته می شود ولی در قسمتی از حافظه نگهداری می شود تا درصورتی که در مراحل بعد یک نود مشابه این نود تولید شود دوباره بررسی نشود (چون قبلا بررسی شده است.)

البته می خواستم در مورد کلاسها و توابع اونها هم بنویسم ولی گفتم درصورتی که کسی مشکلی داشت به اون ها بپردازم. بنابراین اگر متوجه قسمتی نشدید حتما اشاره کنید.
maaheno آفلاين است   پاسخ با نقل قول
از maaheno تشكر كرده اند:
Astaraki (۰۲-۱۹-۱۳۹۰), felfelrize (۰۳-۱۴-۱۳۹۳), jojepanbeyi (۰۹-۱۵-۱۳۹۰), lesanalgeib (۰۵-۲۸-۱۳۹۳), mardin200 (۰۲-۲۱-۱۳۹۰), mehdismi (۰۹-۱۳-۱۳۹۱), mgmi (۰۸-۲۱-۱۳۹۱), Nazlikiz (۰۳-۸-۱۳۹۰), niloofare_abi (۰۸-۴-۱۳۹۰), soodeh1010 (۰۲-۲۱-۱۳۹۰), soroushsamadi (۰۴-۲۵-۱۳۹۱)
قديمي ۰۲-۲۱-۱۳۹۰, ۰۹:۱۵ قبل از ظهر   #5 (لینک دائم)
عضو فعال
 
آواتار soodeh1010
 
تاريخ عضويت: ارديبهشت ۱۳۹۰
پست ها: 7
تشكرها: 20
1 تشكر در 1 پست
پيش فرض

سلام . مرسی . این کارت خیلی عالیه .لطفا در مورد توابع و کلاس ها هم توضیح بده .

ويرايش شده توسط Astaraki; ۰۲-۲۱-۱۳۹۰ در ساعت ۰۷:۱۶ بعد از ظهر
soodeh1010 آفلاين است   پاسخ با نقل قول
قديمي ۰۲-۲۲-۱۳۹۰, ۰۲:۴۹ بعد از ظهر   #6 (لینک دائم)
عضو فعال
 
آواتار maaheno
 
تاريخ عضويت: مهر ۱۳۸۹
محل سكونت: كرج
پست ها: 11
تشكرها: 134
30 تشكر در 5 پست
پيش فرض

خوب در مورد تابع اصلی که توضیح دادم.
شما یه نگاهی به کلاس ها بندازید هرجا که مشکلی بود در خدمتم
maaheno آفلاين است   پاسخ با نقل قول
قديمي ۰۳-۸-۱۳۹۰, ۰۶:۲۸ بعد از ظهر   #7 (لینک دائم)
عضو جدید
 
آواتار Nazlikiz
 
تاريخ عضويت: خرداد ۱۳۹۰
پست ها: 4
تشكرها: 2
0 تشكر در 0 پست
پيش فرض

سلام
دست گلتون درد نكنه واقعا عالي بود
فقط يه خواهشي داشتم اگه ميشه با rbfs هم حلش كنيد
Nazlikiz آفلاين است   پاسخ با نقل قول
قديمي ۰۳-۸-۱۳۹۰, ۰۷:۳۶ بعد از ظهر   #8 (لینک دائم)
عضو فعال
 
آواتار maaheno
 
تاريخ عضويت: مهر ۱۳۸۹
محل سكونت: كرج
پست ها: 11
تشكرها: 134
30 تشكر در 5 پست
پيش فرض

البته اگر بشه قصد دارم با روش هاي ديگه هم حل كنم.
فقط متاسفانه خيلي گرفتارم
انشا الله به زودي حل روش هاي مختلف و امكان مقايسه بين هر روش رو هم قرار مي دم.
maaheno آفلاين است   پاسخ با نقل قول
قديمي ۰۳-۱۰-۱۳۹۰, ۱۱:۵۱ قبل از ظهر   #9 (لینک دائم)
عضو جدید
 
آواتار Nazlikiz
 
تاريخ عضويت: خرداد ۱۳۹۰
پست ها: 4
تشكرها: 2
0 تشكر در 0 پست
پيش فرض

راستي حل بازي دوز با الگوريتم min max با هرس آلفا بتا و بدون هرس رو هم اگه مطلبي دارين بذارين ممنون ميشم.
Nazlikiz آفلاين است   پاسخ با نقل قول
قديمي ۰۵-۲۲-۱۳۹۰, ۰۲:۴۶ قبل از ظهر   #10 (لینک دائم)
عضو جدید
 
آواتار limak
 
تاريخ عضويت: مرداد ۱۳۹۰
پست ها: 1
تشكرها: 0
1 تشكر در 1 پست
پيش فرض

نقل قول:
نوشته اصلي بوسيله maaheno نمايش پست
خب همونطور که قول دادم شرح کد ( البته ببخشید دیر شد )
در مورد الگوریتم و روش به کار رفته:
در این برنامه از سه کلاس استفاده کردم :
الف) کلاس نود (node) که مربوط به اطلاعات هر حالت از قرار گیری اعداد روی صفحه، مقدار تابع منهتن در وضعیت خاص و ...
ب) کلاس صف اولویت که عناصر آن را وضعیت های ممکن از حالت شروع است و بر اساس دو مقدار فاصله طی شده (g(x)) و مقدار تابع اکتشافی اولویت آنها تعیین می گردد.
ب) کلاس عناصر صف (objectqueue) با توجه به اینکه باید در هر خانه از صف اولویت یک نمونه از کلاس نود قرار گیرد و با توجه به حجم بالایی از حافظه که ممکن است از این طریق هدر رود. عناصر مهم این کلاس به طور خلاصه شده و کم حجم در این کلاس قرار داده می شود و در صف اولویت قرار می گیرد و در هنگام نیاز به نوع اصلی یعنی کلاس نود تبدیل می شود.

برای کلاس نود به یکسری پارامتر نیاز داریم که شامل موارد زیر است:
1- یک ماتریس 3 در 3 که موقعیت اعداد در خانه های جدول را مشخص کند
2- یک عدد که مقدار تابع مکاشفه ای (فاصله منهتن) را نگه می دارد.
3- محل خانه خالی جدول
4- تعداد مراحل طی شده
5- و مقدار تابع h(x) که شامل جمع مراحل طی شده و مقدار تابع مکاشفه ای است.
در مورد توابع و یا متدهای کلاس صحبت نمی کنم و به اصل برنامه اشاره می کنم (البته اگر سوالی هست مطرح کنید)
همونطور که می دونید از هر چیدمانی از عناصر نمی توان به وضعیت مرتب شده رسید در واقع 9! حالت چیدمان عناصر امکان پذیر است و از نیمی از این تعداد برای ما قابل قبول هستند بنابراین باید از یک وضعیت مرتب شده خانه های جدول را درهم کنیم.
در این برنامه اساس کار مبنی بر حرکت دادن خانه خالی است.
خب تابع اصلی اجرای برنامه createtree() می باشد. در این تابع ابتدا وضعیت جاری جدول را در یک نمونه از کلاس نود قرار می گیرد پارامترهای کلاس را set می کنیم. حالا این کلاس را در صف اولویت قرار داده و وارد حلقه اصلی برنامه می شویم.
کارهایی که در حلقه اصلی برنامه انجام می شود:
با اولویت ترین عنصر (ابتدای صف) برداشته می شود. سپس حالتهای بعدی را مشخص می کنیم (از طریق یافتن اینکه خانه خالی به چه خانه هایی امکان حرکت دارد با استفاده از تابع availablemove() از کلای نود) در مرحله بعد به تعداد خانه هایی که امکان حرکت وجود دارد، یک نمونه از کلاس نود ایجاد شده و در هرکدام، خانه خالی را به یکی از سمت های مجاز برده و پارامترهای آن را ازجمله فاصله منهتن را حساب کرده و سپس آن را در صف اواویت قرار می دهیم. ضمنا مسیر حرکت نیز درآرایه ای به نام path نگهداری می شودیعنی قبل از قرار گرفتن عنصر در صف در این آرایه مشخص می شود که یک وضعیت خاص از وضعیت آغازین چه حرکتهایی را انجام داده تا به این وضعیت برسد. شکل زیر کلیات این کار را نشان می دهد:

در صورتی که فاصله منهتن یکی از نود های تولیدی صفر شود یعنی مسئله حل شده و بنابراین از حلقه اصلی خارج می شویم. در غیر این صورت به ابتدای حلقه بازگشته و با اولویت ترین نود را انتخاب کرده و مراحل بالا را دوباره انجام می دهیم.
نکته قابل ذکر این که یک نود بعد از خروج از صف علنا از صف کنار گذاشته می شود ولی در قسمتی از حافظه نگهداری می شود تا درصورتی که در مراحل بعد یک نود مشابه این نود تولید شود دوباره بررسی نشود (چون قبلا بررسی شده است.)

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


دوست عزیز ورژن سی شارپتون رو میگین ؟ با این پروژه شما من زیاد کار دارم خوشبختانه
limak آفلاين است   پاسخ با نقل قول
از limak تشكر كرده است:
jojepanbeyi (۰۹-۱۵-۱۳۹۰)
پاسخ



كاربران در حال ديدن تاپيک: 1 (0 عضو و 1 مهمان)
 

قوانين ارسال
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is فعال
شکلکها فعال است
كد [IMG] فعال است
كدهاي HTML غير فعال است
Trackbacks are فعال
Pingbacks are فعال
Refbacks are فعال




زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۱۱:۰۷ قبل از ظهر ميباشد.


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.

Teach and Learn at Hexib | Sponsored by www.Syavash.com and Product In Review

استفاده از مطالب انجمن در سایر سایت ها، تنها با ذکر انجمن هوش مصنوعي به عنوان منبع و لینک مستقیم به خود مطلب مجاز است

Inactive Reminders By Icora Web Design