ai w grach - filip pierściński

Download AI w grach - Filip Pierściński

If you can't read please download the document

Upload: skn-shader

Post on 19-Jun-2015

1.646 views

Category:

Documents


0 download

DESCRIPTION

Slajdy do wykładu który się odbył podczas inauguracji koła Shader na krakowskiej AGH

TRANSCRIPT

  • 1. AI - sztucznainteligencja w grach Filip Pierciski (Reality Pump) Krakw 2010

2. AI w nauce sztuczna inteligencja (SI), ang. ArtificialIntelligence (AI), dzia informatyki, ktregoprzedmiotem bada s reguy rzdzceinteligentnymi zachowaniami czowieka (np.postrzeganiem, uczeniem si), tworzenie modeliformalnych tych zachowa i symulujcego jeoprogramowania. PWN 3. AI w grachReguy rzdzce inteligentnymi zachowaniamiprzeciwnikw, ustalajce stopie trudnoci rozgrywki. 4. AI w quasisymulatorachReguy rzdzce inteligentnymi zachowaniami postaci, w cile okrelonym, przewidywalnym rodowisku. 5. Test TuringaPrawdziwy czowiek zadaje pytania w jzyku naturalnym ina podstawie odpowiedzi okrela czy rozmawia zczowiekiem, jeli tak system przechodzi test pozytywnie. aden system od 1950 roku nie przeszed tego testu.CZYLI NIE MA INTELIGENTNYCH SYSTEMW??????? 6. AI - algorytmy Systemy ekspertowe Sieci neuronowe Algorytmy genetyczne Logika rozmyta Liczby pseudo losowe 7. AI - brana IT Oprogramowanie typu CAD Oprogramowanie suce do predykcjinajkorzystniejszych transakcji giedowych Interaktywne mapy Oprogramowanie treningowe Efekty specjalne 8. AI - inne dziedziny Robotyka Logistyka Motoryzacja 9. AI - gry zachowania sterujce poszukiwanie cieek system trigerowania zarzdzanie tworzeniem, usuwaniem,parametryzowaniem jednostek priorytetowanie zada 10. AI - gry sterowanie przepyw danych miedzyjednostkami formacje taktyki 11. Zachowania sterujce -Pojcia Agent autonomiczny Zachowanie Wybr akcji Sterowanie Poruszanie 12. Agent autonomiczny Pooenie Reprezentacja Reaktywno Wirtualno 13. Reaktywno - jest to tendencja doreagowania na bodce (psychologicznepodejcie ) lub inaczej wielko reakcjisystemu w stosunku do bodca(cybernetyczne podejcie) Wirtualno - zaprojektowane z myl oegzystowaniu w rodowisku wirtualnym 14. ZachowaniePojedyncza lub zestaw decyzji w wyniku ktrychautonomiczny agent wykona pojedyncz lub zestaw akcji.W wikszoci przypadkw bd to akcje skadajce si na zachowanie spotykane u zwierzt lub ludzi w realnymwiecie. (ale nie musz!) 15. Wybr akcji Prosty switch Maszyna stanw Logika rozmyta Hierarchiczne drzewo decyzyjne 16. Sterowanie ledzenie Ucieczka Pocig Unikanie Docieranie 17. Sterowanie Omijanie Bdzenie Podanie ciek 18. Poruszanie Rczne sterowanie animacjami Przekazywanie dyrektyw do maszynystanw Nisko poziomowe sterowanie PhysicsCharacter Controllerem Parametryzowanie postaci 19. Agent autonomiczny - implementacjastruct agent{math_vector vPredkoscmath_vector vPozycja;math_vector vOrientacja;oat fSpeed;oat fScalar; //moe by utosamiana z mas} 20. Dynamiczne rwnanieruchu (uproszczone)math_vector vPrzyspieszenie;math_vector vSilaSterujaca;vPrzyspieszenie = vSilaSterujaca /a.fScalar;a.vPredkosc = a.vPredkosc + vPrzyspieszenie;if( speed == const)a.vPredkosc = a.vPredkosc.Normal2D()*a.fSpeed;elsea.vPredkosc = CLAMP(a.vPredkosc, 0, a.fSpeed); 21. ledzeniemath_vector vKierunekDoCelu;vKierunekDoCelu = vPozycjaCelu - a.vPozycja;vKierunekDoCelu = vKierunekDoCelu.Normal2D;vKierunekDoCelu = vKierunekDoCelu*a.fSpeed;vSilaSterujaca = vKierunekDoCelu - a.vPredkosc; 22. UcieczkaAnalogicznie liczymy si sterujc jak wprzypadku podania, z tym, e na konieczmieniamy jej kierunek na przeciwny. 23. PocigT = Len(vPozycjaCelu - a.vPozycja)*wspolczynikSkretu;math_vector vKierunekDoCelu;vKierunekDoCelu = vPozycjaCelu + a.vPredkoscCelu * T - a.vPozycja;vKierunekDoCelu = vKierunekDoCelu.Normal2D;vKierunekDoCelu = vKierunekDoCelu*a.fSpeed;vSilaSterujaca = vKierunekDoCelu - a.vPredkosc; 24. UnikanieUnikanie jest analogiczne do pocigu z tym, enaley unika predykowanej pozycji. Czylikierunek obliczonej siy sterujcej pocigu musiby przeciwny. 25. DocieranievAgentTarget = vTargetPozycja - a.vPozycja;fDystans = Len(vAgentTarget);fAktualnaPredkosc = a.fSpeed*(fDystans/fDystansSpowalniania);vSilaSterujaca = (vAgentTarget/fDystans)* fAktualnaPredkosc - a.vPredkosc; 26. Omijanie 27. Rozwizanie ? 28. Problem 29. Obwiednia napaszczynieZamy e mamy pewien zbir punktw na paszczynie.Obwiedni nazwiemy pewien podzbir punktw tworzcybry wypuk zawierajcy w sobie wszystkie punkty tegozbioru. 30. Obwiednia 31. Budowanie obwiedni czyli QuickHullint index1;int index2;math_vector arrZbiorPunktow[16];for(int i = 0; i < 16; i++){//szukam punktu index1 ktry jest najmniejszasuma x i y i punktu index2 ktry jestnajwiksz suma x i y} 32. QuickHullint arrPodzbior1[];int arrPodzbior2[];math_vector v_i1_i2 = arrZbiorPunktow[index2] - arrZbiorPunktow[index1];for(int i = 0; i < 16; i++){ math_vector v_i1_actual = arrZbiorPunktow[i] - arrZbiorPunktow[index1]; oat fCross = v_i1_i2.Cross(v_i1_actual).z; if(fCross < 0)arrPodzbior1[] = i; elsearrPodzbior2[] = i;}//index1 i index 2 s to dwa pierwsze punkty obwiedni 33. QuickHullint indexMaxArea;for(int index in arrPodzbiorN){if((fArea = area(index1, index, index2)) > maxArea){maxArea = fArea;indexMaxArea = index;}}//indexMaxArea kolejny kunkt do obwiedni 34. Szybkie liczenie pola powierzchnifloat a = p1.Distance(p2);float b = p2.Distance(p3);float c = p3.Distance(p1);float s = (a + b + c) * 0.5f; a = s - a; b = s - b; c = s - c; s = s * a * b * c;if (s < 0)return 0;return sqrtf(s); 35. QuickHull 36. Kierunek podania poobwiednimath_vector arrObwiednia[nIloscPunktow];for(int i = 0; i < nIloscPunktow; i++){//szukamy najbliszego celowi punktu na obwiedni//nie moe ten punkt nalee do agenta}int nAktualnieBadanyPunkt = najbliszy celowi punktu na obwiedni;oat fDystansUp = 0;while(nAktualnieBadanyPunkt != ten punkt nalee do agenta){ fDystansUp += arrObwiednia[nIloscPunktow - 1].Dystans2D(arrObwiednia[nIloscPunktow]); nIloscPunktow++;} 37. Kierunek podania po obwiedniint nAktualnieBadanyPunktDown = najbliszy celowi punktu na obwiedni;oat fDystansDown = 0;while(nAktualnieBadanyPunktDown != ten punkt nalee do agenta){ fDystansDown += arrObwiednia[nAktualnieBadanyPunktDown - 1].Dystans2D (arrObwiednia[nAktualnieBadanyPunktDown]); nAktualnieBadanyPunktUp ++;}if(fDystansDown < fDystansUp*s_fWspoczynik){vSilaSterujaca = nAktualnieBadanyPunktUp[nAktualnieBadanyPunktUp - 1] -agent.vPozycja;}else{vSilaSterujaca = nAktualnieBadanyPunktDown[nAktualnieBadanyPunktDown + 1] -agent.vPozycja;} 38. Materiay http://www.red3d.com/cwr/papers/1999/gdc99steer.html 39. Dzikuje za uwag.