Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Akhera
Založen: 27. 01. 2008 Příspěvky: 37 Bydliště: Říčany
|
Zaslal: 29. leden 2008, 18:24:04 Předmět: Rychlejší Pathfinding |
|
|
Pro svou hru používám algoritmus A*, bohužel se ukazuje, že ve Flashi je jeho základní verze příliš pomalá - průměrně trvá 0,5 až 1 sekundu, ale v nejhorších případech i 4, což je i pro tahovou strategii neúnosné.
Vím, že problém není v technologii, protože tenhle http://www.schuirink.net/~casper/flash/AI/path-flasm.html program to samé zvládá 10-15x rychleji, což by mi bohatě stačilo, jenže zdrojový kód nikde... Nevíte náhodou, jak by se dal algoritmus A* optimalizovat, nebo kde je na to nějaký návod? Na netu nemůžu nic najít... |
|
Návrat nahoru |
|
|
adragon
Založen: 23. 08. 2007 Příspěvky: 72 Bydliště: Praha
|
|
Návrat nahoru |
|
|
Weny Sky
Založen: 28. 07. 2007 Příspěvky: 241
|
Zaslal: 29. leden 2008, 18:55:19 Předmět: |
|
|
Pouzivas pro ulozeni seznamu kandidatu na dalsi krok haldu nebo ty prvky hazes do pole a pak je v nem hledas?
Jinak rychlost zvysis zmenou heuristiky. Treba tak, ze uzly jdouci k cili ohodnotis vyhodnej, nez uzly, ktere jsou opacnym smerem od cile. Timto dosahnes toho ze se algorimus bude hnat za cilem rychlej nez normalne, ale nevyhodou muze byt, ze jiz nemusi nalezt opravdu nejkratsi cestu, ale treba cestu o par policek delsi |
|
Návrat nahoru |
|
|
Pavel
Založen: 29. 07. 2007 Příspěvky: 54 Bydliště: Litovel
|
Zaslal: 29. leden 2008, 19:00:01 Předmět: |
|
|
hmm...ja myslel, ze A* je Dijkstra, rozsirena o heuristiku a plati, ze pokud se jedna o "admissible" heuristiku pak je cesta i nejkratsi.... |
|
Návrat nahoru |
|
|
Akhera
Založen: 27. 01. 2008 Příspěvky: 37 Bydliště: Říčany
|
Zaslal: 29. leden 2008, 19:06:28 Předmět: |
|
|
Díky za pomoc, ale nakonec jsem to vyřešila sama
Původně se seznam dalších kandidátů srovnával podle ceny, ale překvapivě se ukázalo, že nesrovnávat seznam a místo toho v něm hledat je skoro 10x rychlejší. Byl to zoufalý pokus, ale dopadl dobře |
|
Návrat nahoru |
|
|
Fila
Založen: 31. 07. 2007 Příspěvky: 853
|
Zaslal: 29. leden 2008, 20:09:32 Předmět: |
|
|
Tomu uplne nerozumim -- co je to srovnavat seznam? Jako stovnavat, zdali obsahuji dva seznamy stejne prvky (v libovolne permutaci)? To je sakra pomale . Hledas v nem nejak sofistikovane, nebo tak, ze jej projdes cely? Kdyztak sem hod kod, treba by se dal jeste urychlit... I ta 1/10 sekundy je i na ActionScript moc, pokud nemas fakt velkou mapu. |
|
Návrat nahoru |
|
|
Quiark
Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 29. leden 2008, 20:12:56 Předmět: |
|
|
Podle mě bylo myšleno řadit ho. V závislosti na použitém třídícím algoritmu může třídění setřízených dat trvat docela dlouho a proto je rozdíl mezi "udržovat seznam setřízený" a "po každém přidání prvku ho znovu setřídit". _________________ Mám strach |
|
Návrat nahoru |
|
|
Fila
Založen: 31. 07. 2007 Příspěvky: 853
|
Zaslal: 2. únor 2008, 12:16:37 Předmět: |
|
|
Jasne, uz to tam vydim. Kdyby jsi chtela rychle hledani i rychlou aktualizaci seznamu, sahni po nejakem automaticky balancovanem vyhledavacim strome, treba AVL nebo cernobilem. Pokud by ti to prislo zbytecne slozite a nedelas v seznamu moc velke zmeny (jakoze treba pridas jednu dve hodnoty), pouzij bubblesort, jen ho pust odzadu, pokud pridavas nove prvky na konec .
Ale asi by to chtelo fakt videt cely ten kod, jestli pouzivas razeny seznam jako prioritni frontu, bylo by spis lepsi implementovat haldu. |
|
Návrat nahoru |
|
|
Akhera
Založen: 27. 01. 2008 Příspěvky: 37 Bydliště: Říčany
|
Zaslal: 2. únor 2008, 13:40:33 Předmět: |
|
|
No nakonec seřazování seznamu vůbec není potřeba, upravila jsem pathfinding tak, aby nehledal, jak se nejrychleji dostat na nějaké místo, ale aby našel a označil všechna místa, kam jednotka se svými akčními body může jet. Sice výpočet trvá asi 0,2s, ale děje se to vždy jen při označení jednotky, pak už žádné další výpočty nejsou třeba |
|
Návrat nahoru |
|
|
|