• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.

CK2 Dev Diary #71 - AI and Optimization

Good afternoon, everyone. I’m Magne “Meneth” Skjæran, back again for another dev diary. The list of previous topics I’ve covered is getting too long to include in full, so I’ll just include some of my favorites: modding, optimization, and quality of life.
Today I’ll be covering one of those topics once more: optimization. I’ll also talk a bit about what we’ve done to improve the AI in the upcoming patch; I’ll even share the whole AI changelog, which is by far the biggest in CK2’s history.

Let’s start out with optimization. Optimization hasn’t been a focus on anywhere near the level it was in The Reaper’s Due, but with the sheer number of new provinces we’ve added in Tibet, the Tarim Basin, and the Middle East, we wanted to ensure the game wasn’t slowed down. So during development we spent some time profiling the game to identify parts that might be made faster, and have kept track during development of the average speed of the game in our overnight hands-off campaigns.

The result of this was roughly 50 changes across a variety of different systems, ranging from tiny optimizations to a few large ones. The largest, sadly, was simply fixing a performance issue introduced earlier in JD’s development, but still this resulted in a noticeable improvement over 2.7.

Here’s a small selection of the changes we made:
  • Ported HoI4's optimization to GUI focus processing
  • A few optimizations to unit map icons
  • Courtiers now only check events every 50 days instead of 20
  • Checking if minor titles need an update is now done in parallel
  • Informed the AI that we changed how decadence works years ago and it shouldn't give titles to its family members just for the hell of it
  • Unlanded characters will no longer take the "become council member" ambition
  • Added "ai_check_interval" parameter for decisions. This determines how rarely the AI checks a given decision, and can be useful for performance-heavy decisions that don't need to be checked often
  • Plot and ambition selection is now done in parallel, and applied in series
  • Raid armies now only re-evaluate where to go if they have a compelling reason, or haven't done so in a while, like regular armies
Essentially, a bunch of small changes, including some increased parallelization.
On top of this, we also made a few changes to avoid unnecessary characters getting generated:
  • Restricted a few events/decisions that would generate characters to playable characters, and one to non-mercenaries only
  • Improved PopulateCourt so that more characters than necessary aren't generated, by better counting councilors, counting existing concubines, and ensuring only AI characters that would want to marry generate marriage candidates
  • Characters currently in hiding or prison can no longer impregnate women, who were already excluded from impregnation if they were in hiding or prison
  • Made AI baron generation try to find an appropriate character in court first; only if that fails is a new character generated
  • Fixed naval mercs generating sub-unit commanders
As a result, despite the significant number of provinces 2.8 adds, and the extra characters arriving from China, the game now plateaus at a similar level to 2.7:
upload_2017-10-16_12-0-37.png

For comparison, here’s a similar graph from Reaper’s Due:
vMnckpc.png

Sadly I don’t have a similar chart from MnM. To the best of my knowledge, in MnM it would look very similar to JD’s chart.

There’s been a bunch of other minor changes between what I’ve listed above, but they’re too many and too technical to be especially interesting.
Overall, in our tests, these changes combined have resulted in the first decade of the game being 8 to 16% faster than 2.7. As you can tell, this varies some by PC, but every single machine we tested it on ran faster in 2.8 than 2.7. Note that as our main goal was simply to ensure that no slowdown had occurred, we only have precise metrics for the first decade, though our overnight tests indicate that roughly the same result holds through for long-term performance as well.
We’ve also taken a few steps to reduce memory use a little, though we don’t expect this to be noticeable except perhaps for those on machines with very little RAM.

Now, let’s move onto the AI. The CK2 AI has always had a few idiosyncrasies, though the character-based nature of the game means that this doesn’t hurt the game experience as much as it might in other games, since human beings doing silly stuff is quite normal. However, some areas can be frustrating even with that taken into account, such as troop movements, and the AI having little regard for border gore when handing out titles.
In 2.8 we’ve therefore spent quite a bit of time on various parts of the AI. Without further ado, here’s the full AI changelog for 2.8:
- Fixed one way AI characters that should have AI could end up with no AI
- The AI now actually considers the idea of sending its army to a province if its friends are there or adjacent, even if the province is otherwise a bit boring
- The AI now actually realizes that friendly armies standing near a potential target is a good thing even if it doesn't personally own those armies
- Once the AI gets to its allies it won't decide that if it can't attach due to supply, it is better for everyone if it just packs its bags and goes home. Instead it will now try to stick close
- The AI is now vaguely aware of the existence of tribal vassals when evaluating whether a faction has a real chance of succeeding
- The AI now checks to see exactly how many liege levies it'll deny its liege by revolting, rather than going "eh, half my levies I guess?"
- The AI now takes tribal vassals into account in most decisions where it considers how strong a potential enemy or ally is, rather than simply pretending they don't exist
- Fixed aggression from ambitions having 20 times as big an effect as intended
- AI will now also call allies to arms if the estimated answer is a "maybe," to force them into making a decision.
- Raiding adventurers now realize once they've been settled that maybe, just maybe, they should consider their new realm their base of army operations, and return armies there when they're not up to anything
- AI: Should be snappier to evaluate settlement decisions when needed
- If defensive pacts are disabled, the AI will no longer think no one could possibly be a threat to it
- AI: Made the Pope less reluctant to accept requests for excommunication
- AI (Conclave): Will never pick Heritage or Faith Focuses for children of the right culture and religion
- Tributaries are now always aware that their tributary relationship benefits their suzerain more than them, and that they could potentially break free
- The AI no longer gets increasingly reckless the more "rational" it is; being enlightened by your intelligence turns out not to make your troops any better
- The army AI no longer thinks that just because two destinations are pretty much equally good, it should switch back and forth between the two and thus never get anywhere
- The army AI now understands that if it has bothered to start a siege, maybe there was a good reason to do so, so we shouldn't just run off right after just because another destination looks very slightly better
- Taught the AI that more loot means a province is a better target for looting
- The army looter AI now actually realizes that if all the loot in a province is protected by holdings and the army isn't big enough to siege them, it isn't actually a good loot target
- The AI now considers any strong realm nearby a potential threat
- Taught vassals how to send alliance offers to other vassals
- Informed the AI that we changed how decadence works years ago and it shouldn't give titles to its family members just for the hell of it
- Told the AI that if it is the attacker in a war, it *might* be a good idea to actually go attack the defender even if you're targeting their whole realm rather than a specific title within it, and it is a bit of a long walk
- The AI has learned how to spell, and no longer look for "soceities" missions when they're actually called "societies" missions. With this newfound ability to spell, the AI is better at identifying mission targets
- Taught nomads that if they rise in revolt in response to an attempt to split their clan, maybe they should accept it next time rather than rise again and again
- The AI is no longer deathly afraid of going overseas to help its allies just because the enemy is a bit far away
- The AI no longer thinks that just because a province is *someone*'s capital, it's a good target; it is now more discerning and only cares if it is the capital of an enemy
- The AI is now a bit more aware of just how superior heavy cavalry is to light infantry
- The AI now no longer thinks that enemy armies adjacent to other enemy armies are just on vacation, and won't help out if it were to attack
- Gave the AI a crash course in how to hand out titles
- Gave the AI a crash course in how to transfer vassals in a way that won't make you want to claw your eyes out
- The AI now realizes that just because it has occupied everything it borders, it shouldn't skip out on occupying the non-bordering stuff
- Taught the AI a few things about how supply works, and why a doomstack isn't always the best way to deal with it while travelling to its destination. The AI is hard of hearing, so it only partially understood this lesson, but partial understanding beats no understanding, right?
- Taught the Pope Geography 101, with an emphasis on what "distance from Catholicism" and "size of kingdom" means in the context of Crusades, and why this means that invading India when Egypt is right there might be a bad idea
- Informed the AI that just because their ideal commander can't lead troops right now, doesn't mean they should just skip assigning a commander to the flank they wanted to assign that commander to
- The AI now realizes that once it is landed, it should base its army in its capital rather than have it stand in the middle of nowhere, taking attrition, just because it happened to spawn in the middle of nowhere many years ago
- Betrothed men no longer go "nah, can't fulfill this betrothal" after sending a marriage offer which you accidentally reject. They will also no longer decide to not bother to resend the offer while mumbling "let's see how *they* like being ignored"
- Told just-spawned raiding adventurers "hey, your fleet is right over there" so that they wouldn't disband instantly when spawning on an island with no good raid targets, due to thinking that getting across the sea is simply impossible
- Members of small reformed religions are now a bit more fond of joining Great Holy Wars and the like
- The AI has finally come to the realization that it is allowed to invite its own vassals and courtiers to plots, not just the vassals and courtiers of the target

Shortly put, this fixes some of the more blatant mistakes the military AI would make, though I’m sure there’s still some left; I’ve personally still observed a few AI loops where the AI will start and stop moving every day, but sadly that wasn’t reproducible from save and thus couldn’t be fixed. It should be a bit more committed to its actions now, and better at figuring out where it should actually be going.
Beyond that, the AI is now much better at handing out titles and transferring vassals. For the hand-out part, it tries to avoid making existing vassals stronger, instead preferring to create new ones, and tries to maintain its culture and religion if reasonably possible, as well as strengthening its dynasty. For vassal transfers, it now tries to give it to adjacent vassals so that sub-vassals don’t end up scattered all over their realm. Inheritance will still lead to that kind of thing, but that’s historical, so not something we consider much of an issue.
There’s been a number of other tweaks, but one I think people will be especially glad to hear of: the Pope should no longer be calling random crusades for India when he’s got targets much closer at hand.

That’s all for today. If you’ve got any questions, feel free to ask them in the thread.
 
Last edited:
What wouldn't I do ?

Play as the leader of a Holy Order or dynamic mercenary company, play as as baron and work my way up from nothing,
=/= landless
create some wicked modded events and decisions
Modding
and play as a true landless character running a Guild, an Adventurer's company or a religious or cultural revolt. Travel the entire world, tagging each capital I visited and then compiling a magnum opus on my travels throughout the known world,
Actual suggestions for landless characters.
create my own religion or society,
Pipe dream.
visit all the Universities and centers of high Learning on the map and then write down all my knowledge in a grand treatise,
Actual suggestions, though not for landless characters specifically.
conquer an unclaimed province in sub-saharan Africa and become Prester John.

You know, the usual.
As you said, you can already do that as a landed character.

So all the real suggestions you have are about travelling, revolts and guilds. People barely travelled in that time, and I strongly doubt you want to fill a significant portion of your campaign with starting revolts in random places. That leaves you as guildmaster or head of the mercenary band... neither of which are dynastic! So you would be spending the majority of your time trying to acquire either of said title.

I'm not trying to attack you personally. But playing landless would be boring as hell. Every single element of the game is meant to be played from the perspective of a landed character, with every goal intended for titles. You wage wars for titles. You get money to spend on building holdings. You would have to ditch 80% of the events if you want to play landless, because they do not apply to you.

There is no real goal to reach, because everything will end when you're dead, and you get to start over again with a new character, except with some artefacts I guess. Are you going to suggest dynastic feuds? Just add them to the base game and spend the development time on working out the kinks in that, rather than retrofitting everything the game has ever stood for to a group it was never intended for.
 
@Keizer_Harm

1) In the landed_titles.txt file all holy orders and mercenary companies have the tag "landless = true". This tag means that the title is not fixed to any particular area of the map, it currently also means that if this is the last title that the character has then it is game over.

2) At the moment modding is not possible as switching to a landless character simply yields game over. This was not always the case though, up until early last year so long as your last title was Count or above switching to that character would allow you to play on, even if the title was landless. This yielded all sorts of strange effects, but it was still playable. Again, at the moment this is not even possible, there appears to be no effective workaround.

3) FWIW a few years back I got quite deep into creating a custom Landless mod. I made five custom landless titles with five custom landless mercenary types (Rebel Mob, Adventurer's Company, Merchant's Caravan, Rogues Band and Travelers Party), edited all the Councilor decisions to be relevant to landless characters (eg Join Court, Befriend Locals, Set up Trade Stall etc), and was working on events and decisions when they introduced Horse Lords and stuffed up 90% of my work. The idea was that the player would move to an area, set up their custom Holding then try to set up ties and relationships with the local area to start yielding money, Prestige or Piety. Depending on the landless title type there would also be options to join the local magnates wars with a view to getting an honorary or even a landed title, gaining more followers or whatever.

4) This wasn't even on my radar when I was working on my original mod, but with the new mechanics for societies and artifacts etc it would be dead easy to mod in a generic new religion or society and make decisions and events for the player to "create" them.

5) One decision set I was working on would have added a custom decision for a Traveler character to "Visit Court" at various points on the map in order to give the player a "visited_xanadu" flag or whatever,. Eventually they would be given the option to write it all down in return for much prestige, Piety or even tech points, under the new artifacts rules it would even be possible to create a book artifact detailing your travels. Another decision I had in mind would have allowed the Merchant player to Trade with the Locals, this would have eventually led to a decision to set up a Trade Post or even build a new City.

6) A player CAN become Prester John, but they have to be landed first. Another mod that I was working on was much more limited in scope and would simply have allowed any Anglo-Saxon ruler under Norman rule to pack it all in in return for a fistful of cash and a new (landless) mercenary company, if you then traveled to Constantinople you got the new decision to carve out a realm somewhere on the Black Sea and become a vassal of the ERE. This apparently DID actually happen (see here), it wouldn't work as a landed character and the diplo range rules make sure that it can NEVER happen without mods.

7) Since you've obviously never played a landless character you don't know how much fun they can be. You never lose the game for losing your last title and you always jump in as the next ruler when your old character dies. There are also no pesky claimants to worry about, nor is there any reason to worry about heirs or dynastic marriage. Mercenary leaders also can't (technically) marry), although you can take lovers, have concubines (if your religion/government allows it) and Seduce women, or even marry off one of your courtiers, which meant that sometimes you would inherit the title already married. All part and parcel of being a commoner I suppose.

My favorite campaign of all time was playing as the Grand,master of a custom Holy Order, you can read all about it here. This mob gained and lost a landed realm two times, once in Jerusalem and once in Afghanistan of all places (check out the AAR,, it all makes perfect sense) before finally fabricating a claim and conquering Malta. They eventually became masters of the western Mediterranean before another patch came along and invalidated the savegame.

Finally and yet again, I know that playing as a landless character would not be for everyone, but the same is true of playing as a Tribal Chief, a Nomadic Khagan, a Merchant Doge or even as a petty Count in the middle of a stable realm such as the HRE. No one is forcing anyone to play this way, I just want the option to do so.

Ideally this would be by way of a landless centered DLC, but I'm not holding my breath. The best I am hoping for is that PDX simply returns the functionality that was lost after that patch two years ago, we modders can take it from there.
 
Last edited:
Well... I should say I am impressed. But it seems that the goal of any landless character seems to be to become landed. You spoke of taking over Malta and the Mediterranean, which effectively turns you landed. Could you have fun playing landless for four generations or more?

One might argue that the same is true for the Tribal government, but I will contest that that represents a flaw in the tribal government, rather than a feature.

But you have me convinced, for the sake of people admittedly not all liking to play the same way, that they should open up the possibility if it is reasonably possible (won't result in Ironman bugs that will allow a player to become unlanded and survive).