In case you wonder how I spent January 2015, this is a recap of Battlecode 2015: 3 weeks of hardcore, non-stop programming are over. It was amazing.
What is Battlecode?
The Battlecode programming competition is a unique challenge that combines battle strategy, software engineering and artificial intelligence. In short, the objective is to write the best player program for the computer game Battlecode.
The competition takes place in January, it’s very well organized and there are actually lots of high-profile sponsors & prices for the top teams. All this happens in virtual reality, there are no real robots involved, but nonetheless, it’s incredibly hard & challenging.
There are 3 tournaments and a big finale at MIT where the top teams fight for prizes and eternal nerd glory. Between tournaments, all teams have the possibility to fight “test” matches against each other, the so called scrimmages.
In 2015, non-MIT students and teams with people who are not students at all could join the competition. So I joined as szumi, set up the team MunichSquad and jumped right in.
This year the game was great. The objective was to destroy the enemy HQ. Each team started the game with a HQ and several towers, powerful structures that strengthen the HQ as long as they stand. You had to mine ore to build buildings and spawn units. A productive economy, good combat micro and an solid strategy were key to success. Read the game specs for all the info.
The guys at MIT did an outstanding job by providing all the tools we needed to get started. You were able to make a functional bot work in a very short amount of time. Understanding all the game mechanics was obviously a big challenge at the beginning. The specs document was a constant companion in these 3 weeks.
Sprint Tournament: Drone Swarms
One week after spec release was the Sprint Tournament. After messing around with some units and making a basic economy work, I actually managed to build a functional bot that did quite well. Hanging around in IRC and doing scrimmage matches was key to stay on top of the meta game.
It became clear that drones are far superior to other units. Drones were a flying unit that had surprisingly good combat abilities and became nearly unstoppable when used in a swarm. So the Sprint Tournament was basically about who can make the best drone bot. TeamK did an mind-blowing job at this with an extremely well programmed drone bot that just blew away all competing teams, as you can see in the video below. It was unreal.
I made it in the top 16 which was very encouraging.
Battlecode 2015 Sprint Tournament: TeamK (#239) vs. 10 pool (#37)
Seeding Tournament: Drone Nerf & Rise of the Launchers
After the Sprint Tournament, it was more then obvious that the game was unbalanced. So, the game devs did a nerf to drones and forced all teams to develop new strategies and use other units. The big issue was that we had to use non-flying units now which required navigation and better micro.
The new superior unit was the launcher which could shoot missiles, but was a bit costly to produce. Unfortunately, I made a mistake at this point and decided to go with the tank unit. My tank strategy worked fine against medium performing teams, but it was not enough against the top teams that used launchers.
I also spent a substantial amount of time improving my units micro. Micro basically means how your units behave against other units in combat. I have never done this before and the learning curve was steep until I kind of figured it out. Still, my micro was not perfect at all, you could spent weeks just improving that part of your bot.
But time was always an issue, especially your me as a solo developer. There was also the bytecode limit which meant that every bot had a limited amount of computing resources. This forced all teams to write efficient code.
Overall, the Seeding Tournament was fun, I made it in the top 24 which was OK considering my coding issues and my sub-optimal strategy decision.
Qualifying Tournament: To Be or Not To Be
The final deadline was upon us 3 weeks after specs release. The Qualifying Tournament determined the top 16 contestants going into the glorious Final Tournament.
Once against, I switched strategies. I decided to go with launchers, because that was clearly the dominant combat unit and all teams were using them. My code was flexible enough to make a quick change. The main issue now was that launchers & missiles required a completely different micro which I had to get done as fast as possible.
Unfortunately, at this point, some motivational problems creeped in on my side. I guess that after 2 weeks of like 12 to 16 hours of coding per day my brain started asking why the hell I am doing this. Also, I found the constant game balancing changes a bit frustrating. But I got myself together and decided to go through with the competition after putting so much hard work into it already.
So, my bot was shaping up nicely with missile shooting launchers, some soldier units for support & harassment and an all-mighty kill-everything commander unit. I even had some time to build in basic navigation, so units would not get stuck on difficult maps.
However, it became more and more clear that some teams that actually were teams of up to 4 talented people, did an amazing job with their bots. Of course, they got an edge over most solo developers and did quite well in the Qualifying Tournament.
In the video below, you can see one of my wins with my final bot in the Qualifying Tournament. I won’t show you my last matches, because it’s too frustrating 😉
Battlecode 2015 Qualifying Tournament: holy (#7) vs. MunichSquad (#41)
All in all, I made it in the top 32 which was not what I was aiming for. The only positive thing is that I lost in the final qualifying round against a top team which means that I was there until the end. So no shame in that. Overall, I was quite satisfied with my bot, but it obviously had problems for which I had no time to fix.
Final Tournament: The Battle for Nerd Nirvana
The Final Tournament takes place in front of a huge crowd at the Kresge Auditorium in Boston. Some might describe it as the Nerd Superbowl. Honestly, I did not watch because of my timezone and frustration over not qualifying. But I was told that it is a huge event and a great experience for everybody involved.
The winner of Battlecode 2015 is Greg McGlynn aka The_Duck. He won with a superior performance overall and especially in the last round due to great navigation. The fascinating thing is that he is a solo developer who also won the competition in 2014. This is quite impressive, as I said earlier, it’s very hard to do this without a team. Congratulations to Greg McGlynn! Very friendly guy btw, he even had enough time to help other people with Battlecode problems in IRC.
A special shoutout goes to team Skillorcz who made 2nd place, some very nice guys from Berlin. I actually helped them a little bit by letting them destroy my bot in scrimmages in the last week of the competition. In my opinion, it’s very cool that a team from Germany made it this far and that programmers from all over the world took part in Battlecode 2015.
For me personally it was a great experience. It was definitely the hardest programming challenge I ever faced. After all, I’m only doing iOS development, which is a piece of cake compared to artificial intelligence programming.
Apart from programming, sleep deprivation became an issue right from the beginning. I love to sleep, but time was limited and there were no excuses. I even did an all-nighter at some point until 7am, something I have not done in a long time, because I usually just don’t have strict deadlines in my normal job.
Of course, I was disappointed to miss the final 16 & the trip to Boston. These 3 weeks of non-stop coding have been very intense. However, to put some perspective to it, I did this on my own against teams of up to 4 top programmers from MIT and around the world.
A very positive thing was that my app business did exceptionally well throughout January. This proves once again that I’m on the right path and that I can basically do whatever I want with my time. If I would only be better at killer bot programming, my nerd life would be complete 😀
Next year, I will most likely compete again, but this time I will be prepared and hopefully get the results I want. Until then, back to iOS development, maybe there will be more artificial intelligence stuff going on in my apps from now on 🙂