I am using lil-gp as my GP package which was written by 2 people from the University of Michigan, Douglas Zongker and Dr. Bill Punch, however Bill Rand has taken over the primary responsibility of maintaining lil-gp. I am planning to run this simulation off of my Be Box which is a relativly new PowerPC machine with 2 66 MHz 603's currently with 24 megs of RAM and a 240MB Quantum IDE hard drive.
My current plans are to run each bot agaist every other with the one currently being checked starting out as being tagged (havnt desided yet if it should play itself, something interesting to think about though!). Its fitness would then be the amount of "ticks" that the bot was not it. I am probably going to run with generations ranging from 500 to 2,000 bots with a 1,000 steps (one time through the bots code) per battle. Depending on how my BeBox runs I will probably alter these values (hopefully higher and not lower!). I will then probably replace somewhere from 25% to 50% of the lower population @ 80% and a totally random pick 20% of the time to help prevent a lucky stragity from taking over. The removed bots will then be replaced by mutated and crossed versions of the other 50%-75% remaining bots.
The 2 "bots" will play in an wrapping arena 700 x 575 units big. Each bot will take up a single unit and will have a reach of 2 units away. To make things interesting, the bots use up energy to move around and to change speed. If they run out of energy they are stuck and will most likly remain taged or get tagged if they arnt already. There will also be random energy pellets and energy mines in the playing field, a pellet will give you more energy and a mine will damage you by taking away some of your energy.
Each bot knows where the other bot is in its own local rectangular coordinates. This way there is no need for complex math on the bots part to figure out where his opponate is relative to the direction he is moving. I am planning to work out the local coordinates such that when they cross a boundry and get flung to the other side they will not notice it and it will act as if they are in an infinate sized arena.
Current List of Funtions/Terminals | ||
---|---|---|
Functions | ||
Function Name | Purpose | Source |
(if-it a b) | If the bot is it, a, else b | Reynolds '94 |
(set!-spd a) | Sets bots new speed to a | This project |
(set!-dir a) | Sets bots new direction to a | This project |
(+ a b) | Returns a + b | Common Lisp |
(- a b) | Returns a - b | Common Lisp |
(* a b) | Returns a * b | Common Lisp |
(/ a b) | Returns a / b (if b == 0 then a / b = 0) | Reynolds '94/Koza '92 | (% a b) | Returns a mod b (remainder of a / b) | Common Lisp |
(min a b) | Returns the smaller of a or b | Common Lisp |
(max a b) | Reutnrs the larger of a or b | Common Lisp |
(abs a) | Returns the absolute value of a | Common Lisp |
(iflte a b c d) | If a <= b then c else d | Renyolnds '94/Koza '92 |
(ifgt a b c d) | If a > b then c else d | This project |
Terminals | ||
Terminal Name | Purpose | Source |
energy | Current Energy Level | This project |
curspd | Current Speed | This project |
curdir | Current Direction | This project |
X | Opponants Local X | Reynolds '94 |
Y | Opponants Local Y | Reynolds '94 |
englocx | Local X of closet Energy Pellet | This project |
englocy | Local Y of cloest Energy Pellet | This project |
minelocx | Local X of closet Mine | This project |
minelocy | Local Y of cloest Mine | This project |