Nu lär vi oss tre i rad
|
|
- Siv Sandberg
- för 7 år sedan
- Visningar:
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
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 merGenetisk 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 merFyra 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 merArtificiell 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 merMinMax 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 merKan 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 merLektion 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 merFö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 merKravspecifikation. 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 merFö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 merQ-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 merUppgifter 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 mer732G 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 merFö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 merFö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 merFö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 merFö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 merDEL 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 merGrundlä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 merProgrammering 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 merGrundkurs 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 merPython. 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 merFö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 merTentamen 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 merSjä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 merallt.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 merTENTAMEN 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 merFö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 merNå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 mer729G04 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 mer729G04 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 merKodexempel 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 merTentamen 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 merSä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 merHI1024 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 merTENTAMEN 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 merNä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 merSelektion 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 merChapter 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 merFö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 merIntroduktion 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 merKort 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 merInom 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 merAlla 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 merGrundlä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 merNamn 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
/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 merProjektdokumentation 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 merPython. 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 merMMA132: 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 merHexaFlip. 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 merUPPGIFT 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 mer729G04 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 merDD1310/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 merLektion 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 merPython. 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 mer1/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 merFö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 merGrundlä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 mer729G74 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 merProgrammering 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 merLö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 merAvbildningar 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 merdenna 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 merFö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 merFyra-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 merAGA-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 merTenta (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 merGame 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 merPYTHON 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 merTentamen 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 merDD1314 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 merLå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 merDatalogi, 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 merSjä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 merFö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 merSjä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 merLaboration 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 merPROJEKTRAPPORT 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 merJavaScript 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 merLinkö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 merUppgifter 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 merHexaflip. 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 merSjä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 merExempelprov. 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 merProblemlö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 merIntroduktion 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 mermatematik 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 merOrdlistor, 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 merFö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 merPlatser 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 merGustav 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 mer6 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 merObjektorienterad 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."""
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 merInstruktioner - 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 merIntroduktion 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 merBeskrivning 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 merFö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 merHandbok 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