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.

5.3 Hash funktioner 57<br />

hvilket igen blot kan gøres ved at tælle antallet af enten sort eller hvide felter.<br />

I denne implementering er dybden endda gemt i hver eneste Node, s˚a den er<br />

hurtigere og lettere <strong>til</strong>gængelige end som s˚a, da en hashfunktion faktisk slet ikke<br />

er nødvendig. Udover <strong>til</strong>gængeligheden vil fordelingen af spilstadierne ogs˚a være<br />

ganske udmærket. P˚a trods af at der vil værre færre stadier gemt i de først generationer,<br />

vil spilstadierne være godt fordelt ud over de forskellige generationerne.<br />

Scoren er ogs˚a en mulig hash værdi, da scoren selvfølgelig altid ville være den<br />

samme for ens stadier. Differencen i scoren vil dog i et spil mellem jævnbyrdige<br />

modstander ofte ligge tæt omkring værdien 0, hvilket vil betyde at store dele af<br />

stadierne vil havne i samme grupper. Derfor vil de oftest forekommende <strong>til</strong>fælde<br />

kræve de største søgninger. Dette er selvfølgelig ikke hensigtsmæssigt. Ved at<br />

anvende de to score i stedet for blot difference mellem dem, kan der skabes mere<br />

variation i hashværdierne. Dette kan f.eks. gøres ved at anvende hashfunktionen:<br />

hashværdi = hvids score + (sorts score · (max score + 1))<br />

Med denne hashfunktion vil kun de spilstadier, der har præcis samme score per<br />

spiller, f˚a samme hashværdi. For mange spilstadier vil scorerne ligge omkring<br />

de samme værdier, men slet ikke i s˚a høj grad, som n˚ar kun differencen anvendes.<br />

Selve hashtabellen er blevet lavet som et to-dimensionelt array. Spilstadierne<br />

bliver inddelt i denne tabel efter to hashværdier som bestemmer i henholdsvis<br />

hvilken række og hvilken kolonne det enkelt spilstadie placeres. Den ene af disse<br />

værdier er dybden. Omkostningerne i form af regnekraft for at fremskaffe den<br />

er stort set ikke eksisterende, samtidigt med at den gør et glimmerende stykke<br />

arbejde, n˚ar det kommer <strong>til</strong> at fordele stadierne ud nogenlunde ligeligt. Den<br />

anden værdi bliver overladt <strong>til</strong> en mere traditionel hashfunktion.<br />

I første omgang fik hashfunktionen baseret p˚a scoren opgaven at fordele stadierne,<br />

og blev nanvgivet hashFunction. Kombinationen af hashFunction og dybden<br />

fungere rimeligt godt p˚a sm˚a brætter, hvor det er muligt at regne hele spiltræet<br />

igennem. Denne kombinationen har dog, uanset hvilken størrelse et bræt har,<br />

den ulempe at generationen og scoren ofte følges ad, jo længere inde i spillet,<br />

jo højere score. Men de største problemer opst˚ar p˚a store brætter, hvor det<br />

kun er muligt at søge f˚a generationer frem. For de første par træk i spillet vil<br />

scoren altid være den samme. For første træk vil der blive lagt en brik, hvilket<br />

altid vil give et point <strong>til</strong> sort og et point <strong>til</strong> hvid, og da det er er de to største<br />

figurer der tæller, vil andet træk resultere i scoren to-to uanset hvordan den<br />

anden brik placeres. Først ved spillets tredje træk fremkommer nogen form for<br />

variation nemlig s<strong>til</strong>lingerne to-to, to-tre, tre-to og tre-tre. Resultatet er alts˚a<br />

at hashFunction lige s˚a vel kunne have være undladt for de først to træk og kun<br />

opdeler spilstadierne i yderligere fire grupper for det tredje.

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

Saved successfully!

Ooh no, something went wrong!