Nu lär vi oss tre i rad

Storlek: px
Starta visningen från sidan:

Download "Nu lär vi oss tre i rad"

Transkript

1 Nu lär vi oss tre i rad Hanna Johansson HT G43

2 Sammanfattning Tre i rad är ett enkelt spel som de flesta förstår sig på och är ett väldigt vanligt problem att försöka lösa just maskinellt. I den här rapporten beskrivs hur det går att lära en agent spela tre i rad genom förstärkt inlärning där den spelar en rad matcher mot en kopia av sig själv. I slutet kan en användare spela mot agenten och försöka slå den, vilket inte är så lätt som en kan tro. Avslutningsvis diskuteras även eventuella sätt att förbättra programmet på. 2

3 Innehållsförteckning 1. Inledning Bakgrund Hur går tre i rad till? Förstärkt inlärning Syfte och metod Implementation Översikt Klassen Board Klassen Performance Klassen Critic Körning Reflektioner Vad kan förbättras? Referenslista Bilaga

4 1. Inledning 1.1 Bakgrund Tre i rad är ett spel för två spelare. Utformningen av spelplanen ser alltid likadan ut men möjliga drag påverkas av tidigare drag från både en själv och sin motspelare. En ruta på spelplanen kan vara tom eller innehålla X eller O, där X representerar en spelare och O en annan. Figur 1. En tom spelplan för tre i rad samt en där X har vunnit. 1.2 Hur går tre i rad till? Tre i rad är ett positionsbaserat spel. I ett positionsbaserat spel finns det två spelare som gör sina drag i omgångar, alltså börjar en av dessa två spelare. Antalet positioner är ändliga och störts valbarhet har den spelare som lägger första draget. Reglerna innebär att en sekvens av personliga drag alltid kommer sluta med ett ändligt antal drag och slutet kallar för terminala positioner. En komplett sekvens som slutar med terminala positioner kallas för en spelomgång. Spelet kan vinnas av både den första eller andra spelaren eller sluta oavgjort. Båda spelarna i ett positionsbaserat spel vet vad som händer, de har alltså komplett information, och det går inte att ändra eller göra om ett drag (Beck, 2008). En spelomgång är avslutad antingen när en spelare vunnit eller när det inte finns några drag kvar att göra, har ingen vunnit då är omgången oavgjord. En spelare vinner genom att ha lyckats lägga tre av sina symboler på rad, antingen horisontellt, vertikalt eller diagonalt. Varje drag som görs av båda spelarna begränsar möjligheterna för nästkommande drag, och ett beslutsträd för just tre i rad kan bli väldigt stort. 4

5 Figur 2. Delar av ett beslutsträd för de två första dragen i tre i rad. 1.3 Förstärkt inlärning Förstärkt inlärning innebär att lära en agent genom att belöna för vad denne gör bra och/eller bestraffa för misslyckanden. Vid övervakad inlärning behöver agenten få veta det korrekta draget för varje position den hamnar i, men det är sällan sådan återkoppling finns tillgänglig. Istället kan en agent själv lära sig en modell för sina drag och kanske till och med kan förutspå sin motståndares drag, men det måste finnas återkoppling på vad som är bra och vad som är dåligt för att agenten ska ha något att grunda sina beslut på. Det är den här återkopplingen som kallas för belöning eller förstärkning. I vissa miljöer sker återkopplingen rullande men sett till tre i rad sker återkopplingen först i slutet på varje spelomgång. Återkopplingen kan agenten sedan använda för att skapa optimala strategier som maximerar den förväntade totala belöningen för miljön som agenten agerar i (Russel & Norvig, 2010). 1.4 Syfte och metod Syftet med den här fördjupningsuppgiften är att i programspråket Python bygga en agent som genom förstärkt inlärning lär sig spelet tre i rad. Idén inspirerades av övningsuppgift 1.5 som Mitchell (1997) presenterar i sin bok: 1.5. Implement an algorithm similar to that discussed for the checkers problem, but use the simpler game of tic-tac-toe. Represent the learned function V as a linear combination of board features of your choice. To train the program, play it repeatedly against a second copy of the program that uses a fixed evaluation function you create by hand. Plot the percent of games won by your system, versus the number of training games played. 5

6 Koden som skrevs baserades på Christopher J MacLellans lösning på just problemet ovan och det är hans linjära uppskattningsfunktion som används. 2. Implementation 2.1 Översikt Programmet består av tre klasser; en för spelplanen, en för agenten och en för en kritiker. Instanser av spelplanen håller koll på hur spelplanen ser ut just nu samt den historik som lett till nuvarande state. Instanser av agenten har en hypotes och en uppdateringskonstant, som kontrollerar i vilken takt vikterna uppdateras, som används för att beräkna hur bra spelplanen är. Instanser av kritiker används för att uppdatera agentens hypotes baserat på återkoppling av olika matcher, alltså vem som vunnit. Det skapas två instanser av agenter, en som ska lära sig och en som endast lägger slumpmässiga drag. För att kunna lösa problemet används en funktion som utvärderar spelplanens state genom en linjär funktion. Funktionen tar en hypotes (sju vikter) och egenskaper (sex vikter) som tas från spelplanens state. Vid varje omgång får den lärande agenten alla möjliga drag och använder sig sedan av utvärderingsfunktionen för att ta reda på vilket drag som får högst värde, som den sedan väljer som sitt nästa drag (MacLellan, 2016). Nedan kommer de tre klasser som använts förklaras mer ingående, för att se den fullständiga programkoden se bilaga 1. Rutorna på spelplanen kan ha tre olika värden, 0 för tom ruta, 1 för X och 2 för O. 2.2 Klassen Board Funktionen init skapar ett bräde med tomma rutor, alltså ett där alla värden är 0, samt påbörjar en lista som ska komma att bli spelomgångens historik. Efter varje gång funktionen set_board har använts så uppdateras brädet och historiken fylls på med det senaste gjorda draget. Det finns tre funktioner som används för att ge programmet information om hur brädet ser ut just nu, dessa är get_rows, get_columns och get_diagonals som ger ut rader, kolumner och diagonaler. För att kolla om spelomgången är färdig används funktionen isdone. Först går funktionen igenom om det finns någon tom ruta, om det gör det kanske spelomgången inte är slut ännu. Härnäst kollar den igenom alla rader, kolumner och diagonaler och letar efter om det 6

7 finns tre X eller tre O i någon av dessa. Hittar funktionen tre X eller O betyder det att någon har vunnit och spelomgången är slut. För att hitta vinnaren används funktionen get_winner. Funktionen kollar först att spelomgången är slut genom isdone innan den kollar igenom rader, kolumner och diagonaler och letar efter tre X eller tre O i någon av dessa. Om funktionen hittar tre X returneras 1, vid tre O returneras 2 annars är matchen oavgjord och 0 returneras. En av de viktigaste funktionerna i den här klassen är get_features som ger ut egenskaperna hos ett bräde. Egenskaperna som funktionen letar efter är följande (sekvens = rad, kolumn eller diagonal): X1 X2 X3 O1 O2 O3 Antal instanser med två X i sekvens och en öppen ruta Antal instanser med ett X i en öppen sekvens Antal instanser med tre X i en sekvens Antal instanser med 2 O i en sekvens och en öppen ruta Antal instanser med ett O i en öppen sekvens Antal instanser med tre O i sekvens Dessa används sedan i klassen Performance i kombination med hypotesen för att beräkna vilket nästkommande drag som är bäst för agenten. Funktionen get_successors används för att ge ut alla möjliga nästkommande drag för agenten så att denne vet vilka möjligheter som finns. Detta görs genom att lägga in agentens värde (1 eller 2) i en tom ruta i taget och spara ner hur spelplanen skulle se ut efter det möjliga draget. I klassen finns även funktioner som set_coordinate sätter värdet på en ruta till det mode som skickas in (1 för X och 2 för O), print_board som printar ut en bild av spelplanen så att den som sedan spelar mot agenten faktiskt kan se hur spelplanen ser ut. Funktionen get_square som returnerar värdet på en specifik ruta på brädet används för att kolla att en ruta faktiskt är tom och get_history returnerar den historik som lett till spelplanens nuvarande state. 2.3 Klassen Performance Funktionen init tar in en spelplan, en hypotes och ett mode som säger om agenten är X eller O, default mode är 1 alltså X. Funktionen ger även agenten ett default uppdateringskonstantvärde som är

8 Funktionen evaluate_board tar in en spelplan och utvärderar det genom att ta fram dess egenskaper och multiplicera dessa med hypotesen. Funktionen ser ut som så här: def evaluate_board(self, board): f1,f2,f3,f4,f5,f6 = self.board.get_features(board) h0,h1,h2,h3,h4,h5,h6 = self.hypo return h0 + h1*f1 + h2*f2 + h3*f3 + h4*f4 + h5*f5 + h6*f6 För att beräkna hur bra just det här statet av en spelplan är tar alltså funktionen värdet i en egenskap gånger motsvarande hypotes och adderar ihop dem. Dock står hypotes 0 ensam då det vinns ett värde mer i hypotesen än i egenskaperna. Funktionen choose_move väljer agentens nästa drag baserat på vilket efterföljande state (vilken successor) som fått bäst värde vid evaluate_board till skillnad mot funktionen random_successor som randomiserar fram vilket drag agenten ska göra härnäst. För att kunna uppdatera agentens hypotes, vars default är 0.5 på alla värden, används funktionen update_hypo som tar in historik och träningsexempel. Träningsexemplen är de färdigspelade matcher som finns i historiken som även fått ett värde beroende på vem som vann. Från varje träningsexempel tas dess egenskaper ut och hypotesen uppdateras genom: nytt värde = tidigare hypotesvärde + uppdateringskonstant * (värdet från träning uppskattat värde) * motsvarande värde i träningsexempel. I kod ser det ut så här: h0 = h0 + self.updateconstant*(train - estimate) h1 = h1 + self.updateconstant*(train - estimate)*t1 h2 = h2 + self.updateconstant*(train - estimate)*t2 h3 = h3 + self.updateconstant*(train - estimate)*t Klassen Critic Funktionen init tar en en hypotes och ett mode (vars default är 1) samt skapar en spelplan. Även den här klassen har en funktion som heter evaluate_board och fungerar på samma sätt som den i klassen Performance. Funktionen get_training är den som används för att gå igenom agentens historik och utvärdera de olika färdigspelade matcherna. De olika spelomgångarna i historiken sparas tillsammans med 100 poäng, 0 poäng eller -100 poäng beroende på hur spelomgången gick. Vid vinst ges positiv poäng och vid förlust negativ, att spela oavgjort ger 0 poäng. Det är 8

9 alltså den här funktionen som har det huvudsakliga ansvaret att ge agenten återkoppling på huruvida omgången gått bra eller dåligt. Det är den här poängen som agenten sedan använder som referens för inlärningen. 2.5 Körning För att köra programmet skapas först två instanser av klassen Performance som är de två agenter som sedan ska träna mot varandra, player1 är den agenten som tränas och spelar med X, player2 är bara en motståndare som gör slumpmässiga drag och spelar med O. Även två instanser av klassen Critic skapas för att uppdatera respektive spelares hypotes. De två spelarna får sedan spela matcher mot varandra där player1 får välja drag och player2 kör slumpmässigt. Vem som vann sparas sedan ner för att i slutet kunna visa statistik för användaren. I slutet på varje spelomgång uppdateras spelarnas hypotes genom de två instanserna av Critic. Efter matcher är det dags för användaren att möta den player1. Programmet börjar med att skriva ut statistiken för hur det gick när player1 spelade mot den randomiserande agenten. En spelomgång går till så att användaren först får ange vilken rad och sedan vilken kolumn denne vill lägga sitt drag i. Användaren spelar som O och player1 som X. Sedan spelar agenten och användaren tre i rad i enlighet med dess regler, försöker användaren lägga sitt drag i en ruta som är upptagen meddelar programmet detta och ber användaren välja en annan ruta. Efter varje drag agenten lagt så skrivs spelplanenut så att användaren får en bild av hur spelet ser ut just nu. Agenten lär sig även av spelen mot en användare. Figur 3. De två första rundorna mellan en agent och en användare. 9

10 3. Reflektioner Programmet fungerar som det ska och går i bästa fall att spela oavgjort mot efter det har kört matcher mot en randomiserande agent. Däremot tåls det att tänka på att en randomiserad agent aldrig kan motsvara en riktig användare. I ett försök att göra agenten smartare prövade jag att låta player2 också välja drag, i hopp om att statistiken mellan de två skulle jämnas ut alternativt att det skulle bli en betydligt större del oavgjorda matcher. Istället vann nu player1 överlägset och jag misstänker att det blev så då den som börjar bör ha ett övertag, speciellt om båda spelarna har samma erfarenhet. Detta då den spelare som lägger första draget har störts valmöjlighet och därmed kan styra spelet mera. 3.1 Vad kan förbättras? En sak som skulle kunna läggas in är ett enkelt sätt för användaren att avbryta spelet, just nu avbryts endast huvudloopen om en felaktig input (en input som inte kan göras om till integer) ges när användaren ska skriva in rad eller kolumn. Sättet för användaren att välja vart hen vill lägga sitt drag är lite krångligt, exempelvis skulle det nog underlätta för användaren att ha ett grafiskt gränssnitt snarare än ett textbaserat. I ett sådant gränssnitt skulle användaren kunna klicka i vart hen vill placera sitt drag snarare än att behöva skriva in. Just nu finns det ett problem med att skriver användaren in fel rad eller kolumn är det för sent och det går inte att ångra annat än om användaren försöker lägga sitt drag i en upptagen ruta. Finns ingen upptagen ruta i raden måste användaren lägga sitt drag där. Att den lärande agenten kör mot en randomiserad agent har som sagt sina nackdelar, bland annat är det inte omöjligt att slå den lärande agenten även efter matcher. Detta är alltså något som skulle behöva ses över för att förbättra hur agenten lär sig. 10

11 Referenslista Beck, J. (2008). Combinatorial Games [Elektronisk resurs] : Tic-Tac-Toe Theory. Cambridge: Cambridge University Press. MacLellan, C.J. (2016) Teaching a computer to play TicTacToe. Hämtad , från Mitchell, T.M. (1997). Machine learning. New York: McGraw-Hill. Russell, S.J. & Norvig, P. (2010). Artificial intelligence: a modern approach. (3.,[updated] ed.) Boston: Pearson Education. 11

12 Bilaga 1 # 0 representerar en tom ruta # 1 representerar ett X # 2 representerar ett O import copy import random class Board: def init (self): self.board = self.createboard() self.history = [copy.deepcopy(self.board)] def createboard(self): board = [[0,0,0], [0,0,0], [0,0,0]] return board def set_board(self, board = 0): if board == 0: print("zero board") self.board = board self.history.append(copy.deepcopy(self.board)) # Ger ut rader def get_rows(self, board = 0): if board == 0: board = self.board return board 12

13 # Ger ut columner def get_columns(self, board = 0): if board == 0: board = self.board columns = [] for i in range(3): column = [] for row in board: column.append(row[i]) columns.append(column) return columns # Ger diagonaler def get_diagonals(self, board = 0): if board == 0: board = self.board diagonals = [] d1 = [] d1.append(board[0][0]) d1.append(board[1][1]) d1.append(board[2][2]) diagonals.append(d1) d2 = [] d2.append(board[0][2]) d2.append(board[1][1]) d2.append(board[2][0]) 13

14 diagonals.append(d2) return diagonals def isdone(self, board = 0): if board == 0: board = self.board done = True for row in board: for element in row: if element == 0: done = False prospects = [] for row in self.get_rows(board): prospects.append(row) for column in self.get_columns(board): prospects.append(column) for diagonal in self.get_diagonals(board): prospects.append(diagonal) for entry in prospects: Zero = 0 X = 0 O = 0 for element in entry: if element == 0: Zero += 1 elif element == 1: X += 1 elif element == 2: 14

15 O += 1 if X == 3 or O == 3: done = True return done def get_winner(self, board = 0): if board == 0: board = self.board if self.isdone(board): prospects = [] for row in self.get_rows(board): prospects.append(row) for column in self.get_columns(board): prospects.append(column) for diagonal in self.get_diagonals(board): prospects.append(diagonal) for entry in prospects: Zero = 0 X = 0 O = 0 for element in entry: if element == 0: Zero += 1 elif element == 1: X += 1 elif element == 2: O += 1 if X == 3: return 1 15

16 elif O == 3: return 0 else: return 2 print("game not done yet") def get_history(self): return self.history def set_coordinate(self, x, y, mode): self.board[x][y] = mode def print_board(self, board = 0): if board == 0: board = self.board new_board = [] for row in board: new_row = [] for element in row: if element == 0: new_row.append(' ') elif element == 1: new_row.append('x') elif element == 2: new_row.append('o') new_board.append(new_row) for row in new_board: print(row[0] + ' ' + row[1] + ' ' + row[2]) print(' ') 16

17 # Ger ut egenskaperna hos brädet def get_features(self, board = 0): if board == 0: board = self.board # x1 = antal instanser med 2 x i rad och en öppen ruta # x2 = antal instaner med ett x i en öppen rad eller kolumn # x3 = antal instanser med tre x i en rad # o1 = antal instanser med 2 o i rad och en öppen ruta # o2 = antal instanser med ett o i en öppen rad eller kolumn # o3 = antal instanser med tre o i en rad prospects = [] for row in self.get_rows(board): prospects.append(row) for column in self.get_columns(board): prospects.append(column) for diagonal in self.get_diagonals(board): prospects.append(diagonal) x1 = 0 x2 = 0 x3 = 0 o1 = 0 o2 = 0 o3 = 0 for entry in prospects: zero = 0 x = 0 o = 0 for element in entry: if element == 0: 17

18 zero += 1 elif element == 1: x += 1 elif element == 2: o += 1 if x == 2 and zero == 1: x1 += 1 elif o == 2 and zero == 1: o1 += 1 elif x == 1 and zero == 2: x2 += 1 elif o == 1 and zero == 2: o2 += 1 elif x == 3: x3 += 1 elif o == 3: o3 += 1 return x1,o1,x2,o2,x3,o3 def get_successors(self, mode): successors = [] for x in range(0,3): for y in range(0,3): if self.board[x][y] == 0: successor = copy.deepcopy(self.board) successor[x][y] = mode successors.append(successor) return successors def get_square(self, x, y): return self.board[x][y] 18

19 class Performance: def init (self, board, hypothesis, mode = 1): self.board = board self.hypo = hypothesis self.mode = mode self.history = [] self.updateconstant = 0.1 def set_updateconstant(self, constant): self.updateconstant = constant def evaluate_board(self, board): f1,f2,f3,f4,f5,f6 = self.board.get_features(board) h0,h1,h2,h3,h4,h5,h6 = self.hypo return h0 + h1*f1 + h2*f2 + h3*f3 + h4*f4 + h5*f5 + h6*f6 def set_board(self, board): self.board = board def get_board(self): return self.board def set_hypothesis(self, hypothesis): self.hypo = hypothesis def get_hypothesis(self): return self.hypo 19

20 def random_successor(self): successors = self.board.get_successors(self.mode) successor = random.randint(0, len(successors)-1) random_board = successors[successor] self.board.set_board(random_board) def choose_move(self): successors = self.board.get_successors(self.mode) bestsuc = successors[0] bestvalue = self.evaluate_board(bestsuc) for successor in successors: if self.evaluate_board(successor) > bestvalue: bestvalue = self.evaluate_board(successor) bestsuc = successor self.board.set_board(bestsuc) def update_hypo(self, history, training): for i in range(0, len(history)): h0,h1,h2,h3,h4,h5,h6 = self.hypo t1,t2,t3,t4,t5,t6 = training[i][0] estimate = self.evaluate_board(history[i]) train = training[i][1] h0 = h0 + self.updateconstant*(train - estimate) h1 = h1 + self.updateconstant*(train - estimate)*t1 h2 = h2 + self.updateconstant*(train - estimate)*t2 h3 = h3 + self.updateconstant*(train - estimate)*t3 h4 = h4 + self.updateconstant*(train - estimate)*t4 h5 = h5 + self.updateconstant*(train - estimate)*t5 h6 = h6 + self.updateconstant*(train - estimate)*t6 20

21 # Sätt hypotesen till de nya värdena self.hypo = h0,h1,h2,h3,h4,h5,h6 class Critic: def init (self, hypothesis, mode = 1): self.hypo = hypothesis self.mode = mode self.checker = Board() def evaluate_board(self, board): f1,f2,f3,f4,f5,f6 = self.checker.get_features(board) h0,h1,h2,h3,h4,h5,h6 = self.hypo return h0 + h1*f1 + h2*f2 + h3*f3 + h4*f4 + h5*f5 + h6*f6 def set_hypothesis(self, hypothesis): self.hypo = hypothesis def set_mode(self, mode): self.mode = mode def get_training(self, history): training = [] for i in range(0, len(history)): h = history[i] if self.checker.isdone(h): if self.checker.get_winner(h) == self.mode: training.append([self.checker.get_features(h), 100]) elif self.checker.get_winner(h) == 0: training.append([self.checker.get_features(h), 0]) else: training.append([self.checker.get_features(h), -100]) 21

22 else: if i+2 >= len(history): if self.checker.get_winner(history[len(history)-1]) == 0: training.append([self.checker.get_features(h), 0]) else: else: training.append([self.checker.get_features(h), -100]) training.append([self.checker.get_features(h), self.evaluate_board(history[i+2])]) return training board = Board() hypo1 = (0.5,0.5,0.5,0.5,0.5,0.5,0.5) hypo2 = (0.5,0.5,0.5,0.5,0.5,0.5,0.5) player1 = Performance(board, hypo1, 1) player2 = Performance(board, hypo2, 2) player2.set_updateconstant(0.4) critic1 = Critic(hypo1, 1) critic2 = Critic(hypo2, 2) Xwin = 0 Owin = 0 draw = 0 for i in range(0,10000): board = Board() player1.set_board(board) player2.set_board(board) 22

23 while not board.isdone(): player1.choose_move() if board.isdone(): break player2.random_successor() winner = board.get_winner() if winner == 1: Xwin += 1 elif winner == 2: Owin += 1 elif winner == 0: draw += 1 critic1.set_hypothesis(player1.get_hypothesis()) critic2.set_hypothesis(player2.get_hypothesis()) history = board.get_history() player1.update_hypo(history, critic1.get_training(history)) player2.update_hypo(history, critic2.get_training(history)) print("x won " + str(xwin) + " games.") print("o won " + str(owin) + " games.") print(str(draw) + " of the games were draws") while True: board = Board() player1.set_board(board) player2.set_board(board) while not board.isdone(): player1.choose_move() 23

24 if board.isdone(): break board.print_board() while True: x = int(input("enter row (0-2): ")) y = int(input("enter y-coordinate (0-2): ")) if board.get_square(x, y) == 0: board.set_coordinate(x, y, 2) break else: print("that square is not empty") winner = board.get_winner() if winner == 1: print("x wins") elif winner == 2: print("o wins") elif winner == 0: print("it's a draw!") critic1.set_hypothesis(player1.get_hypothesis()) critic2.set_hypothesis(player2.get_hypothesis()) history = board.get_history() player1.update_hypo(history, critic1.get_training(history)) player2.update_hypo(history, critic2.get_training(history)) 24

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for Inför provet Provet skrivs för hand och är uppdelad i två delar. Den första delen är på E-nivå och den andra delen är på C- och A-nivå. För att det ska bli enklare för er att träna inför provet så har

Läs mer

Genetisk programmering i Othello

Genetisk programmering i Othello LINKÖPINGS UNIVERSITET Första versionen Fördjupningsuppgift i kursen 729G11 2009-10-09 Genetisk programmering i Othello Kerstin Johansson kerjo104@student.liu.se Innehållsförteckning 1. Inledning... 1

Läs mer

Fyra i rad Javaprojekt inom TDDC32

Fyra i rad Javaprojekt inom TDDC32 Fyra i rad Javaprojekt inom TDDC32 Analys och design-dokument Version 2.0 Datum 2008-05-19 Dokumentnummer 20080303 Sammanfattning Detta är analys och design-dokumentet för programmet Fyra i rad. Fyra i

Läs mer

Artificiell intelligens En agent som spelar Black Jack Andreas Perjons [andpe813]

Artificiell intelligens En agent som spelar Black Jack Andreas Perjons [andpe813] 1 Artificiell intelligens En agent som spelar Black Jack Andreas Perjons [andpe813] Linköpings Universitet 2019 2 Innehåll Introduktion...3 Metod..4 Programmets komponenter.4 Resultat...5 Diskussion...7

Läs mer

MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004

MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004 MinMax Algoritmen Implementation och optimering Joakim Östlund 15 juni 2004 1 Samanfattning MinMax är en algoritm som kan användas i turbaserade spel för att skapa en virituell motståndare. Algoritmen

Läs mer

Kan ett datorprogram spela solitär?

Kan ett datorprogram spela solitär? Kan ett datorprogram spela solitär? Malin Persson malpe323@student.liu.se 1 Sammanfattning Solitär är ett gammalt och välkänt brädspel med enkla regler och är därför ett tacksamt spel att försöka lösa

Läs mer

Lektion 2: Sökagenter. Robin Keskisärkkä

Lektion 2: Sökagenter. Robin Keskisärkkä Lektion 2: Sökagenter Robin Keskisärkkä Lektionens innehåll Introduktion till laboration 2 Implementation av en sökalgoritm Livekodning Konfrontera ett liknande problem själva Extra: Heuristisk sökning

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer Kravspecifikation Fyra i rad Javaprojekt inom TDDC32 Version 2.0 Datum 2008-05-19 Dokumentnummer 20080215 Sammanfattning Detta är en kravspecifikation över det klassiska spelet Fyra-i-rad programmerat

Läs mer

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer. Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera

Läs mer

Q-learning för fyra i rad. OLLE HASSEL och PETTER JANSE

Q-learning för fyra i rad. OLLE HASSEL och PETTER JANSE Q-learning för fyra i rad OLLE HASSEL och PETTER JANSE Examensarbete Stockholm, Sverige 2011 Q-learning för fyra i rad OLLE HASSEL och PETTER JANSE Examensarbete i datalogi om 15 högskolepoäng vid Programmet

Läs mer

Uppgifter teknik HT17 (uppdaterad v. 40)

Uppgifter teknik HT17 (uppdaterad v. 40) Uppgifter teknik HT17 (uppdaterad v. 40) Uppgifterna bedöms inte, de är bara till för att öva. Samarbeta gärna med andra! Du behöver inte skriva ner svaren, men se till att du förstår lösningarna! 1. Det

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel 732G11 Linköpings universitet 2011-02-15 1 2 3 4 Extrapass Extrapass håller på att bokas. Blir 3-4 st. och öppet för alla. Mer info på kursmailen när bokningen är klar. i Java En funktion i Java... public

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer funktioner betyder att instruera en dator Ett program

Läs mer

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det? Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316

Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C Datatyp Aritmetiska operatorer Omvandling av typer Reserverade ord Mikael Djurfeldt Logiska operatorer

Läs mer

DEL 2 - Praktiska programmeringsuppgifter

DEL 2 - Praktiska programmeringsuppgifter LUNDS TEKNISKA HÖGSKOLA Datavetenskap Nätverksprogrammering 2004 EDA095 FED Tentamensskrivning Nätverksprogrammering 2004-05-25, kl 8-13 DEL 2 - Praktiska programmeringsuppgifter Anvisningar Tillåtna hjälpmedel

Läs mer

Grundläggande datalogi - Övning 2

Grundläggande datalogi - Övning 2 Grundläggande datalogi - Övning 2 Björn Terelius November 7, 2008 Klasser skapas med nyckelordet class Klasser Konstruktorer och destruktorer Undantagshantering class MyClass: Docstring and doctests for

Läs mer

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Programmering I Tobias Wrigstad fredag, 2009 augusti 28 Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,

Läs mer

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program. Moduler Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program. Vi har också ofta behov av att skapa överblick i våra program. Som ett

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är

Läs mer

Tentamen i Introduktion till programmering

Tentamen i Introduktion till programmering Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:

Läs mer

Självlärande Hare and Hounds-spelare med Q-learning. HARALD HARTWIG och MAX WESTERMARK

Självlärande Hare and Hounds-spelare med Q-learning. HARALD HARTWIG och MAX WESTERMARK Självlärande Hare and Hounds-spelare med Q-learning HARALD HARTWIG och MAX WESTERMARK Examensarbete Stockholm, Sverige 2011 Självlärande Hare and Hounds-spelare med Q-learning HARALD HARTWIG och MAX WESTERMARK

Läs mer

allt.cl Page 1 of 17 Date: torsdag 7 december 2006

allt.cl Page 1 of 17 Date: torsdag 7 december 2006 allt.cl Page 1 of 17 Slumpspelaren Väljer slumpvis en flytt ur möjliga flyttar. (defun skapa-slump-spelare (namn bricktyp) "lisp-sträng x bricka -> spelare" (skapa-spelare #'slump-gör-flytt namn bricktyp))

Läs mer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt

Läs mer

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer. Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera

Läs mer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn. Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0

Läs mer

729G04 Programmering och diskret matematik. Föreläsning 7

729G04 Programmering och diskret matematik. Föreläsning 7 729G04 Programmering och diskret matematik Föreläsning 7 Föreläsningsöversikt Information Interaktion via text Läsa från fil Skriva till fil Spara och läsa abstrakta datatyper från fil Information Felaktigt

Läs mer

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer 729G04 Programmering och diskret matematik Python 2: Villkorssatser, sanningsvärden och logiska operatorer Föreläsningsöversikt Vad händer när vi kör vår pythonkod? Programmerare Villkorssatser Jämförelser

Läs mer

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D. Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D. tobias@dsv.su.se Notera att exemplen är i Python 2.5 För att översätta till Python 3.0, gör följande ändringar print(x,y) istället för print x,y input("ett

Läs mer

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

HI1024 Programmering, grundkurs TEN2 2014-03-13

HI1024 Programmering, grundkurs TEN2 2014-03-13 HI1024 Programmering, grundkurs TEN2 2014-03-13 KTH STH Haninge 13.15-18.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King

Läs mer

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,

Läs mer

Nätverksprogrammering, EDA095

Nätverksprogrammering, EDA095 Nätverksprogrammering, EDA095 Projekt: Chess game, 2013-05-21 Handledare: Roger Henriksson Axel Hildingsson, a.hildingson@gmail.com Hoang Huyuh Truong, artiq90@yahoo.se Lisa Lindberg, rys07lli@student.lu.se

Läs mer

Selektion och iteration

Selektion och iteration Selektion och iteration TDDD73 Funktionell och imperativ programmering i Python Föreläsning 6 Peter Dalenius Institutionen för datavetenskap 2014-09-15 Översikt Hur utformar man villkor för framför allt

Läs mer

Chapter 4: Writing Classes/ Att skriva egna klasser.

Chapter 4: Writing Classes/ Att skriva egna klasser. Chapter 4: Writing Classes/ Att skriva egna klasser. I dessa uppgifter kommer du att lära dig om hur man definierar egna objekt genom att skriva klasser. Detta är grunden för att förstå objekt orienterad

Läs mer

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen Föreläsning 2 Programmeringsteknik och Matlab DD1312 Introduktion till python Variabler, datatyper, omvandling av typer sfunktioner Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande

Läs mer

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)

Läs mer

Kort Sammanfattning av Schack MAS

Kort Sammanfattning av Schack MAS Kort Sammanfattning av Schack MAS Krister Ljung kljung@kth.se 6th April 2003 1 Bamse 1.1 Agenter 1.1.1 Bamse Bestämmer vilket drag som skall skickas till spelplanen. Har även nio öppningar att spela dom

Läs mer

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två Binära träd Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två gånger, talar man om binära träd. Sådana

Läs mer

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

Grundläggande datalogi - Övning 3

Grundläggande datalogi - Övning 3 Grundläggande datalogi - Övning 3 Björn Terelius November 14, 2008 Utskrift av stackar Tornen i Hanoi Principerna för rekursion: Hitta ett enkelt basfall (som har en känd lösning). Reducera varje annat

Läs mer

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS Namn Stil Dokumentation Objekt-orienterad programmering Dept. of Computer Science Umeå University jem@cs.umu.se OBS OBS OBS OBS OBS OBS OBS OBS Detta är inget gnäll på någon speciell utan jag ser detta

Läs mer

Övning 1 - Abstrakta datatyper

Övning 1 - Abstrakta datatyper /home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20121 0 # coding : latin Övning 1 - Abstrakta datatyper 18 Summering Vi gick igenom betydelsen av abstrakta datatyper/datastrukturer.

Läs mer

Projektdokumentation för Othello

Projektdokumentation för Othello Projektdokumentation för Gustav Fransson Nyvell gusfr229@student.liu.se Tomas Franzén tomfr819@student.liu.se 1. Inledning Vi har gjort ett -spel som går ut på att man turas om att lägga brickor på en

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

HexaFlip. Kravspecifikation

HexaFlip. Kravspecifikation HexaFlip Kravspecifikation Dokumentversion 1.0 Martin Larsson marla316@student.liu.se Carl Lindwall carli914@student.liu.se Senast modifierad 2009 02 17 Sammanfattning Detta dokument skall ligga som grund

Läs mer

UPPGIFT 1 V75 FIGUR 1.

UPPGIFT 1 V75 FIGUR 1. UPPGIFT 1 V75 FIGUR 1. Varje lördag året om spelar tusentals svenskar på travspelet V75. Spelet går ut på att finna sju vinnande hästar i lika många lopp. Lopp 1: 5 7 Lopp 2: 1 3 5 7 8 11 Lopp 3: 2 9 Lopp

Läs mer

729G04 Programmering och diskret matematik. Python 3: Loopar

729G04 Programmering och diskret matematik. Python 3: Loopar 729G04 Programmering och diskret matematik Python 3: Loopar Översikt Labbar Punktnotation och strängmetoder Loopar Labb 3 Labbar? Punktnotation Punktnotation Ni har stött på punktnotation tidigare - kapitel

Läs mer

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1 Skolan för Datavetenskap och kommunikation DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 1 Kursinfo Python-intro: print variabler reserverade ord input kommentarer beräkningar datatyper if-satser

Läs mer

Lektion Kapitel Uppgift Lösning med programmering

Lektion Kapitel Uppgift Lösning med programmering 1 Print 1 Tal, Prioriteringsregler 3 Procent, Procentuella förändringar 2 Variabler Teckna och tolka uttryck Ekvationslösningens grunder 1236 Beräkna utan räknare. a) 6 + 4 3 b) 9 4 12 3 c) 7 (3 + 12)

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1 Skolan för Datavetenskap och kommunikation DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 1 Kursinfo Diagnostiskt prov Python-intro: print variabler reserverade ord input kommentarer beräkningar

Läs mer

Föreläsning 8 Innehåll

Föreläsning 8 Innehåll Föreläsning 8 Innehåll Orientering om samarbete om Eclipse-projekt med git Orientering om konstruktion av användargränssnitt i Android Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering

Läs mer

Grundläggande datalogi - Övning 1

Grundläggande datalogi - Övning 1 Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b

Läs mer

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo, 729G74 IT och programmering, grundkurs Tema 2, Föreläsning 2 Jody Foo, jody.foo@liu.se Föreläsningsöversikt Kursinfo: återkoppling Muddy Cards och kompletteringar Diskret matematik Python: Programmering

Läs mer

Programmering grundkurs

Programmering grundkurs Programmering grundkurs Föreläsning 11 Jody Foo, jody.foo@liu.se Föreläsningsöversikt Laboration 6 Abstraktion och OOP Klassdiagram med UML (Unified Modelling Language) Egna klasser som innehåller andra

Läs mer

Lös uppgiften med ett program, t.ex. print("jag kan ha köpt två bullar och en läsk och ska betala", 2 * , "kr.") T.ex. print(5 + 3 * 10) T.ex.

Lös uppgiften med ett program, t.ex. print(jag kan ha köpt två bullar och en läsk och ska betala, 2 * , kr.) T.ex. print(5 + 3 * 10) T.ex. 1 Print 3 Algebra Uttryck och prioriteringsreglerna 3 Algebra Uttryck och prioriteringsreglerna 3 Algebra Skriva och förenkla uttryck 1. Beskriv vad du kan ha köpt och beräkna värdet av uttrycket. a) 2

Läs mer

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar

Läs mer

denna del en poäng. 1. (Dugga 1.1) och v = (a) Beräkna u (2u 2u v) om u = . (1p) och som är parallell

denna del en poäng. 1. (Dugga 1.1) och v = (a) Beräkna u (2u 2u v) om u = . (1p) och som är parallell Kursen bedöms med betyg, 4, 5 eller underänd, där 5 är högsta betyg. För godänt betyg rävs minst 4 poäng från uppgifterna -7. Var och en av dessa sju uppgifter an ge maximalt poäng. För var och en av uppgifterna

Läs mer

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen Föreläsning 2 Programmeringsteknik och Matlab DD1312 Introduktion till python Variabler,datatyper, omvandling av typer sfunktioner Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande

Läs mer

Fyra-i-rad med förstärkt inlärning

Fyra-i-rad med förstärkt inlärning Fyra-i-rad med förstärkt inlärning En implementation av Q-learning CHRISTOFFER JANSON och CARL LANDEFJORD Examensarbete Stockholm, Sverige 2011 Fyra-i-rad med förstärkt inlärning En implementation av Q-learning

Läs mer

AGA-regler. goforbundet.se/ Referens: AGA 1991

AGA-regler. goforbundet.se/ Referens: AGA 1991 AGA-regler Referens: AGA 1991 Varje formulering av dessa regler vars innehåll är identiskt, är godtagbar som ett uttryck för AGAs goregler, så länge de hänvisar till de mer kompletta regler som ges i AGAs

Läs mer

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00 1 ( 7) Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker/kompendier (ej anteckningar,

Läs mer

Game of 40. Regler och om sidan är in princip samma sak. Det som skiljer dem åt är att de inte har samma text.

Game of 40. Regler och om sidan är in princip samma sak. Det som skiljer dem åt är att de inte har samma text. Presentation av uppgiften Vi har fått i att skapa en webbapplikation med ett spelbart spel inbyt i sig. Eller som läraren formulerar sig: uppgiften är att skapa en webbapplikation där en eller flera spelare

Läs mer

PYTHON SNABBREPETITION MEN FÖRST LITE ALLMÄNT OM PROGRAMMERING 729G04 PYTHON 2. Dagens Python

PYTHON SNABBREPETITION MEN FÖRST LITE ALLMÄNT OM PROGRAMMERING 729G04 PYTHON 2. Dagens Python Dagens Python 729G04 PYTHON 2 Mer om funktioner Villkorssatser JODY FOO Department of Computer and Information Science (IDA) Linköping University, Sweden Linköpings universitet 1 2 MEN FÖRST LITE ALLMÄNT

Läs mer

Tentamen i Objektorienterad programmering E

Tentamen i Objektorienterad programmering E CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA546 Tentamen i Objektorienterad programmering E Måndagen 8 mars 2010, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 1040. Inga hjälpmedel. Lösningar till

Läs mer

DD1314 Programmeringsteknik

DD1314 Programmeringsteknik Skolan för Datavetenskap och kommunikation DD1314 Programmeringsteknik Föreläsning 1 o print o variabler o reserverade ord o input o kommentarer o beräkningar o datatyper o if-satser Kursinformation Programmering:

Läs mer

Låt eleverna lösa uppgifterna med huvudräkning och sedan jämföra med resultatet av ett program, t.ex. print(6 + 4 * 3)

Låt eleverna lösa uppgifterna med huvudräkning och sedan jämföra med resultatet av ett program, t.ex. print(6 + 4 * 3) 1 Print 1 Tal, Prioriteringsregler 3 Procent, Procentuella förändringar 2 Variabler Teckna och tolka uttryck Ekvationslösningens grunder 1236 Beräkna utan räknare. a) 6 + 4 3 b) 9 4 12 3 c) 7 (3 + 12)

Läs mer

Datalogi, grundkurs 1

Datalogi, grundkurs 1 Datalogi, grundkurs 1 Fiktiv Tentamen Lösningsförslag och kommentarer 1. Lösningsförslaget nedan förutsätter ingenting om filens innehåll och är alltså mer generell än nödvändigt: alfa= ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ

Läs mer

Självlärande Hare and Hounds spelare med Q-learning

Självlärande Hare and Hounds spelare med Q-learning Självlärande Hare and Hounds spelare med Q-learning Examensarbete inom datalogi - DD143X HARALD HARTWIG RINDÖGATAN 27, 11558 STOCKHOLM TEL.NR: 0737264340 MAX WESTERMARK

Läs mer

Föreläsning 13 och 14: Binära träd

Föreläsning 13 och 14: Binära träd Föreläsning 13 och 14: Binära träd o Binärträd och allmänna träd o Rekursiva tankar för binärträd o Binära sökträd Binärträd och allmänna träd Stack och kö är två viktiga datastrukturer man kan bygga av

Läs mer

Självlärande brädspelare. EMRE BERGE ERGENEKON och ANTON JONSSON

Självlärande brädspelare. EMRE BERGE ERGENEKON och ANTON JONSSON Självlärande brädspelare EMRE BERGE ERGENEKON och ANTON JONSSON Examensarbete Stockholm, Sverige 2010 Självlärande brädspelare EMRE BERGE ERGENEKON och ANTON JONSSON Examensarbete i datalogi om 15 högskolepoäng

Läs mer

Laboration 2. Artificiell Intelligens, Ht 2004 2004-10-19 Lärare: Christina Olsén Handledare: Therese Edvall Daniel Ölvebrink

Laboration 2. Artificiell Intelligens, Ht 2004 2004-10-19 Lärare: Christina Olsén Handledare: Therese Edvall Daniel Ölvebrink Artificiell Intelligens, Ht 2004 2004-10-19 Lärare: Christina Olsén Handledare: Therese Edvall Daniel Ölvebrink Laboration 2 Laboranter: Johan Bystedt (dit02lbt) Alexander Pettersson (dit02apn) Stefan

Läs mer

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI NG STRESS LUNDS TEKNISKA HÖGSKOLA - 2013-05-22 Projektmedlemmar: Emil Apelgren adi10eap@student.lu.se Fredrik Helander gda10fhe@student.lu.se Jonathan Klingberg

Läs mer

JavaScript del 3 If, Operatorer och Confirm

JavaScript del 3 If, Operatorer och Confirm JavaScript del 3 If, Operatorer och Confirm Under förra uppgiften så kollade vi på hur användaren kan ge oss information via promt(), vi använde den informationen både för att skriva ut den och för att

Läs mer

Linköpings Universitet. ProjectBot. En bot för spelet Rocket League. Jesper Pettersson

Linköpings Universitet. ProjectBot. En bot för spelet Rocket League. Jesper Pettersson Linköpings Universitet ProjectBot En bot för spelet Rocket League Jesper Pettersson 2019-01-11 Innehållsförteckning 1. Introduktion... 3 1.2 Rocket League... 3 1.2.1 Spelplanen... 3 1.2.2 RLBot... 4 1.3

Läs mer

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00 1 ( 7) Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker/kompendier

Läs mer

Hexaflip. Analysis and Design Document. Version 2.0 α Last modified: Martin Larsson

Hexaflip. Analysis and Design Document. Version 2.0 α Last modified: Martin Larsson Hexaflip Analysis and Design Document Version 2.0 α Last modified: 2009 04 18 Martin Larsson marla316@student.liu.se Carl Lindwall carli914@student.liu.se Detta dokument beskriver hur programmeringsprojektet

Läs mer

Självlärande Othello-spelare

Självlärande Othello-spelare Självlärande Othello-spelare Kan en dator lära sig att spela Othello? KLAS BJÖRKQVIST och JOHAN WESTER Examensarbete Stockholm, Sverige 2010 Självlärande Othello-spelare Kan en dator lära sig att spela

Läs mer

Exempelprov. Matematik Del A, muntlig del. 1abc

Exempelprov. Matematik Del A, muntlig del. 1abc Exempelprov Matematik Del A, muntlig del 1abc 2 DEL A, EXEMPELPROV MATEMATIK 1ABC Innehållsförteckning 1. Instruktioner för att genomföra del A... 5 2. Uppgifter för del A... 6 Version 1 Sten, sax och

Läs mer

Problemlösning. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 10. Peter Dalenius Institutionen för datavetenskap 2014-10-14

Problemlösning. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 10. Peter Dalenius Institutionen för datavetenskap 2014-10-14 Problemlösning TDDD73 Funktionell och imperativ programmering i Python Föreläsning 10 Peter Dalenius Institutionen för datavetenskap 2014-10-14 Översikt Problemlösningsprocessen Algoritmer Två strategier:

Läs mer

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner

Läs mer

matematik Lektion Kapitel Uppgift Lösningg T.ex. print(9-2 * 2) a) b) c) d)

matematik Lektion Kapitel Uppgift Lösningg T.ex. print(9-2 * 2) a) b) c) d) 1 Print 2.6 Prioriteringsregler 1 Beräkna a) 9 2 2 b) 10 + 5 6 c) 5 6 10 d) 16 + 4 5 6 2.6 Prioriteringsregler 7 Stina köper 3 chokladbollar för 10 kr styck och 1 kopp te för 14 kr. a) Skriv ett uttryck

Läs mer

Ordlistor, filhantering och ut på webben. Linda Mannila 20.11.2007

Ordlistor, filhantering och ut på webben. Linda Mannila 20.11.2007 Ordlistor, filhantering och ut på webben Linda Mannila 20.11.2007 Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Samlingsdatatyp Listan Utskrift Indata Felhantering Funktioner och moduler

Läs mer

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER Från laboration 3 till 4 I laboration 3 har du implementerat klasser implementerat metoder i klasserna I laboration 4 kommer du att implementera

Läs mer

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat Cheat sheets Nedan finns referensblad för fyra olika programmeringsspråk, som kan bli aktuella att använda i matematikundervisning. MATLAB är en välkänd programvara för att göra matematiska beräkningar,

Läs mer

Gustav Johansson

Gustav Johansson LINKOPINGS UNIVERSITET, IDA Liv eller död agent Artificiell intelligens på liv eller död Gustav Johansson 2039-09-16 Innehållsförteckning Go - introduktion... 1 Liv eller död... 2 Liv eller död agent...

Läs mer

6 cm. 106 Beräkna a) 3 ( 4) b) ( 2) 5 c) 4 ( 2,5) d) ( 8) 1,5. T.ex. print(3 * -4) 13 Beräkna cirkelns a) diameter b) omkrets

6 cm. 106 Beräkna a) 3 ( 4) b) ( 2) 5 c) 4 ( 2,5) d) ( 8) 1,5. T.ex. print(3 * -4) 13 Beräkna cirkelns a) diameter b) omkrets 1 Print 1 Tal Multiplikation och division med negativa tal 106 Beräkna a) 3 ( 4) b) ( 2) 5 c) 4 ( 2,5) d) ( 8) 1,5 print(3 * -4) 2 Geometri Cirkelns omkrets 13 Beräkna cirkelns a) diameter b) omkrets 6

Läs mer

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4 Telefonboken Objektorienterad programmering Telefonboken igen, en bättre version Telefonboken, igen. Tvådimensionella fält. Exempel: femtonspelet. Modellklassen. Ett textbaserat program. Ett grafiskt program.

Läs mer

Övning 1. Abstrakta datatyper. 1. Stacken. class Stack: """A representation of a last-in-first-out (LIFO) stack of objects."""

Övning 1. Abstrakta datatyper. 1. Stacken. class Stack: A representation of a last-in-first-out (LIFO) stack of objects. Per Sedholm DD1320 (tilda11) 2011-09-02 Övning 1 Abstrakta datatyper 1. Stacken -*- coding: utf-8 -*- """Classroom exercise 1, example 1.""" class Stack: """A representation of a last-in-first-out (LIFO)

Läs mer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok,

Läs mer

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner Introduktion till programmering Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner med

Läs mer

Beskrivning av Gesällprov. Fia Med Knuff. Mikael Rydmark.

Beskrivning av Gesällprov. Fia Med Knuff. Mikael Rydmark. Beskrivning av Gesällprov Fia Med Knuff Mikael Rydmark rydmark@kth.se Mikael Rydmark 1(11) 10-05-05 Innehållsförteckning Inledning...3 Nytt spel...4 Regler... 6 Om Spelet... 7 Brädet... 7 Tärningen...8

Läs mer

Föreläsning 4: Kombinatorisk sökning

Föreläsning 4: Kombinatorisk sökning DD2458, Problemlösning och programmering under press Föreläsning 4: Kombinatorisk sökning Datum: 2009-09-25 Skribent(er): Kristina Nylander, Dennis Ekblom, Marcus Öman Föreläsare: Fredrik Niemelä 1 Introduktion

Läs mer

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 2 Hur man spelar 6 3 Spelets regler, strategi och tips 7 3.1 Spelets grunder.......................................

Läs mer