یادگیری مهارت‌های فوتبال در شبیه‌سازی فوتبال

تغییرات پروژه از تاریخ 1392/12/24 تا حالا
فوتبال یک بازی چندعامله است که شاید در ظاهر ساده به نظر برسد ولی در عمل از پیچیدگی‌های زیادی برخوردار است. یادگیری مهارت‌های بازی فوتبال برای عامل‌های هوشمند مانند روبات‌ها از جمله زمینه‌های پرطرفدار در حوزه هوش مصنوعی است.

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

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

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


# مقدمه
هدف نهایی :
"در سال 2051 تیمی متشکل از 11 ربات فوتبالیست داشته باشیم که با تیم قهرمان جهان بازی کرده و آن تیم را شکست دهد!"

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

یکی از مهمترین زمینه های روبوکاپ ، شبیه سازی دوبعدی فوتبال می باشد.

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

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


# کارهای مرتبط

در این پروژه و یا در اکثر پروژه های روبوکاپ قرار بر این نیست که یک شبیه ساز از گام اول تا به آخر قدم به قدم طراحی شود ، زیرا عملا کار بی فایده ای خواهد بود چون این شبیه ساز ها از اولین دوره روبوکاپ در دهه نود تا به حال در حال طراحی و بهبود یافتن بوده و عملا یک شبیه ساز تازه اختلاف وبهبود چندانی نسبت به ورژن های قدیمی تر نخواهد داشت. در واقع این کار مثل اختراع دوباره چرخ میماند!
بلکه به جای آن از شبیه ساز هایی که در دسترس هستند استفاده میکنیم. برای استفاده از شبیه ساز ها باید از یکی از توزیع های سیستم عامل های لینوکس استفاده کنیم.
شبیه ساز مورد استفاده در اینجا ، شبیه ساز The RoboCup Soccer Server Maintenance Group میباشد.

شبیه ساز دارای قسمت های زیر میباشد :
1 – Server که دارای قوانین بازی و همچنین موقعیت توپ ، دروازه ، خط ها و ... می باشد و به درخواست های client ها مانند پرسش از محل توپ ، محل بازیکنان و .. پاسخ میدهد . sever در هر لحظه در حال  update شدن میباشد ولی ما نباید در کار سرور دخالت کنیم بلکه باید با استفاده از قوانین و امکاناتی که در اختیار ما میگذارد بازی را هدایت کنیم.

2 – Monitor که در واقع به عنوان واسط گرافیکی عمل میکند تا ببینیم کد ما به چه شکلی در حال اجرا می باشد.

![...](http://www.syavash.com/portal/files/siavash/blogs/installing-robocup-soccer-simulation/1.png)

بدین ترتیب محیطی برای بازی دو تیم مقابل هم فراهم شده ولی هنوز تیمی یا  client را تعریف نکرده ایم. مانند Server  اینجا نیز از ابتدا شروع به طراحی و پیاده سازی تیم مورد نظر نمیکنیم بلکه از base client های موجود استفاده میکنیم. یکی از معرو فترین این client ها UvA Trilearn 2001  دانشگاه آمستردام میباشد. ما تغییرات و الگوریتم های مورد نظرمان را سعی می کنیم بر روی base که این تیم برایمان فراهم کرده پیاده کنیم. Client به Server از طریق پروتکل UDP/IP  متصل میشود در نتیجه هر زبانی که این پروتکل را ساپورت کند میتواند مورد استفاده قرار بگیرد. در اینجا برای client  از زبان ++C و برای Server از زبان C و ++C استفاده شده است.
پس از اینکه شبیه ساز را نصب کردیم و توانستیم با  استفاده از client ها یک بازی را اجرا کنیم نوبت به پیاده سازی تغییرات و الگوریتم های مورد نظرمان میرسد.
الگوریتم های پیشنهادی در اینجا میتواند استفاده از الگوریتم حریصانه برای پاس دادن، استفاده از یادگیری تقویتی برای دریبلینگ و ... باشد.

# مراجع
+ R. S. Sutton and A. G. Barto, Reinforcement Learning: An Introduction. Cambridge, United States of America: MIT Press, 1998.


 + P. Stone, (2006) "Half Field Offense in RoboCup Soccer: A Multi-agent Reinforcement Learning Case Study" in .RoboCup 2006, Bremen, Germany
[[link]](https://www.dropbox.com/s/6av9e1435da8wdq/Half%20Field%20O%EF%AC%80ense%20in%20RoboCup%20Soccer%20A%20Multiagent%20Reinforcement%20Learning%20Case%20Study.pdf)

+ محمد غضنفری، "بهبود عملکرد عامل شبیه‌سازی فوتبال دوبعدی با استفاده از یادگیری تقویتی "، پایان‌نامه کارشناسی، دانشگاه علم و صنعت ایران، ۱۳۹2. [[لینک]](https://www.dropbox.com/s/2elzbgh9qnym476/Performance%20Improvement%20of%20a%202D%20Soccer%20Simulation%20agent%20using%20Rainforcement%20Learning.pdf)

+ Mao Cheny ,  Ehsan Foroughi, Fredrik Heintz, ZhanXiang Huangy, Spiros Kapetanakis, Kostas Kostiadis, Johan Kummeneje, Itsuki Noda, Oliver Obst, Pat Riley,Timo Steffens, Yi Wangy and Xiang Yiny , “Users Manual  RoboCup Soccer Server  for Soccer Server Version 7.07 and later”, The RoboCup Federation , 2001 

+ Remco de Boer and Jelle Kok , “The Incremental Development of a Sunthetic Multi-Agent System : The UvA Trilearn 2001 Robotic Soccer Simulation Team” , University of Amsterdam , 2002 

# کارهای آینده


# پیوندهای مفید
+ [RoboCup 2D Soccer Simulation League](http://en.wikipedia.org/wiki/RoboCup_2D_Soccer_Simulation_League)
+ [Reinforcement learning](http://en.wikipedia.org/wiki/Reinforcement_learning)
+ [The RoboCup Soccer Simulator in Source Forge ](http://sourceforge.net/projects/sserver/files/)