<< Back to Classic Forum   Search

Posts 157 - 176 of 565   <<Prev   1  2  3  ...  5  ...  7  8  9  ...  18  ...  28  29  Next >>   
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:01:29


Norman 
Level 59
Report
@RvW:
And where is your bot?

@125ch209:
Every round the game engine calls the two functions getPlaceArmiesMoves and getAttackTransferMoves. Your bot isn't shot down between the turns, that happens at the end of the game. However since you are using the java starterbot you have to be careful using the java starterbot data structures to store your state. As far as I looked at the code only the visibleMap (including Region and SuperRegions) is generated completely new each turn. Other values as the startingArmies are just overriden each turn. So if you store the BotState's in a list you will get unexpected behavior if you don't pay attention.


I'm interested in how you guys bots work. Let me explain my bot. The architecture of my bot consists of three components named "model", "evaluation" and "strategy".

- The "model" component is responsible for finding out what is going on behind the fog. The algorithms here take exponential time on the amount of possible SuperRegions.

- The "evaluation" component is responsible for evaluating the situation. It uses the results of the model component. More concrete it's responsible for guessing the opponent deployment per region, calculating whether the game is won, lost,... and most importantly giving each region one of three integer values named attackRegionValue (if opponent region), defenceRegionValue (if own region) and expansionRegionValue (if neutral region). The exact integer value isn't relevant, I think they are arranged at an ordinal scale. Futhermore this component calculates for each region a couple of integer values representing stuff like how many armies I need to defend with / without opponent deploying so he can't break me / I get an even fight when he attacks, how many attacking armies would be complete overkill,...

- The "strategy" component is responsible for performing the actual moves. It uses the results of the other two components. First I calculate how many armies I want to spare for expanding at max. Then the expansion moves are calculated. At last the fighting moves are calculated. I don't have any hardcoded moves in my bot like "take North Africa when you have South America (seriously... come on guys)". All moves are directed by the precalculated region values. Using the region values allows me to let my bot easily perform smart moves. For example when I have the option to transfer armies from Region C to the opponent bordering regions A or B then I can base my decision on which region has the higher defenceRegionValue.
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 2014-04-19 19:31:47
WarLight AI Challenge: 2014-04-19 22:47:23


Norman 
Level 59
Report
http://theaigames.com/competitions/warlight-ai-challenge/games/5352f3d64b5ab22610ebf080

I think turn 8 shows buggy behavior since there are armies left for attacking from Peu.
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 2014-04-19 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 2014-04-19 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
WarLight AI Challenge: 2014-04-22 17:18:31

{rp} pedrito 
Level 48
Report
Bump...

Just for small talk: what kind of coding experience do you guys have?
I read a few pages earlier that one of the guys learned Java just to take part in the competition. That I found quite impressive.

Myself, I have been learning C++ for a year on my own, now I've been learning PHP for a few months, on my own as well. I've made a game in C++, though nothing really to show off, and a few smaller projects. In real life I've been working in hotels for 10 years, but I'm quite fed up and I'd like to eventually be able to make a living with programming, so that's my drive.

How about you?
WarLight AI Challenge: 2014-04-22 17:25:15


Muli 
Level 64
Report
I started a computer science studies last summer and started programming java there :)
WarLight AI Challenge: 2014-04-22 18:07:21


125ch209 
Level 58
Report
I just finished my mechanical engineering school, i am not working yet so i had time to learn JAVA and i've been wanting to learn programming for some time now, so this competition was a good opportunity to do that. During my education i programmed a maze generator in VB.net as a school project (first time i programmed), and i made one project on matlab to do some fluid mechanics simulations .Just before the challenge i made a little program for warlight using matlab : http://warlight.net/Forum/Thread?ThreadID=33590
That's all the programming experience i had, then i read about Java for 2-3 days to do the warlight AI challenge. I've learned a lot this past few weeks, i think if i had to redo the same bot, it would take 10x less that it took me for Gadzbot

Edited 2014-04-22 18:16:51
WarLight AI Challenge: 2014-04-22 23:17:58

{rp} pedrito 
Level 48
Report
I've learned a lot this past few weeks, i think if i had to redo the same bot, it would take 10x less that it took me for Gadzbot


I hear you...
WarLight AI Challenge: 2014-04-23 14:29:35


Norman 
Level 59
Report


2900 rating! Didn't update my bot (in a meaningful way) last 1-2 weeks though. I scaned the wikipedia page about ELO and I think the reason these high ratings are possible now is because the difference between the high level and the low level bots increased so all those low level starterbots are pumping my rating up. So if the best 20 bots keep getting better they can push me above 2000 rating without me working on my bot. Thanks 125ch209, without your bot I wouldn't have managed this high rating.

At present I'm a bit bored about the map and about the other bots. What I don't like about lot's of the other bots is that I'm pretty sure they only work well on exactly this map since the bot programmers hard coded many different situations what works well on this limited map. I can tell that since they work so extremely fine in standard situations and so extremely bad in not so common situations when things get messy. I'm not saying that my bot can play well on every map. The way my bot expands and fights is optimized for 'small fighting maps'. Apart from picking the starting regions I didn't add any hard coded stuff though. A real interesting warlight AI challenge should involve many different maps and random wastelands. I do like pedrito's bot though for his ability to read the board ;)
WarLight AI Challenge: 2014-04-23 18:11:51


ps 
Level 61
Report
i was trying to avoid specific map orders, but the whole stuck in australia and must rush to break south america or die re-occuring scenario made me add that exception. and now i just don't care much anymore and ended up adding a couple more explicit exceptions. but yeah, i would much rather keep coding on a generic approach that would be tested on multiple undetected maps. maybe a follow up challenge? :)

really wish i had more free time for this, have so many ideas for how to improve it but can only manage a couple hours every few days to look at it. :/ have been fluctuating between 15th and 7th for the past few days, which should be enough to be qualified for the finals.

hope to be able to convince my boss to let me work on this for a few days straight then.
Posts 157 - 176 of 565   <<Prev   1  2  3  ...  5  ...  7  8  9  ...  18  ...  28  29  Next >>