[Unofficial Contest] Bit-Runner-2048 - Feedback & Strategies

Hi! Thank you all for participating in BR.
This is the topic where you can tell how you liked the challenge and how you solved it.

We are currently doing the rerun, stay tuned for final results :slight_smile:

1 Like

9th on leaderboard before final results started (with little hope to improve in the finals)

It was a great competition, the rules were simple and it was easy to get simulation started by reuse of CSB code.

I used smitsimax, max depth 7, and used a self-learnt NN, using exactly the same learning algorithm as I used in LOCM (described in detail on the F&S of LOCM), using self-play where the net learns to predict which team scores next goal. It was great fun to see how the bot first learnt how to score a goal, then learnt to pick up a prisoner, and slowly learnt how to defend.

Unfortunately I had a major miss in my simulation engine (ball swap and/or ball capture inside the center was not scored), I discovered it first yesterday evening and only had time for one new learning iteration. The bot immediately started to play much more “boss”-like. A few new iterations should improve it a bit more.

My simulator is a bit slow (50-80 K simulations per turn), at least compared to MSmits and likely to most other top players.

Overall I am happy with the results, and I learnt some new things like smitsimax.

Thanks a lot to pb4 and Illedan for creating this game! 5 stars, the best competition in a long time! … even though it was unofficial.


Many thanks to pb4 and Illedan for this excellent contest!

I finished in 5th place (before the rerun).
Like many, I used a smitsimax (depth 8). I first used a decoupled MCTS (as in Xmas Rush) that allowed me to climb to wood 2. But I think that the depth reached (about 3) was not enough.

I spent a lot of time on the evaluation function. Up to wood 1, I used a function similar to the one of Illedan’s stream. The optimization of the coefficients (with a local arena) allowed me to reach wood 1 with difficulty.
Finally I was able to further improve my evaluation function by using collision predictions (e.g. if the next collision of a pod will be with a ball, then a bonus is calculated according to the time expected for this collision).


I find your approach very interesting!
Could you tell us more about the features you used for the NN ?

1 Like

Rank 1 unless @Neumann hacked the CGBenchmark. :wink:

I guess it was a happy coincidence I was working on reinforcement learning for CSB during the last few months (so many thanks to @pb4 and @Agade for the awesome inspiration), as a lot of what I built was more or less directly reusable for this contest. This stuff is a little too hot for me to share in details at the moment, especially with another contest right around the corner, where I may (or may not) be able to make use of it as well.

My final version features a neural network that was trained in self-play over a few hundred thousand games for roughly 10 hours on my local machine using 10 logical cores (leaving 2 available for using it :stuck_out_tongue:), using only goal scored for and against as a reward. I am using smitsimax for search, looking ahead 5 turns ahead on average. This may be the first game for me where this search algorithm actually worked out, so I am rather surprised, but it’s possible there were better options, as I did not try much else.

I put a lot of efforts into optimizing my engine simulation, and as a benchmark it could achieve in the best cases around 800-1000k turns repeatedly simulating 6 turns ahead without any search. In practice however the search costs a lot more than simulation, bringing the actual number down to 80k per turn on average.

For the record, it was not a Python bot (it’s written in C++), but I thought the reactions to it were rather amusing. :slight_smile:

I thought having very hard bosses from the start was a great idea, it gave the same feeling of progression as in a PvE MMO where getting promoted is a big achievement, everyone using that as a benchmark. In official contests, as long as you are in the first third/half of the leaderboard, you rarely ever notice the bosses, so it was fun to see them having a big role this time.

Many thanks to @pb4 and @Illedan for an amazing contest, I am slightly disappointed it was not an official one, as it definitely deserved it in my opinion. However, I still feel like there was one mechanic missing in the game to make it truly unique (e.g. like shields in CSB, spells in FB, roles in MM), though I would not be able to say exactly what. It is a good design regardless though!


Thanks to pb4 and Illedan. I really liked the format and the game. Some hardcore version of CSB, easy to understand, hard to master.

I should finish 2nd after the rerun.

Like many others I used Smitsimax, depth 7. That’s the first time I use this type of search and results are impressive (CSB rework incoming). I tried several other search algorithms :

  • DUCT
  • DUCT with sequential pairs (1 node = 2 moves for 1 team)
  • DUCT for the first turn into Smitsimax
    But none of them worked as well as pure Smitsimax.

I did not over-optimized my simulation engine, which could only simulate between 50 and 80k turns in 45ms, but the limitations of my AI were elsewhere anyway.

The evaluation function is simple, it’s just the sum of distance and angle to a target, for each pod, with some bonuses for possesed balls and scored goals. The hardest part being deciding what each pod needs to target. I won’t detail that part but there’s nothing exotic in there.

Most of my improvements in the last week have been done with lots of benchmarking and fine tuning. Every attempt to make things smarter would fail.

As I said on the chat during the contest, and like reCurse, I really liked the PvE-Progress feeling of the contest. This may unfortunately be the first and last time we can experience this, but I’d like to see this in regular contests aswell.

Congrats to everyone !

EDIT : I forgot to thank @RoboStac for the double boost in wood2/wood1 :smiley: #neverforget


This one had premade bosses:
Amadeus Challenge Jul 09, 2018

@jolindien 36 inputs, 6 per unit, i.e. full representation of the game: position/speed, for cars angle/ball possession, for balls owning team. 1 hidden layer.


Just in case : link to the final ranking.


My “leaderboard AI” uses a depth 8 smitsimax, uncapped in number of simulations. I have not worked on that AI during the contest: it is my best testing AI prior to opening the contest.

It was used with Illedan’s AI to find the correct balance of map radius, ball lose threshold and manhole radius.

As for the boss AIs, they are built based on that test AI:

Boss 4 (Gold – Legend)

Boss4 was made by me. It is based on a depth 7 smitsimax, capped to 42k simulations to remain deterministic.

Boss 3 (Silver – Gold)

Boss3 was made by me. It is a depth 6 smitsimax, capped to 7k simulations to be deterministic and very fast.

Boss3’s evaluation function was made to test the strength of camping strategies. We wanted gameplay to feature some camping but not too much. In the end, I am very happy with how the game turned out.

Alternatively, Boss3 could have been a depth 6 GA. This depth 6 GA was slightly weaker, and much more agressive with trying to grab the balls.

Boss 2 (Bronze – Silver)

Boss 2 is Boss 3.
Except that it had its hand tied behind the back, (only 1k sim)
its feet set in concrete, (it liked giving the ball to the opponent)
its head under water, (only depth 5)
it is blindfolded, (it assumes the opponent can not move)
and it is high on drugs. (likes risky strategies)

Boss 1

Boss 1 was made by Illedan with the most simple heuristic one could think of.


I enjoyed this contest, thanks to pb4 and Illedan for organising.

I reused my CSB code extensively and my final version was smitsimax with depth 8. I did have a quick look at using GA/minimax as my CSB source still has the code for those, but in a similar way to csb they were much weaker (especially minimax as it was trying to do pairs of pods but there aren’t obvious pairs / cooperation is very important here).

Evaluation was a bonus for being near the center (a small amount for both pods but with a bigger multiplier for the closer one as I wanted one to always be there). I used the same evaluation as my CSB runner (distance/angle/dot products towards checkpoint / blocker) for any pod with a ball and if the enemy had the ball I gave a bonus for facing that enemy (so my pod would head to the middle, face the enemy and hopefully be able to find a move that stole the ball). If no-one was carrying a ball I’d move one pod towards the closest ball.

I did like the hard bosses as they gave a nice sense of progression.


Thanks to @pb4 and @Illedan for this game. I really enjoyed the elegance: simple rules leading to complex behaviour. Excellent execution on the visuals too, everything was clear and easy to understand.

I used this contest to learn about simulation strategies and I must say, they are game changing. All of my previous contests were exercises in if-then mazes and I will be paying this approach a lot closer attention from now on.

I also used the articles above to research just what the heck a Smitsimax was, and I’m inspired to try it out even though the contest is ended. I’m also considering going back and trying CSB from scratch, using the same simulation code (since it seems a lot of it will be reusable).


Thanks illedan and pb4 for such a great contest.
It’s been long time since I had so much fun even though I got strongly crushed by pb4 (disrespectful) bot in the final round. :persevere: and finished 10th.

Not much to say about my bot, started using MC with inspiration from illedan stream (as great as usual) then switch to GA and finally implemented my first SmitSiMax. To my surprise, it was pretty strong against my GA since the beginning whereas my implementation might be buggy. I need to review and retry it for sure.
Also the performance of my engine was not that great (50k simulations), I may need to review the collision detection and introduce caching there.
Last but not least, the rock-solid bosses and the availability of all the rules since the beginning were two very good points in this challenge.

Great work gentlemen, now is time to have some rest and let the prisoners escape…


I actually made a mistake in the note below the table. On the contrary, you had a better winrate against me than what you should have had :unamused:

Since my AI is basically the same as the boss AIs, it is probable that Robostac and you unknowingly specialized against the boss and neglected other behaviors.

Would you say that GA domination in contests (like in CSB, FB, BTTC) is way over since minimax (C4L, WW) and now smitsimax (like every contest since Kutulu) ?

I’m looking for but I can’t find which contest was won with smitsimax

Well mister jolindien:
You can re-read my post and you’ll see that I never said a contest was won with smitsimax.
And moreover you could say BitRunner was won with smitsimax (+ some NN :P)

My question was more about : should we all learn smitsimax to stay competitive in contests ? It seems it appears in every post mortem now.
For instance, if BitRunner had been released two years ago, it’s quite obvious every one would have used GA, as it was the hype then.

Not in every contest. It all depends of the branching factor and how you can reduce this branching factor.

For CSB, it’s now well known that you can use a very reduced set of possibles moves (+18°, -18°, 0 thrust or 200 thrust. Only 4 moves). So smitsimax will works well (in a turn by turn game, minmax will works well).

But don’t forget that some contests was won by a beam search too. Xmas Rush was won by a MCTS against many people in Smitsimax.

My concern is more about NN than smitsimax.

1 Like

|{+18,0,-18}| * |{0, 200}| = 3*2 = 6

Edit: the linebreak in your comment confused me, listing the 0 of “0 thrust” next to the angles, but the “thrust” in the next line

1 Like

I think Magus meant {-18; +18} x {0;200} = 4 moves