Think I can get in on this,
I have around 200 Hours of time lapse for the first 2 events. Mainly because I had about 4 complete rebuilds. Hitting some limits with my logic.
I will do a decent post about my strategies soon, and I am open sourcing my bot for anyone to play around with. I do not expect anyone learn much from my code. But as a benchmark it should be nice.
I will also mention I ran out of time for the last event and never implemented the snowball. So I had a major weakness (between 50 and 150 points to be exact). I know I will still implement the Snowball to just make sure my code is not incomplete. But I will keep that separate from my actual competition bot.
Back to my actual strategy, I had conditional strategies which I switched between:
This was a tree based algorithm that analyzed every possible move 5 levels deep and returned the best surviving move sequence. I drew a heat map for both lava as well as player shot ranges and used that to determine my moves.
I also only used my move choice to dodge incoming shots when I had 2 worms (3 worms greatly weakened the select worm function).
The other major thing I did was to greatly increase heat when an opponent clutters (generally meaning they are aggro and I need to run like a boss)
When they were not cluttered I assumed they were score so I loosened my heat a bit so that my worms do not flee for no reason.
The last gem in my survive strategy was I greatly reduced the enemy active worm’s heat map. The reasoning here was that most worms will not try and guess where you will be and then shoot.
The only exception to this was when I was in a 1V1 setting. In those cases I upped the heat again and avoided enemy territory as much as possible.
Counter was when I shot at the enemy, This was simple, If an enemy worm as in range, and not the enemy’s current active worm, I shot. If I was in range and the enemy worm was active I moved which mostly resulted in a miss, unless the enemy had the same strategy.
This did not do much for equal matches, but whenever I had less worms than my enemy I out damaged and out dodged them a lot.
My score algorithm was a genetic algorithm that generated the best score for (I used around 0.9s for this loop).
I looked 7 move levels deep. With move being all digs included. So I would move 1 tile and dig everything, then the next, dig all. And so on.
My rule was if I was safe I always dug. and I dug the diagonals first which often gave me some cover when running from enemy worms.
For my bananabomb I checked the max possible points on the map, and subtracted 3. Whenever I had a clear shot at any tiles that had that I shot. And I also added enemy positioning in as extra score bonuses.
My final function was a sacrifice one. Whenever one of my worms was below 10 health, I killed it off.
First, killing it myself stopped the enemy from getting the points for killing my worm. and B, it prevented some strategies where the enemy keeps worms alive to not get the worms advantage. And in doing this I got some advantage.
I was extremely paranoid over the kill my own worm tactic, Where one player sacrifices worms to better kill the opponent. Basically, start the game, kill your commando and your agent. Then weaken all the enemy worms with your tactician. Finally when they are weak enough, kill the enemy worms and freeze the final one.
So I used the lava to protect myself from losing advantage.
I am still going to implement the snowball. but in the perfect world I feel it will look as follows:
Use the snowball when 2 or 3 enemies are in shooting range from one of your worms. Or when the health drops below 50 (Meaning some damage).
If the enemy worms are never in shooting range. You need to have a round check and if you still have snowballs round 350+ you need to start using them. This will likely never happen, but in 1 V 1 on my bot it happens almost every time.
With all that said that was some of the strategies I followed this year.
I just pushed hard. The Entelect Challenge is the only time I write AI, so I can really sit and enjoy it for hours at a time.
Will post some more info on my Bot’s source in the forums soon.