Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 5.

Slides:



Advertisements
Verwante presentaties

Advertisements



Algoritmen en Datastructuren

Avchd converteren met edius 5 door Mario Somers Converteren met Edius 5 naar AVCHD.
Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
door: Roderick Juffermans
Algoritmen en Datastructuren (ALDAT)
OOS Object geOrienteerd Software-ontwerp - 3
Prestige Als de Venetiëkaart wordt getrokken en op het einde van het spel zijn de punten voor de meeste Prestige: 6 / 3 / 1 Ducati Nadat de Venetiëkaart.
EVMINX4 Week 3 Algoritmen en Datastructuren (ALDAT)
Enumerate typedef struct union functiepointers 1.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
Greenfoot Workshop Bobby - Snake.
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
1 Tentamen 21 januari 2008 uitleg Algemene kennisvragen a)“Wat verstaan we onder de complexiteit van een algoritme?” –Cruciaal: wat gebeurt er met.

Regulatie van Cardiac Output
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 6.
Algoritmen en Datastructuren (ALDAT) EVMINX4 Dagdeel 2.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Troj heeft honger Deze stam is opgericht door ken honger en lordloser1995.
Opg.1a: substring } String substring(int a) { int t; for (t=a; t
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
Squash.
Algoritmiek Java GUIs, AWT en Swing API Overzicht te bestuderen stof, voorbeeldtentamen Hoorcollege 15 - Ma. 11 dec L.M. Bosveld-de Smet.
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Het ARM bord met wat library functies.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 5 - onderwerpen Errata.
Java Game Toolkit Jeroen Donkers. Doelstelling Class Game –Chess –Kalah –FourRow –Loa Class Player –Minimax –AlphaBeta –MTD(f) –OM Search –PrOM Search.
Les 3. Doelgroepen 1. 2 Richard Bartle defineerde vier gamer types - ♦ Achievers - ♠ Explorers - ♥ Socializers - ♣ Killers Wat voor gamer type ben jij?
Shortest path with negative arc-costs allowed. Dijkstra?
Eindwerk Kunstmatige intelligentie Door Nick, Tess, Dieter.
Marketing & Entrepreneurship Karen Sikkema Arjan Terpstra.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
Rule-based tic-tac-toe Andreas van Cranenburgh,
Wie schreef de Harry Potter boeken?
Eindige Strategische Spelen
Representatie & Zoeken
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Finite State Machine (Eindige.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 6 Cees Witteveen.
Beslissingen. Inhoud: Booleaanse expressies: wat? Booleaanse expressies: wat? Relationele en logische operatoren Relationele en logische operatoren De.
15m5 9m 14m5 Grote zaal Opp. 140 m 2 Kerkzaal Opp. 230 m 2 Stiltecentrum P
Allard Kamphuisen Hado van Hasselt Wilco Broeders
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
(de eenvoudige versie).   Teken een rechthoek voor het speelveld.  Maak 2 cirkels die je via de toetsen ASWD (voor speler 1) of de pijltjestoetsen.
FLIPPING THE MEETING TO FLIP OR NOT TO FLIP MrsMatthew/English Department Beroepsonderwijs aan Zee 1.
Dynamisch Programmeren III
Lokaal Sportdebat “Sportgemeente”
7.4 Kwadratische vergelijkingen Het rechterlid nul maken
Tinpro015b-les6 Templates.
Het 24 spel.
De Flexibele Club Competitie
KNOWING ME, KNOWING YOU Een unieke conferentie ijsbreker nodig? Dan is Knowing me, Knowing you hét ideale concept. Leer elkaar op een leuke manier beter.
ALFA - doorheen de jaren…
Zeeslag Bron: csunplugged.org / csunplugged.nl.
Praktijkgericht onderzoek
Nim, een strategisch spelletje
Vorm 2: S-Game (afwerken met nadruk op traptechniek)
Pythagobord.
Gameprogrammeren: Arrays
Vorm 1: 1v1 na coördinatie/snel voetenwerk
Transcript van de presentatie:

Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 5

Games  Spel met 2 spelers, die elk afwisselend aan de beurt zijn.  Boter Kaas en Eieren (Tic-Tac-Toe).  4 op een rij.  Zeeslag  Dammen, Schaken, Go, …  Hoe vind je de beste zet?  Bouw een game tree.  Pas het min-max algoritme toe.  Gebruik alfa-beta pruning om min-max sneller te maken.

Game tree X X X X OX O X O X O X X O X X O XX Zie Handouts

Game tree Backtracking algoritme met minimax strategie! Zie Handouts

TicTacToe::chooseMove int TicTacToe::chooseMove(Side s, int& bestRow, int& bestColumn) { Side opp(s==COMPUTER ? HUMAN : COMPUTER); int value(s==COMPUTER ? HUMAN_WIN : COMPUTER_WIN); int simpleEval(positionValue()); if (simpleEval!=UNCLEAR) return simpleEval; for (int r(0); r<board.numrows(); ++r) for (int c(0); c<board.numcols(); ++c) if (squareIsEmpty(r, c)) { place(r, c, s); int dc; int reply(chooseMove(opp, dc, dc)); place(r, c, EMPTY); if (s==COMPUTER && reply>value || s==HUMAN && reply<value) { value=reply; bestRow=r; bestColumn=c; } return value; }

Tic-Tac-Toe  aantal aanroepen chooseMove bij eerste zet (computer begint)  Maximaal: 1+9+9x8+9x8x x8x7x6x5x4x3x2x1 =  Stoppen als er een winnaar is =  Toepassen alpha-beta pruning =  Toepassen transposition table = 7954  Zoek identieke stellingen (draaien en spiegelen) = 5204

Alfa-Beta pruning  Zie p. 398 (Weiss). After H2A is evaluated, C2, which is the minimum of the H2’s, is at best a draw. Consequently, it cannot be an improvement over C1. We therefore do not need to evaluate H2B, H2C, and H2D, and can proceed directly to C3.

Minmax algoritme voorbeeld MAX MIN

Alfa-beta pruning voorbeeld <= >= <= >=4 <=4 >=4 MAX MIN

Alfa-beta pruning pair cComp(int p, int a, int b, int d); pair cHuman(int p, int a, int b, int d); pair cComp(int p, int a, int b, int d) { int bestPos(p); int value(positionValue(p)); if (value==UNCLEAR) { value=a; for (int i(1); i<3 && a<b; ++i) { pair r(cHuman(2*p+i, a, b, d+1)); if (r.first>a) { value=r.first; a=value; bestPos=2*p+i; } return make_pair(value, bestPos); } return pair = best value, best position. p=position a=alfa b=beta d=dept

Alfa-beta pruning pair cComp(int p, int a, int b, int d); pair cHuman(int p, int a, int b, int d); pair cHuman(int p, int a, int b, int d) { int bestPos(p); int value(positionValue(p)); if (value==UNCLEAR) { value=b; for (int i(1); i a; ++i) { pair r(cComp(2*p+i, a, b, d+1)); if (r.first<b) { value=r.first; b=value; bestPos=2*p+i; } return make_pair(value, bestPos); } return pair = best value, best position. p=position a=alfa b=beta d=dept

Alfa-beta pruning enum S {H, C}; pair cMove(S s, int p, int a, int b, int d) { int bestPos(p); int value(positionValue(p)); if (value==UNCLEAR) { value=(s==C)?a:b; for (int i(1); i<3 && a<b; ++i) { pair r( cMove((s==C)?H:C, 2*p+i, a, b, d+1) ); if (s==C&&r.first>a || s==H&&r.first<b) { value=r.first; if (s==C) a=value; else b=value; bestPos=2*p+i; } return make_pair(value, bestPos); } return pair = best value, best position. p=position a=alfa b=beta d=dept s=side H= Human C = Computer

Alpha-beta pruning int TicTacToe::chooseMove(Side s, int& bestRow, int& bestColumn, int alpha, int beta) { Side opp(s==COMPUTER ? HUMAN : COMPUTER); int value(s==COMPUTER ? alpha : beta); int simpleEval(positionValue()); if (simpleEval!=UNCLEAR) return simpleEval; for (int r(0); r<board.numrows(); ++r) for (int c(0); c<board.numcols(); ++c) if (squareIsEmpty(r, c)) { place(r, c, s); int dc; int reply(chooseMove(opp, dc, dc, alpha, beta)); place(r, c, EMPTY); if (s==COMPUTER && reply>value || s==HUMAN && reply<value) { value=reply; if (s==COMPUTER) alpha=value; else beta=value; bestRow=r; bestColumn=c; if (alpha>=beta) return value; } } return value; }

Transpostions  Zie p. 400 (Weiss). Two searches that arrive at identical positions.

Transpositions class Position { public: Position(const matrix & theBoard): board(theBoard) { } bool operator<(const Position& rhs) const; private: matrix board; }; bool Position::operator<(const Position & rhs) const { for (int i(0); i<board.numrows(); ++i) for (int j(0); j<board.numcols(); ++j) if (board[i][j]!=rhs.board[i][j]) return board[i][j]<rhs.board[i][j]; return false; } class TicTacToe { //... private: map transpositions; }; Position is een wrapper (inpakker) voor matrix board. Waarom is dit nodig?

Transpositions int TicTacToe::chooseMove(Side s, int& bestRow, int& bestColumn, int alpha, int beta, int depth) { Position thisPosition(board); if (depth>=3 && depth<=5) { MapItr itr(transpositions.find(thisPosition)); if (itr!=transpositions.end()) return (*itr).second; } // idem... int reply(chooseMove(opp, dc, dc, alpha, beta, depth+1)); // idem... if (alpha>=beta) goto Done; } Done: if (depth>=3 && depth<=5) transpositions[thisPosition]=value; return value; } Verklaar?