Bot

A bot is simply a program that acts like a player. In fact, it is a player, for all intents and purposes; just as with its human counterparts, every bot on the network requires its own, unique JabberID, and accrues its own reputation and ELO scores over time.

(There is a problem with this: if two bots are running the same program, it would make more sense for them to share a reputation and game history. Unfortunately, there is no way to authenticate what algorithm a network entity is running -- you can only authenticate its JID. We can only suggest that if you run a bot program on several servers, you should have them all authenticate with the same JID (but different resource strings).)

Most bots you encounter will probably be of the retainer variety, automated opponents that parlors can provide at the request of visiting human players. Less common are ronin, wandering programs that seek their own competition.

Bot-vs-Bot Games

A core principle of Volity is that Volity is for humans. Volity bots exist to play against humans. They should not waste resources by playing solely against each other. We particularly don't want bots to get into a loop where they start a game, play through it at superhuman speed, and then repeat the process before anyone can stop them.

However, humans do sometimes want to pit bots against each other. We permit this -- but only under human supervision.

What does this mean in practical terms? A referee will not allow a game to start when only robots are seated. (Same goes for resuming a suspended game.) The referee will reject ready() RPCs from a table in that configuration.

So to run a bot-on-bot game, you have to seat a bunch of bots at a table and sit down yourself. You can share a seat with a bot; it's okay if all the game moves are made by bots. But because a human is seated, the game won't start until that human hits the Ready button. That game may finish quickly, but the bots can't get into a loop of game after game after game.

(Jason points out that this confuses the ELO ratings. You can't discover the relative playing strengths of bots by playing them against each other, because one of the game seats is a bot-and-human pair. That's true, but I am not worrying much about ELO policy here -- I think it's a higher level than table/referee management. Or you could handle it this way: play a tournament of fifty bot-on-bot games, where for half of them you share one bot's seat, and half of them you share the other bot's seat. You'll generate a lot of bot-and-human stats to ignore, but each bot will accumulate a pool of single-seat ratings with the correct win/loss ratio.)

RPC Requests

A bot does not have to follow Volity RPC specifications. However, a retainer bot which is created by a bot factory must respond to the following RPC:

volity.leave_table()

Request that a bot leave the table and shut down. Only referees can make this request. (A player triggers this by sending volity.remove_bot() to the referee.) A seated bot should reject this request.

See also

Bot API