Monthly AI Tourney Series


AI biweekly/monthly tourney: MapGen
The idea of this tourney was to use MapGen to create a map for the AI to fight against for 5km, 7.5km, 10km, 15km and 20km. Due to the AI tourney still being run manually a single map was used for the map size for the tourney (rather than generating a new random map every time). The maplist chosen was:

  • neroxis_map_generator_1.8.5_vgf5tqx2uxrcu_aicae_
  • neroxis_map_generator_1.8.5_uydyqpk4utuuu_aidae_
  • neroxis_map_generator_1.8.5_xaghpcvo2lnrk_aieae_
  • neroxis_map_generator_1.8.5_bvwpdifwrols4_aigae_
  • neroxis_map_generator_1.8.5_44sxnthefcek6_aiiae_

Setup is similar to the last tourney - 12 AIs are split into 4 groups. The weakest 4 are eliminated in the first round, with the winners from one group fighting the runners up from the other in the quarter-finals in 3 matches.
As there were 5 maps, maps were chosen randomly for the group and quarters, and then for the semis and finals each map was played.

Changes to AI
3 of the featured AI have released new versions since the last tourney: M27, SCTA Arm, SCTA Core

The results
Group stages

Group AI name Wins
3 DilliDalli 4
3 Sorian Edit 3
3 SCTA Arm 0
2 M27 4
4 SCTA Core 0
4 Dalli 2
4 RNG Standard 3
1 Adaptive 1
2 AI: Turtle 2
1 Swarm Terror 4
1 Dilli 2
2 Sorian Adaptive 0

Quarter finals

AI Name Wins AI Name Wins
Swarm Terror 2 Sorian Edit 1
M27 3 Dalli 0
Dilli 2 DilliDalli 1
RNG Standard 3 AI: Turtle 0

Semi finals

AI Name Wins AI Name Wins
Swarm Terror 0 M27 5
Dilli 1 RNG Standard 4


AI Name Wins AI Name Wins
M27 4 RNG Standard 0

(M27 and RNG drew 1 game)
Total wins by AI

AI Name Wins Win %
M27 16 94%
RNG Standard 10 59%
Swarm Terror 6 50%
DilliDalli 5 63%
Dilli 5 38%
Sorian Edit 4 50%
Dalli 2 29%
AI: Turtle 2 29%
Adaptive 1 20%
Sorian Adaptive 0 0%
SCTA Arm 0 0%
SCTA Core 0 0%

Detailed results
The full results can be seen in the 'DetailedResults' worksheet of the following file:

Other Observations

  • Notable changes in fortunes: In the final, RNG had c.25 mass to M27's 621, yet still managed a draw (M27 attacked RNG's base with its ACU leading to both ACUs dying)
  • The 7.5km map featured two land masses separated by water, which caused several AIs issues
  • Although SCTA failed to get a win it managed to match Sorian Edit for map control and eco for much of the game, with both games going over an hour
  • The group stages required two deciding matches to determine groupings, with an extra Dilli vs Adaptive and Sorian Edit vs DilliDalli match due to them getting the same number of wins as each other.

M27AI developer; Devlog and more general AI development guide:


AI biweekly/monthly tourney: Sorian vs the world
The idea for this tournament was to see the highest AiX modifier that each AI could beat Sorian Adaptive at, on a selection of 5km, 10km and 20km maps from the current map pool, hopefully highlighting how much more comeptitive the FAF custom AIs are, as well as giving a better gauge of the distance between different AI than the previous tournaments win rate. The maplist chosen was:

  • Mirage
  • Stickleback Ridge
  • Open Palms
  • 8 - Badlands_v4
  • The Bermuda Locket - FAF version
  • Crossfire Canal

Each AI entered will face off against Sorian Adaptive AiX (with no omni). If they win, then they repeat the fight but with Sorian Adaptive getting +0.1 to its modifier, until the challenging AI no longer wins. This is done for each map separately. This resulted in a mammoth 245 games being run, so I doubt I'll be repeating this format due to the massive amount of time it ended up taking (for comparison, the last tournament took just 51 games)

Changes to AI
There were significant changes to the AI this time. In addition to a new version of M27, Sorian Edit, and SCTA, there was a major update for RNG (the first in many months), and we have a new AI entrant with Uveso Rush featuring for the first time!
The results

AI Name Average AiX Beaten
M27 1.63
RNG Standard 1.57
DilliDalli 1.43
Swarm Terror 1.27
Uveso Rush 1.25
SCTA Core 1.15
Adaptive 1.05
Sorian Edit 0.98

Results by map

8 - Badlands_v4 Adaptive 1.0
8 - Badlands_v4 DilliDalli 1.4
8 - Badlands_v4 M27 1.6
8 - Badlands_v4 RNG Standard 1.6
8 - Badlands_v4 SCTA Core 1.6
8 - Badlands_v4 Swarm Terror 1.3
8 - Badlands_v4 Uveso Rush 2.0
8 - Badlands_v4 Sorian Adaptive 0.4
Crossfire Canal Adaptive 1.0
Crossfire Canal DilliDalli 1.1
Crossfire Canal M27 1.3
Crossfire Canal RNG Standard 1.3
Crossfire Canal SCTA Core 0.2
Crossfire Canal Sorian Edit 0.8
Crossfire Canal Swarm Terror 1.1
Crossfire Canal Uveso Rush 0.7
Crossfire Canal Sorian Adaptive 1.0
Mirage Adaptive 1.2
Mirage DilliDalli 1.5
Mirage M27 1.9
Mirage RNG Standard 1.7
Mirage SCTA Core 1.4
Mirage Swarm Terror 1.5
Mirage Uveso Rush 1.2
Mirage Sorian Adaptive 0.4
Open Palms Adaptive 1.1
Open Palms DilliDalli 1.6
Open Palms M27 1.6
Open Palms RNG Standard 1.6
Open Palms SCTA Core 1.3
Open Palms Sorian Edit 1.0
Open Palms Swarm Terror 1.1
Open Palms Uveso Rush 1.1
Open Palms Sorian Adaptive 0.6
Stickleback Ridge Adaptive 1.0
Stickleback Ridge DilliDalli 1.6
Stickleback Ridge M27 2.0
Stickleback Ridge RNG Standard 2.0
Stickleback Ridge SCTA Core 1.3
Stickleback Ridge Sorian Edit 1.1
Stickleback Ridge Swarm Terror 1.2
Stickleback Ridge Uveso Rush 1.5
Stickleback Ridge Sorian Adaptive 0.4
The Bermuda Locket - FAF version Adaptive 1.0
The Bermuda Locket - FAF version DilliDalli 1.4
The Bermuda Locket - FAF version M27 1.4
The Bermuda Locket - FAF version RNG Standard 1.2
The Bermuda Locket - FAF version SCTA Core 1.1
The Bermuda Locket - FAF version Sorian Edit 1.0
The Bermuda Locket - FAF version Swarm Terror 1.4
The Bermuda Locket - FAF version Uveso Rush 1.0
The Bermuda Locket - FAF version Sorian Adaptive 0.7

Detailed results
The full results can be seen in the Data worksheet of the following file:

Other Observations

  • Uveso was the dominant AI on badlands (due to its ability to punish Sorian Adaptive for sending its ACU to attack on its own early on), managing a win against a 2.2 AiX (it lost against a 2.1 AiX that was running at the same time hence why 2.0 is shown in its results). In contrast as an AiX 1.2 it lost to a 1.0 Sorian Adaptive on Crossfire Canal.
  • Crossfire Canal was by far Sorian Adaptive's best map, with 3 of the AI (Sorian Edit, SCTA Core and Uveso) needing AiX modifiers to beat it (although not strictly correct, if an AI needed an AiX modifier to win I've shown each 0.1 modifier as decreasing the Sorian AiX beaten by 0.1, so an AI needing a 1.5 modifier to win would show as 0.5)
  • Surprisingly, Adaptive AI was better than Sorian Adaptive, beating it on every map with no modifier, and beating 1.2 on Mirage.
  • There were compatibility issues between Sorian Edit and Sorian Adaptive on some maps, so results for these have been omitted
  • 3 AI managed the achievement of beating Sorian Adaptive AiX 2.0 or better - M27 and RNG (2.0, Stickleback Ridge) and Uveso (2.2, Badlands)

Edit: Note that some of the AI aren't intended for 20km or water based maps, which will be a reason for poor results on Crossfire (e.g. SCTA isn't meant for such maps). Excluding crossfire from the results would give the following:

M27AI developer; Devlog and more general AI development guide:


AI monthly tourney: Survival of the fittest
Suggested by Fearghal, this tournament's theme is to see which AI does best on a survival map. chp2001 helpfully identified the map Final Rush Pro 5 as a potential candidate, since it features 1 team against another (thus avoiding the problem caused by survival maps which lack an enemy brain/base location for the AI to fight against).

For those not familiar with it, it's a 4v4 map where teams face off against each other with a central chokepoint area where the AI spawns. The AI spawns will be delivered by transport, but air is disabled (so the transports are harder to shoot down).


The survival spawns are split allocated equally between two different survival 'brains', and wont attack each other, but will attack one (and only one) of the teams. This means that a team can choose to be aggressive by sending their units at the enemy base, to help support the survival AI's attack.

To avoid people exploiting the survival AI, ACUs are prevented from hiding in the water by taking damage over time, and prevented from hiding in the rear corner of the map behind cliffs by a group of galactic colossi. The map has a number of configurable settings, including difficulty, which affects the size of the surivival spawns, and how long it takes before it advances in waves (with a wave starting off with T1 units, before progressively getting harder, e.g. sending in bombers; t2 land; cybran destroyers; t3 land; experimental land; etc.). Players start with 9 hives, an ACU from each faction, and lots of mass points at their base.

In the first round, each AI will play against itself (i.e. all 8 players will be that AI), and see how long it takes for the last player to die. These times will then be used to give each AI an initial 'seeding', with the last seed playing the second last, the winner of that playing the 3rd last, and so-on until the last ranked AI has lost to the 2nd last ranked AI which has lost to the 3rd last ranked AI and so on.

The map settings still present some issues for AI, in particular the logic for preventing exploiting the survival AI by hiding - I turned this off for the initial 'seeding' round over fears most of the AI wouldn't be able to understand the 'ACUs die when entering water' approach or that 'those hostile GC near your base can be ignored' , but it led to its own problems, e.g. fully upgraded ACUs hiding in the water being very slowly whittled down by the torpedoes of a couple of bricks and didnt give a fair reflection of how well some AI did. I therefore settled on a compromise for the main event, where a team would be treated as having lost if all 4 land bases were wiped out (i.e. it had no more mexes or land factories).

The difficulty was also set to easiest, as all AI struggle compared to humans with such a setup, and this way there was more of a chance of seeing waves hit the experimental land stage.

Changes to AI
New versions of M27, RNG, and SCTA were reflected for the tournament.
The results
Initial seedings - Time lasted when fighting itself

AI Name Time survived
M27 11m25
AI Turtle 16m28
DilliDalli 17m27
Sorian adaptive 19m20
Adaptive 19m22
RNG Standard 29m06
Sorian Edit 31m41
Uveso Rush 34m02
SCTA Core 35m07
Swarm Terror 37m16

Final rankings and head to heads

AI Name Head to Heads won Head to Heads lost Longest time survived until a team died (in seconds)
Sorian Edit 0 6 992
Sorian adaptive 1 3 1122
AI Turtle 2 3 1029
Adaptive 2 3 1080
SCTA Core 1 4 1807
DilliDalli 5 2 1176
RNG Standard 3 2 1629
Uveso Rush 2 2 1907
Swarm Terror 1 1 1940
M27 9 0 1940

For example, DilliDalli was initially seeded 9th (out of 10 AI); it lost to M27 (the 10th seed), but beat the 5 AI that placed worse than it in the final results to reach 5th place. It then lost to RNG (4th place), so didnt advance any further. In contrast, as Swarm was seeded first it only fought the 2nd place initially (which ended up being M27), and after losing that it then fought the then 3rd place (Uveso Rush) which it won, resulting in ending as 2nd place.

Detailed results
The full results can be seen in the Data worksheet of the following file:

Other Observations

  • There were a wide variety of approaches used by the different AI, for example:
  • M27 favoured a firebase appraoch, but chose to place this near the centre of the map meaning it'd get overwhelmed around the time of T3 land or experimentals
  • DilliDalli preferred an all-out assault on the enemy team before spawns even started arriving, sticking to T1 mexes but often being able to kill the enemy team before their economic advantage could be brought to bear
  • Swarm chose to have a massive swarm of mostly T1 units occupying the central area, meaning they could quickly ambush the survival AI drops as they arrived (up until the late T3 land/early experimental stage)
  • Uveso made heavy use of T1 artillery, which when firing from behind T3 shields at the base proved an effective roadblock to the survival AI's T3 land waves
  • There were dramatic transformations in fortunes for the AI from their initial seedings. In DilliDalli's case this was because it's aggressive approach would lead to short matches in all its games, while in M27's case it had chain reactions caused by the various starting ACU (16 per team) being near the centre and one of them dying. Sorian Edit's reversal in fortunes was likely caused by the stricter measuring of when a team had lost, as it was usually better at retreating its ACU behind cliffs/into water where the survival AI couldnt reach it
  • A number of games came down to the wire with one team losing its final base just before the opposing team lost its final base, including the final between M27 and Swarm, and the semi-final between Uveso Rush and Swarm
  • SCTA performed strongly, with a survival time in head to heads of more than 30m (bettered only by Uveso, Swarm and M27), but DilliDalli's early aggression proved its undoing
  • It looked like RNG would pull back from the brink in its game against Uveso Rush when it completed a cloaked laser upgrade on its ACU at its final base. Sadly it turns out that the map gives omni vision meaning its ACU still died quickly to the T3 land spam.

M27AI developer; Devlog and more general AI development guide:


"This week I also pulled performance stats for each AI against itself in the two round 1 maps, which produced the results below:"

I have been testing for the upcoming RC tourny and have been using "mostly" M27 as the standard to
measure against the other Game specific AI's,
I also start test, at game option speed = Fast, (which is = to +4 sim) to make sure the game speeds are "not likely" to drop below "0" game speed.
Game speed limits the size of the maps I can use -
(if games slow to "-1", after 45 minutes, I limit the AI's to 10x10 maps)
The faster AI's like DilliDalli and RNG are easily able to handle the 20x20 maps.
Since the test games are a combo of the the Game AI and M27 -
I was wondering if with all the recent updates to M27 if it is still as fast as the performance results shown above.

I would test vs Uveso, (since it needs to be loaded for all games anyway)
but it seems that after Uveso grows it's base large it also slows game down a little,
so I don't want to run tests with Uveso as the standard, as it might skew the test results.
Update: I just tested Uveso since post and It runs fast.
It was still +4 at end of 37 min game with 6 AI:Uveso and Lots of units!

Would it be possible to include another performance chart after you run your next tourny,
with the updated AI versions?


Per Fearghal's request, this AI tourney is a bit different, and focuses on how fast/slow the different AI run. The scenarios were as follows:

  • Adaptive Tournament Decision (10km): Rainbow cup style setup, with 3 teams (3v3v2)
  • Rebellion (20km): Simple 2 team head to head with all slots filled (so a 5vs5)

Due to how long games were taking, I ran 2 games on adaptive tournament decision and only one on rebellion.
Unfortunately I forgot to add tick freeze tracking to my profiling code until I was almost done with the games and couldnt face re-running them (as on Rebellion it was taking more than 1 hour for some of the games in real time).

Results are shown both by time, and by unit count. The main point for me is this shows the largest factor in how slow the game will run is how many units are built. In particular, just looking at results by time DilliDalli is by far the quickest AI. However, looking at it by unit count there's little difference between it, RNG, SCTA and Adaptive. That said, Swarm, Uveso and M27 performed noticeably slower even when adjusting for unit count.

For the below graphs, the x axis is either the unit count or the game time in seconds. The y axis in both cases is how long in real-life seconds it took to run 10 game time seconds. I.e. a value of above 10 means that the average game speed was below +0.

Adaptive tournament decision

The large blue spike was a brief period when swarm reached -8 game speed



Unfortunately the current version of Uveso doesnt work with Sorian Edit (which requires Uveso) so no stats are available for this.

I also reran M27 to see how it did after the v47 optimisation release (c. 9% faster) but there wasn’t a noticeable difference in the graph lines so the above reflects the v45 position.

M27AI developer; Devlog and more general AI development guide:


AI monthly tourney: 10km Analytics
Per a request by Relent0r, this tournament was aimed both at providing detailed stats for each AI (so each AI developer gets hopefully useful information), and to give weaker AI a boost to make the results less predictable. The current 1v1 ladder map TAG_Craftius Maximus has been selected since it allows navy to play a role without it being required (so both naval and non-naval AI get to compete), while it's also 10km which will be useful for those AI that aren't designed to function on 20km+ maps.


Each AI will fight each other AI once. The AI will get an AiX modifier based on their average placement in the last 3 tournaments, ranging from 1.0 for first place to 1.5 for last place (where more than 8 AI featured; 1.35 where only 8 AI featured). The actual AiX modifier will then be based on the difference between the AiX modifiers of the two competing AI (so for example DilliDalli will use an AiX 1.3 modifier, while RNG Standard will use 1.1; when fighting each other that means RNG 1.0 will fight DilliDalli 1.2). The AiX modifiers used are shown in the results.

Changes to AI
Almost all of the AI have featured an update since the last tournament.

The results

AI Name and AiX mod Games won
DilliDalli 1.3 7
M27 1.0 6
Sorian Edit 1.4 5
RNG Standard 1.1 4
Swarm Terror 1.2 3
Uveso Rush 1.3 2
SCTA Core 1.4 1
Adaptive 1.4 0

Congratulations to DilliDalli/Softles, with DilliDalli beating every other AI with it's tank focused game style.

Detailed results
The full results including the cleansed data used for the above graphs can be seen in the Data worksheet of the following file:

AI analysis/stats
The following summarise some of the stats obtained from the games (with the underlying data linked above if you wanted to analyse further). Feel free to suggest ways of displaying the data that you think would be interesting (currently stats are available relating to mass killed by unit, mass lost by unit, mass built by unit, the total mass split by active units at a particular point of time, and overall mass and energy income, with the stats recorded in 60 second intervals).

Since it's the first time I've done this it's likely there'll be errors/unintended consequences with the stats (e.g. BuildingDefence is meant to cover units like shields and SMD but has evidently picked up SCTA nukes). If you spot anything odd let me know and I can look at updating the stat tracking for future tournaments.

The stat tracking functionality will be incorporated into the next release of M27 to allow it to be run even if M27 itself isn't playing in a game (by making the variable M27StatTracking true in the M27Config.lua file)

Note some of the below pictures will need opening/viewing zoomed in!

  • Average army composition for all AI over the course of the game
    (This only considers the shortest 75% of the games to avoid a handful of games resulting in a false impression of the AI unit composition)


  • Where each AI invested their mass

  • How effective each unit type was (mass kills as a percentage of mass built)

M27AI developer; Devlog and more general AI development guide: