Göm menyn

TDDD92 AI-projekt

Projekt i grupp (UPG1)


Efter utvärderingsarbetet under HT1 ska ni i gruppförband implementera integrerade förmågor i er gemensamma agent. Stegen nedan beskriver hur ni ska genomföra projektarbetet, och hur ni ska förbereda er redan under HT1.

Arbetet under HT1

Det praktiska arbetet under HT1 inleds med en labbserie som normalt utförs i par. Ni hittar laborationsinstruktionerna på kursens Wiki. Labbarna är inte ett examinationsmoment i sig själva, utan en förberedelse inför det som faktiskt examineras. Målet är att samtliga kursdeltagare ska ges en möjlighet att:

  • Undersöka hur StarCraft II fungerar i praktiken.

  • Lära sig arbeta med programmeringsgränssnittet till StarCraft, vilket kommer att behövas i de senare stegen.

  • idéer och inspiration inför den individuella utredningen (examinationsmoment UPG2) och det gemensamma utvecklingsprojektet (examinationsmoment UPG1), samt en bättre förståelse för vad som faktiskt är möjligt och rimligt att genomföra inom kursen.

Bra att veta: Eftersom labbarna inte är examinerande finns en hel del frihet i hur man genomför arbetet. Samtidigt är det studentens ansvar att man förstår det som lärs ut i labbarna inför kommande uppgifter! Följande gäller:

  • För labbserien arbetar vi normalt i par – men om någon "blir över" kan vi ha någon grupp om 3 personer. Det ger en möjlighet att starta snabbt utan att man behöver bestämma redan från början hur man vill bilda de stora projektgrupperna. Man får också möjlighet till diskussion inom smågrupperna utan att någon helt faller utanför.

  • Men tänk samtidigt på att ni kommer att behöva erfarenheten av det egna arbetet. Alltför mycket samarbete i den första fasen kan leda till att ni inte förstår hur den egna basagenten fungerar eller hur den pratar med StarCrafts API, vilket ger problem under det senare arbetet. Fokusera på att förstå hur spelet och APIerna fungerar.

    Om du inte har arbetat med StarCraft II tidigare: Samarbeta med din labbpartner och fokusera särskilt på att förstå API:et och Starcraft II som spel.

    Om bara en i ett par har arbetat med StarCraft II: Tänk på att alla behöver förstå vad som händer. Fall inte i fällan att klippa och klistra gammal kod utan att veta vad som händer.

Ett par veckor innan slutet av HT1 börjar det bli dags att gå över till att skapa en grundläggande gemensam agent. Information om detta finns i vår Wiki och här är några viktiga punkter:

  • Den gemensamma agenten bör vara klar innan HT2 börjar.

  • Den ska vara en enkel grundagent där man senare (under HT2) integrerar AI-tekniker.

  • Den kan baseras på era implementationer från labbarna eller på en nyligen implementerad "basagent" som kan ge ytterligare inspiration och hjälp, men som å andra sidan kräver att man sätter sig in i den nya koden.

Obs! Varje grupp får ett eget Git-repo som är en kopia (fork) av den nya basagenten. Gruppen väljer om ni vill använda den eller om ni föredrar att jobba vidare på er tidigare kod – läs genom repots README och titta lite på koden för att bestämma er. Oavsett vilket ni väljer att göra ska ni ändå arbeta i det Git-repo som vi har skapat åt er!

Ju längre ni har kommit med detta när HT2 börjar, desto större chanser att ni kan implementera AI-teknikerna på ett bra sätt. Grupper som inte är klara med basen förrän ett par veckor in i HT2 får ofta problem att hinna implementera, testa och utvärdera ordentligt.

Arbetet under HT2

Under HT2 behöver alla i gruppen arbeta på bland annat följande punkter:

  • Implementera den egna funktionaliteten, det egna ansvarsområdet (till exempel "byggnadsordning"). Detta behöver komma igång direkt i HT2 – man behöver lite marginaler för att t.ex. kunna ta ett avbrott i några dagar för att tänka över saker, eller för att man kanske blir sjuk ett tag.

  • Samarbeta med övriga i gruppen för att fortsätta med den gemensamma funktionalitet som man upptäcker att man behöver. Mycket bör redan vara klart i och med basagenten som skrevs i HT1, men man upptäcker säkerligen några fler behov när man arbetar i HT2. Detta arbete behöver fördelas jämnt inom gruppen.

  • Testa den egna funktionaliteten, men även testa att integrera flera olika funktionaliteter tillsammans. Vi ser ibland att olika gruppmedlemmar arbetar på helt egna grenar i Git och att integreringen inte sker förrän på slutet, och det kan vara ett stort misstag. Integrera så tidigt ni kan.

    Ett tips är att skapa ett antal featureflaggor där man kan slå av och på olika funktionaliteter, med "fallback" till en väldigt grundläggande funktionalitet om någon flagga är falsk. Exempel: Om FIND_SAFE_PATHS är True används någons "hitta-säker-väg-implementation". Om flaggan är False (kanske för att funktionen inte är färdig eller för att man vill testa om det är den funktionen som orsakar en bugg) anropas automatiskt en fallback som använder den inbyggda förflyttningen istället.

  • Planera arbetet och hålla en tidplan (mer om det senare).

  • Rapportera hur det går och diskutera frågor och problem (mer om det senare).

  • Arbeta på projektdelen av den individuella slutrapporten när du har material, och arbeta vidare med polering av utredningsdelen när du har fått kommentarer. Mer information om hur man skriver gruppens slutrapport finns här.

För att hålla reda på hur det går och vem som gör vad, och se till att inget faller mellan stolarna, är det viktigt att ha en viss planering. Det är också bra om handledarna kan titta på planeringen och hjälpa er följa upp det som har gjorts, inte minst när det gäller tidsplaneringen under periodens 7 veckor.

Vi har därför skapat ett enkelt Google-dokument (spreadsheet) där man kan planera arbetet på hög nivå. Detta kommer vi att diskutera med er vid första redovisningstillfället, och ni kommer att få fylla i planen inför andra tillfället (men skulle ni göra det redan till första tillfället är det också väldigt välkommet). Gruppen bör därför skapa en egen kopia av detta dokument, fylla i medlemmarnas namn, och börja planera!

Obs! Dokumentet behöver delas med samtliga gruppmedlemmar, så samtliga kan skriva i dokumentet. Se de allmänna delningsinstruktionerna. Det behöver också delas med båda handledarna och examinatorn, men det räcker att vi är "läsbehöriga" och vi behöver bara en gemensam läslänk.

I dokumentet finns en kolumn för gruppen som helhet och en för varje gruppmedlem.

För varje vecka skriver man i förväg in en ungefärlig plan för vad man tänker göra. Det är då naturligt att man har en tydligare och mer konkret plan för de närmaste veckorna veckor framöver (med flera tydliga att-göra-punkter), medan planen blir mer "ungefärlig" ju längre in i framtiden man kommer. Även de mindre detaljerade delarna är dock viktiga för att man ska kunna se att planen i sin helhet verkar rimlig!

När veckan har gått skriver man också in vad man faktiskt har gjort, vilket ofta inte stämmer exakt med planen. Sedan är det dags att lägga några minuter på att uppdatera och förtydliga den framtida planen inför nästa redovisningstillfälle.

Bra att veta: Under HT2 har vi också ett seminarium varje vecka. På det seminariet kan ni ta upp frågor som ni inte hann diskutera under redovisningen, eller som handledaren inte kunde besvara. Precis som vanligt kan vi inte heller garantera att vi kan svara på rak arm på seminariet, utan vissa frågor kan få skjutas upp.

labbtillfällen finns det mer tid att ställa praktiska frågor till handledarna; seminarierna är t.ex. inte till för programmeringsfrågor.

Redovisning

I princip varje vecka under HT2 har vi ett redovisningstillfälle. Vid frånvaro, se kursinfo.

Vid första redovisningstillfället har vi ännu inte riktigt kommit igång. Då kommer varje grupp att få 30 minuter till att diskutera nuläget med er handledare. Ni behöver då vara förberedda på att t.ex. förklara hur det har gått med basagenten och diskutera lite om hur ni tänker fortsätta ert arbete under första veckan.

Övriga redovisningstillfällen planerar vi att dela upp i:

  • 20 minuter för projektgrupp A (enskilda diskussioner), 15 minuter för projektgrupp A+B tillsammans (titta på en eller flera matcher mellan gruppernas agenter), 20 minuter för projektgrupp B (enskilda diskussioner)

  • Samma för projektgrupp C/D

...där grupperna A/B/C/D är olika projektgrupper varje gång, så att vi varierar vem man träffar (vi skickar ut exakt information inför varje tillfälle!). Vid varje redovisningstillfälle ska gruppen alltså närvara i cirka 35 minuter enligt vår nuvarande plan. Det kan hända att detta justeras under kursens gång om vi ser behov av lite mer tid för att t.ex. ställa frågor.

Obs! Inför dessa tillfällen (alla utom det första) behöver ni uppdatera planeringen (Google-dokumentet) senast dagen före redovisningen så att handledaren kan titta på planeringen i förväg. Under själva redovisningen (gruppens "privata" tid minuter) används planeringen som en bas för att varje enskild gruppmedlem ska kunna prata kort om hur det har gått under förra veckan och vad man tänker göra under den kommande veckan. Här finns bara cirka 2 minuter för varje gruppmedlem, så det är viktigt att förbereda planeringsdokumentet så att man vet vad man vill säga!

Efter detta finns cirka 5 minuter kvar av grupptiden till att t.ex. ta upp frågor från gruppens sida eller från någon medlem.

När första gruppens "privata" tid är slut släpper handledaren själv in nästa grupp för den gemensamma redovisningstiden. Då tittar man som sagt på matcher mellan de två gruppernas agenter, vilket kan ge en hel del matnyttig information. För att vi ska kunna förbereda och köra matcherna kommer ni varje vecka att behöva lägga en Git-tag på en agentversion som ni vill att vi ska använda; mer information kommer när det blir dags!

Vid slutredovisningarna kommer ni att ha lite mer tid att redovisa vad ni har åstadkommit under terminen. Varje grupp kommer att redovisa separat under ett eget pass, där varje individ får en viss tid tilldelad att presentera sitt eget resultat. Varje grupp kommer att vara närvarande i högst en timme.

Mer detaljer skickas via epost.


Sidansvarig: Daniel de Leng
Senast uppdaterad: 2023-08-23