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