Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Koodikatselmointi #2

Open
korolainenriikka opened this issue Oct 2, 2020 · 1 comment
Open

Koodikatselmointi #2

korolainenriikka opened this issue Oct 2, 2020 · 1 comment

Comments

@korolainenriikka
Copy link

Koodi oli yleisesti ottaen helposti luettavaa; luokkien vastuujako oli erityisen selkeä ja kokonaisuuden toiminnasta pääsi nopeasti kärryille. Ylipäätään projektista näkee, että siihen on nähty vaivaa ja koodin laatua on mietitty.

Korjaus / parannusehdotuksia:
dokumentaatio:

  • Teen itsekin minimaxia ja itse löysin netistä sen tilavaativuudeksi O(bd), mutta toisaalta en itsekään osaa asiasta varmaksi sanoa.
  • Testausdokumentissa on kehitettävää; testaustavan kuvaus on tällä hetkellä aika ympäripyöreä.
  • Voisit mainita jossain, että itse tekemäsi osuus on pakkauksessa datastrctrproject ja loppu on kopioitua muulata.
  • Voisit selittää mikä on siirto-luokassa käytetty siirron ylennys, sekä lyhyesti en passant- ja tornitussiirrot.
  • Repon kopioija ei saa automaattisesti execute-oikeuksia, ohjeeseen voisi lisätä, että ennen ./gradlew build: a on ajettava chmod +x gradlew

koodaustapa:

  • tornin ja lähetin siirtojen hakua olisi syytä yksinkertaistaa: esim. lähetille final int[][] suunnat = {{-1,-1},{-1,1},{1,-1},{1,1}} ja for suunta in suunnat kohde = new Ruutu(getX+suunta[0], getY+suunta[1])
  • shakin alkutilaa kuvaava char[][] shakkitemplaatti voisi olla nimeltään alkutila tms
  • minimaxin implementointi voisi olla lähempänä pseudokoodia; minimaxin tunteva ymmärtäisi toiminnan helpommin. Ainakin syvyyden voisi asettaa väheneväksi niin, että minimax-puun alin taso, jossa heuristinen evaluaatio tehdään, olisi taso 0, siis kutsu aina syvyys-1.

algot:

  • Syvyyden 3 minimax ei ole vielä erityisen tehokas. Syvyysluokissa noin 7 on vielä heikko pelaaja, kymmenen toisella puolen hyvä, ja >20 maailmanluokkaa. Saisiko syvyyttä vielä nostettua jotenkin, oletko kokeillut syvempien hakujen kestoja? Itse löysin hyvää inspiraatiota täältä: https://www.youtube.com/watch?v=STjW3eH0Cik

pilkunviilausta:

  • minimax kahdella i:llä, heuristiikka i:llä ja eksponentiaalinen k:lla. Pahoittelut mutta nämä aina särähtää isosti :)
@noobLue
Copy link
Owner

noobLue commented Oct 2, 2020

tornin ja lähetin siirtojen hakua olisi syytä yksinkertaistaa: esim. lähetille final int[][] suunnat = {{-1,-1},{-1,1},{1,-1},{1,1}} ja for suunta in suunnat kohde = new Ruutu(getX+suunta[0], getY+suunta[1])

shakin alkutilaa kuvaava char[][] shakkitemplaatti voisi olla nimeltään alkutila tms

Hyödyllisiä mainintoja. Näiden muuttaminen tulee varmasti parantamaan koodin luettavuutta!

minimaxin implementointi voisi olla lähempänä pseudokoodia; minimaxin tunteva ymmärtäisi toiminnan helpommin.

No riippuu tietenkin mitä pseudokoodia katselee...

Syvyyden 3 minimax ei ole vielä erityisen tehokas. Syvyysluokissa noin 7 on vielä heikko pelaaja, kymmenen toisella puolen hyvä, ja >20 maailmanluokkaa.

Shakissa tuolla syvyydellä voisi yhden siirron keksimiseen kulua esim. 30 ^7 = 27_512_614_111 verran aikaa...

Tai 31^20 = 67_179_000_000_000_000_000_000_000_000 verran....

Loppuu tietokoneelta puhti kesken...

minimax kahdella i:llä, heuristiikka i:llä ja eksponentiaalinen k:lla. Pahoittelut mutta nämä aina särähtää isosti :)

Heuristiikka, eksponentiaalinen olivat hyviä huomautuksia! Mutta MinMax on mielestäni hyväksytty kirjoitustapa, Wikipediasta:
kuva

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants