Skip to content

Koodikatselmointi #3

@tykkipeli

Description

@tykkipeli

Hyvää työtä. Koodi näyttää oikein siistiltä ja hyvin kommentoidulta. Testejäkin on kohtuullisesti.

ArvoSiirto-nimi luokalle on ehkä vähän harhaanjohtava. Siitä tulee mieleen, että siirto arvottaisiin.

Transpositiotaulun avulla hakua voitaisiin tehostaa. Tällä hetkellä minmax-algoritmi voi päätyä laskemaan saman position arvon moneen kertaan sillä sama positio voidaan saavuttaa eri siirtosarjojen kautta. Algoritmi tehostuu, jos minmax-algoritmin alussa aina tarkistetaan onko position arvo jo laskettu.

Sellainen asia, joka voisi nopeuttaa koodin vakiokertoimia, olisi käyttää koko ajan samaa lautaa minmax-algoritmin aikana. Tällä hetkellä joka siirtoa varten rakenntaan kokonaan uusi lauta uutta siirtoa varten. Sen sijaan siirto voitaisiin tehdä jo olemassa olevalla laudalla, sitten kutsuttaisiin rekursiivisesti minmax-algoritmia ja kutsun jälkeen tehty siirto peruttaisiin. Tällöin siirron tekemiseen tarvitaan vain pari pientä operaatiota eikä tarvitse kopioida koko lautaa joka kerralla.

Alpha-beta etsinnän kannalta olisi tärkeää, että siirrot järjestettäisiin jonkin järkevän heuristiikan avulla aina ennen siirtojen kokeilemista, jotta haaroja saataisiin karsittua mahdollisimman paljon. Siirtojen järkevällä järjestämisellä on valtava vaikutus alpha-beta etsinnän tehokkuuteen.

minArvo ja maxArvo olisi mahdollista yhdistää yhdeksi metodiksi, mikä säästää koodin toisteisuutta. Tähän kävisi Negamax-algoritmi.

Heuristiikka on shakkiin ehkä vielä aika yksinkertainen. Sitä voisi ehkä vielä parantaa, vaikka toki kieltämättä shakkiin ei ole turhan helppoa keksiä hyviä heuristiikkoja, sillä esim. kuninkaan turvallisuudella on täysin eri merkitys alku- ja loppupelissä.

Jos on aikaa ja mielenkiintoa niin seuraavat kikat tunnetusti toimivat shakissa hyvin:
killer-heuristiikka eli jos jokin siirto on paras siirto jossain variaatiossa niin on todennäköistä että se on myös parassiirto jossain toisessa variaatossa.
vaihteleva laskenta syvyys:
jos juuri tehty siirto esim. lyö jonkin nappulan niin tätä laskentahaaraa kannattaa laskea vielä pikkaisen syvemmälle, sillä monesti vastustaja voi lyödä takaisin ja muuten heuristiikka antaa todella huonon arvion positiosta.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions