2008 Computer Stratego World Championship
From StrategoUSA
The 2008 Computer Stratego World Championship will be held December 5-8. This will be a free tournament open to any programmer whose application supports the Stratego AI API and abides by the game rules.
The tournament will be hosted by Metaforge (http://www.metaforge.net), an online, multiplayer gaming site. Participants will run their code on their own computer and use a downloadable client to connect to the server. Viewers will be able to logon to Metaforge and watch games as they are played, or replay completed games at a later time.
Contents |
[edit] News
- 2008-11-02: "Reveal Your Rank!" registered
- 2008-08-12: "Hobbes" registered
- 2008-04-07: "Master of the Flag" registered
- 2008-04-03: "Invincible" registered
- 2008-04-01: "Probe" registered
- 2008-04-01: Tournament announced
[edit] Committee Members
These are the members of the tournament committee:
Vincent de Boer
World Champion "live" Stratego &
Author of Invincible
vdeboer_nl@yahoo.com
Imer Satz
Author of Probe
imer@imersatz.com
Chip McVey
Founder of Metaforge
chip@metaforge.net
Sven Jug
Author of Master of the Flag
sven_jug@yahoo.com
[edit] Objective
The inaugural 2007 tournament demonstrated that existing Stratego AI programs are capable of playing at a high level, although none is able to compete equally against a moderately skilled human opponent. This tournament intends to advance Stratego AI by:
Improving existing AIs. Most of the programs entered last year faltered during the endgame, and would be considerably more competitive with improved endgame logic. All of the programs demonstrated weak positional play, for example, lacking the ability to establish a perimeter defense to defend the flag.
Attracting new entries. The community of Stratego AI programmers is small at this time. However, the Stratego AI SDK considerably lowers the barriers to entry by removing the need to write a UI, and provides an opportunity for programs to be tested against both human and computer opponents. Also, there is growing recognition that Stratego is not, in fact, an intractable problem, as once supposed, but rather a challenging and rewarding opportunity for AI programmers. (Academics, take note.)
Encouraging discussion. Most of the existing Stratego AI programs, some of which are commercial products, are closely guarded secrets. But for Stratego AI to advance dialog is necessary, so a shared body of knowledge can begin to amass. This wiki can serve as an ideal forum for Stratego AI programmers to discuss, at least in general terms, how their applications address specific topics. It is worth noting here that Stratego programming is so wide open at present that even as fundamental a question as the efficacy of recursion remains a matter of debate. So there is both a lot of room for experimentation and a corresponding opportunity to compare and evaluate competing algorithms.
[edit] Tournament Rules
The tournament will consist of five sessions, one session per day. During a session, each program will play each other program once.
Scoring will be as follows:
| Win | 6 |
| Draw | 3 |
| Loss | 1 |
| Forfeit | 0 |
A forfeit will result from a program crash, illegal move, illegal setup or other condition that terminates the game abnormally.
This is the official Stratego tournament scoring, which is equivalent to (W-D-L) 5 - 2 - 0 with 1 point for playing, or 1 - 0.4 - 0 with 0.2 points for playing. This gives a small drawing penalty (draw is valued less than half a win) which should promote aggressive play.
If, at the end of the tournament, two programs have equal scores, their point totals from the final session will be used as a tie breaker, followed by the previous session and so forth. This will reward improvements programmers have made during the tournament by placing greater value on the later sessions.
[edit] Game Rules
The games will be played according to the standard Stratego rules, with range attacks enabled (scouts can attack during a range move).
[edit] Time Limit
The maximum time limit per move is 15 seconds. The average time per move should not exceed 5 seconds.
[edit] Move Limit
At 2,000 moves, a game will be declared a draw.
[edit] Two-Squares Rule
Literally from the ISF rules http://www.isfstratego.com/images/isfgamerules.pdf
10.1 It is not allowed to move a piece more than 5 times non-stop
between the same two squares, regardless of what the opponent
is doing. It does not matter whether a piece is moving and
thereby attacking an opponent’s piece, or just moving to an
empty square.
In pseudocode this would be:
method breaksTwoSquareRule(move)
limit := 5
for(count := 1 ; count <= limit ; count++)
prevmove := getMove(current-2*count)
if( !equal(move,prevmove) && !reverse(move,prevmove) )
return false
return true
method equal(move1,move2)
if(move.toField==move2.toField && move.fromField==move2.fromField) return true
else return false
method reverse(move1,move2)
if(move.fromField==move2.toField && move.toField == move2.fromField) return true
else return false
This rule must be implemented to participate in the tournament. However, Article 10.2 of the ISF rules, which pertains to scout moves, will not be enforced.
[edit] More-Squares Rule
Literally from the ISF Rules http://www.isfstratego.com/images/isfgamerules.pdf
11.1
It is not allowed to continuously chase one or more pieces of the
opponent endlessly. The continuous chaser may not play a
chasing move again more which would lead to a position on the
board which has already taken place.
11.2
Exception: chasing moves back to the square where the chasing
piece came from in the directly preceding turn are always
allowed as long as this does not violate the Two-Squares Rule
(Five-Moves-on-Two-Squares).
11.3 Definitions:
- continuous chase: the same player is non-stop threatening one or more pieces of his opponent that is/are evading the threatening moves.
- chasing move: a move in a continuous chase that threatens an opponent’s piece that was evading during the continuous chase.
Hereby:
- a/to move: a/to move plus attacking or a/to move to an empty square.
- to threaten: to move a piece next (before, behind or besides) a piece of the opponent.
- to evade: to move a piece away promptly after it has been threatened.
Pseudocode for the official More-Squares Rule:
forbiddenPositions := new List //this list contains all board positions that you are not allowed to create again
method isAttackingMove(move)
if (move involves combat) return true
else return false
method breaksMoreSquareRule(move)
// if combat, then there is obviously not a chase
if(isAttackingMove(move)) return false
// if we're moving opposite of last move, that is the
// domain of the two square rule
if(reverse(move,myLastMove)) return breaksTwoSquareRule(move)
// perform the move - update board state based on move - to allow testing validity
board := performMove(board, move)
// if the board state is in the forbidden list, then it's not valid
if(forbiddenPositions contains board.hash()) valid := false
else valid := true
// unperform the test move we just made
board := unperformMove(board, move)
return !valid
method doMyMove(move)
// if it doesn't break the rule
if (!breaksMoreSquareRule(move)) {
...code for executing move...
// add all board positions after your own moves to the forbidden list
forbiddenPositions.add(board.hash())
// record my last move
myLastMove := move
}
method doOpponentMove(move)
// if opponent is not running away from us...
if(!nextTo(myLastMove.endField,move.startField)
// empty forbidden list when opponent doesn't move from a field
// next to where our last move ended
forbiddenPositions := new List
...code for executing move...
This rule must be implemented to participate in the tournament.
[edit] Additional Rules
Last year's tournament demonstrated that the Two-Squares Rule and More-Squares Rule are insufficient to prevent two computer programs from lapsing into repetitive cycles and other pointless moves. For the 2008 tournament Probe will implement three additional constraints on its own moves, in the hope that games it plays will be more interesting for human observers:
Position Repetition Rule. This rule restricts Probe from making a move that would repeat a position found earlier in the game. Its purpose is to prevent repetitive patterns, such as alternating chase pairs, that do not violate the More-Squares Rule. The rule does not apply to an immediate back-and-forth repetition, which is covered by the Two-Squares Rule, nor to moves by a piece that is being chased.
Resumed Chase Rule. This rule prevents Probe from resuming a chase after the end of a previous chase by the same pair of pieces. Without this rule, Probe will often chase a piece until stopped by the Two-Squares Rule, move another piece and then resume the chase. The rule does not apply if movement of other pieces in the immediate area suggests that resuming the chase might produce a productive outcome.
Continuous Chase Rule. This rule prevents Probe from chasing a piece with another piece for more than ten consecutive moves. Its purpose is to prevent long, pointless chase sequences, especially during the endgame.
[edit] Stratego AI API
The Stratego AI API enables Stratego programs to play on Metaforge, using the downloadable Metaforge client. The API supports both Java and native programs. The Stratego AI API is available for free download here:
Version 2.0.36: http://www.metaforge.net/olg/webstratego/ai/MetaforgeBotSDK.zip
Note the complete API supports features beyond the scope of this tournament. For the purposes of the tournament, a program need only be able to play classic Stratego with range attacks enabled, from either side of the board.
These are the methods a program must implement for tournament play:
setGameOption()
set the passed game option
createAISetup()
create or select a setup for the AI
getAISetupPiece()
return the AI setup, piece-by-piece
illegalSetup()
the AI setup is illegal
setOpponentSetupPiece()
mark squares that have an opponent piece
getAIMove()
generate a move and pass it back
submitAIMoveResult()
learn the result of the AI move (for attacks)
submitOpponentMove()
learn the opponent move
For more information about the Stratego AI API, please contact one of the committee members.
[edit] Programming Tips
The easiest way to develop a Stratego AI implementation is to use Java as the programming language. An open source compiler can be downloaded from www.eclipse.org. Support for C++ code is also available via the native Stratego AI adapter.
A java prototype for a "random player" is available for interested programmers and can be a big time saver for getting started on a Stratego AI implementation. For more details, please contact one of the committee members.
[edit] Tournament Roster
Here are the programs currently signed up to play in the tournament (in alphabetical order):
[edit] Invincible
| Programmer | Vincent de Boer |
| Nationality | Dutch |
| Year Created | 2007 |
| Last Update | 2007 |
| Company/Affiliation | TU Delft |
| Link | - |
[edit] Master of the Flag 1
| Programmer | Sven Jug |
| Nationality | German/American |
| Year Created | 2004 |
| Last Update | 2008 |
| Company/Affiliation | Jayoogee.com |
| Link | http://www.jayoogee.com/masteroftheflag/ |
[edit] Master of the Flag 2
| Programmer | Sven Jug |
| Nationality | German/American |
| Year Created | 2004 |
| Last Update | 2008 |
| Company/Affiliation | Jayoogee.com |
| Link | http://www.jayoogee.com/masteroftheflag/ |
[edit] Probe
| Programmer | Imer Satz |
| Nationality | American |
| Year Created | 1983 |
| Last Update | 2008 |
| Company/Affiliation | Imersatz GmbH |
| Link | http://www.probe.imersatz.com/ |
[edit] Hobbes
| Programmer | Maarten Schadd |
| Nationality | Dutch |
| Year Created | 2008 |
| Last Update | 2008 |
| Company/Affiliation | Maastricht University |
| Link | http://www.cs.unimaas.nl/maarten.schadd/Stratego/ |
[edit] Reveal Your Rank!
| Programmer | Raimonds Rudmanis |
| Nationality | Latvian |
| Year Created | 2001 |
| Last Update | 2006 |
| Company/Affiliation | None |
| Link | http://www.yellowgames.com/ |
[edit] Game Results
[edit] Game Log
Times are specified as reported by the Metaforge server.
| Time | Creator | Joiner | Winner | Winner Score | Loser Score | Moves | Result | ||
| Friday | |||||||||
| Fri 10:54 | Probe | RevealYourRank | Probe | 6 | 1 | 379 | Flag capture | ||
| Fri 11:12 | Probe | RevealYourRank | Probe | 6 | 1 | 693 | Flag capture | ||
| Fri 11:43 | Probe | RevealYourRank | Probe | 6 | 1 | 879 | Flag capture | ||
| Fri 12:07 | MasterFlag1 | RevealYourRank | RevealYourRank | 6 | 1 | 778 | No moves | ||
| Fri 12:13 | MasterFlag1 | RevealYourRank | MasterFlag1 | 6 | 1 | 851 | Flag capture | ||
| Fri 12:17 | MasterFlag1 | RevealYourRank | RevealYourRank | 6 | 1 | 654 | No moves | ||
| Fri 12:20 | MasterFlag1 | RevealYourRank | RevealYourRank | 6 | 1 | 344 | Flag capture | ||
| Fri 12:23 | MasterFlag1 | RevealYourRank | RevealYourRank | 6 | 1 | 564 | Flag capture | ||
| Fri 12:27 | Probe | RevealYourRank | Probe | 6 | 1 | 353 | Flag capture | ||
| Fri 12:41 | MasterFlag2 | RevealYourRank | MasterFlag2 | 6 | 1 | 431 | Flag capture | ||
| Fri 12:42 | Probe | RevealYourRank | Probe | 6 | 1 | 333 | No moves | ||
| Fri 12:56 | MasterFlag2 | RevealYourRank | MasterFlag2 | 6 | 1 | 581 | No moves | ||
| Fri 13:09 | MasterFlag2 | RevealYourRank | MasterFlag2 | 6 | 1 | 379 | Flag capture | ||
| Fri 13:19 | MasterFlag2 | RevealYourRank | MasterFlag2 | 6 | 1 | 401 | Flag capture | ||
| Fri 13:30 | MasterFlag2 | RevealYourRank | MasterFlag2 | 6 | 1 | 481 | No moves | ||
| Fri 17:43 | MasterFlag1 | Probe | Probe | 6 | 1 | 682 | Flag capture | ||
| Fri 17:57 | MasterFlag1 | Probe | Probe | 6 | 1 | 430 | Flag capture | ||
| Fri 18:19 | MasterFlag1 | Probe | Probe | 6 | 1 | 606 | Flag capture | ||
| Fri 18:37 | MasterFlag1 | Probe | Probe | 6 | 1 | 544 | Flag capture | ||
| Fri 19:21 | MasterFlag1 | Probe | Probe | 6 | 1 | 1336 | Flag capture | ||
| Saturday | |||||||||
| Sat 8:53 | Invincible | Hobbes | Draw | 3 | 3 | 2034 | Draw | ||
| Sat 9:44 | Invincible | Hobbes | Invincible | 6 | 1 | 949 | Forfeit | ||
| Sat 10:48 | Invincible | Hobbes | Draw | 3 | 3 | 1180 | Draw | ||
| Sat 12:00 | Invincible | Hobbes | Invincible | 6 | 1 | 1278 | No moves | ||
| Sat 13:15 | Invincible | Hobbes | Invincible | 6 | 1 | 1312 | Flag capture | ||
| Sat 11:25 | Probe | MasterFlag2 | MasterFlag2 | 6 | 1 | 1120 | Flag capture | ||
| Sat 11:40 | Probe | Invincible | Invincible | 6 | 1 | 878 | Forfeit | ||
| Sat 11:57 | Probe | Invincible | Probe | 6 | 1 | 511 | Forfeit | ||
| Sat 11:58 | Probe | MasterFlag2 | Probe | 6 | 1 | 549 | No moves | ||
| Sat 12:16 | Probe | MasterFlag2 | Probe | 6 | 1 | 349 | Flag capture | ||
| Sat 12:29 | Probe | MasterFlag2 | Probe | 6 | 1 | 351 | Flag capture | ||
| Sat 12:37 | Probe | Invincible | Probe | 6 | 1 | 1237 | Flag capture | ||
| Sat 12:51 | Probe | MasterFlag2 | Probe | 6 | 1 | 459 | Flag capture | ||
| Sat 13:36 | MasterFlag1 | Invincible | MasterFlag1 | 6 | 1 | 775 | Flag capture | ||
| Sat 13:43 | MasterFlag1 | Invincible | Invincible | 6 | 1 | 832 | No moves | ||
| Sat 13:52 | MasterFlag1 | Invincible | Invincible | 6 | 1 | 1150 | No moves | ||
| Sat 14:01 | Probe | Hobbes | Probe | 6 | 1 | 437 | Flag capture | ||
| Sat 14:02 | MasterFlag1 | Invincible | Invincible | 6 | 1 | 1490 | Flag capture | ||
| Sat 14:17 | MasterFlag1 | Invincible | Draw | 3 | 3 | 2288 | Draw | ||
| Sat 14:24 | Probe | Hobbes | Probe | 6 | 1 | 199 | Flag capture | ||
| Sat 15:47 | Probe | Hobbes | Probe | 6 | 1 | 653 | Flag capture | ||
| Sat 16:08 | Probe | Invincible | Invincible | 6 | 1 | 936 | No moves | ||
| Sat 17:45 | Probe | Invincible | Probe | 6 | 1 | 485 | Flag capture | ||
| Sunday | |||||||||
| Sun 3:00 | Probe | Hobbes | Probe | 6 | 1 | 631 | Flag capture | ||
| Sun 3:27 | Probe | Hobbes | Probe | 6 | 1 | 335 | Flag capture | ||
| Sun 4:17 | MasterFlag1 | Hobbes | MasterFlag1 | 6 | 1 | 325 | Flag capture | ||
| Sun 4:37 | MasterFlag1 | Hobbes | MasterFlag1 | 6 | 1 | 429 | Flag capture | ||
| Sun 4:50 | MasterFlag1 | Hobbes | MasterFlag1 | 6 | 1 | 273 | No moves | ||
| Sun 6:09 | MasterFlag1 | Hobbes | MasterFlag1 | 6 | 1 | 1523 | Flag capture | ||
| Sun 6:28 | MasterFlag1 | Hobbes | MasterFlag1 | 6 | 1 | 335 | Flag capture | ||
| Sun 8:41 | MasterFlag2 | Hobbes | MasterFlag2 | 6 | 1 | 565 | No moves | ||
| Sat 10:38 | MasterFlag2 | Hobbes | MasterFlag2 | 6 | 1 | 1419 | No moves | ||
| Sun 11:54 | MasterFlag2 | Hobbes | MasterFlag2 | 6 | 1 | 767 | Flag capture | ||
| Sun 12:08 | MasterFlag2 | Hobbes | MasterFlag2 | 6 | 1 | 239 | Flag capture | ||
| Sun 14:27 | MasterFlag2 | Hobbes | MasterFlag2 | 6 | 1 | 1911 | Flag capture | ||
| Sun 16:13 | MasterFlag2 | Invincible | Draw | 3 | 3 | 3536 | Draw | ||
| Sun 16:52 | MasterFlag2 | Invincible | Draw | 3 | 3 | 2030 | Draw | ||
| Sun 16:12 | MasterFlag2 | Invincible | MasterFlag2 | 6 | 1 | 971 | Flag capture | ||
| Sun 16:28 | MasterFlag2 | Invincible | MasterFlag2 | 6 | 1 | 627 | Flag capture | ||
| Sun 18:45 | MasterFlag2 | Invincible | Draw | 3 | 3 | 3315 | Draw | ||
| Sun 16:58 | MasterFlag1 | MasterFlag2 | MasterFlag2 | 6 | 1 | 430 | Flag capture | ||
| Sun 17:17 | MasterFlag1 | MasterFlag2 | MasterFlag2 | 6 | 1 | 678 | Flag capture | ||
| Sun 17:28 | MasterFlag1 | MasterFlag2 | MasterFlag2 | 6 | 1 | 600 | Flag capture | ||
| Sun 17:43 | MasterFlag1 | MasterFlag2 | MasterFlag2 | 6 | 1 | 694 | Forfeit | ||
| Sun 17:58 | MasterFlag1 | MasterFlag2 | MasterFlag2 | 6 | 1 | 714 | No moves | ||
| Monday | |||||||||
| Mon 9:58 | RevealYourRank | Invincible | Invincible | 6 | 1 | 326 | No moves | ||
| Mon 10:10 | RevealYourRank | Invincible | RevealYourRank | 6 | 1 | 1257 | Flag capture | ||
| Tuesday | |||||||||
| Tue 10:49 | RevealYourRank | Invincible | Invincible | 6 | 1 | 1111 | No moves | ||
| Tue 10:53 | RevealYourRank | Invincible | Invincible | 6 | 1 | 327 | Forfeit | ||
| Tue 10:49 | RevealYourRank | Invincible | RevealYourRank | 6 | 1 | 640 | Flag capture | ||
| Tue 10:21 | RevealYourRank | Hobbes | RevealYourRank | 6 | 1 | 340 | Flag capture | ||
| Tue 10:36 | RevealYourRank | Hobbes | RevealYourRank | 6 | 1 | 350 | Flag capture | ||
| Tue 11:00 | RevealYourRank | Hobbes | RevealYourRank | 6 | 1 | 504 | Flag capture | ||
| Tue 11:20 | RevealYourRank | Hobbes | RevealYourRank | 6 | 1 | 426 | Flag capture | ||
| Tue 11:29 | RevealYourRank | Hobbes | RevealYourRank | 6 | 1 | 206 | Flag capture | ||
[edit] Match Cross Table
Match results are shown as W-D-L in alphabetical order.
[edit] Score Summary
| AI Program | Games Played | Total Score | Ranking |
| 25 | 135 | 1 | |
| 25 | 121 | 2 | |
| 25 | 92 | 3 | |
| 25 | 80 | 4 | |
| 25 | 62 | 5 | |
| 25 | 29 | 6 |
