Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
191 lines (133 sloc) 7.11 KB

Crobots Batch Tournament Manager in Python

Install

Clone this repository. Make sure that 'crobots' executable is runnable from your current shell (e.g. in $PATH env).

Setup

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.

Configuration

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']

Run

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.:

    touch Crobots.stop

Delete that file to re-run o resume the tournament.

Crobots.py

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.

CrobotsDB.py

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.

CrobotsDBReport

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

CrobotsBench.py

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

CrobotsBenchDB.py

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

CrobotsDBRandom.py

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

CrobotsBenchDBRandom.py

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

Compatibility

Successfully tested with Python 2.7.x on Linux Ubuntu.