Crobots Batch Tournament Manager in Python
Clone this repository. Make sure that 'crobots' executable is runnable from your current shell (e.g. in $PATH env).
These Python scripts try to auto-configure so you don't need any further change. If you do, edit your script and set the correct environment:
If you get an error whilst a Crobots*.py script tries to detect the number of available CPUs / cores, set manually the environment variable NUMBER_OF_PROCESSORS (e.g. export NUMBER_OF_PROCESSORS=4 in your shell).
Set to a non-null value the environment variable CROBOTS_MYSQL if you want to make active the native MySQL support (only for CrobotsDB.py, you may need to install MySQLdb Python library) and edit CrobotsLibs.py accordingly with your database credentials.
Make sure that your Crobots installation folder contains the conf and db directories.
Create a .py configuration file with the following rules:
Class name Configuration
Variable label for the tournament name; it'll be also the name of the result files (each one with the suffix _f2f _3vs3 _4vs4)
Variables matchF2F, match3VS3, match4VS4 with the match repetition factors.
Variable sourcePath with the path of your .ro robot binaries (it could be '.' and you may specify the path within the robot name)
List listRobots with the list of your .ro robot binaries (they may contain a full path, if you set '.' as sourcePath)
Save the configuration file in your conf path
This is an example of configuration:
class Configuration(object): label = '2013' matchF2F = 1000 match3VS3 = 250 match4VS4 = 168 sourcePath = '.' listRobots = ['2013/lamela', '2013/eternity', '2013/ride', '2013/okapi', '2013/pjanic']
If you run this configuration you'll get the output on the screen and 2013_[f2f|3vs3|4vs4].db database files respectively if database support is enable. Each face to face combat will have 1000 matches (CROBOTS command line option -m1000). Each 3 vs 3 combat will have 250 matches (CROBOTS command line option -m250). Each 4 vs 4 combat will have 168 matches (CROBOTS command line option -m168). E.g.:
crobots -m1000 -l200000 2013/lamela.ro 2013/pjanic.ro crobots -m250 -l200000 2013/lamela.ro 2013/pjanic.ro 2013/ride.ro crobots -m168 -l200000 2013/lamela.ro 2013/pjanic.ro 2013/ride.ro 2013/okapi.ro
Robot binary files will be loaded from './' directory, so you can specify the base path within the listRobots variable. Alternatively you can use a configuration like this:
class Configuration(object): label = '2013' matchF2F = 1000 match3VS3 = 250 match4VS4 = 168 sourcePath = '2013' listRobots = ['lamela', 'eternity', 'ride', 'okapi', 'pjanic']
This is the list of all available Crobots Python scripts. They share a lot of code and a common behavior. Command line options are pretty much the same for every of them. You can interrupt (and resume, if database support is enabled) a tournament by creating a file Crobots.stop within the same running directory, e.g.:
Delete that file to re-run o resume the tournament.
This script runs a full tournament (F2F, 3vs3, ...) using the robots specified within the configuration. It does only support a in-memory database and prints out results on the standard output. Note: It does not keep any log file: if you interrupt the execution you'll loose all the results, so bear in mind to save its output somewhere. Examples:
Crobots.py conf/MyConf.py f2f > results_f2f.txt Crobots.py conf/MyConf2.py all > results2_all.txt
Run Crobots.py without command line parameters to read the help.
As the script below, this script runs a full tournament (F2F, 3vs3, ...) using the robots specified within the configuration. It does support a database so it saves all the results within a database file. You can stop and resume a tournament later on. It does not print out the sorted ranking: use CrobotsDBReport.py instead. Examples:
CrobotsDB.py conf/MyConf.py setup CrobotsDB.py conf/MyConf.py 4vs4 CrobotsDB.py conf/MyConf.py clean
If you want to use MySQL as database to publish tournament results:
Setup your MySQL database schema using SetupMySQL.sql script
Change your credentials into CrobotsLibs.py (config struct)
Export environment variable CROBOTS_MYSQL (e.g. export CROBOTS_MYSQL=1)
Note: This is the only script with MySQL support.
Run CrobotsDB.py without command line parameters to read the help.
This script shows a sorted ranking from a tournament database file. It accepts the database prexif and [f2f|3vs3|4vs4|all] as parameters. If 'all' is specified it tries to load up all databases and prints out the total report, otherwise it loads up the database-prefix_type.db file.
CrobotsDBReport.py db/tournament 4vs4 CrobotsDBReport.py db/final all
This script runs a partial tournament using all combinations of robots listed into the configuration file against a single robot to test. It does only support a in-memory database and prints out results on the standard output. Note: It does not keep any log file: if you interrupt the execution you'll loose all the results, so bear in mind to save its output somewhere. Examples:
CrobotsBench.py conf/AllStars.py test/test.r 3vs3 > test_3vs3.csv CrobotsBench.py conf/AllStars.py test/test.r 4vs4 > test_4vs4.csv CrobotsBench.py conf/AllStars.py test/test.r all > test_all.csv
As above but it does support a local database to store and retrieve results. You can stop and resume a tournament later on. It does not print out a sorted ranking: use CrobotsDBReport.py instead. Examples:
CrobotsBenchDB.py conf/AllStars.py test/test.r 3vs3 CrobotsBenchDB.py conf/AllStars.py test/test.r 4vs4 CrobotsBenchDB.py conf/AllStars.py test/test.r all CrobotsBenchDB.py conf/AllStars.py test/test.r clean
As CrobotsDB.py (without MySQL support) but it runs random matches. Useful you have a massive list of robots like KOTH and you cannot run a whole tournament. You can stop and resume a tournament later on. You can limit the number of combats changing the variable LIMIT. Examples:
CrobotsDBRandom.py conf/KOTHConf.py 3vs3 CrobotsDBRandom.py conf/KOTHConf.py 4vs4
A combination of CrobotsBenchDB.py and CrobotsDBRandom.py
To test a single robot against a random combination of matches. You can stop and resume a tournament later on. You can limit the number of combats changing the variable LIMIT. Examples:
CrobotsBenchDBRandom.py conf/KOTHConf.py test/test.r 3vs3 CrobotsBenchDBRandom.py conf/KOTHConf.py test/test.r 4vs4
Successfully tested with Python 2.7.x on Linux Ubuntu.