Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Johnn195
Založen: 13. 10. 2013 Příspěvky: 6
|
|
Návrat nahoru |
|
 |
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 12. únor 2016, 11:08:22 Předmět: |
|
|
Neber si to osobne, ale ty zdrojaky jsou nepochopitelne, necitelne, nikdy v zivote jsem jeste nevidel takovouhle duplicitu kodu, abstrakce je nulova (konkretne mluvim o Arrays::aiNormal(), Arrays::aiEasy(), Arrays::winX(), Arrays::winO(), zbytek programu jsem nevidel). Takovyhle program se neda vubec pochopit a udrzovat. To je typicka ukazak brute-force, copy-paste programovani.
Jinak standardni pristup pro AI u tohoto typu problemu je minimax a alpha-beta pruning, ale v tomto pripade je to spis vedlejsi detail  |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 12. únor 2016, 13:49:57 Předmět: |
|
|
Radis napsal: |
Jinak standardni pristup pro AI u tohoto typu problemu je minimax a alpha-beta pruning, ale v tomto pripade je to spis vedlejsi detail  |
ano, alphabeta funguje dobre pro damu nebo sachy, ale jsou hry, kde se alphabeta nepouziva (napr. go)
tam se pouziva MCTS - mimochodem AlphaGO od Google DeepMind zaznamenalo velice nedavno fenomenalni uspech, kdy se podarilo porazit profesionala
(2p =2. dan pro) a nekdy v breznu se chteji utkat s Lee Sedolem (9p), coz je v posledni dekade nejuspesnejsi hrac go na svete
pro zajimavost, moderni sachove enginy maji BF ~2 nebo min (=2x tolik uzlu pro vyssi hloubku, tedy pultah dopredu), tzn. provadi se velmi agresivni pruning a redukce; minimax ma pro sachy BF ~35
a ještě mimochodem, v praxi se nepouziva minimax, ale negamax transformace, tj. kazdy hrac maximalizuje ze sveho pohledu => tedy vyrazna redukce logiky v kodu (velmi casta chyba zacatecniku, kde pisou zvlast logiku pro min [cerneho] a max [bileho] hrace),
samozrejme se bavim o negamax transformaci alphabety,
klasicky minimax je sam o sobe nepouzitelny tak jako tak, protoze nedosahne nikdy zajimavou hloubku (i kdyz na me by asi stacil), alphabeta je pouze zlepseni nad naivnim minimaxem
a velmi zavisi na poradi prohledavanych tahu (v nejhorsim pripade degeneruje alphabeta na minimax)
ale to jen tak bokem; zpatky on topic: se strednim levelem jsem jednou vyhral a jednou prohral, takze spokojenost |
|
Návrat nahoru |
|
 |
Reniezs
Založen: 29. 07. 2007 Příspěvky: 273
|
Zaslal: 13. únor 2016, 13:07:36 Předmět: |
|
|
Snaha se cení Můj první kód vypadal podstatně hůře. Hlavní je na sobě pracovat a brát zřetel na rady od zkušenějších. Věřím že příští projekt bude po stránce kódu propracovanější. Držím palce. _________________ https://szeiner.com - Nezávislé vývojářské studio SZEINER s.r.o. |
|
Návrat nahoru |
|
 |
Johnn195
Založen: 13. 10. 2013 Příspěvky: 6
|
Zaslal: 18. únor 2016, 16:40:40 Předmět: |
|
|
Radis: Osobně si to neberu, zvlášť když jsi viděl jen 4 metody
Ale uvědomuji si nedostatky, které jsi napsal. Uvědomuji si, že současný algorytmus, který používám pro AI (jedná se o jednoduší minmax) není zcela ideální. V metodě aiEasy() se nachází jednoduší, v metodě aiNormal() už o něco vyladěnější. V budoucnu snad najdu čas a energii něco s tím udělat.
Co se týče metod winX() a winO(), ty jsem vzal už z jednoho svého staršího projektu a implementace to není nejvhodnější, ale už jsem to přepsal do jedné metody win(QString), která jako argument přebírá řetězec s vítěznou řadou.
Zdrojové soubory na githubu už jsou updateovány.
Jinak všem děkuji za odezvu  |
|
Návrat nahoru |
|
 |
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 18. únor 2016, 23:17:33 Předmět: |
|
|
Johnn195 napsal: |
zvlášť když jsi viděl jen 4 metody  |
...do kterych se ti podarilo vmestnat kompletne celou hru krome UI. |
|
Návrat nahoru |
|
 |
Johnn195
Založen: 13. 10. 2013 Příspěvky: 6
|
Zaslal: 18. únor 2016, 23:29:01 Předmět: |
|
|
Radis napsal: |
...do kterych se ti podarilo vmestnat kompletne celou hru krome UI. |
Metody na které jsi se díval, měly a mají stále stejnou funkčnost, což je vrácení hodnoty bool u metody win(). aiEasy() a aiNormal() vrací index pole tahu pro AI. Takže se se nejedná o celou hru kromě UI. Ikdyž se samozřejmě jedná o dost důležitý základ
edit: pro doplnění metoda win() kontroluje zda nedošlo ke konci hry |
|
Návrat nahoru |
|
 |
|