09.09.2013 Views

Kunstig Intelligens til Brætspillet Taiji - Danmarks Tekniske Universitet

Kunstig Intelligens til Brætspillet Taiji - Danmarks Tekniske Universitet

Kunstig Intelligens til Brætspillet Taiji - Danmarks Tekniske Universitet

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

56 Optimering af Minimax<br />

som et unikt stadie, eller om det blot skal bruges <strong>til</strong> at <strong>til</strong>føje ny information <strong>til</strong><br />

et allerede eksisterende stadie.<br />

Denne søgning efter ens stadier kan, hvis den bare udføres blindt, potentielt øge<br />

tidsfaktoren s˚a meget at det ikke kan betale sig at g˚a fra spiltræ <strong>til</strong> spilgraf.<br />

Søgningen skal udføres for hvert stadie i spillet, og da der er tusinder af stadier,<br />

skal der for tusindvis af stadier søges igennem netop tusindvis af stadier. Dette<br />

vil selvfølgelig være et større problem i slutningen af et spil end i starten, hvor<br />

der endnu ikke er s˚a mange stadier at søge igennem. Desuden kan et matchende<br />

stadie findes tidligt i søgning, som s˚a kan afsluttes der. I gennemsnit kan det forventes<br />

at et stadie findes halvvejs inde i søgningen, men dette gælder selvfølgelig<br />

kun i <strong>til</strong>fælde hvor der er et matchende stadie. Er der ikke et matchende stadie,<br />

vil det være nødvendigt at søge alle stadierne igennem for at konstatere at der<br />

ikke er et.<br />

Dette vil give d˚arlig svartid, hvis der søges blindt fra enden <strong>til</strong> anden. Men<br />

søgningen kan optimeres ved at begrænse den <strong>til</strong> et mindre omr˚ade hvori det<br />

kan afgøres at stadiet enten eksisterer eller ikke eksisterer.<br />

Det er her hashtabeller kommer ind i billedet. Hashtabeller 1 bruges <strong>til</strong> at gøre<br />

søgninger hurtigere, ikke kun i spiltræer men i alle former data. Det gøres ved at<br />

opdele data i grupper, s˚aledes at det kun er nødvendigt at søge en enkelt gruppe<br />

igennem for at konstatere om dataene eksistere eller ej. For at bestemme hvor<br />

i hashtabellen et stykke data skal placeres, er det nødvendigt at en hashfunktion<br />

beregner en hashværdi for det stykke data der skal gemmes. Hashværdien<br />

fungerer lidt ligesom et postnummer og bestemmer hvor i hashtabellen dataene<br />

skal gemmes, og derved ogs˚a hvor de kan findes og findes hurtigt igen. For at<br />

dette skal fungere, er det nødvendigt at hashværdierne overholder nogle regler.<br />

Flere stykker data m˚a godt f˚a <strong>til</strong>delt samme hashværdi, dette betyder blot at de<br />

havner i samme gruppe. Derimod m˚a to ens stykker data ikke kunne f˚a forskellige<br />

hashværdier, da system s˚a ikke længere vil være p˚alideligt. Det vil fejlagtigt<br />

give svaret at der ikke findes flere forekomster af et givne stykker data, selvom<br />

dette ikke er korrekt.<br />

Da der for hvert træk lægges en brik, og da der p˚a intet tidspunkt hverken<br />

fjernes eller flyttes brikker, vil to ens stadie kun kunne opst˚a i samme generation,<br />

da to ens stadier altid vil have samme antal brikker. Af denne grund kan<br />

dybden p˚a træet anvendes som en hash værdi.<br />

Ulempen ved at bruge dybden er at de forskellige generationer meget hurtigt<br />

kan komme <strong>til</strong> at indeholde rigtigt mange spilstadier. Især de midterste generationer<br />

i spillet, hvor der er mange stadier i den tidligere generation at komme<br />

fra, og der stadig er mange fri muligheder for placering af nye brikker.<br />

Der er dog flere fordele ved at benytte dybden som en hashværdi. Den er nem<br />

at komme <strong>til</strong>, det er blot at holde styr p˚a turen eller tælle antallet af brikker,<br />

1 Der kan findes mere information om hash-tabeller og -funktioner i ”Introduction to Algo-<br />

rithms”, kapitel 11.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!