Today, we are gonna talk about AI.
A good introduction for those new to the field
Fifty Shades of AI
There are several AI modules in Stellaris. For historical reasons we call them “ministers” as each one is supposed to handle a specific role in an AI empire.
There are 3 broad kinds:
- The AI foreign minister handles diplomacy, federations, galactic community, peace deals and the like
- The AI interior minister is in charge of the economy. He keeps budgets and order constructions, both civil and military.
- The AI military minister is in command of all troops and military fleets, and also responsible for laying out strategic plans when at war.
As almost everything in our games, AI is configurable in script for our modders, although I’m not exactly sure what would happen if you assigned a space monster military AI to the caravaneers
In guise of a welcoming gift when I joined the team, I was tasked with reworking the military one...
The Military AI
To give you a little bit of background, there were several generations of military AIs in Stellaris. The generic one (used by most “classic” empires) was redone by the great @sidestep last year, while the more specialized ones (crisis, space monsters) have kept close to what they were on release. In the midst of the sad and dark swedish winter, I managed to bring some improvements that I’ll showcase today.
First of all, I worked on visualization to help us debug how the AI “thinks”. Funny thing is, it already made it look “better” to audiences even if it didn’t actually change any behaviour. It’s actually something that’s been observed in video games: a good AI tells you what it does, which makes it look smarter. One of my favourite examples of that would be the enemies in FEAR.
So by typing 'debug_ai' in the console and observing an AI empire, you can see what it has in mind:
“I don't even see the code. All I see is blonde, brunette, redhead. Hey uh, you want a drink?”
As a simple analogy, imagine that the AI has a war minister that looks at the big picture and rates every potential target, a general staff who assign fleets to some of those objectives, and then admirals who try to lead those fleets on a tactical level to achieve those objectives.
The skulls on top of each system shows military objectives that the AI is considering (the war minister). Red ones are the ones they selected and committed some fleets to, while green ones are other options they haven’t retained for now. Finally for each individual fleet, in those task forces, you see what they are doing at present.
In our screenshot example, the AI decided that taking Tiralam was the most important objective with a score of 4500, and that they estimated that at least 11.2k fleet power was needed to accomplish this. They committed the Kilik Armada, the Jinki-Ki-Ti Armada and the the Grekki Armada to this. Since it makes little tactical sense to attack in a dispersed formation, the AI issued orders to regroup in Broon’s Singularity before proceeding on the attack (something we improved in this patch).
For convenience, the summary is also visible in the outliner:
As seen from the other side of that war
That change alone allowed us to see where the AI was a bit weak and also made evident a few bugs in the production AI that we promptly fixed. A funny one was that in some cases a fleet would end up assigned to two different fleet groups, nicely simulating two admirals fighting over command of a fleet and issuing contradictory orders every day.
The next step was to rewrite the various crisis to use the generic AI, so that any effort spent on making better would benefit all. In patch 2.6 the specific AI of the Khan, the Prethoryn, the Unbidden and the Contingency will use the same AI as the “standard” empires, with a few twists to still retain their personality.
Without spoiling every secret, here’s a few ideas:
- The Khan doesn’t really believe in defense and will try to beat the closest systems into submission
- The Prethoryn will swarm in every direction they can
- The Contingency will systematically try to stop the biggest threat to the galaxy, until nothing remains
- The Unbidden will be harder to predict, but there’s reason behind their alien way of acting.
The current version solves this by putting a fleet power value on every target, then grabbing fleets by order of priority until it either has enough to accomplish the objective, or go over the next one. This approach showed its limits when we plugged the crisis AI into it, as it relies a lot on the size of available fleets (it doesn’t know how to split them, it can only merge them).
Teaching the AI how to split fleets proved quite interesting:
What shall we do with this knowledge?
It took several tries to find a good balance, as the AI tended to split too much (most objectives don’t call for that much fleet power, unless you’re fighting your enemy main fleet). In the end, after trying some complex strategies such as keeping statistics on accomplished objectives and deriving a good target number from that, a simpler approach turned out more efficient: put all the nation’s offensive fleet power into one stack, and then consider splitting in 2,3 or more depending on how confident the AI feels about its military power versus its foes.
Knowing some of you like to mod our AI, here’s some new defines you may want to play with once all that hits the shelves.
# Objective values HORDE_INVASION_PLANNING_DEPTH = 5 # How far out does the Horde AI looks for invasion targets (in system hops) SWARM_INVASION_PLANNING_DEPTH = 5 # How far out does the Swarm AI looks for invasion targets (in system hops) SWARM_POP_TARGET_MULT = 1.0 # Extra target scoring for swarm (multiplied by number of edible pop on the planet) CONTINGENCY_MEGASTRUCTURE_EXTRA_VALUE = 4 # How attractive are megastructures to the Contingency (added to the base value of 1) UNBIDDEN_PORTAL_EXTRA_VALUE = 20 # How much does the Unbidden want to defend their portal (compared to base value of 1) UNBIDDEN_BYPASSES_EXTRA_VALUE = 4 # How attractive are bypasses to the Unbidden (added to the base value of 1) UNBIDDEN_RIVALS_EXTRA_VALUE = 10 # Extra target scoring for rival invaders (Aberrant and Vehement) UNBIDDEN_TARGET_EXTRA_VALUE = 10 # Extra target scoring for randomly chosen nemesis UNBIDDEN_PSIONIC_CONQUER_DESIRE = 20 # Extra weight added to psionic empires when rolling a nemesis (base 1 + number of owned bypasses) UNBIDDEN_CHOSEN_ONE_CONQUER_DESIRE = 50 # Extra weight added to empire lead by the chosen one when rolling a nemesis (base 1 + number of owned bypasses) # Fleet sizing OFFENSE_VS_DEFENSE_STRATEGY_ALLOTMENT = 0.75 # How much of its fleet power should a country with 1.0 aggressiveness should try to commit to offensive missions AVERAGE_FLEET_SIZE_FACTOR = 0.05 # Ballpark estimate of the minimum size a fleet should be in relation to total fleet power OWN_FLEET_POWER_FACTOR = 1.0 # How much does AI count its own fleet power when evaluating forces ALLY_FLEET_POWER_FACTOR = 0.5 # How much does AI count ally fleet power when evaluating forces ENEMY_FLEET_POWER_FACTOR = 1.0 # How much does AI count enemy fleet power when evaluating forces FLEET_SUPERIORITY_FACTOR = 1.5 # How stronger should the AI be before it starts considering splitting fleets (fleet count = relative strength / this factor) CRISIS_FLEET_SUPERIORITY_FACTOR = 1.0 # Same as previous but will be compared to the strongest foe in the universe
Most of those changes will be delivered in the patch coming alongside the Federations release (2.6.0), but not all. As you may imagine, changes to the military AI are quite impactful and we don’t want to release the changes without enough testing, so some of them will be delivered in the first support patch (2.6.1).
And with that, I shall leave you with @sidestep one last time.