DiplomacyBotsJohn Newbury 13 June 2015 |
AI in the Game of Diplomacy: Bots
Below is an alphabetical table of the bots from or via the Diplomacy AI Centre that I have found that I can run at least reasonably reliably on Windows XP (Home Edition) and Windows 7 – (Home Premium)– and, and hence should be viable for Tournaments, or DEMO, together with a few others of special interest (see Notes). Click on the name to obtain a copy of the bot, if still available. Executable versions of all these bots are available, usually with at least brief notes, sometimes source. I have rescued a few bots from oblivion (see Downloads).
Alphabetical List of Bots of Interest |
|||||
---|---|---|---|---|---|
Name | Version | Owner | Notes | Max Press | Tournaments |
Albert | 6.0 | Jason van Hal | FI | 30 | |
BlabBot | 2.1 | John Newbury | FHIO | 10 | 9 |
BlabBot | 3 | John Newbury | CDEGHIM | 10/8000 | |
Brutus | 0.8 | Michael Jones | K | 10 | |
Caesar9 | 0.93 | Michael Jones | K | 10 | |
DeepLoamSea | 2 | John Newbury | CEGHIM | 8000 | |
Diplobot | v1.1 | Francois McNeil | BJ | 0 | 1,2,3,4,5,6,7,9 |
Diplominator | 0.2 | Webb, Chin, Wilkins, Payce, Dedoyard | DJN | 10 | |
DumbBot | 4 | David Norman | DFIM | 0 | 1,2,3,4,5,6,7,9 |
DumbBot | 8 | David Norman | DFIM | 0 | |
DumbBot | 8~2 | David Norman; updated by John Newbury | DGIM | 0 | |
HaAI | 0.64 | Fredrik Haard | JN | 0 | 1,2,3,4,5,6,7,9 |
HoldBot | 2 | David Norman | DFIM | 0 | 2,3,4,5,6,7,9 |
HoldBot | 8~2 | David Norman; updated by John Newbury | DGIM | 0 | |
KissMyBot | v1.0 | Jason van Hal | AFIN | 0 | 6,7 |
KissMyBot | v2.0 | Jason van Hal | AFIN | 0 | 7 |
KissMyBot | v3.01 | Jason van Hal | FIN | 0 | 9 |
KissMyBot | v6.0 | Jason van Hal | FI | 10 | |
Man'chi AngryBot | 7 | Brian Roberts | J | 0 | 1,2,3,4,5,6,7,9 |
Man'chi AttackBot | 7 | Brian Roberts | J | 0 | 1,2,3,4,5,6,7,9 |
Man'chi ChargeBot | 7 | Brian Roberts | J | 0 | 1,2,3,4,5,6,7,9 |
Man'chi DefenceBot | 7 | Brian Roberts | J | 0 | 1,2,3,4,5,6,7,9 |
Man'chi ParanoidBot | 7 | Brian Roberts | J | 0 | 1,2,3,4,5,6,7,9 |
Man'chi RevengeBot | 7 | Brian Roberts | J | 0 | 1,2,3,4,5,6,7,9 |
Man'chi RandBot | 7 | Brian Roberts | JR | 0 | 1,2,3,4,5,6,7,9 |
Minerva | 1.1 | Karsten Kremer | IN | 0 | |
Project20M | v0.1 | Andrew Huff, Vincent Chan, Laurence Tondelier, Damian Bundred, Colm Egan | CJN | 0 | 2,3,4,5,6,7,9 |
RandBot | 2 | David Norman | DFIMR | 0 | 2,3,4,5,6,7,9 |
RandBot | 8~2 | David Norman; updated by John Newbury | DGIMR | 0 | |
RubyBot | v2.2 | Adam Shelly | DLNP | 10 | |
Stragotiator | 0.1 | Markus Kimberling, Sebastian Uellenbeck, Wolfgang Walz, Niels Ackermann, Marc Gorzala | DJQ | 20 |
A = Crashes if current non-WRT press syntax is received.
B = Often fails to start.
C = Uses multiple CPU-intensive threads – see below.
D = Source available (or will be when binary is released).
E = Not yet released.
F = Uses David Norman's C++ Client Framework, with Andrew Rose's cspdll.dll.
G = Uses David Norman's C++ Client Framework, without Andrew Rose's cspdll.dll,
updated by John Newbury (see AiClient).
MFC (a) and non-MFC (b) forms are available.
H = Uses John Newbury's BlabBotBase (BBB).
I = C++ based.
J = Java based; free interpreter available.
K = C# based; free interpreter available.
L = Ruby based; free interpreter available.
M = Latest [end 2006?] updates to David Norman's Client Framework are included, but
the version does not distinguish this.
N = No longer available from author's web site, but copy may be available on an
alternative site where appropriate.
O = Version 2 was actually used in Tournament #9 but is now withdraw. Version
2.1 would have performed identically as it only fixes certain catastrophic bugs
that would not have occurred in those games.
P = A.k.a. Ruby Electronic Diplomat (RED) and PeaceBot.
Q = Based on Diplominator. Emphasis is on appearing like a human, and enjoyable
for humans to play it, rather than performance, per se.
R = Unless qualified, to be pedantic, "RandBot" means David Norman's, albeit all
strict "randbots" (which equiprobably generate any complete set of
legal orders) should be very similar. Man'chi RandBot is strictly a
"consbot", which are like a strict randbot, except that only consistent
orders are issued; others, such as supporting an own unit that has an incompatible
order, are eliminated. However, there is little difference in practice, in
performance or obvious stupidity.
Name is what the bot calls itself in the NME message that it sends to Server.
Max press is the highest press level used at all (at least some forms of which are comprehended well enough to be worth sending or receiving), excluding HUH and TRY, which all should (but might not) use appropriately. BlabBot only uses level 10 press in earnest, but for testing itself and other bots, the currently unreleased version 3 can be set to initiate junk but valid press and give junk but valid and related, sometime semi-plausible, responses to all forms of press, up to and including level 8000 – see the BlabBotBase (BBB).
Tournaments are those that I have run that included the given bot; click on the number for the details. For more recent results, see Arena.
All the bots will run, without compiling any source, at least on Windows XP. The Java bots (see Note J) should run on any platform that has a Java runtime environment installed (freely available for all platforms, if not pre-installed, e.g., java.exe for Windows); others would generally need some conversion to change Windows-specific code, where the source is available (see Note E).
On Windows, the required command line (program and arguments) to run an instance of a given kind of bot may be conveniently issued from a shortcut file. Just create a shortcut to the executable .jar of the bot and edit it its properties as required: insert "java.exe -jar " prefix; required arguments postfix. (Unlike issuing the command from a .bat file, this avoids clutter due to a superfluous DOS window for each bot instance that is running.)
Some bots only run reliably enough for an extended Tournament if my (ad hoc) DeepLoamSea Tournament Director Tools (DTDT) monitors the game, restarts it if need be, and kills processes that do not terminate when they should. DiploBot is particular troublesome. All are natural competitors to my long-term bot, DeepLoamSea, in tournaments or just for testing. The source of David Norman's DumbBot is published as an illustration of his bot Framework (which also incorporates Andrew Rose's cspdll.dll communication module), but needs a correction to avoid crashing if sent press with Server 0.27 or later (which no longer uses WRT in press messages). My BlabBot is derived from DumbBot, but with simple press enabled. BlabBot contains code that implements all the press forms – its C++ source will be published in due course to extend the Framework to press. (BlabBot with a -v0 argument is equivalent to DumbBot.)
Eric Wald's unpublished BlabberBot is, apparently, similar to the enabled press in BlabBot. I have excluded Andrew Rose's HoldBot, RandBot and ConsBot, as they do not run reliably enough on my system for an extended tournament. However, from their descriptions, I believe that David Norman's HoldBot and RandBot should produce equivalent play to the corresponding ones by Andrew Rose, albeit independently coded. Confusingly, I believe that Man'chi RandBot is equivalent to Andrew Rose's ConsBot – they both also make random legal moves, except that impossible moves are avoided, such as supporting a move of one of its own units, where that unit has been given a different order. David Norman's Server, itself, discards such impossible orders, and then uses a default move (Hold, Disband, Waive or random Remove); his bot Framework code uses the same defaults. So David Norman's RandBot will thereby play one of those default orders when it has generated an illegal order, thereby being closer to his HoldBot than Man'chi RandBot, albeit both RandBots should be pretty random, and are of little interest, except as indication that evaluations and rankings are plausible, and that "slow knockout" are doing the right sort of things. NB., "RandBot" means David Norman's, unless otherwise qualified.
Unfortunately (at the time of my Tournaments) only BlabBot in my collection used any press, which omits the real essence of the game. Non-press bots only plan their moves in isolation, and none claims to do even this with high skill level. (Very few bots that I had then heard about claimed to be able to use press, and I had not been able to obtain many suitable ones.)
The original Project20M apparently used press, but it is disabled in the released version. The press version apparently tries to recognise its clones, which is contrary to DAIDE Etiquette. In my limited tests, subsequent to my Tournaments, Project20M always started many threads (23), two of which were CPU-intensive, giving it two shares of available CPU resources. The threads and CPU demand remained even after these bots were eliminated from the game, which hints that, even when playing, Project20M may not always make good use of the CPU power that it consumes- except in degrading other bots that could make good use of spare CPU time! However, even with a Project20M process per CPU (hence twice the number of its CPU-intensive threads!), other mostly CPU-intensive bots (Alberts) were able to run satisfactorily, given long enough deadlines (while CPU- intensive, each consuming CPU time at half the rate of each Project20M process). An earlier assumption, while running the Tournaments, that the failure of many trial games was owing to Project20M raising the priority of its CPU-bound threads, thereby starving other bots, was therefore surely erroneous: it is no longer believed necessary to reduce the priority of Project20M processes. Indeed, when competing against other CPU-bounds bots in future, a reduced priority could then lead instead to Project20M being starved of CPU power. Anyway, during all the analysed Tournament games, all bots probably always got the all CPU time they absolutely needed; most of those then-available could probably never use more than that. So the reduced priority of Project20M then merely allowed all bots to be satisfied within the very short deadlines used, with Project20M using any spare time.
BlabBotBase (BBB) supports any number of CPU-intensive threads. By default, one per CPU would be allowed to use any spare CPU time, but only one of them at any instant would run at normal priority, the rest lower than normal, to avoid disrupting other work (especially server and other clients). However, the number of them and the fraction of the time each spends at normal priority may be adjusted by command-line arguments; thereby allowing crippling or supercharging. BlabBot 3 and DeepLoamSea (neither yet ready for release), both based on BBB, take advantage of this, albeit BlabBot 3 merely runs dummy loops in any such threads to simulate such a load.
Jason van Hal's KissMyBot v3.01 is the current champion in my Tournaments (and totally supersedes the earlier versions as they will not run in Server 0.27 or later). More recently, his Albert has proved to be the current, now long-reigning, champion. For the most recent results, see Arena.