Botters of the Galaxy (CC02) - Feedback & Strategies

Jahz - Gold 122 (2nd gold)

Thanks to the creators for a very innovative challenge, very different from the others.
Since I knew I would not have much time as I was literally buying a house in the middle the contest:

  • I very quickly discarded the implementation of the engine (too big & complex), glad I didn’t spent a minute there
  • I also quickly went for a “hero rush”, since last-hitting / denying would take lot of coding time for unsure results, destroying the tower was just not possible, and farming the jungle felt unsafe as well…
  • So hardcoded everything from the hero choice up to moves and attacks.

Probably a bit too much rules as already said, and also the viewer was not so pretty or handy for debugging / analyzing frame by frame what was happening, but otherwise it was a cool contest.
And gg @Saelyos ! :slight_smile:

Edit: was sad to not go to legend to take a shot at those who reached it thanks to 2*Hulk !

7 Likes

Legend 17

Thanks for @AntiSquid, @Illedan and @Wildum for this contest, I’m sure that it was a lot of work, and brain storm to define the rules, heros and balance. Really good job.

This was my 2th contest, at Mean Max I got 175th with only heuristics. At this one, I was planning to build a Monte Carlo Simulation, but when I saw the size of the Referee code, and the mix between the referee code with the visual interface, I decide to not use the referee, and build a heuristic bot. Since the beginning of this contest, my target was win the T-Shirt (Top 20). Mission Accomplish.

I’m a League of Legend fan, and I play with Ranged Heroes at the lane with 2 heroes too. The experience with this game, made the contest strategies planning easier.

I got the Iron and Doctor since the first day. My planning was farm better, and do not die. Until I read the rules better, and realize that ranged heroes are worst to farm at this contest, unlike most of the MOBA. So I changed my strategy to Poke and kill the enemy. I think I was one of the first ones that start to buy Mana and Mana Regen for Iron Man to do a harder poke. When I changed it, I got top5 position.

Things that I think that could be better for the Multiplayer Version:

  • Visual Feedback: Sometime is very difficult to understand what is happening, and I need to run the battle with 0.1 speed to understand what is happening. The Lane units stack, make the identification of the board complexity harder, maybe a bullet with how many units is stacked helps. The attack hit the initial position of the target, sometimes you think that the tower attacked the wrong unit, a bullet with the trace to the target could help a lot. Minion health bar could be a good thing too, there is no feedback about Minions health. So, you don’t know what is happening.

  • Commands: You can move and Attack, but you can’t attack and move. Sometimes this behavior, makes you lose an attack if your opponent run away. To do a better kiting attack and move is better, because, this way you always will hit the enemy. The limitation of the one command per turn, makes the visual feedback very strange. For example, I think that the hulk shield, or deadpool counter, should not stop the hero for 1 turn, I think that the hero should use a cast time to cast the shild, and the rest of the turn time, the hero could perform a new move.

  • Inputs: For me, this was the worst part. I was crazy trying to identify if an enemy is dead or hidden, for me it was impossible to identify this situation. Just at the last day, i realize that you can identify it using the gold amount. but you can’t know what hero is dead. You can’t know who target who last turn (without a tons of code), who received the enemy spells, what is the score of the game (I think that this is basic), who each unit or hero is attacking, if an unit is aggro or not. Do not know the score, was very annoying to me. Because of this, I gave up to build a simulation.

  • Pick: Maybe for the multiplayer version, you can back with 7 heroes, and implement pick turns, instead of simultaneous pick, and make impossible pick the same hero that the opponent. Maybe it makes the game too much complex, but for multiplayer, it can be viable.

Strategies

  • Farming: I think that a lot of people do not know that you have at least 2 ways to kill a minion with a basic attack, at the start of the turn, performing an attacking inside the hero range (you hit before lane units), or at the end of turn, performing a move an attacking (hitting after the lane units). When I implement this behavior, and deny my minion, I climb a lot in the rank.

  • Picks: At the start, I was planning to work more than one pair of heroes, countering the first pick. My first pair wat IronMan and DoctorStrange. And I tried to build a DoctoreStrange Valkyria stratege, but I gave up, because I think that will take a lot of time to work with each strategy, so I focus at the IronMan and DoctorStrange Pair.

  • Code Evolution: After day 5 of the contest, basic I was watching my games that I lose, and identify why I was losing, building code for each kind of situation, and sometimes, to play against some player, like Illedan IronMan tower rush, I have a function called (Find Illedan) at my code :smiley: 1.5k lines of code

Finally, a thanks to @Passero. We discussed a lot the game behavior and strategies at the Portuguese chat, it was very fun. And a thanks to @eulerscheZahl that was very helpful at the general chat.

Very happy with my results!

13 Likes

Finished 21.
I spent 4-5 hours writing that piece of code using my left leg.

I have a stupidest heuristic ever which I used to enter a bronze and just via 3-4 small additional ifs I was able to reach the legend and finished where I am.

Starting from Saturday I stop to improve my bot at all because of two reasons:

  1. I don’t want a t-shirt for doing nothing. Ppl did invest maybe days to write a sim/referee (or to find some abuse like hero do backdoor the tower ALONE!!! proof https://www.codingame.com/replay/294319637), let’s give it to them
  2. It was simply not interesting, for me looks that serious guys are not investing a time into this contest at all.

I still even didn’t read all rules from the game, I have no idea of skill costs and their damage etc.

9 Likes

I finished 65th.
I had a heuristic bot which played Valkyrie+Dr. Strange to make use of the PULL+SPEARFLIP combo. It’s a sequence of around 10 if/else. I attack heroes if I think it won’t take aggro otherwise creeps. I always use MOVE_ATTACK to stay back as much as possible (closer to my tower). I buy weapons with damage and mana regen in the first 5 turns and only hp pots afterwards.
I don’t particularly want to discuss my AI more as I find it particularly uninteresting. If I had the time I would have probably written a simulation to be able to make a less hardcoded AI. However, even having had the time I wonder if I would have been motivated because I really disliked this contest.

I don’t want to be too mean because I know how much work AntiSquid, Illedan and Wildum must have put into this game but I basically agree with everything Magus said. This game deserves the player count it got (1.7k vs 2k of BTTC and CB). I like the fact that this game is different from all the others. It might make a good multiplayer game, although I wonder if it wouldn’t need endless balance patches like a MMO. But as a 10 day contest I really disliked it.
I like AI, not exploiting bugs (double hulk) and looking in the highly asymmetric gameplay for cheap tactics and counters (tower rush, hero rush, groot pull across half the map…).
It is sad to see rock/paper/scissor like win rates at the top. It is sad to hear that at the top people were hardcoding against each other (if(Wildum), if(Illedan)…) (I blame it on the game not the players). And it is sad that a lot of people saw it coming that someone would win by hiding some strategy which will probably be beaten in 15m when the multi comes out.

14 Likes

Hey @freecode i think you still get a shirt. Wildum is in top 20 and won’t get a shirt because he is one of the creators. A win is a win, you found the answer to legend faster than others. So hope you enjoy your shirt.

Backdoor can be countered by keeping track of previous turns.

Btw, thank you for the feedback everyone. Regardless if you liked the game or it simply wasn’t for you / you hated it. It’s fine. There are games i don’t like so can’t force you to like mine. Keep sharing. :slight_smile:

7 Likes

Legend 4th

This was my best performance in a contest so far.

I want to thank the creators AntiSquid, Illedan & Wildum for the work they put into the contest, and also the testers csj & nmahoude. I really enjoyed the contest despite some evident flaws mentioned by some previous fellow commenters. The most important one being how easy it was to counter any strategy, then optimizing the code to beat certain players and incentivating AI hidding. I submitted my last code on sunday nigth and went to sleep knowing that I couldn’t possibly win the contest since any top player submitting after me beat my AI. Away from that, I loved the concept (I never played a moba game before, I even had to look for it in wikipedia), really liked that it’s very innovative on the platform, and that you can play it with heuristics and focus on the strategy (I would have liked a more straigthforward referee so that simulations could be more competitive too).

To my strategy:

Hidden hero detection
I save the state of the heros in previous turn to detect if they are hidden in the current turn. If I can’t see them and the last location was over a bush, then they are hidden. I didn’t implement logic to detect if the hero is dead, so if I kill a hidden hero my AI still thinks there is an alive hero there. This led to wasted fireballs on some cases.

Pessimistic aggro
Every time I attack a hero, I set an aggro variable to 3 and treat every rival minion as if he is in aggro mode. So keep out of his range even if one of my minions is closer.

(un)safe range
Every turn I compute a safe range for each combination of my heros and rival heros. So each one of my heros should try to avoid being closer than that safe range. This range depends on different kinds of game conditions. For instance, if rival has hulk I want to be outside the charge range. But some hulks are more aggressive than others and if I keep outside this range for the entire game he will outfarm me, so I have a decaying factor to be increasingly closer over time.

We are under attack!
If one of my heros is closer to a rival hero than the safe range, or if a rival hero is too close to my tower, I consider myself under attack and enter the deffensive mode. This is only important against melee strategies or combined, and balancing this in conjunction with the safe range was one of the most decisive part of my strategy since being too conservative led to consistently being outfarmed, and being too aggressive led to consistently being attack-rushed.

Deffensive mode
When I’m in defensive mode, the hero closer to the rival heros (or the one hurt) tries to go for the bush closest to my tower which isn’t occupied by a rival hero. The other hero (if alive) tries to hit the aggresors. This is combined with pulls, blinks, heals and shields to make the deffense more effective. I also compute some possible moves for each hero in different directions to get the position that is more distant to the rival heros. At the end I almost didn’t use this, but at some point it did give good results when deffending near my tower.

Minion target assign
I assign target minions to my heros taking into account what @BrunoFelthes mentioned in his post. First I check if each of my heros individually can kill a rival minion in one shot and without moving (before minions attack). Then if no minion was found, I check if I can kill a minion with both attacks combined. Then I do the same considering I moved enough to let the minions perform their attacks. I did no distinction between ranged and melee minions, I just give enough time for them to both attack. I didn’t test this at all and farming ended up not being that important in the end, so I don’t know if this led to good results.

Pull/Attack
This was the game changing strategy and I think y_kawano was the one who discovered its power. Until this, my strategy was all about outfarming the opponent. From this point on, most of them ended in hero killing. The strategy is just to use the pull effect on a target, and combine it with an attack by my other hero. This would be followed by an attack by both my heros to the target on the next turn, and powered by attacks by my close minions.

Item strategy
I set Ironman to go for damage items and Doctor Strange for mana and manaregen items. This is to optimize the pull/attack strategy (Ironman have 2 attacks each pull), to maximize shield and to always have mana to pull enemies. I sell items when I can afford a better one with the current gold + sold item gold, or when I need to get a potion.

Groots handling
I use the annoying groot strategy (fireball a groot close to enemy heros). This is even a winning strategy against some AIs that try to kill them instead of running away (Wildum). As groots become increasingly strong if you kill them, they can be preety damaging in the mid to end game.

Thanks again to the creators !

16 Likes

You could check if you have 300 more gold than the last turn. It is simple, but I discover it at the last day…

4 Likes

I think that everyone that abuse from this bug to reach legend should back to bronze when the bug was fixed. It was not fair.

2 Likes

Hi

I won’t develop my IA ; it has onlt 35 lines of code.
just the feedbacks :
at least, one contest that changed.
MOBA idea is cool.
the deep of the rules made simulation useless.
but the Shifumi part spotted by Magus should have been avoided very easily ;
you should definitivly have done a draft for the heroes.
that way ;

  • no harcoded combo (or several)
  • no 51/1 win ration against an AI

So, for me, it is a good contest, I liked it. but draft strategy would have changed it to a very good contest.

6 Likes

As AntiSquid said, it is fine to provide constructive criticism on the game.

It is also fine to brag about beeing 21st with a “stupidest heuristic”.

It is very generous to leave a T-Shirt to another contest participant.

Now, will you be charitable enough to enlighten us with the 3-4 ifs that led you to this rank ? I’m sure many people below your rank will be curious.

17 Likes

I disagree. 10 days is already not enough to have a decent IA, even with a fixed composition. Add the draft/ability to ban heroes and the need to adapt to different compositions, and you lower the global level once more.

Picking on 2 separate rounds already gives a counterpick opportunity, and yet I’ve seen so one using it.

6 Likes

@freecode and @Agade… I understand you, but i realy disagree :slight_smile:

True, this contest wasn’t for ppl looking to do “real” IA… in 10 days, reproduce the comportement, and find a way to make a code able to find a solution by himself in every situation was near impossible…

But on the other hand, it was an other type of exercice: determine wat you can do on a global situation, and take care of “borderlines” possibilities… and freecode, you apparently done that with a great facility ^^

Sometimes to find an efficient solution to an issue, we have to add some “if specific_situation”, that are useless to take in consideration in most of the cases…

I’m one of this ppl that like “try to find a solution by myself”… for me, it’s not fun to retro-ingenier a thing, make a formula to compute a score on a solution, and run a local arena to find the magic number to go with…
Efficient, sure… fun, no…

This contest was more for ppl like me… to bad you didn’t liked it, personnaly, i liked some other contest where you was definitly walking on me with your simulations… i had fun trying to find an efficient heuristic ^^

(i’m working in in video games… and in my world, i don’t have 50ms to find the “best” solution, i have to find a “good” solution the faster as i can… )

P.S.: @Magus i’m agree with some of your points… but seriously… On a totaly free platform, without any advertising, you complain about prize? (apparently, you don’t count T-shirts as prize…) and during a charity action for children? plz…:confused:

18 Likes

The prize issue should be discussed with CG staff directly. Creators don’t decide how the budget is used.

Anyways, it was suggested we help a charity instead of giving out prizes. I agreed immediately because i liked the idea of helping some kids learn to code, had no idea coderdojo existed back then. I wish there was more of “coderdojo” like organizations. There is a need for in person training.

Just imagine there was a coderdojo out there when you were a kid and you would have attended it.

Also the wording of the suggestion sounded more like a decision already made by CG so i really didn’t feel like it makes sense to argue about it.

I don’t know why my team mates agreed on this. I have the feeling it was a surprise to them that the prizes were cut out though for the top 3.

Please. let’s leave it at that in this thread. Honestly we might need a new thread if you want to discuss this, because i am sure it affects future contests too.

5 Likes

Hi everybody.

Thanks to Wildum, Illedan and AntiSquid for this marvelous game. LOL is a very good idea, and all those rules made this contest a real MOBA, as fun as classic MOBAs. So I tried to implement game experience as if I played for real. I finished #158 (#38 gold).

  • Farm groots when the game starts
  • Wait this first farm period is finished to buy items (maximize damage and health)
  • Buy a 500 health potion if one of my hero needs it (health < 0.6 * maxHealth)
  • If a potion is needed and I got not enough gold, farm groots with 2 heroes (strongest ahead)
  • If one hero is too weak, farm only with the other
  • To move from one point to another, try to use bush hiding on all the way
  • If an opponent hero is in a “not escape” radius, calculate who will win the fight, and choose between fight until death or run. Run if needed to the next bush
  • try to follow minions (behind the fight line) and keep good distance from opponent heroes and their tower
  • Last hit on minions (mine and theirs) with a very simple simulation to choose when attack or where was the best move for move_attack (I didn’t calculate more than distance and health)
  • Go back behind my tower if all my minions are dead
  • To fight heroes, altern spells with “stun” and classic attacks (my team is Hulk + Valkyrie)
  • calculate berserk mode. In berserk, go and attack (+ spell) the weakest opponent hero. Here I lost a lot of games because my heroes often followed enemies under their tower and my strikes didn’t care of the opponent move
  • Sell items if health is critical

I wanted to try a lot of features so I collected a lot of data, but didn’t use much of them. In multi, I think I’ll try to code AI for both micro and macro game. This challenge is very good to do that.

Thanks to the creators again, it was a lot of fun.

7 Likes

Hi,

Congratz to Antisquid, Illedan and Wildum for the contest. Like it has been said, it changed a lot from the past contests, so kudos for trying something new.

I personnaly disliked the contest, but that’s mostly because I suck at this kind of AI. I had the worst invested_time/result ratio ever on a contest (GITC was the former).

But beyond my personnal opinion, the main problem for me is that this kind of contest (complex rules + lots of mechanics) rewards finding what others don’t do/handle, more than finding the best way to do something. And in 10 days you just try to make a patchwork of several ideas that cover the most cases, but in the end, you’ll get rekt by an AI that just do 1 thing that no one handles (Saelyos, I’m looking at you :D). I find this outcome both impressive and really sad.

It’s not about heuristics VS simulation, it’s about the game design; and I think MOBAs aren’t suited for 10-day AI contests.

I’m curious to see how this evolves as the puzzle gets released in the puzzle section.

10 Likes

I’m curious to see how this evolves as the puzzle gets released in the puzzle section.

This is probably not the place do discuss it, but I think that the multi would benefit a lot from games being launched at regular intervals for all players in legend league for example.
Otherwise, one person pushing several times could very strongly skew the leaderboard.

9 Likes

Great idea… seasons…

Each season, you polish the balance, maybe add 1 hero or 2… little bonus xp for top 10, and rerun everyone in legend each season with new rules…

just to re-up the audiance every new season (and people interest…)

2 Likes

First of all, thanks to the games creators. I can imagine the hours and hours spent coding and testing the game.

I must confess that I felt confused by the amount of rules and didn’t progress much during the first days. When I was told in chat that people were killing their own units to get an advantage, I understood that I would have never made significant progresses. I didn’t find the motivation to start analyzing all the rules and devise a sensible strategy.

Probably it wouldn’t have made any difference (I didn’t even make out of Wood 2!) but I’ve seen others expressing the same feeling that simpler rules would have been better, so let me join them.

My suggestion for next time is to try to create a game with fewer rules that lead to complex interactions rather than having many complex, extremely specific rules that are difficult to remember and analys.

I’ll aim at doing better next time!

7 Likes

Hi,

This was a very interesting contest, I spent quite much time on it and ended 10th using Python after being stuck some time in silver league.

Thank you for your time @Antisquid, Illedan and Wildum, it was a good idea to explore this kind of less symmetrical contest, would it be only to highlight the risks of such approaches. It was nonetheless very well made, save the written rules that could have had been more clear and the possibility to hardcode against other player (cf. Agade, I wasn’t aware of this - it sure is highly anti-competitive). However, I believe the latter is more meta-contest, relative to the global contests architecture itself.

As for my AI : I have been mainly concentrating on building a heuristical solution. I do not like harcoding because without home arena you get stuck with a growing number of arbitrary parameters whose usefullness for your actual ranking are less and less known up to a point where you can’t use reasoning on your magical and mysterious algorithm anymore.

So, for every possible move (attack, spell, move toward my tower, move toward his tower), if would gives him score relative to a gold gain and gold loss.The idea was that with the item stats array of the referee, everything was convertible in gold. Here are some examples of gain/loss :

  • If my hero loses x health points, I virtually lose x*0.7 gold

  • If I deals x damages to a minion with health h > x and gold value g, I virtually gain (x / h) * g gold

  • If I deals x damages to a hero with health h > x, I virtually gain (x / h) * 300 + x*0.7 gold

  • If I buy an item that costs g, I virtually gain g gold - I accounted this way since unused gold is of no interest

And so on for spells, sell items,… This was the main core that gave me the best move if we estimated correctly the taken damages of a move. To do so, I estimated enemy’s best moves and then knew how much it was interesting for him to hit my heroes.

Then, after I got my best move, followed a few tweaks that for example allowed me to hit & run (run & hit rather) if I was hitting a hero whose best move was to go after me.

After debbuging many coding mistakes that would have popped up quickly with a strongerly-typed language and accepting with difficulty that I should leave strange-valkyrie for strange-ironman, I reached legend. I don’t know exactly where I was since it was already quite late.

Eventually and before some needed sleep, I added a quick hard-code that I believed to be useful : under 15% of life, my Doctor Strange would wander up and down behing Ironman to shield him and bait the fireball that would often miss him because of his eratics movements. Moreover, it avoided giving 300 gold to the enemy ! I believe that, with more time, such fleeing comportements could have had been properly incorporated on the heuristic core.

All in all, I was pleased and surprised to reach this rank after some infruriating times in silver. Maybe I’ll consider doing the next contest with a stron(er)gly typed language like Caml (I just read that Python was already considered strongly typed). Thanks again for the contest.

9 Likes

Feedback

The game of a billion edge cases… My bot fought teeth and claws to somehow snatch a 3rd place.

As a former dota player who spent thousands of hours obsessively playing it, I have to say I really enjoyed dissecting the design, theorizing about the meta and strategies that would be effective. At the same time though, as an AI competitor it was a frustrating challenge, and may well just be the least satisfying podium I have achieved on CG. This is the kind of game that is much more enjoyable to watch and play than program a bot for, most notably when you’re aiming for the 1st place in a 10 days time frame.

The biggest problem is we don’t address a single game as much as dozens, if not hundreds of mini-scenarios and interactions that are difficult to generalize and incredibly time consuming to address. In dota, adaptation is the key to success, something that AI is generally known to deal badly with. Because of this difficulty in establishing a bot foundation with all around decent play to iterate on, the competition rather transformed in an endless arms race of cheese and implementing their counter plays.

Players were further incentivized to cheese because they are easy to execute, much harder to defend, and give an incredible result/time ratio. So it felt like the competition was all about discovering and exploiting specific bot/meta weaknesses, or abusing design quirks leading into hard edge cases where even top bots fail hard without adding yet another scenario handling, rather than refining your bot towards better and stronger overall play and strategy like in most previous challenges. Again, entertaining to watch it unfold but very exhausting to play whack-a-mole for 10 days straight dealing with yet another new flavor-of-the-day (hour?) cheesy strat, or the sudden emergence of a new playstyle that requires a brand new evaluation for.

Long story short, the design was way, way too complex and ambitious for a contest of this nature, and is the root of the whole issue I am describing. It definitely feels like it would need at least 1-2 months to flesh out decently, or at least weed out the time consuming part of figuring out the meta.

On top of that, I think the scoring/matching system on CG is definitely not able to deal well with such game variance.

Also, the creators NEED to be able to update the game by themselves. Many bugs could have been fixed way quicker than they were deployed.

Strategy

Given how much of the competition for me was dealing with edge cases and specific playstyles, I don’t have much motivation for going hardcore on details (which may become irrelevant when the meta changes again in multi). As a result my inspiration is lacking to write a traditional post-mortem, so here is a shorter version. If you have any questions or want more details I will be happy to answer.

  • My overall strategy was formulated around mid-contest when all the top bots were going full ranged, by deciding to farm with double melee advantage (hulk/valk at first, then hulk/deadpool), push the lane and dive/gank to punish ranged harassment. I ended up losing that bet in the last couple of days when top bots suddenly developed very good defense against it and pull off very effective harassment with fireball/pull at the same time. Then I wasted so much time dealing with that, my farming technique was falling behind bots fully dedicated to it…
  • I do a brute force simulation with minimal enemy prediction dummy over a Monte Carlo search, mostly used to farm last hits/denies effectively, and maintain proper positioning/dodging during laning and ganking phases. I could manage between 5k and 10k simulations+evaluations over 41ms.
  • I strongly disagree with those saying the contest was complex in order to be anti-simulation. It took a whole afternoon to write a basic simulation with no spells (which are mostly unnecessary and more effective to do as evaluation), including creep behaviors and attack/move, which is so much less than it took for FB without referee code.
  • Fixing up the inputs/outputs to always be on the left side (using symmetry on X) made writing the bot a lot easier.
  • I unfortunately had to hardcode tiny adjustments against specific bots that made a world of difference vs them, by ‘detecting’ their playstyle and switch accordingly.
  • Not sure whether I would nominate pull or fireball as the most broken spell. Probably because I am a melee scrub. :stuck_out_tongue:
  • The lack of good health regen was really annoying.
  • I understand the CG limitations, but the time steps felt way too big for a precision game like this. I wish there was at least twice as many frames for the same duration.
  • I really need to find a reliable way to deal with floating point precision issues between my code and the server. At many times my heroes were 1 unit too close to a creep and take unnecessary damage. :confused:
  • Most of the itemization felt unfortunately pretty useless overall.
  • Going full tunnel vision against ranged left me blindsided vs melee towards the very end.
  • Debug view in the game viewer is absolutely mandatory, please include it in the next one. I would rather have a contest with just debug view than nice graphics and no debug view.
  • I am going to sound like a broken record here, but proper tooling and workflow is the key to rapid software development. I have cultivated this idea over several competitions into a personal reusable framework I am using for bot development, as some sort of custom IDE. Here is a sneak peek for this one: https://recursive.cc/blog/botg-battlestation.png
  • That’s it? I guess that’s it.

I hope you find my criticism constructive, and above all, I want to congratulate the authors for the great work they have put into creating this contest, it’s a real achievement to see something like this running on CG. :+1:

29 Likes