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.

40 Minimax<br />

først søgningen, da denne er nødvendig for at kunne lave Alpha-Beta pruning<br />

(se afsnit om dette). I brede-først søgningen evalueres størstedelen af slutstadierne<br />

først n˚ar søgningen samlet har n˚aet bunden af træstrukturen, og s˚a er det<br />

for sent at begynde at skære grene af som ikke behøves søges igennem.<br />

4.1 Beskrivelse af Minimax med brede-først søgning<br />

Da bredde-først versionen af Minimax er blev skrevet som en øvelse og ikke<br />

skulle anvendes <strong>til</strong> videreudvikling, er den kun blevet skrevet <strong>til</strong> at kunne spille<br />

sort.<br />

Bredde-først versionen fungere ved først at skabe hele træet, ved at sætte det<br />

nuværende spilstadie som roden og s˚a lade hver generation vokse ud fra den<br />

forrige. Undervejs bliver der holdt styr p˚a generationerne, ved at hver Node i<br />

den nye generation gemmes i et af to arrays. Et array for ulige generationer og et<br />

for lige. Det lige array tømmes, n˚ar en nye lige generation p˚abegyndes og <strong>til</strong>svarende<br />

tømmes det ulige n˚ar en nye ulige generation startes. Det gøres, fordi det<br />

er nødvendigt at holde styr p˚a medlemmerne af de to nyeste generationer n˚ar<br />

alting foreg˚ar per generation, i stedet for at fokusere p˚a en enkelt Node og dens<br />

efterkommer eller forgænger. De endelige stadier, ogs˚a kaldet bladene, gemmes<br />

ogs˚a i et array, da bladene ikke kun vil være at finde i den sidste generation.<br />

N˚ar træet er skabt p˚abegyndes beregning af værdierne op gennem træet.<br />

Beregningen startes i den endelige generation. Alle Noderne af denne generation<br />

evalueres og f˚ar <strong>til</strong>delt en værdi. Nodernes forgænger <strong>til</strong>føjes <strong>til</strong> det ulige eller<br />

det lige array afhængigt af generationen. For næste generation p˚atager nodernes<br />

sig alle den højeste værdi af sine børn, n˚ar generationen er lige. Hvis generationen<br />

er ulige p˚atager noderne sig den laveste værdi af sine børn. Herudover<br />

evalueres alle bladene af denne generation som befinder sig i arrayet for bladene,<br />

og <strong>til</strong>føjes <strong>til</strong> det ulige eller det lige array efter generation. Alle forgængerne<br />

<strong>til</strong>føjes igen <strong>til</strong> enten det ulige eller det lige array, efter at arrayet er blevet tømt<br />

for den gamle generation. S˚aledes fortsættes der ind<strong>til</strong> værdierne n˚ar roden og<br />

det bedste træk kan vælges.<br />

4.1.1 Pseudo-kode for Minimax med brede-først søgning:<br />

Funktion : Minimax ( s t a d i e ) , r e t u r n e r e r et træk<br />

Input : s t a d i e , s p i l l e t s nuværende s t a d i e .<br />

rod = s t a d i e<br />

BeregnTræ ( SkabTræ ( rod ) )

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

Saved successfully!

Ooh no, something went wrong!