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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!