mandag den 18. januar 2010

Intelligens gjort kunstig

Fremmødte
pepe og rfogh
18/1: 9.30 - 18
19/1: 10 - 18

Formål
Formålet med dagens arbejde var at skrive en bedre computerspiller, samt at styre rammerne omkring spillet: Hvem taber/vinder, hvornår starter vi (samtidigt), og hvordan man starter et nyt spil uden at skulle rekonfigurere robotterne.

Fremgangsmåde
rfogh startede med at bygge en ekstra lyssensor på robotterne, lige bag kofangeren, så robotten har en chance for at reagere inden den "rigtigt" støder ind i muren. Derefter afprøvede han den simple computerspiller, der tidligere var skrevet, som blot drejede tilfældigt hver gang den stødte ind i noget. Derefter blev der eksperimenteret yderligere med andre computerspillere, hvilket er nærmere beskrevet under forsøg.

pepe koncentrerede sig om at forbedre vores Python-program til PC'en. Der blev udformet en simpel protokol til at kommunikere mellem NXT og PC. Meningen er, at alle NXT'er skal forbindes til PC'en, så de alle kan melde ind at de er døde og en vinder kan udpeges.

Forsøg
Forsøgene med computerspillerne mundede ud i følgende:
De tilfældige drej fungerede godt på den måde, at man ikke kan forudsige bevægelserne, andet end at den fortsætter fremad indtil næste mur. På den måde er det svært som modspiller at udregne computerens næste træk. Problemet med denne meget simple computerspiller er dog, at den meget hurtigt kommer til at stå og dreje rundt i et hjørne uden egentligt at komme nogen vegne.

Næste forsøg med en computerspiller gik andre veje. Her prøvede vi at lave en robot, der drejer mod midten af banen, når den støder på en væg. Den drejer altid kun én gang (90 grader), men altid sådan at den søger mod midten af banen. På den måde vil robotten ikke blive ved med at køre ind i et af hjørnerne. Problemet her kan dog være, at robotten i stedet fanger sig selv på midten af banen. Tanken er dog her, at det gerne skulle tage så lang tid, at robotten kan blive den sidste tilbageværende spiller, og dermed vinde. Et andet problem med denne tilgang er, at robottens bevægelser er meget forudsigelige. Hvis en modstander ved, at robotten bruger denne algoritme er det forholdsvist nemt at udregne dens kørsel, og dermed få en taktisk fordel.

En tredje udgave tog igen udgangspunkt i tilfældighed, i en forbedret udgave af den første computerspiller.
Vi startede med en sandsynlighed S på 0,5 for at den drejer til venstre, ellers højre. Hvis den drejer til venstre, tælles S ned med 0,25, og ellers op med 0,25. På den måde kan robotten ikke komme til at dreje en hel omgang om sig selv, men vil manøvrere frem i den fra starten givne retning (ved anvendelse af rigelige mængder statistik).
For at ændre på denne "hovedretning" lader vi robotten dreje i en tilfældig retning engang imellem, uden at tælle på S. Derved får robotten angivet en ny hovedretning, som den så vil følge. På den måde håber vi robotten kan køre banen rundt uden at male sig selv op i et hjørne...

pepe prøvede at få forbindelse til flere NXT'er på en gang. Dette kræver flere Bluetooth-forbindelser på én gang, som vi har valgt at styre med flere tråde, én pr. forbindelse.
Det blev lavet med standard Python-tråde, der fungerer på samme måde som Java-tråde.
Programmet starter med at lave en søgning efter Bluetooth-forbindelser i området, hvorefter man vælger, hvilke der er modstandere, og hvilken der er brugerstyret.

Forløsning
Projektet er nu i version 1.0, da vi sagtens kan aflevere det vi har nu og være stolte af det. Der er selvfølgelig stadig mange ting, der kan forbedres, men spillet er absolut spilbart.
Blandt ønskerne til fremtidige versioner er:
Bedre computerspiller. I første omgang kunne man forsøge at kombinere de to eksisterende spillere, til en robot, der kører tilfældigt, men med større sandsynlighed for at søge mod midten.
Nemmere opsætning, fx. at mere kan styres fra PC'en (ex. valg af om robot er computer- eller menneskestyret, hurtigere søgning efter bluetooth, osv.)
Highscore, fx. baseret på tacho count eller tid. Dermed ville de, der kører længst få bedste scores.
Ombygning af robot, så både lyssensor og pen er placeret så tæt på midten som muligt.


Ingen kommentarer:

Send en kommentar