Leland GauntSpelar: Smugglarens Dilemma - Lab F1PtHåkan T. JohanssonRoger LindsjöUtvecklingsteam 47 |
Leland Gaunt |
|
Vår uppgift är att skapa en datoriserad spelare som spelare `Smugglarens dilemma' mot andra datoriserade spelare. Spelets regler är sådana att man kan antingen välja att samarbeta eller luras. Om båda spelarna väljer samarbeta får båda 2 poäng, om båda luras får ingen några poäng och om en luras och en samarbetar får den som lurades 4 poäng medan den som samarbetade får -1 poäng. När alla spelare mött varandra är den som har flest poäng vinnare. Programmet skall vara skrivet i ADA.
För den som vill läsa, finns rapporten tillgänglig här (postscript) (pdf).
Spelaren består av ett tjugotal strategier som har förhandsvalts mot de flesta kända motspelarna. Leland har också möjlighet att mot vissa tillämpa en speciell dragserie. Den information som behövs för att veta vilken taktik som skall aktiveras mot vem finns i slutet på spelaren gott om information, dels taktikval, dels hela dragserier.
Vår spelare har 20 olika metoder att spela med, dessa finns i varsin fil, för att sedan sättas ihop till en enda. De olika metoderna:
Vår spelare består dessutom av ett antal globala variabler:
type OppSpecsArray is array(1 .. <antal kända motspelare>) of OppSpecsRec; type MoveSpecsArray is array(1 .. <antal fördefinierade dragserier>) of MoveSpecsRec;
Och givetvis, spelarrutinen Player47.adb.
Innan spelaren skapas kontrollerar vi med ett specialprogram vilka metoder som skall användas mot vilka motspelare. Först kontrolleras vilka spelare som finns tillgängliga, sedan spelas matcher mellan nya/ändrade spelare, dels mot oss, dels mot varandra. Om vi upptäcker att någan annan spelare X är mycket bättre än vår bästa metod mot en annan spelare Y, kontrollerar vi Xs dragsekvens mot Y och testar vad som händer om vi använder den mot Y; om det går bra, använder vi den. Spionen är skriven i C++ och består av tre filer källkod:
Så här kan det se ut när spionen är igång.
Spelargeneratorn sätter ihop spelare47.adb från alla delfilerna (Global_variables1.adb, Global_varibales2.adb, Default.adb, Titfortat.adb, ..., Predefpattern.adb, Player47.adb) samt taktik och dragseriefunktion. Generatorn är också skiven i C++ och består av:
Om du har kommentarer, tips, frågor, idéer, vad som helst:
E-Mail: Håkan T. J.
Till vänster ses spelarnas poäng normerade (dvs, delade med antalet drag varje
spelare fått göra).
1 Leland Gaunt 47 262943 2 Einstein 15 260448 3 The Staff of Law 72 250646 4 Jason 4 247797 5 Mitt namn är Nej 49 239421 6 Brecht DDF3 75 239124 7 My little pony 41 238739 8 El Zorro 3 238700 9 johndoe 5 238670 10 Looser 6 238664 11 File not found 64 238651 12 Akilles_ny 29 238640 13 Badger 60 238639 14 Bert-Knut 40 238626 15 **Dark Avenger** 63 238575 16 Nu jävlar! 21 238573 17 Picard 7 238503 18 Becky 16 238472 19 Madde Albright 50 238471 20 Mohammad 11 238464 21 mishformash 80 238450 22 SET_PAGE_LENGTH 13 238256 23 A 56 238251 24 Ville Vessla I 42 238228 25 You Bastard 57 237984 26 Flossy 28 237943 27 Nurse Ratched 45 237896 28 Uffe Ekman 9 237888 29 Numb 62 236787 30 Nerd-patrol(lam) 32 236710 31 Wedge Antilles 20 236653 32 Groover 59 236609 33 Mithrandir 24 236395 34 Jansson 30 235691 35 TitforTat 81 235460 36 Kanon en o en 35 234917 37 Tant Gredelin 25 234738 38 Skalman 44 234609 39 K3 18 232894 40 Hekla_o_Cajo 27 225314 41 Bramserud 8 224499 42 Kinkyboy 31 223954 43 Fallos 53 223690 44 Si solutions-55 55 223613 45 JAS 52 222385 46 Bluff & båg 51 222186 47 John Silver 46 220564 48 Mulo 43 219721 49 Fluortanten 65 219375 50 ?????? 33 219134 51 Nisse 39 217619 52 Grymme!! 38 216212 53 Ey_Paco 17 212965 54 Buttersmurfen 1 210790 55 ångvälten 22 210327 56 Kasparov 58 203849 57 LOKET 26 203737 58 The champions 2 202453 59 Gud 69 198324 60 !!!! 23 190679 61 Rotary pub 12 185309 62 Kjell_Kriminell 76 121333 63 Ohoj Postbanken! 34 59064 64 Xerxes 71 57094