RoboCup Soccer 200804 Mar 2008, 346 read(s) Tags: Programming
Ето, че дойде време за нашата първа практика по информатика. Условията вече са в интернет, компонентите и шаблоните, въху които трябва да програмираме също. Ето тук ще описвам какво се е случило през дните на практиката ...
Практиката
Практиката ни представлява голям проект по информатика, който трябва да разработим в групи по 4-ма човека. Тя е основна част от така да се каже "заверката" ни за изпита. Максималният брой точки, които можем да съберем е 120. Трябват ни минимум 60, за да бъдем допуснати до изпит по информатика.
Условията
Първо, нека да кажа няколо думи за условията. Тазгодишната задача леко наподобява тази от миналата година, но няма лошо. Бих казал, че е доста интересна - от нас се изисква да програмираме нещо като изкуствен интелект на отбор по футбол. Имаме игрище и съдя, 11 играчи и противников отбор. Идеята е да измислим и разработим начина на мислене и игра на нашия отбор. Това никак не е проста задача обаче, тъй като всичко е направено максимално реалистично. Всеки играч "вижда" какво се случва само в определен радиус от себе си и например не знае къде се намира точно топката, когато е далеч. Също така пасовете, шутовете и тичанията не могат да бъдат идеално точни като ъгъл и като сила, те зависят от много фактори (като вятър например), за които отборът няма точна информация. Няма да се впускам много в подробности, просто знайте че играта е реалистична... Това, което много ми харесва, е възможността две отделни програми на два различни отбора да играят една срещу друга на футбол. Това до някаква степен може да определи кой от двата изкуствени интелекта е по-добър...
Турнирът
Най-добрите проекти от практиката ще бъдат поканени да участват във вътрешен турнир на ТУ Дармщат, който ще се проведе на 4ти март. А мисля, че най-добрите проекти ще бъдат допуснати до състезания на по-високо ниво. Между другото има световно първенство по RoboCup Soccer, в което най-добрите изкуствени интелекти за тази футболна платформа мерят сили. Засега разучаваме тактиките на победителите през последните 2 години.
Ден 1
Ентусиазирани пристигаме още в 9 часа сутринта в голямата компютърна зала на факултета по информатика. Сваляме нужните шаблони, файлове и приложения, разпечатваме и четем условията. Настройваме програмите ... да, ама големите риби отгоре са дали грешно настроен VMware с Линукс ... и тъй .. той не ще да тръгва. Загубихме около 8 часа докато подкараме всичко .. и ентусиазмът някак си се поизпари... След като технически вече всичко е наред, можем да започваме с програмирането и стратегията си. Да, ама е вече късно, затова оставихме тази приятна работа за следващия ден. 

Ето как изглежда игралното поле. Не се очудвайте, че няма играчи .. просто още не сме ги програмирали 
Ден 2
Денят започна с малко разгрявка и проучване на предоставеното ни API. Тествахме как работи пускането на играч на терена, неговото местене, тичане, ритане, завъртане, ... С малко повече усилия успяхме да получим ефекта на удар с петичка, задна и странична ножица. Първата ни задача е да направим изкуствен интелект на 1 играч, който може да дриблира с топката и да вкара гол. Разбира се, няма вратар или други играчи - само нашият човек и топката. Звучи лесно, нали? Само че играчът първо трябва да намери топката, след това да дотича до нея, да установи къде се намира самият той, да дриблира в посока противниковата врата, когато приближи вратата, да прецени от какво разстояние и с каква сила може да стреля и точно в кой ъгъл. Някои от нещата станаха доста лесно, но установяването на местоположението на самия играч ни отне доста време. И май проблемът беше, че се опитвахме да изведем универсален начин за установяване на положението на играча... да, ама не може така Казах, че всичко е реалистично... Дори истинският играч не знае точно къде се намира на полето, не се оглежда да види колко далеч е тъч линията постоянно, нали? Ако се оглежда, ще загуби време и ще му отнемат топката, нали така? Та така и нашият играч се опитва да извисли на къде и как трябва да рита. Е, накрая достигнахме до груб вариант, в който играча успява да извърши желаното дриблиране и да се опита да вкара гол. Вижте сами резултати от симулацията:
Както сигурно забелязвате, има малко бъгове и неща за доизчисляване. Например, толерантността при избиране на ъгъл преди шут към вратата, трябва да се намали малко, за да не се уцелва гредата. Също така, начина на завъртане, когато играчът е с гръб към противниковата врата е може би неоптимален, защото се губят ценни секудни. Но и това ще бъде доуточнено. Пак утре ...
Ден 3
Днес пуснахме пробна игра 2ма срещу 2ма с дотук създаденият изкуствен интлект. Не беше много забавно, тъй като всички играчи мислеха по един и същ начин и само гонеха топката като луди, опитвайки се да вкарат гол. Но така и така истинското програмиране на изскутвения интелект още не е започнало и засега играчите могат да решават сами само за някои дребни неща.
Днес започнахме да програмираме системата за взимане на комплексни решения на базата на дадени условия. Все още не сме мислили тактики - как ще се играе, засега само програмираме тази система, която после на базата на тези условия ще може да изчисли кой е най-добрият ход за самия играч. Доста оплетено стана, даже все още не знаем дали работи правилно, тъй като няма директен начин да го тестваме. Ето как изглежда един от фрагментите в кода:
private Stack<Vector<LogicExpression<BooleanVariables>>> operands =
new Stack<Vector<LogicExpression<BooleanVariables>>> ();
В превод: стек структура от данни от вектори, съдържащи логически изрази, работещи върху логически променливи. Мислете му как се управлява такова нещо. 
Ден 4
Групата не се събираме днес, но аз продължавам да програмирам. Както се казва: "и сам войнът е сам" ... или ... "и сам програмистът е програмист" ... Едно от ядрата на системата за вземане на решения е вече завършено и работи безотказно (това оплетеното от вчера). С тестовите данни, предоставени от университета, тествах самото ядро ... познайте 15 успешни от 15 теста ...
Ден 5 и Ден 6
Два дни усилено програмиране на същитите системи. Стигнахме до края и ... за наше голямо съжаление, се оказа, че условието е толкова жестоко дадено, че прецаква голяма част от това, което сме програмирали до момента. Тоест .. в първите задачи на практиката се изисква от нас да програмираме даден компонент както си пожелаем. Идеята е той да има реализирана определена функционалност. ОК, какво по-хубаво. Измислили си бяхме доста елегантна и удобна структура на този компонент, бяхме го направили, той работеше и успешно минаваше всички тестове. Супер, нали? И после стигнахме до задача 4та от практиката (от общо 5), където се оказва, че като се позадълбочи човек в самия код се оказва, че онзи хубав компонент в началото не може по никакъв начин да се свърже с компонента, който трябва да се програмира в 4та задача, което от своя страна означава, че тази свобода, която уж ни бяха дали при разработването, изобщо я няма. И това означаваше, че трябва да преработим почти всичко програмирано дотук, за да може да го свържем после. Яко, нали 1-2 дни отидоха на вятъра. И въпреки, че сме доста напред с практиката, то сега вече можеше да сме стигнали до най-забавната част, където ще измисляме и дефинираме самия изкуствен интелект на отделните видове играчи (още известно като задача 5 от практиката или мястото, където ще развинтим фантазията си) ... Както и да е, оправихме кода и тестовете пак вървят. От задача 3 единия тест не върви, но мисля, че там проблема не е при нас, а е в самия тест ... след 4 часа дебъгване и чертане на йерархични графове мисля, че съм прав, но да видим какво ще кажат от университета. 
Ако всичко върви по план, утре ще сме готови с първите 3 задачи на 100%, а 4тата ще я направим утре. Но да не казвам голяма дума, че всичко се случва.
....
....
....
И така минаха дни и на нас дори не ни остана време да пишем тук какво става с нашия отбор. Преминахме през доста фази, докато завършим проекта, но все пак успяхме! Разбира се, футболистите ни не са чак толкова добри, но все пак играят, подават си, комуникират си... Организираме едно мини турнирче преди няколко дни с надеждата да видим как другите отбори играят, за да може да напаснем стратегията си за отбора след това за големия турнир на 4ти Март. За съжаление, на мини турнира дойде само една група и техният отбори ни би с 17 : 0. Грешката се оказа стратегическа от наша страна - нашите играчи винаги тичаха максимално бързо, като така съответно се изморяваха по-бързо и противниковите играчи винаги бяха по-бързи. Иначе тяхната стратегия за подаване/защита/нападение не беше кой знае колко по-добре. След това мини турнирче, оптимизирахме някои от нещата по отбора ни и сега той играе с пъти по-добре.
Що се отнася до практиката - направихме си защитата и взехма максимума точки - 120 от 120. Сега ще видим какво ще стане на турнира на 4ти Март...
Резултати от турнира
Отборът ни беше разпределен в група 6-та на предварителните квалификация. Във всяка група имаше 3 отбора, като всеки отбор играеше по веднъж срещу другите два отбора в групата. Ето резултатите от предварителната квалификация в нашата група. Ако до момента не съм споменал, отбора ни се казва oPointerXception.
oPointerXception vs. Physiker - 0 : 13
oPointerXception vs. Gruppe_60 - 2 : 5
Physiker vs. Gruppe_60 - 8 : 0
С две загуби, за съжаление, отборът ни беше на последно място в групата и съответно не се класира за осмофиналите. Въпреки това нашите играчи играха сравнително добре и успяха да вкарат 2 гола на Gruppe_60.
Comments The Schiele: I have read your report very carefully and I believe that you are going to earn the fully 120 points!
love schiele! Martin: Hahaha, Misagh, very funny  You love Schiele, I know that ... visitor: schiele loves himself? who is schiele someone who had to do with it?
where can i get the source code of your implementation, it looks great! Martin: No, Schile is our professor in Computer Science, our idol. The comment has been written not by Schile himself, but by a mate of me, who is working in the same RoboCup team  As long as we are talking about source code .. actually is not available at the moment, but you can mail me in a week, when our practice in computer science is over. Then I will mail you back our sources.
|