Skak:Kravspecifikation/AI
Krav til den kunstige intelligens
- Skal kunne spille skak korrekt, ud fra de gældende regler.
- Herunder altså også En passant, rokade og queening (se definition af disse under spillogik).
- Benytter skak-modellens getLegalMoves() til at sørge for dette.
- Skal kunne vælge hvilken farve AI spiller (dvs. om AI eller bruger starter).
- Skal have mulighed for at bruge forskellige åbninger.
- Gør AI'en mere menneskelig
- Skal vælges tilfældigt ud fra en liste.
- Herunder skal det være muligt for AI'en at vurdere om en åbning er blevet ødelagt af modstanderen - altså at den ikke længere skal benytte åbningen, men gå over til at søge i spiltræet.
- Skal kunne tænke mens det er modstanderens tur, for at få en følelse af at det rent faktisk er en anden person, der spiller.
- Dette vil ikke gælde hvis den spiller mod sig selv - her benyttes processorkraften jo til dens modpart.
- Skal benytte alpha-beta pruning (se design for beskrivelse af denne) til søgning i træ, da almindelig minimax slet ikke er effektivt nok.
- Mulighed for at vælge sværhedsgrad.
- F.eks. tre foruddefinerede niveauer (nem, mellem, svær)
- Kunne også være en mulighed at brugeren kan bestemme hvor lang tid AI'en må tænke og/eller hvor langt dybt i træet den må søge. Her har brugeren altså bedre muligheder for at bestemme præcis hvor svær AI'en skal være at spille mod.
- AI'en skal også benyttes til brugerfunktionen "Vis hint". Her vil det være naturligt at AI'en f.eks. automatisk gemmer det bedste træk den finder efter f.eks. 2 halv-træk. Dette kan gøres parallelt med at søgningen alligvel foregår, mens brugeren tænker.
Mulige udvidelser
- Vurdere hvor vidt et træk er dumt, så en søgning denne vej kan undgås. Om dette i virkeligheden vil kræve mere processorkraft end rent faktisk at evaluere brættet, og om det overhovedet er muligt at beregne på en fornuftig måde, har vi endnu ikke undersøgt.
AI
Grundstenen i vores AI vil være bygget op omkring spiltræssøgning. Her er det oplagt at bruge minimax algoritmen (beskrevet i oplæget og på wikipedia). Helt enkelt prøver minimaxalgoritmen at minimere det maksimale tab. Den enkle minimax er dog alt for langsom, da den søger i det komplette spiltræ. Her kan man i stedet bruge alpha-beta-pruning, der begrænser søgetræet til gode løsninger, dvs at den ikke søger i de dele af træet, der er indeholder dårligere løsninger, end den hidtil bedst fundne løsning.
Evalueringen af de forksellige positioner i træet, vil blive afgjort af vores evalueringsfunktion. Den ser på hver enkelt brik, og afgør ud fra en række egenskaber, hvor mange point brikken skal gives. Til sidst summerer man over sine egne brikker i spillet. Søgefunktionen skal nu prøve at foretage ryk, så man maksnimerer sit antal point i spillet. Værdifulde brikker gives naturligvis et højere antal point.