Creating a (hopefully) competitive bot using Claude Code.
-
-
@beelee Yes, Ideally it will be customizable, but all current bots that I am aware of are pretty stupid, mine included.
The developers of tripleA did a great job coding a bot that can play reasonable games (better than mine) without benefit of AI tools, and one that can work on a wide variety of maps. Impressive.But let's face it, at the end of the day, the bot plays some stupid moves. My goal is first to make it play less stupid. At some point it will have tunable agression.
If I ever distribute it, I could look into having some settings that users could control. As is, there are lots of settings in the code that Claude tries to optimize, so I think it would be easy ish to make some of them user facing in a public version.
-
-
World War II v5 1942 SE TR
Sorry, I didn't see this. Yes, my bot plays 'World War II v5 1942 SE TR'
For development and testing I play in a Python engine that Claude built for that purpose. In those cases I played without bids. The only major rule difference is no landing on allied carriers, since that's not in the Beamdog game. Claude also built a bridge that allows my bot to play the bots that ship with Triple A. I've not changed the rules in Triple A, just my own engine and my bot's logic, so for the games played through the bridge, the Triple A AI could use allied carriers, but mine never will.
Guessing that you have the skills, I guess that, if you push a program update so to have a property to forbid landing on allied carriers (and maybe also loading onto allied transports) and then add that property (false as preset but of course editable via Game Options) to the game in question, everything will be accepted by the developers (I certainly do not speak for them, so CC @lafayette). Done that, you would just be able to put that property as true before starting the game (so to enforce it for all players, human and AI). This seems to me to be a lot better than enforcing it on the AI itself. (I do think that this property would be valuable in itself.)
Of course, it's your project (and I have no idea how much work would be to do that): just suggesting, not saying you are doing it wrong.
-
@husky81
Does Claude-AI/NavalAgent know the order of importance of, for eample the following order;
Own Capital> VC> Allied Capital> Enemy Capital> Factory> High TT/SZ PUs
Perhaps assign numeric values to these to resolve overall importance for a TT/SZ ?I still think Claude-AI/NavalAgent needs guidances (helping hand) as to what is important to players. Then once it has decided that the order/values are invalid it can replace it with its own.
-
Claude-AI/NavalAgent needs guidances (helping hand) as to what is important to players. Then o
It knows the value of capitals, and of production points per territory (it uses 1 inf per pu). it doesn't really concider vc's yet. those are tricky, because they aren't worth anything until a VC snipe is on the cards. for example, if I'm Germany and besieging moscow, on pace to take in say 2 turns turns. I don't care if USA can trade Italy, France and Karelia, unless they also have a bunch of VC's on the other side of the map.
The bot does check the win condition ahead of its turn so it will try to retake a VC if it is about to lose, but will not plan around VC Play.
-
@husky81 said
will not plan around VC Play.I think this should be a major part of your Executive planning that you are talking about in the other thread, owning the 13 VCs should be a major part of the "eyes on the prize" .
A human player always has the VCs as part of their planning, so should Claude-AI.
they aren't worth anything until a VC snipe is on the cards
Totally disagree, from the start they should form part of the Claude-AI opening play, otherwise how will the Claude-AI ever win?
-
the start they should form part of th
For me, most of my games when playing humans end with economic victories, where one side has enough excess material and income that the other side resigns. There are exceptions, but generally economy ends up being more important than VC's. Of course many territories are important for multiple reasons, like Karelia, which blocks the western allies and the russians from linking up.
I think they are important of course, but for now it's a later thing once the basics are covered.
-
@husky81
So now you have your initial baseline results, Im hoping for now, that you stop using your Tokens verses Hard-AI, Easy-AI and Does Nothing, and just concentrate on using them, against Fast-AI ?What are your plans for testing for improvements to Claude-AI ?
-
@husky81
How goes your quest ? -
@TheDog Thanks for the Inquiry. I am still working on the project, but was out of the country last week and only had my phone, so was unable to send updates here.
I was stuck for a while since there were too many problems to solve on the larger 1942 map. Thankfully, someone had suggested working on a map called "Minimap" which has a simplified version of the game. Only 2 factions, 2 capitals with the only factories, connected by 3 ground lanes.
I fed Claude some games that I played against fast and hard ai's, and talked Claude through extracting some principles that could be coded into the bot.
The bot can currently win about 2 out of 3 games against either hard or fast ai's. I will ask Claude to explain how the bot works, it's performance, and details about failed improvements that are not currently in the best version of the bot.
Prompt to Opus 5.5 (High): Claude, could you write a post about how our current best minimap bot works. Include basic details about how it plans turns, its performance in games on the minimap vs. the easy and hard ais (no need to run additional tests, use our most recent completed testing). please also detail the failed ideas we tried via a brief list, saying whether each was neutral or detrimental. There is no need to disguise that you are writing this report. I will include both my prompt and your reply in my post.
Reply:
How the Minimap bot works, and how it’s doing (written by Claude, the AI that has been building and testing it with the owner)
The setting. The tests are on TripleA’s Minimap with Axis & Allies 1942 Second Edition unit rules. It’s a small two-player board, Russians against Italians. Each side has a capital (worth 10), three inner squares (5 each) and three front squares (2 each), arranged in three lanes: north, middle and south. The bot is written in Python and plays inside TripleA through a bridge, so its opponents are TripleA’s own AIs.
How it plans a turn
Buying. It values each possible purchase against a target army mix (about 60% infantry, 15% artillery, 25% tanks), buys at least nine units, and some turns adds a fighter or extra tanks on a random roll. It shifts toward defence when its capital is in danger, and late in the game it favours units that will arrive in time to matter. Its anti-aircraft gun stays home; it only buys more against a large enemy air force.
Attacks. For every enemy square it builds an attacking force unit by unit. Each force is valued by its exact expected unit-value swing, plus the worth of the square, minus its exposure to a counter-attack and any wasted overkill. It then assembles candidate turns: the full plan, the plan minus each battle, no attacks at all, and a few additions. Each candidate is played out on a copy of the game, through the battles, the non-combat move and placement, and then the enemy’s best combined reply. Candidates are scored by unit value left, plus twice the income difference, with a heavy penalty for any chance of losing the capital. The best-scoring turn is the one it plays.
Positioning (non-combat). This is built from principles the owner took from his own winning Minimap games:
Main stack: it stands on the centre front square, where its planes can reach, as long as it can be made to hold there.
Infantry stream: new infantry flows to every lane, sized to the enemy’s attack strength in that lane.
Front squares: each one is either made to hold (with about 7 or more units) or left with a single infantry as a blocker. Nothing in between, because small stacks just feed the enemy.
Tanks: they wait one step behind a safe front, where they can strike more squares.
Capital: it keeps no garrison unless the capital is actually threatened.It tries several variants of this layout and keeps the one the enemy’s best reply hurts least. The newest rule: a front stack that is at least 90% likely to be destroyed where it stands backs up as a block, leaving one blocker.
Retreats. After a round of a big battle that went worse than planned, it retreats only if playing the battle out looks worse than leaving.
Measurement. All odds are exact (computed, not simulated), for battles of any size. There are no caps on battle size or search breadth, by the owner’s rule. Every change goes in as a switch and is tested in paired games: the same seed gives both versions identical dice, so the comparison measures the change, not the luck.Performance (60-round cap; a game counts as unfinished if neither capital has fallen by then)
Against TripleA’s Fast AI, current version, 100 games (both sides, two seeds): 65 wins, 25 losses, 10 unfinished. The version before the newest rule scored 69–23–8, the same within noise.
Against TripleA’s Hard AI, 50 games (one seed, before the newest rule): 34 wins, 12 losses, 4 unfinished. The Hard AI wins the trading, but the bot out-earns it from about round 15.
A note on “easy”: we haven’t tested TripleA’s Easy AI. The weaker AI above is the Fast AI.What we’ve learned from the games:
The bot’s attack odds are honest. Big attacks it rated about 74% won 70% of the time, ~87% won 86%, and near-certain ones won 99%.
Luck still decides a lot. With neutral or good dice through round 20 it won 45 of 50 games; with bad dice, 24 of 50.
The main addressable weakness: in most of the losses that weren’t down to dice, the Fast AI won the race for our centre front square. It concentrates there while we spread across three lanes, plants its main stack on that square around rounds 5–7, and slowly out-earns us. A fix (the infantry stream follows the enemy’s strength per lane) is being tested now.Ideas we tried that didn’t make it (neutral = no measurable change; detrimental = clearly worse)
Random ~8-unit buy (the owner’s buying style, imitated): detrimental.
Buying more fighters: detrimental.
Probing attacks: neutral.
Only attacking when the square is sure to be taken: neutral.
Keeping the main-stack square longer before falling back: neutral.
Judging positions with an emulator of the Fast AI instead of the enemy’s best reply: detrimental.
Holding the main stack forward as long as the Fast AI’s own estimate wouldn’t attack it: neutral on the original Minimap rules, detrimental with 1942 rules.
Combining several individually neutral ideas: detrimental.
A separate “decisive battle” candidate: neutral.
Simulating both outcomes of big battles, and penalising risk: neutral.
An end-game mode (pressing harder when well ahead, aiming at victory and capital strikes): neutral.
Staging tanks to strike the enemy capital two turns ahead: neutral.
Strategic bombing raids with idle bombers: neutral.
Buying more anti-aircraft guns against big air forces: neutral (positive on one seed, not on the second).
Buying more artillery and tanks when the two main stacks face off: neutral.
A desperation gambit (an all-in attack when the game is slipping away): neutral, with no rescues.
Sending more of the infantry stream to the main stack’s lane: neutral.
Keeping tanks inside the main stack instead of one step behind: detrimental (a nice confirmation of the owner’s principle).
Two-turn look-ahead by sampled play-outs: detrimental when it replaced the one-turn reply, neutral when blended with it, and about 3Ă— slower.
Moving the main stack onto just-captured squares: neutral overall (helped as Russians, hurt as Italians).
Letting any front stack back up across lanes: detrimental (stacks retreated where holding was right, and fewer games were finished). The narrow version, which only backs up stacks at least 90% doomed, is neutral and is now on: it halves the crushed-stack disasters.What did move it, for context:
Removing all caps on battle and search size: the biggest single gain.
Choosing the positioning by the enemy’s best reply (the variants above).
Holding front squares properly (the hold-or-blocker rule).
Keeping the anti-aircraft gun at home: the largest gain of all on the original Minimap rules.
I am currently still refining work on the minimap version of the bot, while simultaneously trying to build it out to play on the 1942 map. The current full game bot is being built one power at a time, with Germany and Russia implemented, UK, Japan and USA still to go.
-
If you manage to create an AI which plays V5 better than Hard AI, that would be awesome. I would definitely try it out! Let us non-developers know when and how we can eventually test it.
I'm wondering if using V6 might help you fine tuning V5 even more than using V5 itself. V6 is a very unforgiving map since the start, and I believe it is much easier to beat Hard AI on V6 than on V5.
Minor note, there is the problem that the current best TripleA AI is called "Hard". If you make a better AI, how is TripleA going to inform users to use that as the first choice? Calling your AI "Very Hard AI" or changing the name of "Hard AI" to "Medium AI" something else? I wonder.
-
lf. V6 is a very unforgiving map since the start, and I believe it is much easier to
I am not a developer, except vibecoding. But In order to actually play against the ai that I'm making, I think I would have to build a version that could be packaged into Triple A itself. Now it is a Python program that can only play automated games against other bots.
Well i guess it could play by email or by using save files, but that would be quite cumbersome.
If i ever get it "good enough" I will try to figure out if it can be integrated into Triple A, but for now that's a future step.
I have taken a look at V6, and I like your idea of using that simplified map if I stall out in terms of progress again. For now I will build on V5 since I still have ideas that I have not finished.
One thing that worked well on the minimap, was showing it examples of "Good" play, and having it try to extract rules from what it saw. If you have any save files of completed games on world_war_ii_v5_1942, they could be useful.
I can of course play vs the fast bot myself, but that will take time, and it would be better to have multiple examples form different players. Even better if we had an example or a few of 2 strong human players playing.
-
@husky81
You and Claude have been busy! 🤯So much info to absorb.
So tempting to customise just for one map and very hard to keep it generic like the TripleA AIs.
The list of tried and tested tactics is awesome.
Having a list like that allows the Claude AI to 'try' the neutral tactics and for it to learn if they work on its new current map.For me a standout is
Keeping tanks inside the main stack instead of one step behind: detrimental (a nice confirmation of the owner’s principle).
On maps like 1941GCD, this is a valid Russian tactic. But for Germany , I cannot afford not to keep the German tanks out of the Attack stack. I guess its map dependant?
Its fab to see the win ratio has increased, well done!
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better đź’—
Register Login