I don't know how you do it Norman.SupremeDalek being at number 1 is at present not a sign that he is extremely smart but that the competition is extremely weak. My bot isn't even working properly due to one serious design mistake (SupremeDalek planning the deployment and attack moves in two phases instead of looking at the whole picture at the beginning of the turn) and one strange bug that is maybe caused from compiler optimizations. I even just added some debug code for important variables like the expected opponent deployment. This debug code is probably even smarter like what some other player seem to do, expecting the opponent deploying his full income on each and every territory...
However, since I have some experience in writing a warlight bot now I'm sure that given enough time I could make SupremeDalek smart enough to battle medium level warlight players in 1v1 (medium level = 50% winrate). It's quite easy making your bot going for solid decisions while it's hard inserting the special magic of a high level player.
Some tips on how I recommend writing a warlight bot:
- Correct algorithms (for example for the fog of war): Before some wild guessing first calculate the things that you really know for sure. Lost picks give intel for example. Also the opponents visible deployment gives intel. Let's say you have africa and australia and border him only in south america. Him then deploying 8 visible gives you the intel that he has North America (but no intel on South America). So you can add all territories in North America into your KnownOpponentsSpots list. (My bot isn't that smart at present)
- Simplification: Sometimes you see my bot performing some 'smart' moves like breaking an opponent bonus, defending an own bonus or even flanking an opponent bonus when a full force attack isn't possible. Look in following game how my bot takes africa on round 12:
http://theaigames.com/competitions/warlight-ai-challenge/games/5334d32f4b5ab22823394ef0I didn't write any code telling him that the opponent is probably in South America and at present he isn't using the intel from losing his South America picks. What I do is giving each territory a value. If a territory is bordering a bonus on which I have no intel I add some value to that territoriy. So all my bot does is using his armies to go for the territory with the highest value each and every turn. If this isn't possible due to the opponent having a big stack there the bot will go for priority two. If I then add some value to a territory for each border to an opponent bonus you will see some smart flanking moves. I also add some value to my own territories for each army I have there to ensure that my bot won't build multiple small stacks. Working with territory values is much simpler than writing thousands of error prone if-then-else statements resulting in unwanted behavior. Nice about working with territory values is that you can just change some numbers to make your bot act differently, and maybe even outsource these values into a seperate file.
However, I probably won't have enough time to make my bot smart enough to compete with some serious competition. A good warlight players with enough coding skills taking this competition seriously and following the principle of my bot design should easily be able to steamroll the current ladder including the current version of my bot.