Pogamut : Botprize 2008 winning bot

Botprize 2008 winning bot

Table of contents


About the Bot Prize

The 2008 2K Bot Prize Competition was a competition which took place at the IEEE Symposium on Computational Intelligence and Games in 2008 in Perth, WA. The task was to create a bot, which would fool a panel of judges to think it's human, but there was a little trick - the weapons were changed, so the bot had to learn their new effects and use them correctly. More details can be found on the official web

The competition was run using UT2004 and GameBots provided with Pogamut, but use of Pogamut wasn't mandatory (nevertheless, all of the teams used it anyway). Every judge played against each bot and one human confederate, his task was to rank each of his opponents in means of their humanness.


The main task was to fool four out of five judges. This wasn't achieved by any of the bots, AMIS bot fooled two judges completely and the others were confused. All of the humans were ranked more human-like than all of the bots cool.


The competition was very well organized and it was a great fun. It also showed us a lot of new ideas and let us understand the problem more deeply.

  • Humanness is a very vaguely defined term and is mostly subjective. Some people may have even completely contradictive points of view such as "your bot isn't human-like, it's not moving when I'm shooting at it" and "your bot isn't human-like, it's moving all the time".
  • It's probably best to model some real player, because people are often judging humanness based on their own playing style.
  • To make mistakes is very important! Some bots were given away by their precision with shock rifle. (But the mistakes must be human-like)

The only technical problem was, that the final weapon modification wasn't working properly, so the bots played with original weapons.

I think, that the modification would have to be really significant to give away the bots by their weapon choice and usage, because the judges didn't know what weapons did the bot have in his inventory, therefore, they couldn't know, if he is using the most suitable weapon, or just the only weapon he has. If the weapons behaved in a completely different way such as in fraghouse Stupid Weapons mutator, it might be more important to learn how to use the weapons. On the other hand, radical modification of weapons might be impossible to learn with the data provided by GameBots interface.

AMIS bot


AMIS bot used for the competition was based on a bot called Loque bot, previously developed by Juraj Simlovic. But Loque's task was quite different - it was made to be as good death match player as possible.

This was good, because the bot was able to arm very quickly, and was behaving properly all the time. His use of weapons was based on manually collected data about every weapon, which resulted in very precise shooting and clever decisions.

But there were two things to improve for the competition - to make possible learning of new weapons and to make the bot play more like human (which basically means to make human-like mistakes).

Loque bot

The agent consist of:
  • Options and status properties. Options can be modified during runtime through introspection. These options control bot's behaviour and can be used to closely examine specific parts of bot logic. Status properties provide some useful info about agent senses and decision details.
  • Main bot drives, which shape the primary plan of bot's logic, ordered by the frag-them and outlive-them priority. See each drive's class for detailed info about how it works and when it fails to decide.
  • LoqueCombat, which drives combat, if there is an enemy.
  • LoquePowerUp, which drives picking up must-have items.
  • LoquePursue, which drives recent enemy pursue.
  • LoqueWander, which drives hiking around useful map items.
  • LoqueTravel that provides run-to-items manager.
  • LoqueMemory that listens to msgs and feeds agent memory.
  • LoqueWeaponInfo that provides useful info about each recognized weapon. Such info includes suitable combat ranges, weapon scores, etc.

Upbeat feature: Tweaked combat

This agent is highly agile, aggresive and accurate in combats. This is due to deeply tweaked fighting drive (see LoqueCombat) and adept weapon knowledge (see LoqueWeaponInfo). Give it some weapon arsenal and this agent will try to make the best use of it.

Upbeat feature: Navigation and jumping

This agent utilizes leveled navigation api, which emulates a travel agency. Among others the travel api tweaks two things:
  • Traveling along several items in sequence, according to their distance. Though it doesn't solve Hamiltonian path, it helps forage quite quickly. See LoqueTravel? and LoqueTravelManager?.
  • Safe-jumping over pitfalls and walls. Though the agent is almost blind, he tries hard not to fall into every pit or bump into every wall. Small and precise timeouts calculated separately per each path node help with those troubles that could not be jumped over. See LoqueNavigator? and LoqueRunner?.

Upbeat feature: Quick power-up

This agent tries to make a difference between foraging the first goot weapon for fighting and between foraging other items. This helps to rig him before he gets into combats, rising the chances of success.

Feature: Personalized memory

This agent utilizes its own memory (see LoqueMemory). The memory resembles the pogamut's memory in most cases, though it fixes some bugs and can provide either detailed or filtered info about things. This is essential especially in retreiving known vs. visible items and in working with senses, see LoqueMapItems? and LoqueSenses?.

Downbeat: Presumable simplicity

The rest of the agent logic is quite simple and can be presumable. Skilled opponents could make a great use of this disadvantage. This agent is mostly a berserk fighter rather than anything else. Well, it is tweaked for death match only after all.. ;)

Modifications for the Bot Prize

Two things needed to be done
  • Adding of the ability to learn weapons
  • Improving believability

Modification: Learning weapons

Original Loque bot used a lot of preset weapon information in a very advanced way (aim-ahead predictions, weapon choice, which weapon to look for first, etc.), so it was preferable to keep most of the code and modify it, so it would be possible to induce all weapon information from data collected by the bot itself. To do this, a new drive (LoqueLearnWeapons) was added. The modified weapon info is still in the LoqueWeaponInfo? utility.

The AMIS bot can run in two modes:
  • Learning mode: The bot stores a record of it's sense inputs for each small time period. The inputs are such as damage dealt to some opponent, damage dealt to itself, distance to some opponent, and many more (not all of them were used in the final calculations). After the learning is finished, all records are processed and weapon information is calculated based on statistics.
  • Normal mode: The bot plays using data obtained during the learning phase.
In the learning mode, bot is trying to keep approximately the same amount of data about each weapon, but he's not exploring the weapons systematically. This means, that if some weapon is more frequent, he would possibly have more records (this happens usually only for the Assault Rifle, which is an implicit weapon), and if some weapon is rare, he may not collect any data (depends on the size of the map an learning period length). This doesn't show up to be a problem.

The collected data are not very precise (the longer is the record period, the less precise are the data), but it works good enough to find which weapons are good and which are bad and on what distance from the target.

For the training, I used one (or two for larger maps) dummy bot, which was just randomly running around the map. It is also possible to use human player who is running to and from the bot. Damaging the bot should not confuse the learning, but it was not really tested.

Modification: Improving believability

One thing, that would give away the Loque bot was it's precision. This problem was solved quite nicely by the inprecise data. Loque bot had some weapon information, which were impossible to induce from the sensors provided, such as aim-ahead correction. In Amis bot, this was set to some implicit values, which resulted in believable missing. The bot is trying to aim ahead with weapons not suitable for this, such as Shock Rifle, but isn't aiming ahead enough with Rocket Launcher (but he isn't shooting at the player's position neither).

Second giveaway would be Loque bot's movement, which was too perfect. Loque jumped every time possible and always kept strafing around the opponent. This was modified very simply - AMIS bot has a probability at which he just stops moving (in combat), and probability that he won't jump when Loque would. But the movement is still a thing to improve.

Source code

The AMIS bot's source code can be downloaded here:
AMIS bot source code (jar archive contains Eclipse project, rename to .zip and extract contents to obtain the source code)
AMIS bot javadoc

The software is provided with Pogamut license and you must agree to use it (free for non-commercial projects).

AMIS bot runs on Java 1.6., Netbeans 6.1. or Eclipse 3.4.1, compatible Pogamut Core is included.

To run AMIS bot from the *.jar file, write this on the command line:

java -jar amisbot.jar [arguments]

Command line arguments -
  • gamebots URI (i.e. ut://localhost:3000 )
  • input learning episode (0 to start form scratch)
  • output learning episode (0 to turn learning off)
  • data folder (i.e. "F:/botprize/data/")
  • length of the learning episode (in seconds).

Created by: michal.stolba. Last Modification: Monday 12 of January, 2009 21:16:37 CET by michal.stolba.


Tiki RSS feed for weblogs

This work is supported by GA UK 1053/2007/A-INF/MFF (2007-8), GA UK 351/2006/A-INF/MFF (2006-8), the Ministry of Education of the Czech Republic (grant MSM0021620838) (2008-9), by the Program "Information Society" under project 1ET100300517 (2006-9), and the project Integration of IT Tools into Education of Humanities (2006-8) and by the project CZ.2.17/3.1.00/31162, which are financed by the European Social Fund, the state budget of the Czech Republic, and by the budget of Municipal House Prague.