INF 3/ oktober : Avslutte Branch and Bound 23.6: Trær og strategier for spill med to spillere

Like dokumenter
INF oktober Stein Krogdahl. Kap 23.5: Trær og strategier for spill med to spillere

6. oktober Dagens program: Første time: Andre time, gjesteforelesning: Uavgjørbarhet. Stein Krogdahl. (Ikke pensum, egne foiler legges ut)

UNIVERSITETET I OSLO

Søk i tilstandsrom. Backtracking (Kap. 10) Branch-and-bound (Kap. 10) Iterativ fordypning. Dijkstras korteste sti-algoritme A*-søk (Kap.

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

INF5110, onsdag 19. februar, Dagens tema: Parsering ovenfra-ned (top-down)

IN2010: Forelesning 11. Kombinatorisk søking Beregnbarhet og kompleksitet

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Notat for oblig 2, INF3/4130 h07

Uke 5 Disjunkte mengder

Kap. 4: Ovenfra-ned (top-down) parsering

UNIVERSITETET I OSLO

Obligatorisk oppgave 1 INF1020 h2005

INF2220: Forelesning 7. Kombinatorisk søking

INF 4130 Oppgavesett 3, 20/ m/løsningsforslag

Svarforslag til ukeoppgaver til INF 4130

INF oktober Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet

Disjunkte mengder ADT

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

INF2220: Forelesning 2

INF /2, 2015 Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

INF / Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

INF 4130 Svarforslag til «Midterm», 01/

UNIVERSITETET I OSLO

Kap. 4 del I Top Down Parsering INF5110 v2006. Stein Krogdahl Ifi, UiO

KONTINUASJONSEKSAMEN

Løsnings forslag i java In115, Våren 1998

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

INF1010. Sekvensgenerering Alle mulige sekvenser av lengde tre av tallene 0, 1 og 2: Sekvensgenerering. Generalisering. n n n! INF1010 INF1010 INF1010

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF oktober Stein Krogdahl. Altså: Hva kan ikke gjøres raskt (med mindre P = NP)

UNIVERSITETET I OSLO

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Hva legger vi i spillteori?

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgått torsdag 14. febr Disse foilene er justert 15/2, kl. 11

INF Noen oppgaver til kap. 8

INF Algoritmer og datastrukturer

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

Korteste vei i en vektet graf uten negative kanter

Side om side. Trettende forelesning

INF5110 V2013 Stoff som i boka står i kap 4, men som er generelt stoff om grammatikker

Algoritmer og teknikker for sjakkprogrammer - teori og praksis

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Kap.4 del I Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær

INF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

INF2220: Forelesning 2

KONTINUASJONSEKSAMEN I FAG ALGORITMER OG DATASTRUKTURER

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

INF Algoritmer og datastrukturer

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

INF2220: Forelesning 1

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

INF2810: Funksjonell Programmering

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

INF1020 Algoritmer og datastrukturer GRAFER

INF2810: Funksjonell Programmering

Repetisjon og mer motivasjon. MAT1030 Diskret matematikk. Repetisjon og mer motivasjon

Innlevering 2a i INF2810, vår 2017

MAT1030 Forelesning 25

KONTINUASJONSEKSAMEN I EMNE. TDT4136 Logikk og resonnerende systemer. Lørdag 8. august 2009, kl

INF2810: Funksjonell Programmering

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Dag Normann

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Diagnosekart for oblig 2, INF3/4130 h07

INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon.

Løsnings forslag i java In115, Våren 1996

Matchinger i ikke-bipartite grafer

MAT1030 Diskret Matematikk

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

INF-5110 Oppgaver kodegenerering etc. INF-5110, vår 2011

MAT1030 Diskret Matematikk

UNIVERSITETET I OSLO

INF3/4130 PRØVE-EKSAMEN MED SVARFORSLAG Gjennomgås 1/ , (lille aud.)

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

UNIVERSITETET I OSLO

Anatomien til en kompilator - I

INF2220: Forelesning 1

Algoritmer og datastrukturer Løsningsforslag

INF2810: Funksjonell Programmering. Kommentarer til prøveeksamen

INF2810: Funksjonell Programmering

GRAFER. Noen grafdefinisjoner. Korteste vei i en uvektet graf V 2 V 1 V 5 V 3 V 4 V 6

INF Algoritmer og datastrukturer

INF2810: Funksjonell Programmering

INF Algoritmer og datastrukturer

Ordliste. Obligatorisk oppgave 1 - Inf 1020

1-b. integer array frd; begin. integer x; for x:= 1step 1 until N do. end; 1-c

Transkript:

INF 3/4130 18. oktober 2007 Dagens forelesning: Kapittel 23 i hovedboka 23.5: Avslutte Branch and Bound 23.6: Trær og strategier for spill med to spillere Oblig 2 har ligget ute en stund. Frist 26 oktober. Ikke vanlig forelesning neste uke, på grunn av dagen@ifi : Kl 14.15: Foredrag, Store aud: Algoritmeperler i søk - teori og praksis Kathrine Hammervold og Øystein Haug Olsen (FAST) Kl 15.15: Gjesteforelesning spesielt for vårt kurs, Lille aud: Sjakkalgoritmer Rune Djurhuus: Internasjonal stormester, sjakkspalte i Aftenposten, nå FAST Programmet for dagen@ifi : http://dagen.at.ifi.uio.no/ Uka etter det igjen: Dino Karabeg starter forelesninger om NP-kompletthet, uavgjørbarehet etc. 1

Kap 23.4: Least Cost Branch and Bound Fra kapittel 10: Branch and Bound med prioritet Live-node -mengden er prioriteskø med en passelig heuristikk som prioritet (hvor lovende er noden) Vi lager oss en variant over denne for følgende problem: Det finnes diverse målnoder, og de har alle en verdi Vi skal finne den målnoden med minst verdi Eksempel: Travelling Salesmann-problemt (TS), med veilengde oppgitt for alle par av byer. Finn den korteste rundturen. Vi kan bygge ut alle mulige veier ut fra en startnode Spesielt her: Alle målnoder vil ligge på samme nivå på bunnen av treet Vi forlanger en heuristikk slik at: h(n) ikke er større enn verdien av noen b målnode i subtreet til n Mange slike er mulige for TS (Oblig2). a c Vi kjører så prioritert branch and bound c d e a d ut fra denne heuristikken Og holder en variabel M med den beste d c e d d e a (minste) løsningen vi har sett. Når den noden vi får ut av prioriteskøen e c e d e 2 er større enn M er vi i mål e a

Kapittel 23.5: Spill, spilltrær og strategier Vi kunne lage et tre av avgjørelser for f.eks. 15-spillet eller leting etter en beste rundtur for en travelling salesman, og prøve å finne veien til en løsningsnode eller en beste vei. Men da er det bare én spiller, og man er ute etter en nøytral løsning Om det er to spillere som spiller mot hverandre blir saken annerledes. Det den ene ser som en bra situasjon ser den andre som dårlig. Trærne av mulige spill blir ofte kjempestore. For sjakk estimert til 10 100 noder. Men selv for et enkelt spill som tick-tack-toe kan ved rett fram utlegging for 9! = 362 880 noder. Starten av et tre for tic-tac-toe blir slik: Spilleren som starter er A Vi skal også gjøre alle vurderinger ut fra A synspunkt (inntil videre)

Treet blir fort stort 1 node 9 noder 9 noder 9*8 noder 9*8*7 noder 9*8*7*6 noder 72 forskjellige noder 252 forskjellige noder 756 forskjellige noder 9*8*7*6*5 noder 1260 forskjellige noder 9*8*7*6*5*4*3*2*1 = 362 880 noder 126 forskjellige noder Altså, man kan tjene masse på å kjenne igjen like noder, og ikke gjøre undersøkelsen om igjen. Det er ikke så greit ved dybde først

Ta bort symmetrier etc. Man kan også spare mye på lokal optimalisering: Ta bare med de barna som er essensielt forskjellige Altså her, ta bort løsninger som er symmetriske av hverandre Men dette gir ikke globalt veldig god avskjæring

Fystikk-spillet Nim Vi ser bare på null-sum-spill. Altså, når den ene spilleren vinner noe så taper den andre tilsvarende. Enkleste variant: Det er to utfall, A vinner (+1) og B taper (-1), eller omvendt En del spill har også uavgjort, for eksempel tic-tac-toe. Spillet Nim: Start med to bunker med fyrstikker. Antall: m og n En spiller kan ta så mange man vil fra én bunke Den som tar siste fyrstikken har tapt. Her blir det aldri uavgjort Om vi starter med m=3 og n=2 er hele spilltreet tegnet ut her: Verdi for A satt på hver slutt-node

Hvordan finne strategi for å vinne, sett fra A? Vi angir hele tiden verdien av en node sett fra A A vil gjøre optimale trekk sett fra seg: Vil velge til node med størst verdi A må regne med at B gjør optimale trekk sett fra seg. Siden verdiene noteres sett fra A, vil da B trekke til den minste subnoden For åfåvite verdien av en node må vi derfor vite verdiene i alle subnodene Dette kan vi gjøre ved dybde først gjennomgang, og å beregne verdiene postfiks.

Oftest kan man ikke se gjennom hele spillet Man må da f.eks. gå en viss dybde, og her komme med et estimat for hvor god situasjonen er, sett fra A Her går vi til dybde 3. Heuristikk her: Antall vinnende linjer for A minus det tilsvarende for B. A vil derfor her trekke til C 2, som ser bra ut Men denne heuristikken er ikke lur når vi har gjort noen trekk. Tar ikke hensyn til at å vinne er bedre enn alle heuristikker. Gir derfor vinst-node verdi + = 9 Da får vi en god strategi for A. Dog: Om begge spiller perfekt, så blir det uavgjort i tic-tac-toe. Hvor dypt kan man gå i sjakk? Og hvordan lage god heuristikk?? Kommer neste torsdag!!

Alfa-beta-avskjæring Ved siden av å forsøke å redusere treet ved å se på symmetrier og/eller kjenne igjen noder som allerede er analysert, kan man gjøre alfa-beta-avskjæring Dette er som følger: Jeg, A, vurderer trekk ett etter ett fra en gitt A-situasjon A1 Jeg har allerede sett så gode trekk at jeg kan oppnå verdien U Jeg ser så på neste potensielle trekk som fører til situasjonen B1, og ser at B herfra kan gjøre et trekk som fører til en god situasjon for B (men dårlig for A), som sett fra A har verdien V. Da kan ikke verdien i B1 bli større en V (B minimaliserer!) Om da V<U så gidder ikke A gå videre å studere om B skulle ha et enda bedre trekk. Det kan ikke gjøre A mer lysten på trekket til B1.

Eksempler på alfa-beta-avskjæring Avskjæring som gjøres ut fra A s betrakning kalles alfa-avskjæring Samme betrakning som gjøres fra B- tilstander, men med omvendt fortegn. Disse kalles beta-avskjæring Ved siden av ser vi eksempler på både alfa- og beta-avskjæring Når vi skal implementere alfa-betaavskjæring kan det være greit å skifte synspunkt for hvert nivå. Da skal det alltid maksimaliseres Men man må skifte tegn på verdiene når man skifter nivå. En slik implementasjon står på neste foil

Alfa-beta-søk real function ABNodeValue( X, // Noden vi vil ha alfa/beta-verdien for. Barn: C1, C2,, Ck numlev, // Antall nivåer som står igjen parentval) // Alfa/beta-verdien fra forelder-noden (-LB fra foreldren) // returverdi: Den endelige alfa/beta-verdien for denne noden real LB; // Løpende LowerBound for alfa/beta-verdi for denne noden if <X er terminal-situasjon> then {return <verdien av denne sett fra X>;} else if numlev = 0 then {return <estimat av kvaliteten av denne, sett fra X>;} else { LB := - ABNodeValue(C1, NumLev-1, ); // Heller -? Se neste foil. for i := 2 to k do { if LB >= parentvalue then {return LB;} else { LB := max(lb, -ABNodeVal(Ci, Numlev-1, -LB) ); } } } return LB; } Startkall: situasjonskvalitet := ABNodeValue(rotnoden, 10, - )

Lagt til etter forelesningen, trykkfeil m.m. Først: Det var altså noen enkle trykkfeil i programmet på side 741 i boka: AB manglet i navnet på prosedyren, der den blir kalt rekursivt Det mangler en sluttparentes på enden av linja der max kalles Disse er rettet i skissen på forrige foil, men på forelesningen lurte vi også på om det skulle være - som siste parameter (ParentValue) i linja midt i programmet. Foreleseren (Stein K.) mener det må være -. Grunnen er at ParentValue jo ikke blir negért (eller forandret på annen måte) før den brukes, og den brukes bare i testen if LB >= ParentValue then... Her er altså ParentValue en fast verdi, mens LB vokser. Om ParentValue er + vil jo testen aldri kunne slå til, mens den slår til med en gang om den er -. Og det er jo det siste som er vitsen.