Skip to content

PYTHONGeek Retreat 2018 - Starcraft bot

Profilbilde av Marius Thingwall

Forfatter

Marius Thingwall
3 minutter lesetid

Igjen var det duket for ett av årets høydepunkter for ITverket. Med fjorårets tur til sjøs friskt i minne, hadde arrangørene i år valgt å holde føttene godt plantet på landjorden. GeekCruise hadde med andre ord blitt forvandlet til GeekRetreat.

For å sikre godt samhold og faglig påfyll, arrangeres det årlig en faghelg hvor de ansatte kan utfolde seg utenfor hverdagens rammer. De siste årene har turen vært avholdt på Color Lines ferje mellom Oslo og Kiel. Men etter fjorårets høye og skvulpende sjø, innså vi at det kanskje var på sin plass med en liten forandring. For anledningen ble det da arrangert som en blåtur, hvor undertegnede var eneste person som viste destinasjonen. Hemmeligheten ble godt bevart, til tross for forsøk fra mer eller mindre frustrerte ansatte som lurte på hvilken garderobe som skulle pakkes ned.

Etter flere uker med planlegging fra arrangørene, var endelig den store dagen her. Deltagerne møtte opp på Oslo S og fikk vite at årets destinasjon var Tønsberg. Underveis til destinasjonen fikk deltagerne også en innføring i årets tema, nemlig Blizzard-spillet Starcraft 2. Oppgaven gikk ut på å lage boter som skulle spille et av lagene, og forhåpentligvis vinne mot en av de andre lagenes boter.

Oppgaven var relativt enkel å komme i gang med, men vanskelig å mestre. Det var med andre ord duket for en skikkelig konkurranse hvor alle fikk (med større eller mindre hell) noe til å fungere. Med en Starcraft 2 installasjon tilgjengelig lokalt på maskinen din, python og en text editor etter fritt ønske, kunne en kjapt få boten sin opp å kjøre.

For de nysgjerrige kan dere se på kodesnutten nedenfor. Ved installere python-sc2 apiet via pakkebehandleren PIP, og importere "sc2" er man oppe og går. Denne kodesnutten setter opp et spill mellom boten din, og et Terran-lag med vanskelighetsgrad "easy". "on_step"-metoden kjører hvert "steg" og distribuerer arbeidere på kartet for å samle ressurser. Videre kan man utvide med mer funksjonalitet på hvert steg.

import sc2
from sc2 import run_game, maps, Race, Difficulty
from sc2.player import Bot, Computer

class FirstBot(sc2.BotAI):
    async def on_step(self, iteration):
        await self.distribute_workers() 

run_game(maps.get("AbyssalReefLE"), [
    Bot(Race.Protoss, FirstBot()),
    Computer(Race.Terran, Difficulty.Easy)
], realtime=True)

(Kilde: https://github.com/Dentosal/python-sc2/wiki)

Kvelden senket seg etterhvert over bryggen i Tønsberg, og deltagerne valgte å bevege seg inn i hotellets restaurant. Med tre-retters på menyen ble stemningen økt enda et par hakk, og deltageren fikk prøve seg på hva Tønsberg hadde å by på.

I klassisk GeekCruise/Retreat-stil var det duket for konkurranse. Arrangørene hadde satt opp mulighet for å pushe koden til et repo og kampene ble spilt i hver sin docker-container lokalt på en av arrangørmaskinene. I finalekampene ble det også vist reprise på storskjerm i etterkant, slik at alle kunne se hvordan de forskjellige botene oppførte seg. Etter mange ymse taktikker og kamper endte til slutt «Liggeunderlaget» på topp, til tross for sitt valg av navn.

Tilbakemeldingene lot heller ikke vente på seg og det så ut som om deltagerne hadde hatt en fornøyelig helg. Så får vi vente i spenning og se hva neste års arrangører finner på.