Mean Max (CC01) - Feedback & Strategies

43rd legend, C #

I started writing the referee’s class pattern during Wood 3, and I tested it in bronze league. The C # Linq tool is a good way to quickly test many filtering and sorting possibilities.

In Silver League, I used a brute force and a simulation on each wreck making them a target for my reaper, to see which one will maximize my score after 6 laps.

In the gold league, I added to the combinations of bruteforce, an angle parameter for the reaper, a parameter for tankers with a particular sort to all parameters.

The biggest and the greatest moment of the contest for me is when my bot has been selected to be the MadMax, the Ultimate Gold Boss, and it makes me very, very proud and happy.

Many thanks to Agade, Magus, Pb4 and Recurse and all CG staff for their work and for providing us with this unique and unforgettable moment of fun, of coding and gaming experience.

Big Up

10 Likes

First of all, I want to thank Magus, Agade, pb4 and reCurse for the time they put to build an engaging contest, thank you guys !

I ended up #46th.

This was the first time I used a search algo with simulation in a contest, with all my previous attempts relying on heuristics/if spaghetti. I used a GA algorithm.

The only thing I want to add to the discussion is the relevance of the search algorithm. I spent most of the contest twiking the evaluation function score parameters, writing more and more complex and creative ways to score the board. All of this with almost no changes (and very often with very bad results) in my AI performance.

So, what did make a difference?

I was getting really frustrated by not getting past wood 1 after a lot of work in the eval function, and then I changed my GA depth from 6 to 3. Magically skipped 2 leages to reach silver. I couldn’t belive it.

Then changing the pool size from 50 to 6 gave me another boost, and finally on saturday I made another change that allowed me to reach Legend: improve performance by ignoring every collision that don’t involve my own looters.

I still couldn’t believe the difference between the top players score and my own (it will end up being like 11+, which is a lot) so I was eager to read their postmortem. After reading Agade’s (which is always very interesting, thanks @Agade) I think I can conclude that the evaluation function is absolutely secondary (in fact I tried Agade’s eval in my GA, and my version beated it 88% of the times), with the search function optimization being what makes all the difference. It doesn’t matter if you have an optimum that is very high if you can’t ever get close to it, right?

That is really the most important thing I learned in this contest that I will try to put in practice in the next ones.

Thanks again to the creators and the CG team for the amazing experience and learning opportunity !

6 Likes

19 Legend , Java

Based on experience of CSB and PCR and the referee, the physics engine was pretty simple to write (all my tests were green on the 1st saturday night).
Then I used jvisualvm to grind the perf ladder (keeping my tests green obviously, they were a life saver a bunch of times)
Nothing fancy here except the early exit by doing projection of entities (not as smart as EulerscheZahl):

    double posx1Min = Math.min(position.x-radius, remainingTime*(position.x+speed.vx)-radius);
    double posx2Max = Math.max(u.position.x+u.radius, remainingTime*(u.position.x+u.speed.vx)+u.radius);
    if (posx1Min > posx2Max) return Collision.NO_COLLISION;

    double posx1Max = Math.max(position.x+radius, remainingTime*(position.x+speed.vx)+radius);
    double posx2Min = Math.min(u.position.x-u.radius, remainingTime*(u.position.x+u.speed.vx)-u.radius);
    if (posx2Min > posx1Max) return Collision.NO_COLLISION;

    double posy1Min = Math.min(position.y-radius, remainingTime*(position.y+speed.vy)-radius);
    double posy2Max = Math.max(u.position.y+u.radius, remainingTime*(u.position.y+u.speed.vy)+u.radius);
    if (posy1Min > posy2Max) return Collision.NO_COLLISION;

    double posy1Max = Math.max(position.y+radius, remainingTime*(position.y+speed.vy)+radius);
    double posy2Min = Math.min(u.position.y-u.radius, remainingTime*(u.position.y+u.speed.vy)-u.radius);
    if (posy2Min > posy1Max) return Collision.NO_COLLISION;

gave me ~2000*3 simulations in 30s
**Note : I think there was something amiss with timeout, it’s the 1st time I have to set the timeout limit so low 30s instead of 44 in the other contests **

Then came the fitness function and it was a nightmare :angry:
There is so many things happening that i could not (and I still can’t) really understood what was good and not (except some basic facts like score)
I reimplemented the eval class many times and, at the end, came with something pretty simple stupid but seemed ok.

I want to congratulate the fab4 and CG for the contest, it was really good.
I look forward to be a member of a team to create a new one with this quality.

4 Likes

First of all whoever came up with the game idea, good job, well done. It’s probably the most entertaining game here at the moment.
Can’t wait to see it released, maybe i will finally have some time for it.

The skills could have used a bit more tweaking maybe, but aside from that little tidbit, it doesn’t matter. It’s a great game to have on this website.

Too bad not all 7000 registered users joined the contest. We didn’t even have half of them enter. :confused:
The submission lag was annoying though and i can’t image what it would have looked like with those 7000 all participating.

My Contest experience:

Wrote a bot that could get #65 gold and then i messed everything up with greedy submits trying to get more. Ended up #256 overall. I don’t care about this rank though, for me it was either legend or nothing.

Had a busy work week so my strategy was improvise on the go.
Wood 3 i used a powerful algorithm that got me to Wood 2:
in the starting code i printed out for the reaper:

print “x y 300”

and it got me #2 in Wood 2 until i finally had time to try something out few days later.

I went for very basic heuristics, add a few lines to the starting code, that’s it really. Got 300 silver with Python3.
Switched over to Java to use the stream bot, improved it a little bit and got gold, which i kept improving to a bot that can get top 100 gold easy. That’s about it, i just i wish had better luck on the last submit, or maybe should have been less greedy. Oh well whatever.

2 Likes

Finished 196th in Gold
This was my first contest. I am new to CodingGame.
Thank you for this wonderful contest, it was a very good learning experience for me.

I tried simple if/else logic as well as genetic algorithms (my very first attempt).
I failed miserably on GA version, it would not even beat my out if/else – I would be very thankful to anyone who did GA - if they can share their fitness function or would want to review mine, which is pretty much the referee code.:slight_smile:

For if/else logic -
reaper would look for the wreck where it has best chance i.e. the one nearest to me and farther than opponent reapers & doofs. if enemy is low on rage, I did not care about doofs. Also, if an opponent is leading and in range, my reaper will use skill on them.
destroyer would look for nearest tanker within watertown radius if there are no wrecks. Else fights the best opponent’s reaper
doof would chase the best opponent and use skill if there is a wreck near any of the opponent

Thank you!

1 Like

Hi everybody,

Thanks to Magus, PB4, Agade and Recurse for that great great contest. A lot of fun and hard work have been there during all these days.

Starting day
Oh, I was very sick. I got a fever of about 40°C. I read the subject, then couldn’t think much about it because of a very strong headach. Too bad, because the real pleasure in those CG contests, is to think about problems and solutions. So I stayed to bed and thought about how not to think about the contest :frowning:

Wood3 to Wood1
Saturday, the fever was always there (about 39°C), but I could code and I wanted to. A very light code (300 LOC) :slight_smile:

  • Read the input and decide what to do without stocking any information
  • Destructor will follow the strongest opponent (which has a better score than the other opponent)
  • Doof will do the same : follow the strongest opponent
  • But if at least a tanker exists, so Destructor will go to the nearest tanker
  • The reaper will follow the Destructor
  • But if a wreck exists, the reaper will go to the nearest wreck

Wood1 to Bronze (44th / 383)
No change needed : The same wood code entered to Bronze on saturday PM 7:00 (Saturday Night Fever !!)

Bronze (23th / 767)
To stay in top of the ranking before the Silver league opens, I added some features. My fever was lower (38°) and I could even write a better version code, properly reading all informations :

  • read and stock all data informations
  • if at least a wreck exists, the Doof will go to the middle point just between the strongest opponent and his nearest wreck to intercept it
  • Shield feature : if my reaper detects a collision on a wreck on the next turn, it casts a skill just behind, at a distance of 1390 from its next position, to give +10 mass, and kick opponent unit or a friend unit
  • Oil : If a winning opponent is on a wreck, and my reaper is not, and I could cast an oil skill, I do so (I had a bug here because I forgot to test the <= 2000 distance).
  • Grenade : if an opponent goes to a wreck, and my reaper doesn’t, and I could cast a grenade, I do so (here the distance was good)

Silver league opens (38th / 545)
As my bot was in the top of Bronze league, passing to Silver league was immediate on monday evening. On tuesday, there was the CodingHub in Lyon. There I met Saelyos (yes he is real), and now I can confirm that the best french coder on that challenge (#4) lives in Lyon :D.

End of Silver league (34th / 759)
Nearly the same code stayed on top 40 till the Gold league opens on wednesday evening.

Gold league (12th / 250) on Legend opening
To maintain my top ranking in Gold league, I had to add some new improvements :

  • Adding evaluation for my Destroyer to choose the best tanker to kill
  • Adding evaluation for my Reaper to choose the best wreck to collect
  • All evaluations are based on water points, distance, and proximity of enemy units
  • For my reaper, add the same evaluation for tanker than for wrecks. So my reaper would sometimes chase a tanker. Here the evaluation includes my Destroyer proximity
  • To improve all my moves, I added a post treatment to avoid collisions. Once I knew each destination point for my Destroyer and for my Reaper, I parsed all angles and thrust to determine the best way to follow without collisions

Top Gold Till the end of the contest (final rank 6th Gold / global 55th)
I couldn’t pass in Legend Guild because I didn’t have a simulation working. On the last day (sunday), I tried to code the complete referee (in C), but collisions functions didn’t work at all. From the beginning of the contest, I chose not to invest my time on developping the simulator, because I knew it would be a lot of time for me. So I prefered to use my time to perfect my heuristics, try other criterias (often not very good), and play with my magic numbers. My last feature was to kick opponents from a wreck with my Destroyer or my Reaper :

  • When my Destroyer or my reaper is on a wreck, and I detect a collision on the next turn with an opponent reaper, so instead of parsing my way to move my unit, I choose to move to this opponent unit.
  • Cast oil every time I can spoil the enemy collect of water, not only if the enemy has a best score than me.

Again, this contest was a very good one. I had a lot of fun and having my heuristics very stable from the beginning made my progression not too hard. I don’t regret not to have code the simulation, because it would have been a lot of pain without any garantee of success. I’ll code it when multi player game opens.

Thanks to all you people, to CG, and to the developpement team :smiley:

8 Likes

Hi!
A great time consuming and challenging contest :slight_smile:
I think the creators should participate.

Post mortem: (Feel free to mention errors)

8th and C#.
First non C++!

Note: Pretty nice to test small pieces of code on the tech.io/snippet runner :slight_smile: Faster than creating a new console app just to try stuff…

15 Likes

On my AI :

Not a lot to say about my AI. I basically reused most of my code from the COTC contest. (see post-mortem here)

For those who might be interested in the different codes that I posted during the contest:

  • pb4_TestCode01
    (first 24 hours of the contest)
    was a fully heuristic bot written for early tests of the game design

  • pb4_TestCode02
    (next 48 hours of the contest)
    was a basic GA bot, written for more advanced tests of the game design
    I spent a very low amount of time on this AI during design: the motivation to improve simply isn’t there when the test-leaderboard contains only 6 contestants…

  • pb4
    (from tuesday morning to the end of the contest)
    was my main code, written during the contest


On the design

I am curious to have feedback on the following:

  • Given a 1v1v1 game, we totally excluded 1v1 variants. Thoughts ?

  • Heuristics-friendliness of the game ? I’m waiting for more post-mortems, but I hoped that most search-based strategies (randomized or not) would benefit from heuristics-based guidance

7 Likes

217th (hence Gold), F#.

Many, many thanks for this lovely contest. The atmosphere and the art work contributed a lot of fun. The heavy rate of collisions gave creativity a chance over stochastic algorithms. The subtle effects of the skills and their paper-scissor-stone structure generated a bunch of possible strategies.

I had only about 20 hours available for this contest, and I wanted to test F# on it. I started learning this language in June, and I must thank Codingame for this. My personal objectives were Gold (got it!), number 1 in F# (I did 2nd) and good laughs (got it, beyond expectations).

The few hours I had and the chaotic rhythm of collisions incited me NOT to compute them. I chose a structured, progressive approach:

  • Make an educated guess to predict what each adverse unit would do. I finally had no use for it.
  • Find the best strategy for my reaper, given all other units: rush to overlapping wrecks, or to a single wreck with some interest (water gain / (water gain + turns to reach it), or head to the tanker of most interest for my destroyer (so that I can get the water as soon as it is destroyed).
  • Then,knowing what my enemies and my reaper are about to do, select the best strategy for my destroyer: push enemies away from the reaper or head to the most interesting tanker (same formula as for reaper, using turns to hit and destroy, and then for the reaper to reach it).
  • Then, last piece: the doof: oil a wreck to let my reaper reach it while some opponents are on it, or increase rage.

This approach reduces the search space a lot. It also makes it easy to add new strategies. It could have been improved with some prediction of the collisions. No time for it.

The only area where I can see an option for improvement is in the delay for ranking. It was very hard to know if a strategy was good or not, because one had to wait for hours before any significant result.

Again, many, many thanks for this really entertaining contest!

3 Likes

1v1v1 was essential to generate chaos, which in turns favors heuristics.
Heuristics-friendliness is essential for fun and for creativity. Developing new search algorithms takes years, even for IBM. In just 10 days, we can only implement existing ones.
So thank you for your choices!

2 Likes

My postmortem is here: https://github.com/robostac/cg-meanmax-postmortem/blob/master/readme.md

19 Likes

109th - Gold - Java

Thanks & congrats to the 4 autors, amazing game with a fun theme :slight_smile:

  • Nice to finally have a referee involving physics !
  • Getting to Silver was surprisingly easy, just send the repear to nearest wreck (with classic speed correction), leaving destroyer/doof in WAIT mode
  • From there, I worked on a MC bot. My simulation was probably functionally correct, so despite poor performance (between 6k and 8k in total, so 1000/1500 with depth 4), poor evaluation function (only score and min distance myReaper/wrecks, so no objective for destroyer/doof), no usage of Tars/Grenade, and always at max speed, it was enough to reach Gold and be around top 100 :open_mouth:
  • It shows that the game was rather hard, because looking at my own replays was almost embarrassing
  • Speaking of replays, it’d be nice to have a ~0.25 option, as 0.5 was still too fast when so many things are happening at the same time (and 0.1 is really too slow). The game’s complexity made it hard to analyze replays efficiently.
  • 1v1v1: I guess I prefer 1v1 as it feels less random, but at least the 1v1v1 was perfectly implemented with the right map
  • it’s obviously fine to let the autors play

Again thanks to the 4 autors, and still to CG for the platform !

4 Likes

I think it was great because of the uniqueness. It’s good to have one game dedicated exclusively to 3-player mode.

I honestly believe Wonder Woman was far more heuristic friendly, because it was easier to predict positions and manage movement. The skills should have been slightly different, as they are they seem to make the game quite random.

Still the best game on CG.

2 Likes

Uni here! Silver (~516th)

First contest, can’t really say I had high expectations of performing well, considering I’m not familiar with the contest system. I watched a few previous contest replays in advance for fun, fully aware that I’m probably not as competent as other experienced contestants to write a bot like what they had in the limited time. With that in mind, even though I’m still aiming for as high as possible (why not?), I wasn’t trying too hard and used an exotic language that not many other users are using for a language ranking badge. (It worked out, I was 2nd out of 2 users.) Also, I didn’t have any contest badges prior to this point, which is why I even signed up. Though, I did get a lot of fun for my free ticket.

I had made it a commitment before the contest started that I would do it in Bash for honors. I would actually have solid chances if I practiced beforehand, as while I knew the commands I’ve had to look them up (-lt, if syntax, decimal places in bc output) way too many times. If I wanted a chance to climb to silver in under three days I would have to switch out of bash. Maybe next time.

Day 0

I had a clear battle plan: I knew it would never get easier than wood, so treat it like a Clash, get to bronze, and sleep (contest starts at 1 AM my time. I was up late and would like to sleep ASAP)

Wood 3: Find closest pond, move to it. This was simple, but it took 7 minutes while I expected it to be done < 5, and it took some precious time.
Wood 2: Find closest pond, move to it. While waiting for the ranking to settle, I found out you can attach messages to your cars, so I made them say something for fun.
Wood 1: Find closest pond, move to it. If no pond, move to the water truck that our destroyer is aiming. Rage truck just runs towards whoever that was player 1. I’d had thought about using skills, and had implemented a very simple system that tried to throw a grenade to player 2 every few rounds, but it was performing poorly and I didn’t want to work on it further. Submitted rudimentary bot and went to sleep.

Day 1

I didn’t think the bot that I worked on for a grand total of 10 minutes (~20 if you include the time in / moving out of bash) and was 10 ranks below the bot at 10% battles done would actually carry me to bronze. This is good news because being on the top current league I can actually take time off and worry about a few other things before 11/21/17 (Silver league opens). Also it means I have two days to learn some algorithms for this, I was more of a “build stuff” coder, not really an “account for environment and perform well” coder. By that I mean I stared at the game with three main ideas in mind and didn’t know how to implement any. Since my bot building knowledge was at theoretical minimum, I had to ditch general tactics and focus on heuristics I concluded from analyzing replays. These elements are:

  1. Reward: Find “hot spots” of wrecks. If there are big wrecks connecting, it is good loot. By that I mean the reward of a wreck spot is proportional to how many other wrecks are in reach, and also that reaching a farther/bigger wreck may be a better option than competing for a closer, but remote / small wreck.
    Also: Merge adjacent wrecks (to modified x,y) with a bonus to encourage the bot to harvest from multiple ponds at once.
  2. Cost: If a wreck has many obstructing units like opponent looters, they may be competing for the water or just getting in the way to make navigation hard. Also, there are way too many cases where a reaper runs between water trucks and promptly gets stuck, losing valuable time. This means if there’s a distant wreck in plain sight it would be better to aim for that than rush towards a hard-to-reach wreck.
  3. Skills: Eventually I’ll need to replace the behaviour of my doof, while having him run to an opponent is funny, I probably wasn’t getting as much rage as I could. I felt this doesn’t matter early on anyway so my Bronze bot just throws a grenade properly and accounts for the range instead of stopping to try an impossible action.

Even though I didn’t think I could had, I tried implementing a basic simulation. I failed horribly. Ended up spending the rest of the evening sitting around watching cartoons.

Day 2

I woke up with an epiphany that I could target whoever that currently had the most score to delay him, rather than choosing whoever that happened to be an arbitrarily set player. I refactored out some of my mess of code that was a result from randomly throwing in a variable just because I needed it. This meant looking up the syntax of structs and pointers (it’s been years since I’ve used C properly) and trying to initialize things properly. This was not successful, and my printerr statements are telling me that I’m reading in 6250566 as almost all integers into field locations. Hurriedly deleted all the struct stuff and just made a table of int declarations.

After finally formalizing the data storage (with an array), I’m quickly struck by another problem: My bot was hilariously incompetent when submitted, and would often fail games where it had an advantage. As it turns out, it stops moving, so it probably crashed. However, loading the same parameters into the IDE to test couldn’t reproduce the crash, and often times even have my bot emerge as the winner.

After spending most of my day debugging, at 3:36 am I’ve discovered the problem: In the ide code running procedure, out-of-bounds coordinates as output is allowed, while the same thing for the real game is rejected as an invalid move. I had ran out of will to fix this and promptly shut down my computer, leaving the task for tomorrow.

Day 3

More debugging. I fixed a lot of bugs, it took the entire day. Going through them would be hard, plus you can write this section for me and still probably be on point.

Day 4

I thought I’d implement something, and I did. Top 250 is probably good enough for silver, I thought. While users in chat are frantically building their own simulations, I looked up a few algorithms.

Day 5

My bot comfortably sits on the near bottom (~2/3) of silver league. When it opened I was promoted and the bot ranked somewhere in the middle out of sheer randomness, but future submits proved it’s actually trash. In fact, it was a simple “score ponds based on water and distance and a few other factors”. I implemented tar -> bot got worse -> deleted it and implemented oil -> bot got worse -> deleted it and implemented depth-1 search for pond clusters -> bot got worse -> …

Day 6

I think I speak for most people on that pressure doesn’t help when you’re already struggling. With the pressure of Gold league opening soon I was getting worried that I couldn’t even make it to the upper half of the leaderboards if I wanted to make it to gold, which started to get to me. Instead of trying to redo what I failed to do, I took the day studying the rules of the game (and reading the arbiter code) and looking for inspiration. Unfortunately I didn’t get that inspiration I wanted.

Day 7
I attempted to code a genetic algorithm. I’ve seen a video on it before but I’ve never coded one myself. Even harder that I’m not using a familiar language.

Day 8
I am not a good programmer.

Day 9
Near the end of day 9 with ~23 hours left, I gave up trying to make a GA.

Day 10
I (properly) redid using the oil and grenade spells, and look for pond intersections properly. This helped me reach the high quartile of silver, which is totally where I’m fine with being. In the end, I had a few for-loops and not much more. If anything, it’s a really pragmatic bot.

Now

I made a few observations. Unfortunately I did not have them in time to use them as grounds for decisions to make during the contest:

  • 10 days is quite a lot of time to go on, if you figure out what you have to do early.
  • Near the early hours of a league, there are more bots that are performing poorly to boost your ranking, where as if you join late it is harder to get wins / ranking points.
  • Due to the nature of games between suboptimal players being mostly determined by a random number generator, having more games played seems to directly correlate to how high your ranking gets. If you submit your bot early, in addition to the primary batch of games used to determine your initial ranking, you will also be played against other new submitters, which push you further up. Conversely. submitting late puts you against huge odds which you have to fight against.
  • There doesn’t appear to be replacement for the rating points that are lifted as a result of already promoted players. This makes it a disadvantage to players trying to catch up. In fact, it might even be feasible to make a simple bot early on than craft a below average but sophisticated bot if it takes a lot of time.
  • I don’t know if it belongs here, but I showed three of my friends (who don’t use CG a lot) Mean Max and none of them even made it to bronze.

Good games to everyone that played!

5 Likes

Post mortem from my 5th rank ! :slight_smile:

16 Likes

15th - C++
My solution to the Mean Max contest : https://github.com/Garvys/MeanMax-CodinGame-Contest/blob/master/README.md
Basically a lot of fun and many things learned! Thanks a lot to everyone involved in making this possible from creators, to participants!
See you for the next one where I shall take my revenge! :wink:

12 Likes

I’m a bit disappointed by this first community challenge and my final ranking may be the worst since I play CG (639th / 2512)

I didn’t like :

  • The rules (especially in french at the beginning of the challenge).
  • The similarity with CoTC (that was a bad challenge too !)
  • The “nearest wreck” strategy allowing to reach Silver with no effort
  • The useless speed parameter
  • The confusing viewer

I’m also disapointed by my own failure :
I didn’t find a way to enhance my simple strategy. I tested many things, with very poor impact on the ranking. Observing replays during hours didn’t allow me to understand what was wrong :frowning:

That was not very fun this time…

What similarity ?

Collect something before someone else on a map.

pb4 said in this thread that he reused most of his code from cotc…

41th - Java - TIMEOUT! - 30ms…

Thanks and congratulations to Magus, Agade, Pb4 and Recurse for the theme really interesting and also thanks for the referee which help us to manage collisions!

FEELINGS

This contest could be really fun if i didn’t waste more than a half of my time optimising memory consumption using Java Mission Control to profile it as i often get timeout with no error. I suspected the garbage collector doing major or full gc so i spent a lot of time caching objects avoiding deallocation, removing stream, foreach which create object like iterator that will be garbage later on. I also put some counters to securise my loop so i’m sure i do not have infinite loops, IN VAIN…

Sunday night i resign to set my timeout to 30 ms when in other contests i use 44ms. It takes me so much time doing that as i persevered too much that i couldn’t spend some times optimising the rest of my code like the collision engine. Too bad…

Strategy

Wood to Silver

Simple heuristic

  • Reaper move to the closest wreck
  • Destroyer move to the closest tanker

To compute target and power i just did a vectorial computing like this :

MoveAction createMoveActionStopOnTarget(Unit source, Point target) {
  Point newSpeed = new Point(next.x - source.x - vx, next.y - source.y - vy)
  return new MoveAction((int)(newSpeed .x + source.x), (int)(newSpeed .y + source.y), (int)Math.min(newSpeed.magnitude() / source.mass, MAX_THRUST));
} 

It works pretty well to stop the reaper inside a wreck if it has not too much speed.

Silver to gold

Add doof and skills

  • move doof to the player’s reaper with a greater score than mine (not necessarily the best but the player i can more likely beat)
  • doof skill on wrecks where there will be 1 or more enemy reaper at the end of the turn excluding those with my reaper
  • destroyer skill on my reaper if i will be on a wreck in 0 or 1 turn and reaper in the range of the skill to move aside them
  • reaper wreck target take into account distance and water. I manage also to go to overlaping wrecks to earn more than one point in a turn
  • destroyer tanker target take into account distance and water

Gold to Legend
Hell on earth! Timeout power!!!
I use simulation engine from the referee coupled with my previous heuristics and an evaluation function to compute at depth 3.

First, I compute some possibles good moves at depth 1 for my reaper, doof and destroyer.

Then i test all moves combinaisons using the simulation engine at depth 3 using a dummy for the enemies and for my last 2 moves with a simple AI like :

  • reaper go to the closest wreck with the most water
  • destroyer go to the closest tanker with the most water
  • doof go to the player’s reaper with the score higher than me or lesser if i’m ranked 1st

After that, during the remaining time i play random moves mixed with previous one and i evaluate them. I do not play random skill as it was not really efficient so i prefer compute skills using my heuristic.

Finally i take the best moves and play them.

The evaluation function is as the previous one described by Agade and other players. To reach the legend i had to avoid destroying tankers if my reaper is not close to it so i adjust the evaluation function to do that also as my heuristic to compute a move close to the next tanker position avoiding killing it.

What did not work
Timeout, timeout, timeout…
I think there is a problem with the garbage collector parameters used to launch java player perhaps since langage upgrade occured. I hope this problem will be corrected soon!

5 Likes