Keep-Away Soccer Visualisation

This visualisation is based on the keepaway-v0.01 code. The movie shows a repeated simulation based on an evolved strategy using the genetic programming algorithm. Each simulation starts with three offensive players (1,2,3), a defender (4) and a ball (5), where a player becomes its number plus 5 when it has possession of the ball. Each offensive player uses the same strategy, while the defender continually seeks the ball. For details of the simulation, see the paper Layered Learning in Genetic Programming for a Cooperative Robot Soccer Problem.

An offensive player strategy is represent by two syntax trees encoding functions and primitives that move the player, kick the ball and report about the environment. These strategies are shown below, in the Lisp S-expression format. The top tree (Tree 0) represents what the offensive player does with possession of the ball, the second tree (Tree 1) represents what the player does without possession of the ball.

Download Keep-Away Soccer v0.01

See the KAS Resource, and my Research / Publications.

Learn more about Genetic Programming.

© 2004 Steven Gustafson smg [AT] cs nott ac uk

Evolved Genetic Programming Code (un-optimised)

Tree 0: (a really large JPG*)

(vadd (iflte (iflte ball (iflte (vadd ball ball) ball (vadd (vsub ball ball) (iflte ball (random (negate mate1)) ball ball)) (iflte ball (iflte mate2 ball mate1 ball) ball ball)) ball ball) (iflte (mult2 ball) (iflte (iflte mate2 (vadd mate1 ball) ball ball) (random (vadd mate1 ball)) mate1 (iflte (iflte mate2 (vadd ball (mult2 mate2)) ball ball) (vadd mate1 (iflte ball ball ball ball)) (iflte (mult2 ball) (random (negate mate1)) (mult2 ball) (vadd (iflte (vsub mate1 (vadd ball ball)) (vadd mate1 (random (negate mate1))) (iflte (mult2 ball) (iflte (mult2 mate1) (vadd (vadd mate1 mate1) (iflte ball ball ball ball)) mate1 (iflte (vsub ball (iflte (mult2 ball) (iflte (random (iflte ball ball ball ball)) ball (vadd ball ball) (iflte ball ball (mult2 ball) mate1)) ball ball)) (vadd mate1 (iflte ball ball ball ball)) (iflte (mult2 ball) (random mate1) (mult2 ball) (vsub ball (iflte ball (vadd ball mate1) ball ball))) (random (vsub ball ball)))) mate1 (vsub ball (iflte ball (random mate2) ball ball))) (vadd ball mate1)) (random mate1))) (random (vsub ball ball)))) mate1 (vsub ball (iflte ball (vadd (vsub mate1 (vadd ball ball)) ball) ball ball))) (iflte (mult2 ball) (vsub ball (iflte ball (random (vsub ball ball)) ball ball)) mate1 mate2) mate2) (iflte ball (random mate2) ball ball))

Tree 1: (a really large JPG*)

(iflte (mult2 ball) mate2 ball (vsub ball (iflte ball (iflte (random (iflte ball mate2 ball ball)) ball (vadd (vsub ball (iflte ball (iflte (random (mult2 mate1)) ball (iflte mate2 (vadd ball (vadd ball mate1)) ball ball) (mult2 ball)) ball ball)) (iflte ball (iflte mate2 (div2 mate2) ball ball) ball ball)) (iflte ball ball (mult2 ball) mate1)) ball (vadd (iflte (vadd mate1 (iflte ball ball ball ball)) mate1 (rotate90 ball) ball) ball))))

* Lisp S-expression converted to DOT format using Bill Langdon's AWK script and the dot.php running Graphviz.

Home