Informatica les 6 Slimme (deel II: hoofdstuk 5) versus intelligente (deel III: hoofdstuk 9) algoritmen Jan Lemeire Informatica deel II & III februari mei 2015 1
Is er een machine die even slim of zelfs slimmer is als de mens!?
HAL Film 1968
Computer HAL
Vandaag 1. Puzzel 2. Backtracking 3. Scores 4. Spel: minimax 5. Non-zero sum games 6. Leren
Slimme algoritmen Hoofdstuk 5
Beslissingsalgoritme Doel bereiken Aantal acties ter beschikking Actiesequentie bedenken om doel te bereiken Jan Lemeire Pag. 7 / 77
p. 66 Indeling volgens oplossingsmethode Type 1: De oplossing kan berekend worden met een formule (analytisch). Type 2: Je kunt de oplossing gericht zoeken of construeren (rechttoe-rechtaan). Type 3: Je gaat alle mogelijke actiesequenties af om een oplossing te vinden. Type 4: Door slimme keuzes (heuristieken) te maken, kan je verschillende actiesequenties uitsluiten. Type 5: Je leert al doende welke de juiste keuzes zijn. Jan Lemeire Pag. 8 / 77
Type 1: analytisch 1. Je kan oplossing berekenen met formule Analytisch Voorbeeld: nulpunten van kwadratische vergelijking Jan Lemeire Pag. 9 / 77
Type 2: gerichte constructie Je kan oplossing gericht zoeken met quasi-zekerheid om te arriveren Voorbeelden: nulpunt van een functie zoeken met benaderingsalgoritme priemgetallen met zeef van Erathosteness Berekening grootst-gemene deler Jan Lemeire Pag. 10 / 77
p. 67 De schuifpuzzel? Staat van puzzel: posities van stukjes Mogelijke acties: LEFT, UP, RIGHT, DOWN Niet alle 4 steeds mogelijk Jan Lemeire Pag. 11 / 77
Type 3: Alle mogelijkheden afgaan Je weet niet in welke richting de oplossing ligt. Voor sommige problemen is men er vrijwel zeker van dat je alle mogelijkheden af moet lopen (NP-complete problemen, zie later) Je genereert alle mogelijke sequenties van akties en kijkt welke tot een oplossing of tot de beste oplossing leidt. het scannen van de volledige zoekruimte is nodig... Jan Lemeire Pag. 12 / 77
Zoekruimte = zoekboom Initial UP LEFT UP LEFT DOWN UP LEFT RIGHT LEFT DOWN... DOWN LEFT RIGHT Jan Lemeire Pag. 13 / 77
p. 68 Doorploeteren zoekboom = Brute-force search 2 mogelijkheden: depth-first : a-b-e-j-k-c-f-g-l-m-n-d-h-o-p-i-q = backtracking breadth-first: a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q Jan Lemeire Pag. 14 / 77
Sudoku met backtracking Niet in cursus http://en.wikipedia.org/wiki/backtracking Jan Lemeire Pag. 15 / 77
Niet in cursus Backtracking: code /** backtracking * toepassing: sudoku */ public static boolean backtracking (Node node){ List<Zet> zetten = node.volgendezetten(); } for(zet zet: zetten ){ node.doezet(zet); if (node.isoplossing()){ System.out.println("Oplossing gevonden: "+node+"!"); return true; } if (backtracking(node)) return true; // stop met verder zoeken node.ontdoezet(zet); // keer terug interface Node { boolean isoplossing(); List<Zet> volgendezetten(); void doezet(zet zet); void ontdoezet(zet zet); Node clone(); } interface Zet{ } return false; // geen children of geen enkele leidde naar oplossing } Jan Lemeire Pag. 16 / 77
/** backtracking waarbij het pad gegenereerd wordt en een maximale diepte ingesteld kan worden Niet in cursus * toepassing: schuifpuzzel van cursus **/ static int MAXIMALE_DIEPTE = 5; public static List<Zet> backtrackingmetpadenmaximalediepte (Node node, int diepte){ List<Zet> zetten = node.volgendezetten(); for(zet zet: zetten ){ node.doezet(zet); if (node.isoplossing()){ System.out.println("Oplossing gevonden: "+node+"!"); // pad wordt aangemaakt bij het terugkeren uit de recursie List<Zet> pad = new ArrayList<Zet>(); pad.add(zet); return pad; } if (diepte < MAXIMALE_DIEPTE){ List<Zet> pad = backtrackingmetpadenmaximalediepte(node, diepte+1); if (pad!= null){ pad.add(0, zet); // voeg vooraan toe return pad; // stop met verder zoeken } } node.ontdoezet(zet); // keer terug } return null; // geen children of geen enkele leidde naar oplossing Jan Lemeire Pag. 17 / 77 }
/** breadthfirst search op de zoekboom * toepassing: schuifpuzzel */ public static boolean breadthfirst (Node root){ FIFOQueue<Node> opennodes = new FIFOQueue<Node>(); opennodes.add(root); while(!opennodes.isempty()){ Node node = opennodes.get(); List<Zet> zetten = node.volgendezetten(); FIFO = first-in first-out Niet in cursus for(zet zet: zetten ){ Node child = node.clone(); //copy! child.doezet(zet); if (child.isoplossing()){ System.out.println("Oplossing gevonden: "+child+"!"); return true; } // beter nog zouden we hier moeten nagaan of de node al aanwezig is of al bezocht geweest is (lijst van bezochte nodes bijhouden - closed node list) opennodes.add(child); } } return false; // geen oplossing gevonden } Jan Lemeire Pag. 18 / 77
Conclusies Backtracking: zoekboom wordt niet in het geheugen gehouden De recursie houdt het pad bij Pad construeer je bij het terugkeren van de recursie Niet steeds snelste oplossing Breadth-first Je maakt boom aan Child moet zijn parent bijhouden (is nu niet in code) En eventueel een parent al zijn children Pad haal je uit de boom Jan Lemeire Pag. 19 / 77
Hoe generiek programmeren? niet te kennen, optioneel als vervangvraag
p. 74 Generieke implementatie Via abstractie is het algoritme algmeen bruikbaar Code + uitleg staat op website Niet te kennen interface Node { boolean isoplossing(); List<Zet> volgendezetten(); void doezet(zet zet); void ontdoezet(zet zet); Node clone(); } interface Zet{ } Jan Lemeire Pag. 21 / 77
Uitdaging: algemene oplossing onafhankelijk van het specifieke probleem dat je wenst op te lossen! Wat moet je weten om de boom aan te maken? Je moet de mogelijke acties kennen. Met de actie kom je in een nieuwe situatie, je bereikt een nieuwe toestand. Je wilt ook weten of je de gevraagde eindsituatie bereikt hebt. Allemaal operaties op de toestand Jan Lemeire Pag. 22 / 77
Document op website Probleemspecifieke code Link tussen algoritme en probleem gegeven door interface
Slimme algoritmen vervolg
Domme rekenkracht Brute force: puur rekenen Niet echt intelligent Echter: zoekruimte wordt snel te groot! 10 stappen > 2 10 1000 mogelijke sequenties 6x6 puzzel > 100 stappen > 2 100 10 30 mogelijke sequenties Kunnen we gerichter zoeken? Jan Lemeire Pag. 25 / 77
Oplossingsmethoden p. 66 Type 1: De oplossing kan berekend worden met een formule (analytisch). Type 2: Je kunt de oplossing gericht zoeken of construeren (rechttoe-rechtaan). Type 3: Je gaat alle mogelijke actiesequenties af om een oplossing te vinden. Type 4: Door slimme keuzes (heuristieken) te maken, kan je verschillende actiesequenties uitsluiten. Type 5: Je leert al doende welke de juiste keuzes zijn. Jan Lemeire Pag. 26 / 77
Gericht zoeken: greedy search p. 69 Kies actie die oplossing korter bij brengt Gebaseerd op een score Puzzel: Manhattan-afstand van stukje tot eindpositie Sommeren over alle stukjes Jan Lemeire Pag. 27 / 77
OK
stukje 2 & 3 verwisselen in beginpositie NOK in de toekomst kijken noodzakelijk
p. 70 Score-optimalisatie Iteratief tot oplossing: Zoekboom uitwerken tot een zekere diepte (horizon), vervolgens hoogste score selecteren Jan Lemeire Pag. 30 / 77
Score-optimalisatie Boom van 4 diep: 3 RIGHT LEFT UP 4 4 4 UP UP LEFT RIGHT 5 3 3 5 LEFT UP RIGHT UP DOWN UP DOWN UP 6 6 4 2 4 4 6 6 LEFT UP LEFT RIGHT UP RIGHT RIGHT RIGHT LEFT LEFT 5 DOWN 7 7 5 DOWN 5 3 5 5 7 7 7 5 Jan Lemeire Pag. 31 / 77
Score-optimalisatie stap 2 Boom uitwerken vanaf Met diepte 4 komen we er niet NOK Wat is noodzakelijke horizon om oplossing te bereiken? Jan Lemeire Pag. 32 / 77
Niet in cursus Best-first search http://en.wikipedia.org/wiki/best-first_search Net als bij breadth-first houden we een lijst bij van open nodes, maar nu een priorityqueue (en niet een FIFOqueue) waarbij de elementen gesorteerd worden naargelang hun score Iteratief worden Jan Lemeire Pag. 33 / 77
Niet in cursus Best-first search: voorbeeld Robot moet weg vinden (rood -> groen) g-score = afstand vanaf start h-score = afstand tot doel Laagste scores worden eerst bekeken http://en.wikipedia.org/wiki/a*_search_algorithm Jan Lemeire Pag. 34 / 77
Score in zoekruimte Probleem: terechtkomen in lokaal maximum Jan Lemeire Pag. 35 / 77
p. 72 Fitness landscape Biologische evolutie van soorten Fitheid: bepaald door zijn aangepastheid aan de omgeving Natuurlijke selectie Verandering bouw en het gedrag door genetische mutaties Evolutie van soorten Klimmen en sprongen door het fitness landscape elke stabiele soort op een bergtopje zit Evolutie nabootsen: genetisch algoritme Jan Lemeire Pag. 36 / 77
p. 73 Verdere verbeteringen puzzelalgoritme a) Leren (type 5): zie later b) puzzel rij-per-rij afwerken. Behalve de laatste twee rijen, die tegelijkertijd aanpakken Beperkte horizon OK c) Regels opstellen Type 1 probleem Jan Lemeire Pag. 39 / 77
Android = java Project als app High scores Projectidee
Spel
p. 74 Spel Je speelt tegen een tegenstander, hebt een aantal acties ter beschikking, speelt om beurten en er is een einddoel of eindscore bepaald. Of varianten hierop. Zero-sum game: iemand wint andere verliest Jan Lemeire Pag. 42 / 77
OXO: uitrekenbaar X begint 255.168 possible games Zonder symmetrieen: 26.830 Winst voor X: 131.184 Winst voor O: 77.904 Gelijkspel: 46.080 Jan Lemeire Pag. 43 / 77
Schaken Evaluatiefunctie (score) 1. Waarde van de stukken 2. Positie van de koning 3. Controle over het middenveld (de 4 middelste vakjes) 4. Positie van de pionnen Bijvoorbeeld, of ze aaneensluitend gepositioneerd zijn 5. Positie van de stukken bijvoorbeeld, hoeveel de bewegingsvrijheid van elk stuk Jan Lemeire Pag. 44 / 77
p. 67 Zoekboom met scores Wit & zwart spelen om beurten Score te maximaliseren door wit Wat moet wit doen: links of rechts? 4 White plays 5 6 Black plays 3 4 5 6 White plays 8 7 5 6 7 6 8 9 Black plays 7 6 4 5 8 7 5 3 2 8 3 8 7 9 9 6 Jan Lemeire Pag. 45 / 77
Greedy search Wit kiest voor rechts, zwart voor links, wit voor links en zwart voor links Eindscore wit = 2 4 White plays 5 6 Black plays 3 4 5 6 White plays 8 7 5 6 7 6 8 9 Black plays 7 6 4 5 8 7 5 3 2 8 3 8 7 9 9 6 Jan Lemeire Pag. 46 / 77
Twee zetten vooruit denken Wit kiest nog steeds voor rechts, want zwart kiest dan voor links => score van 5. Als wit voor links koos zou zwart voor links kiezen => score van 3. 4 White plays 5 6 Black plays 3 4 5 6 White plays 8 7 5 6 7 6 8 9 Black plays 7 6 4 5 8 7 5 3 2 8 3 8 7 9 9 6 Jan Lemeire Pag. 47 / 77
p. 67 Minimax: wat doet zwart? Kiest zet die score minimaliseert White plays Enkel score van de laagste nodes is van belang!!! Black plays White plays Black plays MIN 7 6 4 5 8 7 5 3 2 8 3 8 7 9 9 6 Jan Lemeire Pag. 48 / 77
Minimax: wat doet wit? Kiest zet die score maximaliseert White plays Black plays White plays MAX Black plays MIN 6 7 6 4 7 3 2 3 7 6 4 5 8 7 5 3 2 8 3 8 7 9 9 6 Jan Lemeire Pag. 49 / 77
Minimax: zwart White plays Black plays MIN 6 White plays MAX 6 4 Black plays MIN 7 6 4 5 7 3 7 7 3 2 3 7 6 8 7 5 3 2 8 3 8 7 9 9 6 Jan Lemeire Pag. 50 / 77
Minimax: wit beslist Links geeft score 6 (met horizon van 4) 6 White plays MAX Black plays MIN White plays MAX Black plays MIN 6 7 6 6 4 4 5 6 7 8 7 7 3 5 3 2 2 8 3 3 3 8 3 7 7 9 7 6 9 6 Jan Lemeire Pag. 51 / 77
Snoeien van de boom Pruning Alfa-beta pruning: als tegenstander beschikt over een succesvolle actiesequentie => geen zin om dit deel verder te bekijken Voor sommige situaties dieper gaan Regels die hierover beslissen Jan Lemeire Pag. 52 / 77
Computer wint van Mens 1997: IBM s Deep Blue verslaat wereldkampioen Gary Kasparov Nadien enkele revanches van de mens, verschillende gelijke spelen, maar nu wordt geaccepteerd dat de computer sterker is Computerschaak Brute-force search: veel rekenen, weinig redeneren Evalueert 200 millioen posities per seconde Niet goed in strategisch denken Jan Lemeire Pag. 53 / 77
Is dit Artificiële Intelligentie? p. 130 Betwijfel het Jan Lemeire, An Alternative Approach for Playing Complex Games like Chess, Annual machine learning conference of Belgium and The Netherlands (BeneLearn 2008), Spa, Belgium 2008. zie mijn homepage Idee: opportuniteit (patronen) checken of einddoel gehaald kan worden enkel branches nagaan die relevant zijn? Gericht zoeken in boom mogelijk Jan Lemeire Pag. 54 / 77
Opportuniteit: vork Opportuniteit geslaagd Jan Lemeire Pag. 55 / 77
We bekijken enkel relevante zetten die invloed kunnen hebben (pruning) Opportuniteit: vork Opportuniteit teniet gedaan Jan Lemeire Pag. 56 / 77
Moeilijkheid: patronen We bekijken enkel relevante zetten die invloed kunnen hebben (pruning) Wat zijn de relevante zetten? Hoe herkennen we ze? Patronen definiëren/herkennen Jan Lemeire Pag. 57 / 77
Go Strategisch-tactisch bordspel waarbij mens nog steeds wint van computer Regel: als vijandelijke stukken zijn ingesloten Weg Hier: wit stukje op A plaatsen Jan Lemeire Pag. 58 / 77
Non-zero sum games
p. 78 Prisoner s dillema Henry & Dave beschuldigd van misdrijf Rechter roept hen apart bij zich en vraagt hen of de ander schuldig is Antwoord bepaalt straf: Henry zegt over Dave Dave zegt over Henry Jan Lemeire Pag. 60 / 77
Iterative Prisoner s dillema Samenwerken of bedriegen? Iteratief toepassen Op termijn speelt vertrouwen mee Cf vertrouwen op het internet om iets te kopen van een vreemde De basis van de speltheorie (game theory) in economie Er is een win-win situatie (samenwerking)! Jan Lemeire Pag. 61 / 77
Jan Lemeire Pag. 62 / 77
Loopgrachtenoorlog Resulteerde in bestanden tussen de soldaten van beide kanten Van akkoorden over eetpauzes tot afspraken over (ongevaarlijke) schietuurtjes om de officieren te plezieren (doen alsof er echt gevochten werd) Iterative prisoner s dilemma!! Je kan het bestand schenden en de ander bij verrassing aanvallen Maar op lange termijn heb je meer baat bij samenwerking De legerstaf moest maatregelen nemen om deze natuurlijke evolutie tegen te gaan Jan Lemeire Pag. 63 / 77
Iterative Prisoner s dillema Samenwerken of bedriegen? Wat is beste strategie? Toernooien worden gespeeld Elk duel bestaat uit 100 opeenvolgende beslissingen Winnaar: oog-om-oog, tand-om-tand Laatste zet tegenstander Volgende zet Samenwerking Verraad Verraad Samenwerking 0 1 1 0 Jan Lemeire Pag. 64 / 77
Leren
Oplossingsmethoden Type 1: De oplossing kan berekend worden met een formule (analytisch). Type 2: Je kunt de oplossing gericht zoeken of construeren (rechttoe-rechtaan). Type 3: Je gaat alle mogelijke actiesequenties af om een oplossing te vinden. Type 4: Door slimme keuzes (heuristieken) te maken, kan je verschillende actiesequenties uitsluiten. Type 5: Je leert al doende welke de juiste keuzes zijn. Jan Lemeire Pag. 66 / 77
De Standaard 26 februari 2015
p. 80 Leren: de theorie Te definiëren de mogelijke toestanden de mogelijke acties de beloning/straf Strategie Staat -> actie State space staat 1 staat 2 staat 3 staat 4 State space staat 1 staat 2 staat 3 staat 4 Action space actie 1 actie 2 actie 3 Action space actie 1 actie 2 actie 3 Jan Lemeire Pag. 68 / 77
Reinforcement learning Matrix van gewichten bijhouden Gewicht geeft effectiviteit van actie aan actie 1 actie 2 actie 3 staat 1 staat 2 staat 3 staat 4 4.1 3.8 6.7 12.3 1.2 15.6 8.7 10.2 0.2 2.3 8.7 1.7 Initieel: alle gewichten gelijk Exploratiefase: acties worden willekeurig gekozen Al is het goed om soms want het spel kan dynam op een bepaalde momen optimaal blijken te zijn Later: keuze ~ gewicht (P(actie) ~ gewicht) Exploitatiefase: actie met grootste gewicht kiezen Jan Lemeire Pag. 69 / 77
Reinforcement learning: update Als beloning/straf, de laatste acties belonen/afstraffen eventueel met forgetting factor : kleinere aanpassing voor oudere acties staat 2 actie 1 staat 3 actie 1 staat 1 actie 2 staat 1 actie 3 staat 4 +0.5 +1 +1.5 +2 Winst 10 Jan Lemeire Pag. 70 / 77
Iterative Prisoner s Dilemma Reinforcement learning Gebaseerd op n laatste zetten N=2: 16 mogelijkheden Gewicht voor de volgende zet aanpassen als tegenstander het omgekeerde doet Leidt dit tot een goede strategie?? Laatste zetten S/S S/V S/S S/S S/S V/V S/S V/S Als tegenstander Verraad Samenwerking Volgende zet Samenwerking Verraad 4.1 3.8 12.3 1.2 8.7 10.2 2.3 8.7...... -5% +5% +5% -5% Jan Lemeire Pag. 71 / 77
Mijn masterproef De evolutie naar coöperatie Egoistische robotjes leren samenwerken omdat het hun wederzijds voordeel oplevert (win-win) Mijn onderzoek: onder welke voorwaarden ontstaat er coöperatie? Jan Lemeire Pag. 72 / 77
Niet in cursus Blad-steen-schaar Laatste zet bl bl bl - st bl - sc st bl st - st st - sc sc bl sc - st sc - sc blad Volgende zet steen schaar 4.1 3.8 3.6 12.3 1.2 1.8 8.7 10.2 3.4 2.3 8.7 7.8 4.1 3.8 3.6 12.3 1.2 1.8 8.7 10.2 3.4 2.3 8.7 7.8 4.1 3.8 3.6 Enkel laatste zet beschouwen: 9x3 gewichten Jan Lemeire Pag. 73 / 77
Niet in cursus Blad-steen-schaar Jan Lemeire Pag. 74 / 77
Niet in cursus Patroon gebruiken Laatste zet winst verlies gelijk verander Volgende zet blijf random 14.1 3.8 3.6 14.3 1.2 1.8 11.7 1.2 8.4 Slechts 9 gewichten te leren Jan Lemeire Pag. 75 / 77
Leren van evaluatiefunctie Net zoals bij de schuifpuzzel kunnen we onmogelijk voor elke situatie de beste actie leren Wel mogelijk: Aanpassen van parameters met behulp van feedback (winst of verlies) Voorbeeld: gewichten van de score-functie, aangezien deze uit meerdere delen bestaat. Zoals evaluatiefunctie van schaken Jan Lemeire Pag. 76 / 77
Probleem: explosie van staten p. 82 Stel: voor elke toestand (staat) willen we beste zet leren Schuifpuzzel: 9! mogelijke configuraties Schaken: nog groter Te veel mogelijkheden om voor elke toestand de beste actie te leren (mapping van staat op actie)! Mogelijke oplossing: abstracte regels gebruiken Als X, doe actie Y X: eigenschap van staat geldt dus voor meerdere staten! Leren van relevantie van regels (zie scorefunctie) Jan Lemeire Pag. 77 / 77