Home | Yace - Yet Another Corewars Evolver
 
Genetic Programming

Yace
  Introduction
  Downloads
  Benchmarks
  Planned Updates
  Some Results
  History
  
Exhaust-ma
  Introduction
  Downloads
  Benchmarks
  
exMARS
  Introduction
  Status
  Downloads
  User Interface
  
QMars
  Introduction
  Downloads
  Benchmarks
  Usage
  Copyright
  History

 

If you don't know what CoreWar is, you should have a look at some beginner guides which can be found at http://www.koth.org.

Here you can find Yace, which is a program that automatically creates corewar-warriors, using a genetic algorithm. Yace was a modified version of ga_war.c, another corewar evolver (many thanks to Jason Boer), but in the latest release there is not much code left from ga_war. I also want to thank M Joonas Pihlaja for his Corewar Simulator exhaust, which is released under the GPL.

 

Latest release:
nsis yace_1.2-inst.exe for Windows users
bzip2 yace_1.2.tar.bz2 for Unix users (or l33t Windows-geeks ;-)

Both releases include exactly the same files:

  • Win32-executable which was created with MS Visual C++ 6.0 and compressed with UPX.
  • Sourcecode which should compile with GNU-Utilities (make, gcc or any other ANSI-C compiler)
  • Project Files for MS Visual C++ 6.0
  • franz' testset for tiny-hills, an update (from Feb. 2002) copy of the top 20 from corewars.sourceforge.net.

Terry Newton has written a description of yace and some batch-files for easier use of it.

 

Here is a list of results I got from the new Benchmark! Try yace -bench and mail me your results if you want to be listed here, or use ICQ 94298825 if you want.

Please note that you shouldn't use yace to find out which pc is better, there are much better benchmarks to do this. It is only useful if you want to know how long it will take to create really good warriors on your machine.

Speed Battles/sec Processor MHz Battles/Mhz Compiler OS Tolerance
388.0%
1x1
5232.43 AthlonXP 2100+ 2506 2.088
1x1
VC 6.0 /Ox /Ob2 WinXP 0.86%
250.3%
1x1
3375.33 AMD T-Bird 1610 2.096
1x1
VC 6.0 /Ox /Ob2 WinXP 0.86%
182.3%
1x1
2457.67 Intel P4 1500 1.638
1x1
VC 6.0 /Ox /Ob2 Win2k 4.69%
143.7%
1x1
1938,00 AMD Athlon 1000 1.938
1x1
VC 6.0 /Ox /Ob2 Win98 2.02%
100.0%
1x1
1348,33 Intel P III 800 1.685
1x1
VC 6.0 /Ox /Ob2 Win98 1.93%
100.0%
1x1
1348.27 AMD Duron 650 2.074
1x1
VC 6.0 /Ox /Ob2 Win2k 1.30%
67.9%
1x1
914.93 AMD Duron 650 1.408
1x1
BC 5.5.1, -O2 Win2k 1.46%
63.0%
1x1
849.00 AMD K6-2 500 1.698
1x1
VC 6.0 /Ox /Ob2 Win2k 1.53%
51.6%
1x1
695.37 AMD K6-2 400 1.738
1x1
gcc, -O3 FreeBSD 4.4 1.34%

Explanation:

  • Speed: how fast is the computer compared to the reference - PC, my Duron 650/Win2k/Visual C++ 6.0.
  • Battles/sec: how many battles the computer is able to do in one second with the reference-warriors.
  • Battles/MHz: let you compare different compilers, how well processors are able to scale, different processor architectures, and so on... Everything you can imagine :)
  • Tolerance: The benchmark is done 4 times, and the tolerance shows how much results differ. Tolerance should be as low as possible if you want precise results.

Please do not modify the benchmark-warriors because results would get useless.

 

P D Description
10 3 Rewrite everything in readable C++

  • P: Priority of the task, 0=lowest, 10=maximum
  • D: How difficult the task is (also includes how time consuming it is), 0=easy, 10=impossible

 

Some warriors created with yace. All warriors have been king of the Hill on the tiny-hill at corewars.sourceforge.net for some time.

Created after about 4 days from scratch on a Duron 650 with Win2000, Visual C++ 6.0. I used Franz' testset.

Evolver 1100 x 500

;redcode-94
;assert 1
;author Martin Ankerl martinankerl@web.de
;name Evolver  1100 x   500
;strategy created with YACE - yet another corewar evolver
;strategy http://www.fhs-hagenberg.ac.at/students/se/se00001/
mov.i  #    247, }     20
mov.i  #    411, }     20
spl.x  $    184, {    785
spl.i  $    797, *    790
spl.ba #    793, <    274
mov.i  <    798, >     16
mov.i  }    793, }    796
mov.i  @      5, <    796
div.x  >    796, >    796
end 0

Opponent         Scores    Results    Performance of Evolver
--------         ------    -------    ---------=---------=---------=---------=
Tiny Wicked Pet  896 515   142 269 89 *************
Tiny Tiberius"   739 589   139 189 172***************
Tiny Spiral" (l  434 731   132 33 335 *******************
Tiny Porter (+1  824 617   186 255 59 ****************
Golden Gate v4"  582 900   294 188 18 ************************
Tiny Everclear   564 885   278 171 51 ***********************
Tiny Brutality"  336 104   310 73 117 ***************************
Tiny Barbarian   764 488   80 172 248 *************
Tiny AK-47" (le  714 738   230 222 48 *******************
D-Clear" (lengt  227 124   405 66 29  *********************************
--------         ------    -------    ---------=---------=---------=---------=

Adjusted Score: 155

Evolver 4870 x 200

;redcode-94
;assert 1
;author Martin Ankerl martinankerl@web.de
;name Evolver  4870 x   200
;strategy created with YACE - yet another corewar evolver
;strategy http://www.fhs-hagenberg.ac.at/students/se/se00001/
mov.b  }    213, $    198
spl.x  #    270, >    182
mov.i  >    797, }      1
spl.ab {    270, <    791
mov.i  @      3, {    390
mov.i  @     14, <    789
djn.b  $    798, <    415
djn.ba $    798, {    415
djn.b  $    182, *      7
dat.b  >    255, *     19
add.f  *     19, {    405
spl.f  }    783, <     18
spl.f  >    783, <     18
djn.b  {    276, }     18
jmn.f  <      1, }    194
end 0


Opponent         Scores    Results    Performance of Evolver
--------         ------    -------    ---------=---------=---------=---------=
Tiny Wicked Pet  774 642   186 230 84 *****************
Tiny Tiberius"   804 630   188 246 66 ****************
Tiny Spiral" (l  339 825   163 1 336  **********************
Tiny Porter (+1  905 515   145 275 80 *************
Golden Gate v4"  621 846   271 196 33 **********************
Tiny Everclear   550 874   266 158 76 ***********************
Tiny Brutality"  185 124   393 39 68  *********************************
Tiny Barbarian   629 569   89 109 302 ***************
Tiny AK-47" (le  977 470   139 308 53 ************
D-Clear" (lengt  815 626   189 252 59 ****************
--------         ------    -------    ---------=---------=---------=---------=

Adjusted Score: 144.8

 
2002-12-20: Yace 1.2

Bugfix in Makefile, thanks to sirex

2002-02-15: Yace 1.1

  • Installer-System added
  • Makefile updated
  • Testset-warriors updated
  • Design of completely new, much cooler and a lot sexier mars completed (well, no files changed, but everything is in my mind :)

2000-12-16: Yace 1.0

Sorry, there are no major changes as the new version number might suggest. I believe yace is now stable enough to get a version number starting with 1 :)

  • Benchmark added: 'yace -bench' will calculate how many fights are possible per seconds. I hope some people (you!) will give me results!
  • status-directory can be any directory, also a global- accessible directory in a LAN, so it is possible to run yace on many computers and get all results together. (I will concentrate on clustering in the future, but up to now this is completely new for me)
  • some minor bugfixes I have forgotten..

2000-10-16: Yace 0.04

  • bugfix: only 1020 warriors or so could be loaded, now much more is possible.
  • Sometimes a veteran of the local koth returns to the population
  • kothsimi.c: very similar to evolving with a hill, but tries to be more intelligent: A challenger is tested how similar it is to other warriors on the hill. If it is very similar to another warrior and scores better, it replaces the worse one.

2000-09-19: Yace 0.03

  • I have added project files for MS Visual C++ 5.0, and an executable for everyone who can't compile yace. I have also successfully compiled yace under linux (you may get many many warnings, which can be ignored...)
  • evolving with a hill added! now yace creates a hill as at www.koth.org. It also creates a html-file in the koth-directory, where you can have a look at the warriors (looks very interesting I think :-)
  • yace can be stopped by deleting the file 'del2stop'
  • many other things I have forgotten...

2000-09-03: Yace 0.02

  • The population can fight against a testset, the best warrior is saved to a filename according to the score.
  • Population can be saved and is loaded automatically.
  • changed the whole structure of yace, now it should be easier to extend, smaller, amd perhaps a little bit faster.
  • I have removed the file-based evolution and now do this complete in memory! A small step for a good programmer, but a great step for me... ;-)

2000-08-20: Yace 0.01

  • The random number generator creates numbers which are more likely to be somewhere around coresize/2, coresize/3, coresize/4 and so on. With this piece of code the evolver is much more likely to produce papers.
  • when 2 warriors fight each other every fight is done twice, once with swapped starting position. With this implementation two warriors which are exactly the same will also get exactly the same score. This is especially useful for very starting-point dependent warriors as d-clears.
  • there is no need for Pmars any more: I integrated exhaust, which is under the GPL, easy to use and fast. This modification gets very usefull when evolving for the tiny hill, because there is no overhead by starting an external program.

 
created by Martin Ankerl 2001, 2002.