Artificiell intelligens En agent som spelar Black Jack Andreas Perjons [andpe813]
|
|
- Sandra Lundström
- för 4 år sedan
- Visningar:
Transkript
1 1 Artificiell intelligens En agent som spelar Black Jack Andreas Perjons [andpe813] Linköpings Universitet 2019
2 2 Innehåll Introduktion...3 Metod..4 Programmets komponenter.4 Resultat...5 Diskussion...7 Referenser...8 Appendix.9
3 Introduktion 3 Black Jack är ett kortspel som grundar sig på probabilitet. Det spelas mot en dealer (casinot) och går ut på att dra kort för att försöka komma så nära (men inte överskrida) 21 som möjligt. I normala fall börjar spelet med en insats från spelaren. Skulle spelare vinna får den tillbaka dubbla insatsen, men förlorar spelare behåller dealern insatsen. Dealern ger spelaren två kort, vars summa motsvarar spelarens poäng. Dealern ger även sig själv ett kort. Klädda kort är dock värda 10 och ess 11, eller 1 om poängen annars skulle överskrida 21. Spelaren får sedan välja om den vill dra ett till kort eller om den vill stanna på de kort som den redan har. Att dra kort kan upprepas så länge spelaren vill, eller tills att dess poäng överskridit 21. Spelaren kan även välja att dubbla, vilket betyder att den bara drar ett kort, men vinner dubbla insatsen om så skulle vara fallet. Om en spelare får två kort av samma valör (ej ess), kan spelaren även välja att splitta, vilket betyder att handen istället spelas som två separata händer. Om detta sker ger dealern de nya händerna varsitt kort till och spelaren får därefter välja att fortsätta dra eller stanna. När spelaren har valt att stanna så drar dealern kort tills att dess poäng blivit, eller överskridit 17. Beroende på lokala regler så kan dealern behöva fortsätta dra kort om dess hand innehåller ett ess (så kallad mjuk 17), att dealern behöver dra på en mjuk 17 minskar husets övertag med ungefär 0,2%. ( Blackjack, 2019, 12 april) Då Black Jack är ett relativt simpelt spel i termerna av vilka drag som kan göras betyder att det är mycket lätt att göra om dem till states som sedan kan användas för att automatisera spelandet. Black Jack spelas i en delvis observerbar miljö, där den information som finns tillgänglig är de kort spelaren har dragit, det kort dealern har dragit och i teorin de kort som finns kvar i leken. I detta Black Jack-spel så används åtta standard-kortlekar och det tordes orimligt att en människa hela tiden skulle kunna hålla koll på vilka kort som finns kvar att dra. En dator kan dock hålla reda på detta, vilket gör att datorn kan använda sig av något som kallas för en Monte Carlo-metod (Towards Data Science, 2018) för att bestämma hur många kort den ska dra och därmed möjliggöra ett automatiserat spelande. Grundtanken i en Monte Carlo-metod är att använda slumpad sampling ett stort antal gånger för att lösa ett i grunden deterministiskt problem ( Deterministic algorithm, 2019, 14 januari). Detta gör att istället för att få en exakt probabilitet så fås en approximering, där ju fler iterationer som körs gör att den approximerade probabiliteten närmar sig den faktiska probabiliteten. Monte Carlo-metoder hanterar slump väldigt bra, vilket gör att de lämpar sig väl att använda i denna situation, då den avgörande faktorn för vinst eller förlust är vilket kort som slumpmässigt dras.
4 Metod 4 För att genomföra detta projekt var det första som gjordes att programmera ett Black Jack spel från grunden, vilket gjordes i Python 3. Detta gjordes för att underlätta överblicken över variabler samt vetskapen om hur programmet fungerar. Värt att notera här är att det finns hundratals olika variationer av Black Jack ( Blackjack, 2019, 12 april) och de regler och bestämmelser som använts här följer den europeiska standarden i mesta möjliga mån. En kompromiss som dock fick göras var att ingen split-funktion implementerades. Detta berodde på att mängden arbete som skulle behöva läggas ner på att implementera detta inte är proportionerlig mot den inverkan som det skulle ha på programmet. Det intressanta är istället den beslutsprocess som genomförs då agenten ska välja hur många kort den vill dra, vilket kan genomföras utan en split-funktion. En annan förenkling som gjorts är att inget ekonomisystem är implementerat, vilket eliminerar val av insats. Istället så avgör bara programmet om spelaren eller dealern vann. Tillvägagångssättet för beslutsprocessen i detta program är som följande: när agenten fått sina två kort och dealern sitt är det upp till agenten att bestämma om den vill dubbla, fortsätta att dra kort eller stanna. För att avgöra detta kopieras spelets nuvarande state (spelarens kort, dealerns kort, de kort som finns kvar att dra och det val som agenten gjort) och spelas i en simulering 100 gånger, med leken blandad för varje ny gång, där agenten provar att dra olika mängder kort. Detta ger då en approximering av hur många kort som ska dras för att ge den största vinstchansen i det faktiska spelet. Är antalet 0 så stannar agenten, 1 dubblar agenten och 2+ fortsätter agenten att dra kort. Detta kan sen köras i en for-loop för att bestämma hur många faktiska omgångar som ska spelas. I detta fall spelas 100 faktiska omgångar, där antalet vinster blir lika med den procentuella vinstchansen för algoritmen. Programmets komponenter Makedeck Det första som görs i programmet är att en kortlek (bestående av 6 standardkortlekar) genereras. Kortleken är en lista där varje element representerar ett kort och elementen i listan är en tupel som till exempel ser ut som följande: ('Club', 'A'). Kortleken blandas sedan med hjälp av numpy-funktionen np.random.shuffle (The SciPy community, 2019) för att slumpa ordningen. Drawcard
5 5 Detta är funktionen för att dra ett kort från kortleken och lägga till det till spelarens eller dealerns hand. Detta görs med den inbyggda pop-funktionen där det första elementet i kortleken tas bort och sedan läggs till i endera spelarens eller dealerns hand (som också är listor). Getscore Detta är funktionen för att beräkna en hands poäng. Funktionen tar in en hand (lista) som parameter och går igenom den elementvis med hjälp av en for-loop som summerar och slutligen returnerar poängen. Choicesequence I denna funktion så utförs handlingar beroende på om kort ska dras eller ej. Detta har blivit bestämt i funktionen gameinstance. Gameinstance Denna funktion tar en kopia (deepcopy) (Python Software Foundation, 2019) av spelets nuvarande state, testar att dra olika många kort och utvärderar resultatet för vilken den approximerade optimala mängden kort är att dra. Actionsdone När agenten är klar med sina val körs denna funktion, den lägger automatiskt till kort till dealerns hand via Drawcard tills att summan av dealerns hand blivit, eller överstiger 17. När detta är klart jämförs sedan spelarens hand med dealerns för att avgöra vem som vann. Resultat Programmets resultat värderas genom hur stor procent av spelen som vanns. Nedan följer några exempelkörningar av programmet. Värt att notera är att resultaten varierar rejält mellan körningarna (vinstprocent varierar mellan ungefär 35 59%), men att resultatet vid de flesta körningarna är större än om slumpmässiga val görs (vinstprocent varierar då mellan ungefär 20 35%).
6 6 Figur 1: Sammansättning av 5 separata körningar med slumpmässiga val. Figur 2: Sammansättning av 5 separata körningar med Monte Carlo-metod
7 Diskussion 7 Användning av Monte Carlo-metod för att automatisera Black Jack-spelande har visat sig vara ett effektivt tillvägagångssätt. Det var inte från början tänkt att agenten skulle ha en genomsnittligt positiv vinstprocent, utan istället hur nära en genomsnittlig positiv vinstprocent den kan komma med tanke på de förutsättningar som hafts. Även om agenten för det mesta har en vinstchans som ligger under 50% så påvisar den i alla fall att beslutsprocessen oftast är bättre än att göra slumpmässiga val. En bidragande faktor till den vinstchans som fåtts fram är att Black Jack i grunden är designat så att dealern (casinot) alltid har ett övertag. Detta gör att ju närmare antalet rundor som spelas är till oändligheten, ju närmare blir den approximerade vinstchansen den faktiska vinstchansen som då är under 50%. En ytterligare bidragande faktor till vinstchansen som fås är saknaden av split-funktionen i programmet, då möjligheten att splitta endast är till spelarens fördel. Nämnvärt är att agenten inte heller använder sig av någon allmän strategi när den fattar beslut (lookup-table för alla möjliga kombinationer av kort), vilket om använt som heuristik skulle kunna tänkas förbättra agentens vinstchans. Vad som skulle vara intressant att vidareutveckla i detta projekt är en split-funktion, vilket dock kräver att den grundläggande kodningen för hur spelarens hand (händer) hanteras skrivs om. Ett ekonomisystem skulle även kunna implementeras där agenten själv får bestämma insats, vilket då integrerar en ytterligare form av beslutsfattande. Något som skulle vara intressant att undersöka är hur väl agenten presterar i jämförelse med en människa som spelar. I detta fall så behöver inte agenten spela perfekt, utan bara så länge agenten presterar bättre än människan gör att det finns belägg för det som vi skulle kalla för artificiell intelligens.
8 Referenser 8 Blackjack (2019, 12 april) I Wikipedia. Hämtad från Determinsitic algorithm (2019, 14 januari) I Wikipedia. Hämtad från Python Software Foundation (2019). Shallow and deep copy operations. Hämtad från The SciPy community (2019). numpy.random.shuffle. Hämtad från Towards Data Science (2018). An Overview of Monte Carlo Methods. Hämtad från eb1694?fbclid=IwAR0SQxI9AvmXaTjL6bnKr1v06E_xAHZWmYpqNdFEsrKcYWj HmnuHw65gWsc
9 Appendix 9 Kod import numpy as np import os import copy from collections import Counter def choicesequence(deck, hand, dealerhand, choice): """Make an action. Parameters: deck (list) - List with the current cards in the deck. hand (list) - List of tuples representing the player's cards. dealerhand (list) - List of tuples representing the dealer's cards. choice (string) - Which choice of action that has been made. Returns: A list containing the player's hand and which choice of action that has been made. """ statedeck = copy.deepcopy(deck) statehand = copy.deepcopy(hand)
10 10 statedealerhand = copy.deepcopy(dealerhand) statechoice = copy.deepcopy(choice) state = [statedeck, statehand, statedealerhand, statechoice] action = gameinstance(state) if action == 'DD': drawcard(deck, hand, 1) choice = 'DD' return [hand, choice] elif action == 'DC': drawcard(deck, hand, 1) choice = 'DC' return [hand, choice] elif action == 'NA': choice = 'NA' return [hand, choice] def gameinstance(state): """Play 50 simulations of the current actual hand. Determine which action is most likely to result in a win. Parameters: state (list) - A copy of the current actual game (hands, deck, choice).
11 11 Returns: bestaction (string) - The best action to take in the current state. """ idrawcounter = Counter() for cards in range(0, 21 - getscore(copy.deepcopy(state[1]))): for games in range(0, 50): ideck = copy.deepcopy(state[0]) np.random.shuffle(ideck) iplayerhand = copy.deepcopy(state[1]) idealerhand = copy.deepcopy(state[2]) ichoice = copy.deepcopy(state[3]) if cards > 0: drawcard(ideck, iplayerhand, cards) ichoice) iresult = actionsdone(ideck, iplayerhand, idealerhand, if iresult == 'W': idrawcounter[cards] += 1 if not idrawcounter: bestaction = 'NA' elif int(idrawcounter.most_common(1)[0][0]) == 0: bestaction = 'NA' elif int(idrawcounter.most_common(1)[0][0]) == 1: bestaction = 'DD' else:
12 12 bestaction = 'DC' return bestaction def drawcard(deck, recipient, howmany): """Pop a card from deck to hand. Parameters: deck (list) - List with the current cards in the deck. recipient (list) - The hand that recieves the card. Returns: recipient (list) - The hand that recieved the card. """ for card in range(0, howmany): if len(deck) == 0: deck = makedeck() np.random.shuffle(deck) drawncard = deck.pop(0) recipient.append(drawncard) return recipient def getscore(hand): """Determine the current score of a hand. Parameters: hand (list) - The hand of which to determine the score.
13 13 Returns: score (integer) - The score of the hand. """ score = 0 aces = 0 for card in hand: if card[1] == 'J' or card[1] == 'Q' or card[1] == 'K': score += 10 elif card[1] == 'A': score += 11 aces += 1 else: score += card[1] if aces > 0 and score > 21: score -= 10 aces -= 1 return score def makedeck(): """Return a list representing six decks""" deck = [] for deckcounter in range(0, 6): for counter1to53 in range(1, 53):
14 14 if counter1to53 < 14: if counter1to53 == 1: deck.append(('spade', 'A')) elif counter1to53 == 11: deck.append(('spade', 'J')) elif counter1to53 == 12: deck.append(('spade', 'Q')) elif counter1to53 == 13: deck.append(('spade', 'K')) else: deck.append(('spade ', counter1to53)) elif counter1to53 > 13 and counter1to53 < 27: if counter1to53-13 == 1: deck.append(('heart', 'A')) elif counter1to53-13 == 11: deck.append(('heart', 'J')) elif counter1to53-13 == 12: deck.append(('heart', 'Q')) elif counter1to53-13 == 13: deck.append(('heart', 'K')) else: deck.append(('heart ', counter1to53-13)) elif counter1to53 > 26 and counter1to53 < 40: if counter1to53-26 == 1:
15 15 deck.append(('club', 'A')) elif counter1to53-26 == 11: deck.append(('club', 'J')) elif counter1to53-26 == 12: deck.append(('club', 'Q')) elif counter1to53-26 == 13: deck.append(('club', 'K')) else: deck.append(('club ', counter1to53-26)) else: if counter1to53-39 == 1: deck.append(('diamond', 'A')) elif counter1to53-39 == 11: deck.append(('diamond', 'J')) elif counter1to53-39 == 12: deck.append(('diamond', 'Q')) elif counter1to53-39 == 13: deck.append(('diamond', 'K')) else: deck.append(('diamond ', counter1to53-39)) return deck def actionsdone(deck, playerhand, dealerhand, choice):
16 16 """Dealer draws and the game ends. Parameters: deck (list) - List with the current cards in the deck. hand (list) - List of tuples representing the player's cards. dealerhand (list) - List of tuples representing the dealer's cards. choice (string) - Which choice of action that has been made. Returns - A character (W - win, L - loss, D - draw) to indicate who won. """ gameloss = False if getscore(playerhand) > 21: gameloss = True else: while getscore(dealerhand) < 17: drawcard(deck, dealerhand, 1) os.system('clear') print('your hand: ', playerhand, getscore(playerhand)) print('dealers hand: ', dealerhand, getscore(dealerhand)) if getscore(playerhand) > getscore(dealerhand) and getscore(playerhand) < 22 and not gameloss: return 'W' elif getscore(playerhand) == getscore(dealerhand) and getscore(playerhand) < 22 and not gameloss:
17 17 return 'D' elif getscore(dealerhand) > 21 and getscore(playerhand) < 22: return 'W' else: return 'L' def main(): deck = [] deck = makedeck() np.random.shuffle(deck) wins = 0 losses = 0 draws = 0 for games in range(0, 100): playerhand = [] dealerhand = [] cardsdrawn = 0 gameloss = False acesinhand = 0 choice = 'ST' os.system('clear') while choice!= 'NA': if len(playerhand) < 2:
18 18 drawcard(deck, playerhand, 2) if len(dealerhand) < 1: drawcard(deck, dealerhand, 1) choicetuple = choicesequence(deck, playerhand, dealerhand, choice) playerhand = choicetuple[0] choice = choicetuple[1] if getscore(playerhand) > 22 or choice == 'DD': break result = actionsdone(deck, playerhand, dealerhand, choice) if result == 'W': wins += 1 elif result == 'L': losses += 1 elif result == 'D': draws += 1 print('wins: ', wins, 'Losses: ', losses, 'Draws: ', draws) print('win percentage: ', (wins/(wins + losses + draws)) * 100, '%') if name == " main ": main()
Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på
DAT 060 Laboration 2 I Malmös kasino Institutionen för datavetenskap 17 juni 2002 Per tänkte dryga ut sitt magra studielån genom att jobba som labbassistent på sommarkursen. Tyvärr fanns det redan tillräckligt
Läs merGrundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 20
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 20 Förra gången: GUI: Sammanfattning Fler exempel: KryssEnkat och FotoAlbum Fönster med variabelt antal objekt Idag: Ett stort exempel:
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 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 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 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 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. 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 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 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 merKurslitteraturen. 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 merLaboration: Whitebox- och blackboxtesting
Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska
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 merNu lär vi oss tre i rad
Nu lär vi oss tre i rad Hanna Johansson HT 2016 729G43 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
Läs merKortspel. Ett spel - tusen upplevelser
Kortspel Ett spel - tusen upplevelser 1 Översikt över korten i kortleken 7 8 9 10 Knekt Överste Kung Ess 2 Prova olika spel Farmor / Mormor 3-5 7, 8, 9, 10, Knekt, Överste, Kung, Ess Reglerna för detta
Läs merAgenda. Objektorienterad programmering Föreläsning 13
Objektorienterad programmering Föreläsning 13 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webacademy.se Agenda Ett objektorienterat exempel Repetition Mer om arv Abstrakta klasser Abstrakta metoder
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 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 merIntroduktion till programmering SMD180. Föreläsning 9: Tupler
Introduktion till programmering Föreläsning 9: Tupler 1 1 Sammansatta datatyper Strängar Sekvenser av tecken Icke muterbara Syntax: "abcde" Listor Sekvenser av vad som helst Muterbara Syntax: [1, 2, 3]
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 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 merHI1024 Programmering, grundkurs TEN
HI1024 Programmering, grundkurs TEN2 2014-10-27 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 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 merAbstrakta datatyper Laboration 2 GruDat, DD1344
Abstrakta datatyper Laboration 2 GruDat, DD1344 Örjan Ekeberg (fritt från en idé av Henrik Eriksson) 27 oktober 2008 Målsättning Målet med denna laboration är att ge en inblick i hur man kan använda abstrakta
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 merRepetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python
Repetition i Python 3 Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i Python
Läs merSpråket Python - Del 1 Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR
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 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 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 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 merPythons standardbibliotek
Pythons standardbibliotek Python 3 skall, enligt standarddokumenten http://docs.python.org/py3k/library/index.html ha stöd för vissa funktioner, typer och datastrukturer Så länge man håller sig till detta
Läs merErfarenheter från labben
Erfarenheter från labben Bra Jobbat! Lite ont om plats... Parprogrammering? Skillnad mellan program och funktion! Skillnad mellan uttryck och kommando! Välj bra variabelnamn! Vad göra om det blir fel?
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 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 merAtt skriva till och läsa från terminalfönstret
Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen
Läs merAnvända Python Laboration 1 GruDat, DD1344
Använda Python Laboration 1 GruDat, DD1344 Örjan Ekeberg 14 oktober 2008 Målsättning Målet med denna laboration är att du ska prova på att använda Python, framförallt interativt. Du ska också lära dig
Läs merInstruktion för laboration 1
STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. för matematisk statistik MD, ANL, TB (rev. JM, OE) SANNOLIKHETSTEORI I Instruktion för laboration 1 De skriftliga laborationsrapporterna skall vara
Läs merC++ Slumptalsfunktioner + switch-satsen
C++ Slumptalsfunktioner + switch-satsen Veckans avsnitt består av ett antal lite udda funktioner man kan ha nytta av när man skriver program. Det är en slumptalsgenerator och lite annat smått och gott.
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 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 merInstruktion för laboration 1
STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. för matematisk statistik ANL/TB SANNOLIKHETSTEORI I, HT07. Instruktion för laboration 1 De skrifliga laborationsrapporterna skall vara skrivna så att
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 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 merPlanering av ett större program, del 2 - for och listor. Linda Mannila
Planering av ett större program, del 2 - for och listor Linda Mannila 9.10.2007 Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Utskrift Indata Felhantering Funktioner och moduler (grunder)
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 merHur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap
Hur man programmerar TDDC66 Datorsystem och programmering Föreläsning 3 Peter Dalenius Institutionen för datavetenskap 2014-09-05 Översikt Problemlösning: Hur ska man tänka? Datatyper Listor (forsätter
Läs merIntroduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser
Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och
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 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 merDet finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2012-06-04 Skrivtid: 1400-1700 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till
Läs merMATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...
Allt du behöver veta om MATLAB: Industristandard för numeriska beräkningar och simulationer. Används som ett steg i utvecklingen (rapid prototyping) Har ett syntax Ett teleskopord för «matrix laboratory»
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 merJAVAUTVECKLING LEKTION 4
JAVAUTVECKLING LEKTION 4 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Iterationer (loopar) Algoritmer Mer om felsökning 1 WHILE-SATSEN String s = JOptionPane.showInputDialog("Talet
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 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 merGrundläggande datalogi - Övning 4
Grundläggande datalogi - Övning 4 Björn Terelius November 21, 2008 Definitioner Olika mått på komplexitet Definition En funktion f sägs vara O(g) om det existerar konstanter c, N så att f (n) < cg(n) för
Läs merObjektorienterad Programkonstruktion. Föreläsning jan 2016
Objektorienterad Programkonstruktion Föreläsning 13 19 jan 2016 Tentamen Del I, E del Flervalsfrågor 20/25 krävs för godkänt, ger betyg E Upp till 7 möjliga bonuspoäng Del II, Högrebetygsdel Problemfrågor
Läs merFöreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
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 merGrundläggande Datalogi
s delar Grundläggande Datalogi s delar s delar s delar Dataabstraktion Rekursion Algoritmanalys s delar Sortering Trädstrukturer Grafalgoritmer Optimering Stavning Strängmatchning Datakompression Versionshantering
Läs mer//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.
/*==================================================================== Detta program hör ihop med dokumentet EXEMPEL_AVERAGE_POINTS.PDF där det finns förklaringar. ======================================================================*/
Läs merTenta i Grundläggande programmering DD klockan
Tenta i Grundläggande programmering DD1331 2017-10-20 klockan 14.00 16.00 Marcus Dicander, KTH CST Tillåtna hjälpmedel: En Pythonbok, skrivmaterial, mat, medicin och vattenflaska. Otillåtna hjälpmedel:
Läs merFöreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad
1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen
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 merObjektorientering i liten skala
Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2012-10-24 Objektorientering i liten skala Mål I denna lab skall du skriva ett objektorienterat program. Programmet skall delas
Läs merSpelregler för restaurangkasinospel
Spelregler för restaurangkasinospel Innehållsförteckning Allmänt... 2 Dessa spelregler gäller för samtliga restaurangkasinospel... 2 Black Jack... 3 Black Jack Burn... 5 Varianten Two Decks Black Jack...
Läs merIntroduktion till programmering SMD180. Föreläsning 8: Listor
Introduktion till programmering Föreläsning 8: Listor 1 1 Listor = generaliserade strängar Strängar = sekvenser av tecken Listor = sekvenser av vad som helst Exempel: [10, 20, 30, 40] # en lista av heltal
Läs mer732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning
Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (
Läs merDet finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2015-03-19 Skrivtid: 14:00 19:00 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Läs merArrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB
Arrayer (vektorer) Murach s: kap 8 2013-01-15 1 Elektronikcentrum i Svängsta AB Arrayer Arrayer (vektorer) Ofta i ett program har vi flera variabler av samma datatyp som är relaterade till varandra. Exempel
Läs merDatalogi för E Övning 3
Datalogi för E Övning 3 Mikael Huss hussm@nada.kth.se AlbaNova, Roslagstullsbacken 35 08-790 62 26 Kurshemsida: http://www.csc.kth.se/utbildning/kth/kurser/2d1343/datae06 Dagens program Att skapa egna
Läs mer729G04 Programmering och diskret matematik
Tentamen 729G04, 2013-01-11 1(8) 729G04 Programmering och diskret matematik Tentamen 2013 01 11 kl 08.00 13.00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker Uppgifter:
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 merLite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet
Programmering hh.se/db2004 Föreläsning 4: Fält samt Input/Output Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Lite om reella tal Vad kan man göra med reella tal? Utöver de
Läs merTDDI16 Datastrukturer och algoritmer. Algoritmanalys
TDDI16 Datastrukturer och algoritmer Algoritmanalys 2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys 2017-08-28 3 Skäl till att
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 merRecap Mera om nya typer Kort Fält. Programmering. Sommarkurs 2007 www.hh.se/staff/vero/programmering. Verónica Gaspes. IDE-sektionen.
Programmering Sommarkurs 2007 www.hh.se/staff/vero/programmering Verónica Gaspes IDE-sektionen Juni 14 Utkast 1 Recap 2 Mera om nya typer 3 Kort 4 Fält Recap Man kan ge namn till typer. Vi undersökte enum
Läs merRelationer mellan objekt
Relationer mellan objekt Att utveckla en applikation När man utvecklar en applikation börjar man självklart inte direkt att programmera. Först måste man analysera problemet och utveckla en design för lösningen.
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 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 merGrundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 12 I torsdags: Klassen TelefonKostnad Exemplifierar objektorienterad design, metoder, konstruktorer static Standardklassen Math Matematiska
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 merVisual Basic, en snabbgenomgång
Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika
Läs merDIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga
203-03-9 203-03-9 DIAGNOSTISKT PROV Tid Klockan 09.00-2.00 Hjälpmedel Inga Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. Rättning Tentamen omfattar 6
Läs mersamma sätt. Spara varje uppgift som separat Excelfil. För att starta Excel med Resampling-pluginet, välj Resampling Stats for Excel i Start-menyn.
LABORATION 1: SANNOLIKHETER Lös Uppgift 1-8 nedan. Första uppgiften har ledning steg för steg, resterande uppgifter löser du på samma sätt. Spara varje uppgift som separat Excelfil. För att starta Excel
Läs merDigitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.
Analog Digitalitet Kontinuerlig Direkt proportionerlig mot källan Ex. sprittermometer Elektrisk signal som representerar ljud Diskret Digital Representation som siffror/symboler Ex. CD-skiva Varje siffra
Läs merSammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111
/home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111 0 # coding : latin Sammanfattning Gick igenom listor, dictionary, felhantering, strängjämförelser, split(), rstrip()
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 merUppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer
F6 Observera att när man utvecklar program så är inte alla lösningar på vägen korrekta. Speciellt den här gången så finns många OH med program som inte fungerar eftersom det är just det vi skall se på
Läs merTentamen i Grundläggande Programvaruutveckling, TDA548
Tentamen i Grundläggande Programvaruutveckling, Joachim von Hacht/Magnus Myreen Datum: 2017-08-14 Tid: 14.00-18.00 Hjälpmedel: Lexikon Engelskt-Valfritt språk. Betygsgränser: U: -23 3: 24-37 4: 38-47 5
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 merExempel på ett litet Ada-program
Exempel på ett litet Ada-program -- En kommentar som beskriver något. with Ada.Text_IO; procedure Mini is -- Deklarationer. K : constant Integer := 5; X, Y : Integer; -- Körbar kod. Ada.Text_IO.Put( Utskrift
Läs merProblemlösning och funktioner Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Problemlösningsstrategier Repetition av funktioner Mer om funktioner 2 Problemlösningsstrategier 3 PROBLEMLÖSNINGSSTRATEGIER Strategier Det finns ett flertal olika ansatser till
Läs mer729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,
729G74 IT och programmering, grundkurs Tema 3. Föreläsning 2 Jody Foo, jody.foo@liu.se Föreläsningsöversikt Repetition: syntax-quiz Fler for-loopar (över listor och dictionaries) range() Nästlade strukturer
Läs merFunktionell programmering DD1361
Funktionell programmering DD1361 Tupler Två eller fler (men ändligt) antal element. Elementen kan vara av olika typer. Ex: (1,2) :: (Integer, Integer) (( 2, hejsan ), True) ::? Tupel med två element ->
Läs merLösningsförslag till tentamen i EDA011, lördagen den 16 december 2006
Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006 Detta lösningsförslag är skrivet i stor hast, så det är möjligt att det innehåller en del slarvfel jag ber i så fall om ursäkt för
Läs merDD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011
DD1320 Tillämpad datalogi Lösning (skiss) till tenta 20 okt 2011 1 KMP P I P P I N i 1 2 3 4 5 6 Next[i] 0 1 0 2 1 3 2 Huffmankodning: Algoritmen 1. Sortera tecknen som ska kodas i stigande förekomstordning.
Läs merEn kort text om programmering i C.
En kort text om programmering i C C skapades 1972 av Brian Ritchie och Dennis Kerighan på Bell Labs i USA Det blev det språk som är mest använt genom tiderna Det finns många olika språk Pascal, FORTH,
Läs merFly me to the moon. Laboration om relationer, TDDC75 Diskreta strukturer. Mikael Asplund. 5 september 2017
Fly me to the moon Laboration om relationer, TDDC75 Diskreta strukturer Mikael Asplund 5 september 2017 1 Inledning Denna laboration i diskret matematik a r ta nkt att ge en inblick i hur programmering
Läs mer