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
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.