Skak:Kravspecifikation/AI: Forskelle mellem versioner

Fra DAMNWiki
Spring til navigationSpring til søgning
No edit summary
No edit summary
 
(2 mellemliggende versioner af 2 andre brugere ikke vist)
Linje 1: Linje 1:
== Krav til den kunstige intelligens ==
== 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 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 kunne vælge hvilken farve AI spiller (dvs. om AI eller bruger starter).


* Skal have mulighed for at bruge forskellige åbninger
* Skal have mulighed for at bruge forskellige åbninger.
** 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æ
** 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. Dette vil ikke gælde hvis den spiller mod sig selv - her benyttes processorkraften jo til dens modpart
* 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æ
* 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.
* Mulighed for at vælge sværhedsgrad.
** F.eks. tre foruddefinerede niveauer
** 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
** 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.
* 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 ==
== AI ==
* 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, har vi endnu ikke undersøgt.


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.


[[Category:Fagprojekt]]
[[Category:Fagprojekt]]

Nuværende version fra 12. mar. 2007, 21:51

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.

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.