WarLight AI Challenge: 2014-04-19 00:06:38 |
Hennns
Level 60
Report
|
What I find very intresting is that none of the bots decides to take brazil earlier, which should be a top priority for both of them (and any decent wl player would proably have done). if you guys get to the level that the bot would take brazil earlier I'd be very impresed. Still it is impressive to figure out the opponent have africa whith no vision and before it deploys +8.
|
WarLight AI Challenge: 2014-04-19 03:53:58 |

125ch209
Level 58
Report
|
do you guys figured out how to retain state between runs? i've been trying to do that in order to access the state of the game from previous turn for advanced strategy, but the only way i found is through object serialization, wich we need writing access to do...wich we don't have
|
WarLight AI Challenge: 2014-04-19 10:29:15 |
RvW
Level 54
Report
|
I don't think you're supposed to be able to do that... If memory serves there's a clause in the rules which says you can't base decisions on who you're fighting (in other words: having a line "if opponent = X then do-something else do-another-thing" in your code would not be allowed).
A sort-of way around that is to gather everything your bot has learned in "offline" testing and include that knowledge right into the source code. But with offline testing, you can only fight against opponents you have the code for. Except...
If your bot does not rely on randomisation anywhere (if it always plays exactly the same game if the opponent makes all of the same decisions) you could even feed it matches played on the server by having it play against a fake opponent which simply "plays back" the moves of an opponent in an interesting game. Note the bit above though; any knowledge you gain will be used against all opponents, including the ones with a completely different style!
|
WarLight AI Challenge: 2014-04-19 13:08:10 |

125ch209
Level 58
Report
|
actually i didn't mean retain state between games, i only need between rounds (the program runs every rounds right?), like here when we play warlight and check the "history". I would like to have access to the map, the opponent moves and my moves from previous rounds
|
WarLight AI Challenge: 2014-04-19 13:59:43 |

ps
Level 61
Report
|
125: just do an object array and stores all moves from all rounds as you parse them.
|
WarLight AI Challenge: 2014-04-19 16:19:05 |

125ch209
Level 58
Report
|
yes but since the bot runs every rounds, i can't initialize the array, because it is just going to start a new array every rounds right? and i can't add objects to an array i didn't initalized..
Edited 4/19/2014 16:58:36
|
WarLight AI Challenge: 2014-04-19 17:21:17 |

125ch209
Level 58
Report
|
Another question :) : Can someone explain me what is done in the BotParser class? i understand all of the other classes, but this one i don't get...
|
WarLight AI Challenge: 2014-04-19 18:31:53 |

125ch209
Level 58
Report
|
My bot strategy is really very messy. I have a "base model strategy", where i sort all regions and put them in Lists to prioritize them: -lists to prioritize underAttack regions to defend (in order:region part of a SuperRegion i own, region bordering a SuperRegion i own, Isolated Regions, ...) -lists to prioritize neutral region to expand to (last region to get bonus, last 2 regions to get bonus, regions bordering a superregion i own, regions part of a superregion where there isn't known opponent regions, ...)
I'm also watching the visible armies deployed by opponent last turn (total and by regions) , the regions attacked by opponent last turn, and i know the picks i lost to the opponent.
so this is the "base" model, and then i add a bunch of specific situations, for example: if i own australia and that i don't have any regions in south america, africa or europe, i list region 36,37 & 38 as special regions i need to take asap with as much armies as i have, etc
also, i reorganised the visibleMap so that i run through the regions in a customized order and not by Id
here is an example of my error dump:
Round 4
myRegions: 42 39 21
opponentRegions: 12
underAttackRegions: 21
safeRegions:
specialPriorityRegions:
priorityNeutralRegions_01:
priorityNeutralRegions_0: 41 40
priorityNeutralRegions_1:
priorityNeutralRegions_2: 22 23 24
priorityNeutralRegions_3: 20 18 38
priorityNeutralRegions_4:
priorityMyRegions_0:
priorityMyRegions_1:
priorityMyRegions_2: 21
priorityMyRegions_3:
isolatedInDangerousSuperRegion:
Opponent Reinforcement: 5
line 1266: placing 2 armies on Region: 21
Region to break :12
line 1480: placing 2 armies on Region: 39 to take Region 41
line 1504: attacking Region 41 from Region 39 with 3 armies
line 1586: placing 1 armies on Region: 21
time spent on method: 4454000
i just discovered how to print the line number in the code, wich is absolutely awesome for debugging
Edited 4/19/2014 19:31:47
|
WarLight AI Challenge: 2014-04-19 22:58:43 |

125ch209
Level 58
Report
|
yeah i was supposed to attack with 3 armies....the bug has to be on their part right?
ps: our last game shows you made some nice updates btw, but i only had to change a few things to counter it^^
Edited 4/19/2014 23:00:15
|
WarLight AI Challenge: 2014-04-19 23:30:12 |

Norman
Level 59
Report
|
Yes, pretty sure it's their mistake. There is a thread in their forum about this bug. Since my bot expands with 3v2 and goes for small attacks it probably hurts me most. I didn't add new code to my bot since the fighting update a week ago, but refactored some old code and threw out some bad code. (OK, maybe adjusted the weighting factors a bit). I guess you don't mean that game which was actually our last ;) http://theaigames.com/competitions/warlight-ai-challenge/games/5352fcc74b5ab2272eb958d2
|
WarLight AI Challenge: 2014-04-19 23:33:04 |

125ch209
Level 58
Report
|
yes i meant this game, i updated my bot as soon as i saw this :) i can't let you reach 2900 ;)
Edited 4/19/2014 23:33:55
|
WarLight AI Challenge: 2014-04-20 00:13:29 |

ps
Level 61
Report
|
125: initiate the array object when the bot starts, then add a new element on the array whenever the map update is called. you can create a copy of the fullmap for example and add that to the array, or just a list of the visible regions if that's enough for you (and save some memory, even though i haven't seen any rules limiting memory use on the site). it's important to create a copy and not just do = to something, or you'll just be storing the pointer reference to the object and end up with an array filled with pointers to the same map which is being updated every turn. hope this helps.
|
WarLight AI Challenge: 2014-04-20 00:16:16 |

ps
Level 61
Report
|
hope to find some time next week to do a few more updates, have plenty of ideas on how to improve mine on different areas, not sure if it'll be enough to beat norman but would be cool to find out. :)
|
WarLight AI Challenge: 2014-04-20 16:04:07 |

125ch209
Level 58
Report
|
ok thanks ps!
|
WarLight AI Challenge: 2014-04-21 01:14:08 |
{rp} pedrito
Level 48
Report
|
Thanks for the insights guys... rubs hands :) just kidding.
I've been working on the strategic 'brain' of my bot lately, hence no updates for a while and terrible score.
@125ch209 For your question regarding 'state between rounds' : I've just recently implemented a class called CMoveRegister (with a subclass called CMove), which keeps tracks of everything that has happened in the game so far. At the core is a 2D array, an array of rounds and inside each round an array of CMove-objects. Each turn, separately from all the rest, the bot feeds the move register with the strings containing my moves and the enemy moves, the registers parses the string and converts them to CMove-objects and stored them. Then to access the data I have functions like getEnemyMoves(round), getMyDeploy(round), getTotalMoves(round), getDeployLocation(round), etc... you get the idea. Personally I think that converting the strings to objects makes the handling much easier.
Regarding general strategy I think my bot has quite a different approach that Norman's or 125cd209's. First of all, general strategy and weighted regions are completely missing for now, though as I said above I'm working on this right now.
Here's how it works: I have one function for every "type" of action that a WL player would do, currently: completeBonus, exploreBonus, defendBonus, breakBonus, preventBonus and destroyArmy, each with their respective base-priorities. Inside the function it scans for situations on the board where these could be applied, adjusts the priority according to circumstances, and then creates a "proposed move". Later, the bot sorts all the proposed moves according to priority and starts dealing out armies until it runs out of available armies.
|
WarLight AI Challenge: 2014-04-21 02:38:25 |

125ch209
Level 58
Report
|
i think your method to keep track of the opponent moves is really complicated. I found another way much simpler. I basically added some PlaceArmiesMove , AttackTransferMove, and Map ArrayList with getters in the BotState ,and i fill them in the corresponding method (using getMapCopy() and other methods to copy the moves) you don't need to parse the objects into strings.
|
WarLight AI Challenge: 2014-04-21 04:07:29 |
{rp} pedrito
Level 48
Report
|
Well, I don't really know what you mean by that. To turn the strings into useful data, I need to parse them at some point. Can't really ask a string how much the total deployment was during turn X. But then again, I don't know at all how you built your parser...
|
WarLight AI Challenge: 2014-04-21 04:18:31 |

125ch209
Level 58
Report
|
ah yes forget about it, didn't see you used PHP, in the java botstarter all the parsing is already there
|
Post a reply to this thread
Before posting, please proofread to ensure your post uses proper grammar and is free of spelling mistakes or typos.
|
|