Heuristisk søking (kap. 4) Emner: Kunstig intelligens (MNFIT-272) Forelesning 4

Størrelse: px
Begynne med side:

Download "Heuristisk søking (kap. 4) Emner: Kunstig intelligens (MNFIT-272) Forelesning 4"

Transkript

1 Kunstig intelligens (MNFIT-272) Forelesning 4 Emner: Problemløsning som søking (forts.) - Heuristisk søk, generelt - Søking i spill AI språk - Generelt -Prolog -Lisp Heuristisk søking (kap. 4) Kunnskap og søking Bakkeklatring Best-først søk Evalueringsfunksjoner Søking i spill

2 Heuristisk søking Søkemetode som begrenser mulige valg ved å benytte kunnskap om problemet som skal løses Nødvendig når - problemet har en eksakt løsning, men løsningsrommet er for stort - problemet har ingen eksakt løsning - kun en mer eller mindre god løsning Poenget er å bruke kunnkap om problemet til å lede søkingen langs den mest 'lovende' søkeveien Heuristisk søking er 'informert gjetting' Kan gi suboptimal - og til og med mindre god - løsning Heuristiske metoder To deler: 1. Søkestrategien (søkealgoritmen) 2. Selve heuristikken(e) Enkelt eksempel: Tic-tac-toe - basis søkestrategi er bredde først med symmetri-reduksjon - heuristikk: plasser X der hvor det gir flest åpne linjer

3 Søkestrategier Enkel søkestrategi: Bakkeklatring (hill climbing) Uttømmende søk søk gir for interessante problemer altfor store søkerom, og for tidkrevende søk. Den motsatte ytterlighet: Velg den veien som ser best ut sett fra der du nå står, og ikke tenk på 'totalbildet'. Effektivt hvis søkerommmet har en enkel struktur og heuristikken er god (tic-tac-toe), men fører ellers til at andre og bedre løsninger overses (8-puzzle). Problemet er at metoden kun finner lokale maksima, ikke de mer globale. Best-først søking Skiller seg fra bredde- og dybde-først ved at nodene på open listen sorteres før neste node velges. Sorteringen bestemmes av en evalueringsfunskjon der heuristikk(er) utgjør en sentral del. Den sorterte listen kalles often en prioritets-kø. Informasjon om løsningsveien tas normalt vare på, og hele løsningsveien returneres ved suksessfylt søk. Hvis alternative veier til en node finnes, velges den korteste.

4 Stråle-søking (beam search) Søker innefor en begrenset del av søkerommet. En mellomting mellom bakke-klatring og best-først. Lagrer kun de N beste noder på open, etter at sorteringen er gjort (N er strålebredden) Heuristikker Å finne gode heuristikker innvolverer - analyse av problemet - design av en problemløsningsstrategi - oppbygging av heuristikkene - som kan innbære alt fra å definere en enkel metrikk eller funksjon til å bygge opp en omfattende kunnskapsbase Enkelt eksempel: 8-puzzle. Alternative heuristikker: a) minimer antall brikker på feil plass b) minimer total distanse fra mål-tilstanden for feiplasserte brikker c) ta hensyn til plassbytte for nabobrikker i b)

5 Evalueringsfunksjoner Funksjoner for sortering av noder på open listen under heuristisk søking Bør ta hensyn til - aktuelle noders avstand til slutt-tilstanden - aktuelle noders avstand fra start-tilstanden Generell form: f(n) = g(n) + h(n) - g(n) er reell avstand fra start-noden - h(n) er estimert avstand til slutt-noden f(n) estimerer total kostnad av veien fra starttilstanden gjennom n til slutt-tilstanden Kunnskapsbaserte systemer Fra forenklede 'leke'-problemer til anvendelser av heuristisk søk på reelle, komplekse problemer. Søkerommet er tilstander i problemløsningsprosessen, der en node er beskrevet av et sett med fakta. Heuristikken som bestemmer videre veivalg ligger i en kunnskapsbase. Kunnskapbasen inneholder i prinsippet alle heuristikker for alle noder, og for én enkelt node vil kun en del av kunnskapen være relevant. Admissibility En søkealgoritm er admissible hvis den garantert finner Korteste vei, der hvor en slik vei fins.

6 A* algoritmen Gitt evalueringsfunksjonen for estimering av løsningsveiens kostnad: f(n) = g(n) + h(n) Algoritmen som benytter f(n) som evalueringsfunksjon i best-først søk, kalles Algoritme A. For å vurdere i hvilken grad en optimal løsningsvei kan finnes, defineres: f*(n) = g*(n) + h*(n) der g*(n) er kostnad av korteste vei fra start til n, og h*(n) er reell kostand for korteste vei fra n til løsningstilstanden. Aloritme A* er algoritmen som fås når algoritme A benytter en estimert h(n) som for enhver node er mindre eller lik kostnad h*(n). A* - egenskaper Algoritme A* vil alltid finne den optimale veien, såsant en slik fins. Mao.: Algortime A* er admissible A* forutsetter ikke at g(n) = g*(n), dvs. at optimal vei er funnet så langt. For to heuristikker, hvis h 1(n) < h 2(n) for alle noder n, er h 2 mer informert enn h 1. Jo mer informert en heuristikk er, dessto mindre kan søkerommet gjøres. Men prosesseringskostnadene kan øke betydelig.

7 Søking i to-persons spill Spesiell situasjon: - det fins en motstander med uforutsigbare tilstandsoverganger (trekk i spillet). Søkerommet har typisk en tre-struktur. Noder i søkerommet representerer situasjoner i spillet hvor en av spillerne er i trekket. Lenker mellom nodene er trekk i spillet Søking går ut på å finne det beste neste trekket, gitt motstanderens mulige neste trekk, samt mulige etterfølgende trekk fra begge spillerne. Noder der systemet er i trekket kalles MAX-noder Noder der motstanderen er i trekket kalles MIN-noder. MINIMAX Søkestrategi for maksimere egen posisjon ved å minimere motsanderens. Det antas at motstanderen velger sitt beste trekk, utifra en felles evaluaringsfunksjon. Det trekket velges som minimerer verdien av motsanderens beste neste trekk. Verdien av posisjoner bestemmes for en tilstand et visst antall trekk framover, og forplantes så tilbake til nåværende tilstand. Kan benyttes både i uttømmende søk - bredde først - og med en eller annen form form avgrensing: - vurdering av et fast antall trekk framover (horisont effekt) - heuristisk avgrensing, vurder bare de beste n trekk videre - evalueringsfunksjon: - posisjons-styrke - brikke-antall - brikke-styrke -...

8 Alfa-beta søk Dybde-først søking med kutting av greiner i søketreet som ikke har mulighet til å forbedre resultatet. Prinsipp: Alfa-verdier tilknyttes MAX noder, og kan ikke avta. Beta-verdier tilknyttes MIN noder, og kan ikke øke. For MAX tilstander kan en se bort fra noder med lavere verdier enn den største til nå. Omvendt for MIN noder Kompleksitet 120 Eksempel: Sjakk har tilnærmet 10 mulige tilstander i et spill av normal lengde. Forgreningsfaktoren fra nivå til nivå er kritisk faktor. Gjelder i alle søkestrategier, når det gjelder tidsforbruk. Gode heuristikker - kunnskapsbasert, velinformert søk - er eneste veien ut, for komplekse, reelle problemer.

9 Heuristisk søking (oppsummert) Søkemetode som begrenser mulige valg ved å benytte kunnskap om problemet som skal løses Nødvendig når - problemet har en eksakt løsning, men løsningsrommet er for stort - problemet har ingen eksakt løsning - kun en mer eller mindre god løsning Poenget er å bruke kunnkap om problemet til å lede søkingen langs den mest 'lovende' søkeveien Heuristisk søking er 'informert gjetting' Kan gi suboptimal - og til og med mindre god - løsning AI språk Spesielt utviklet for å kunne behandle symbolstrukturer. Et AI språk er utviklet for ett bestemt beskrivelsesnivå. - Kunnskapsnivå-språk støtter analyse og modellering på et konseptuelt - og intensjonelt - nivå. Ofte endel av et system eller en metodologi for kunnskapsakkvisisjon i generell forstand. Eksempler spenner fra grafiske editorer, der visualisering er sentralt, til formelle språk der sjekking av konsistens etc. er sentralt.

10 AI språk (forts.) - Symbolnivå-språk støtter programmering og implementasjon. En kan skille mellom to typer språk: - Generelle programmeringsspråk (Lisp, Prolog, Smalltalk, Java, C++, C, Pascal, Fortran,...) - Spesielle høynivå-språk og KBS-skall (KEE, ART, Nexpert Object, CLIPS, KappaPC,...) Krav til AI språk: Behandler her kun symbolnivå-språk. 1. Støtte til symbolbehandling 2. Fleksibilitet 3. Støtte til eksplorativ programmering 4. Sen binding av variable 5. Veldefinert semantikk

11 1. Støtte til symbolbehandling Symbolbehandling innebærer evne til å representere, generere, og operere på symbolske uttrykk og strukturer av slike. Mønster-gjenkjenning (pattern matching) er sentralt - matching av beskrivelser og tilstander i søkerommet, hel eller delvis match. Liste-behandling er sentralt - lister er egnet til lagring av symbolstrukturer, uansett kompleksitet 2. Fleksibilitet Lett modifiserbare symbol-representasjoner Data-drevet kontroll av eksekveringen Bruker-spesifisert programkontroll

12 3. Støtte til eksplorativ programmering Gradvis definering av problemet - AI programmer angriper komplekse problemer. Gradvis definering av problemløsningen - heuristiske metoder, i motsetning til algoritmiske, er empiriske. Gradvis utforming av AI-metodene - valg og tilpasning av representasjon og resonneringsmetoder krever ofte prøving og feiling. Et språk for eksplorativ programmering bør: - være modulært - være utvidbart - ha gode abstraksjonsmekanismer - støtte rask prototyping - ha lett lesbare programmer - være interpreterbart - støttes av en effektiv programmeringsomgivelse 4. Sen binding av variable Manipulering av variable uten å ha angitt verdi eller verdi-type. Gradvis tilordning av typer og verdier til variable. Verdier eller typer angis til å begynne med som beskrankninger (constraints), som så influerer på verdiene til relaterte variable, osv. (constraint propagation).

13 5. Veldefinert språk-semantikk Enkel, klart forståelig språk-semantikk er en fordel. Eksempler er 'Horn clause' logikk (Prolog), og rekursiv funksjonsteori (Lisp). Pascal og Fortran, f.eks. har mer kompleks og uoversiktig semantikk. Siden AI programmer ofte utfører en kompleks behandling, er det dessto viktigere at programmeringsspråket er enkelt bydg opp, og benyttes på en mest mulig klar og oversiktlig måte. PROLOG Basis: Matematisk logikk, 1. ordens predikatlogikk Et Prolog program er et sett av fakta-uttrykk og implikasjoner: father(haakon,olav). male(olav). son(x,y) :- father(y,x), male(x). En eksekvering av et Prolog program er en logisk deduksjon utifra et startbegrep (goal): son(olav,x).

14 PROLOG (forts.) Deduksjon i et Prolog-program er basert på 'resolusjons'-algoritmen for teorembevis. Det fins også andre deduktive bevis-algoritmer. Mange som arbeider med logikk-programmering utfra andre bevis-algortimer enn 'resolusjon', benytter Lisp som programmeringsspråk. Prolog er et deklarativt språk Satt på spissen: "make declarations, not programs" LISP Basis: Matematisk teori for rekursive funksjoner, lambda-kalkyle. Et Lisp program er et sett av funksjonsdefinisjoner og funksjonskall. En funksjonsdefinisjon består av et sett funksjonskall til andre definerte funksjoner, rekursivt: (push '(haakon olav) fathers) (push 'olav males) (defun is-father-of? (person-1 person-2) (equal person-2 (second (assoc person-1 fathers)))) (defun is-son-of? (person-1 person-2) (and (member person-1 males) (is-father-of? person-2 person-1))) (defun son-of (person) (second (assoc person fathers)))

15 LISP (forts.) En eksekvering av et Lisp program er kall av en funksjon, hvis argumenter kan være kall til andre funksjoner, etc., rekursivt: (is-son-of? (son-of 'haakon) (father-of (son-of 'haakon))) Lisp er et funksjonelt språk Satt på spissen: "make functions, not assignments" LISP - basiselementer: s-expression atom list number symbol En liste er en sekvens av atomer og/eller andre lister adskilt av blanke tegn og innesluttet i parentes. Lister kan være nøstet i et uspesifisert antall nivåer

16 Basiselementer (forts.) Funksjonsdefinisjoner, dvs. programmer, såvel som datastrukturer er lister. - Programmer og data er av samme type, dvs. programmer kan tolkes som data og omvendt. Datatyper tilordnes verdier, ikke variable Den tomme listen, dvs. () eller NIL har en spesiell rolle. Benytter dynamisk plass-allokering. "Garbarge collection" frigjør tidligere okkupert plass. LISP - basismekanismer Read - Eval - Print løkken er grunnmekanismen for eksekvering av Lisp programmer: Read - et uttrykk (s-expression) leses inn Eval - uttrykket evalueres Print - returnert resultat skrives ut Eval er selve Lisp interpretatoren. Evaluering innebærer alltid at en verdi returneres. Dette gjelder for alle Lisp-uttrykk: et tall evalueres til seg selv - tallverdien returneres et symbol evalueres til verdien det er bundet til en liste evalueres ved at første element tolkes som et funksjonsnavn resterende elementer tolkes som argumenter I tillegg har mange funksjoner sideeffekter, som medfører større eller mindre endringer i den globale lisp-omgivelsen ('working memory' om du vil).

17 LISP - basisfunksjoner Listebehandling: cons car cdr Evalueringskontroll: eval quote Inn/Ut: read print + ofte brukt list, append, remove cadr, caaddr, cdadr,.. first, second,.., last, nth funcall, apply, ', #' format Funksjonsdefinisjoner: defun lambda Prosedyrekontroll: do return Testing: cond equal atom listp Verditilordning: let set dolist, dotimes if, while, unless >, <=, = numberp, symbolp,... progn Side-effekter, Bindinger (funk-1 (funk-2 (funk-3 (funk-4...)...)...)...) En funksjon som utføres returnerer en verdi. Verdien gis tilbake til den kallende funksjonen, som igjen returnerer en verdi som gis tilbake til denne funksjonens kallende funksjon, osv. opp til topp-nivået i funksjonskall-kjeden. Mange Lisp funksjoner har i tillegg side-effekter, dvs. at det skjer ting når en funksjon utføres som ikke fanges opp av retur-verdien. Eksempler: (setq a 'b) ; returnerer: b ; side-effekt: symbolet a bindes til ; symbolet b

18 Side-effekter (forts.) (defun a (n) (+ n 1)) ; returnerer symbolet a ; side-effekt: binder funksjons- ; definisjonen til a Funksjonene over benyttes kun pga. sine side-effekter. (let ((a 'b) (c 2)) (list a c)) ; returnerer listen (b 2) ; side-effekt: ingen let benyttes for å definere lokale variable inni en funksjon, og å gi dem initielle verdier setq benyttes for å definere globale variable, og for å endre verdien til variable innen en let blokk Rekursjon og Lisp Et rekursivt program er et program som kaller seg selv. En rekursiv funksjon er en funksjon som er definert ved seg selv. Rekursive definisjoner er problemfrie såsant det fins et 'uthopp' fra rekursjonen, dvs. et test-kriterium som fører til at rekursjonsprosessen terminerer. Lisp's listebehandlings-egenskaper gjør rekursjon til en relativt enkel og naturlig programmeringsmekanisme for symbolbehandling.

19 Rekursjon og Lisp (forts.) Prinsippet for rekursiv listebehandling er: Funksjonen kalles med den aktuelle listen som ett av argumentene. Det sjekkes om terminerings-kriteriet er oppfylt. Funksjonen utføres ved å kombinere en operasjon på første element i argument-listen med et kall til funksjonen (seg selv) utført på de resterende elementer i listen. Rekursjon - eksempler Eksempel 1 For å utføre en operasjon på hvert element i en liste: 1. Hvis listen er tom, stopp. 2. Utfør operasjonen på første element i listen, og kall funksjonen med resten av listen som argument. ;;; Funksjon for å finne antall elementer i en liste (defun count-elements (liste) (cond ((null liste) 0) (t (+ 1 (count-elements (cdr liste)))))) Eksempel 2 For å utføre en operasjon på hvert element inntil en test slår til: 1. Hvis listen er tom, stopp og returner at test mislyktes. 2. Hvis testen slår til, stopp og returner aktuelt resultat, hvis ikke, kall funksjonen med resten av listen som argument. ;;; Funksjon for å sjekke om et gitt element er medlem av en liste: (defun my-member (element liste) (cond ((null liste) nil) ((equal element (car liste)) t) (t (my-member element (cdr liste)))))

20 Rekursjon - eksempler (forts.) En funksjon kan kalle seg selv rekursivt flere steder i funksjonskroppen. Eksempel 3 ;;; Funksjon for å fjerne negative tall i en liste. Det rekursive ;;; kallet utføres både hvis testen slår til, og hvis den ikke gjør ;;; det: (defun filter-negatives (liste) (cond ((null liste) nil) ((plusp (car liste)) (cons (car liste) (filter-negatives (cdr liste)))) (t (filter-negatives (cdr liste))))) Numeriske funksjoner Det er ikke bare for listebehandling at rekursive definisjoner er velegnet: ;;; Funksjon for å beregne fakultet av et tall, ;;; n! = 1*2*3*4*5*...*(n-1)*n (defun fac (n) (cond ((= n 0) 1) (t (* n (fac (- n 1)))))) Kombinert car / cdr rekursjon Hvis elementer i en liste kan være lister, og underliggende liste-nivåer også skal behandles, er kombinert car- og cdrrekursjon en metode som utnytter rekursivitet maksimalt. ;;; Funksjon for å telle opp antall atomære elementer i en ;;; liste, uansett på hvilket under-nivå de befinner seg (defun count-atoms (liste) (cond ((null liste) 0) ((atom liste) 1) (t (+ (count-atoms (car liste)) (count-atoms (cdr liste)))))) ;;; Funksjon for å 'flate ut' en liste, dvs. fjerne alle ;;; under-nivåer (defun flatten (liste) (cond ((null liste) nil) ((atom liste) (list liste)) (t (append (flatten (car liste)) (flatten (cdr liste))))))

21 Iterasjon: Rekursjon er ikke eneste metoden for å utføre repeterende programtrinn i Lisp. - Men ofte den enkleste - såsant en har trening i å tenke rekursivt! Vanligste iterasjons -funksjoner: - do dolist dotimes - mapcar (dolist (<var> <list> <result>) (<body>)) (defun count-elements (liste) (let ((len 0)) (dolist (element liste len) (setq len (+ len 1))))) (do ((<var 1> <init 1> <update 1>) (<var 2> <init 2> <update 2>)... (<var n> <init n> <update n>)) (<termination test> <returned result>) (<body>)) (defun count-elements (liste) (do ((len 0 (+ len 1)) (l liste (cdr l))) ((null l) len))) En enkel do-løkke - uten kropp (<body>)!! Høyere ordens Lisp-funksjoner Tar andre Lisp-funksjoner som argument Eksempel 1 ;;; Generell filter-funksjon [ikke standard Lisp funksjon] (defun filter (liste test-funksjon) (cond ((null liste) nil) ((funcall test-funksjon (car liste)) (cons (car liste) (filter (cdr liste) test-funksjon))) (t (filter (cdr liste) test-funksjon)))) Eksempel 2 Mapping-funksjonen mapcar Iterativ funksjon for repeterende anvendelse av en funksjon på hvert element i en liste. > (mapcar #'count-atoms '((a b) (c (((d) e)) f ((g))) h)) (2 5 1) (defun square-root-elements (liste) (mapcar #'sqrt liste)) > (square-root-elements '( )) ( )

Et t ilst andsrom er en representasjon av en problemløsningsstruktur.

Et t ilst andsrom er en representasjon av en problemløsningsstruktur. Kunstig intelligens (MNFIT-272) Forelesning 3 Emner: Problemløsning som søking - generell søk - heuristisk søk AI språk - egenskaper generelt - Prolog -Lisp TILSTANDSROM måltilstander mellomtilstander

Detaljer

Heuristisk søking (kap. 4) Emner: Kunstig intelligens (MNFIT-272) Forelesning 4

Heuristisk søking (kap. 4) Emner: Kunstig intelligens (MNFIT-272) Forelesning 4 Kunstig intelligens (MNFIT-272) Forelesning 4 Emner: Problemløsning som søking (forts.) -Heuristisk søk, generelt -Søking i spill Søkekontroll -Produksjonssystem -Blackboard system Heuristisk søking (kap.

Detaljer

LISP PVV-kurs 25. oktober 2012

LISP PVV-kurs 25. oktober 2012 LISP PVV-kurs 25. oktober 2012 Hva er Lisp? Grunnleggende konsepter Variabler (Pause) Lister Løkker Funksjoner Oversikt over kurset Først: Få tak i en implementasjon av Common Lisp Mange implementasjoner

Detaljer

MNFIT-272 Kunstig intelligens Forelesning 4.

MNFIT-272 Kunstig intelligens Forelesning 4. MNFIT-272 Kunstig intelligens Forelesning 4. Emner: Søkesystemer - styring og kontroll av søk - søkesystemer i praksis Produksjonssystemer - regelbasert søking - som generell problemløsningsmodell - praktiske

Detaljer

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Erik Velldal Universitetet i Oslo 9. februar 2017 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer

Detaljer

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Erik Velldal Universitetet i Oslo 9. februar 2017 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme Erik Velldal Universitetet i Oslo 19. april 2016 Tema 2 Forrige uke Strømmer og utsatt evaluering Kort om makroer I dag Kap. 4 Metasirkulær

Detaljer

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering INF2810: Funksjonell Programmering Omgivelsesmodeller og destruktive listeoperasjoner Stephan Oepen & Erik Velldal Universitetet i Oslo 15. mars 2013 Tema 2 Forrige uke Representasjon av mengder Sorterte

Detaljer

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

INF2810: Funksjonell Programmering. Lokale variabler. Og trær. INF2810: Funksjonell Programmering Lokale variabler. Og trær. Erik Velldal Universitetet i Oslo 11. september 2019 Tema forrige uke 2 Lister som datastruktur quote Rekursjon på lister Høyereordens prosedyrer

Detaljer

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering INF2810: Funksjonell Programmering Omgivelsesmodeller og destruktive listeoperasjoner Stephan Oepen & Erik Velldal Universitetet i Oslo 15. mars 2013 Tema 2 Forrige uke Representasjon av mengder Sorterte

Detaljer

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon INF2810: Funksjonell Programmering Dataabstraksjon og Trerekursjon Stephan Oepen & Erik Velldal Universitetet i Oslo 15. februar, 2013 Tema 2 Forrige uke Høyere-ordens prosedyrer: Prosedyrer som argumenter

Detaljer

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

INF2810: Funksjonell Programmering. Lokale variabler. Og trær. INF2810: Funksjonell Programmering Lokale variabler. Og trær. Erik Velldal Universitetet i Oslo 11. september 2019 Tema forrige uke 2 Lister som datastruktur quote Rekursjon på lister Høyereordens prosedyrer

Detaljer

INF2810: Funksjonell Programmering. En metasirkulær evaluator

INF2810: Funksjonell Programmering. En metasirkulær evaluator INF2810: Funksjonell Programmering En metasirkulær evaluator Stephan Oepen & Erik Velldal Universitetet i Oslo 26. april 2013 Tema 2 Forrige uke Strømmer og utsatt evaluering Memoisering Kort om makroer

Detaljer

Lisp 3: Spesielle former, variabler, imperativ programmering

Lisp 3: Spesielle former, variabler, imperativ programmering Lisp 3: Spesielle former, variabler, imperativ programmering Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 11. mars 2010 (Evaluering av former) (De spesielle operatorene)

Detaljer

INF2810: Funksjonell Programmering. En metasirkulær evaluator

INF2810: Funksjonell Programmering. En metasirkulær evaluator INF2810: Funksjonell Programmering En metasirkulær evaluator Stephan Oepen & Erik Velldal Universitetet i Oslo 26. april 2013 Tema 2 Forrige uke Strømmer og utsatt evaluering Memoisering Kort om makroer

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2 INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme, del 2 Erik Velldal Universitetet i Oslo 4. mai 2017 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer programs Metacircular

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2 INF2810: Funksjonell programmering INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme, del 2 Erik Velldal Universitetet i Oslo 7. mai 2015 Tema Forrige uke SICP 4.1. Structure and interpretation

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme Erik Velldal Universitetet i Oslo 27. april 2017 Tema 2 Forrige forelesning Strømmer og utsatt evaluering Kort om makroer I dag Kap. 4 Metasirkulær

Detaljer

Lisp 2: Lister og funksjoner

Lisp 2: Lister og funksjoner Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 11. mars 2010 (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister)... lists are the heart of Lisp... Guy L. Steele Jr. (Par)

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2 INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme, del 2 Erik Velldal Universitetet i Oslo 4. mai 2017 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer programs Metacircular

Detaljer

Rekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo

Rekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo INF2810: Funksjonell programmering Rekursjon og lister Stephan Oepen & Erik Velldal Universitetet i Oslo 1. februar, 2013 Agenda 2 Forrige uke Scheme Substitusjonsmodellen Blokkstruktur Predikater Kondisjonale

Detaljer

INF2810: Funksjonell Programmering. Kommentarer til prøveeksamen

INF2810: Funksjonell Programmering. Kommentarer til prøveeksamen INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Kommentarer til prøveeksamen Erik Velldal Universitetet i Oslo 1: Grunnleggende (6 poeng)? (define foo '(a b))? (define bar foo)? (set!

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810 Eksamensdag: Fredag 5. juni 2015 Tid for eksamen: 14:30 (4 timer) Oppgavesettet er på 4 sider (ikke medregnet denne siden)

Detaljer

Gjennomgåelse av eksamensoppgaven i HUMIT2710 fra våren 2004

Gjennomgåelse av eksamensoppgaven i HUMIT2710 fra våren 2004 Gjennomgåelse av eksamensoppgaven i HUMIT2710 fra våren 2004 Oppgave 1 For å komme nærmere kvadratroten til et tall fra en foreløpig tilnærming y, kan vi bruke formelen (y + /y)/2. Dette gir grunnlag for

Detaljer

INF2810: Funksjonell Programmering. Mengder og lokal tilstand

INF2810: Funksjonell Programmering. Mengder og lokal tilstand INF2810: Funksjonell Programmering Mengder og lokal tilstand Stephan Oepen & Erik Velldal Universitetet i Oslo Kvinnedagen, 2013 Forrige gang 2 Dagens dont 3 Del 1 Litt mer om hierarkisk data. Representasjon

Detaljer

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Stephan Oepen Universitetet i Oslo 9. februar 2015 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens

Detaljer

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering INF2810: Funksjonell Programmering Strømmer og utsatt evaluering Stephan Oepen Universitetet i Oslo 30. mars 2017 Forrige forelesning 2 Mer om (prosedyre)navn, bindinger, og verditilordning Nok en ny abstrakt

Detaljer

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Stephan Oepen Universitetet i Oslo 9. februar 2015 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens

Detaljer

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2 INF2810: Funksjonell Programmering En metasirkulær evaluator, del 2 Stephan Oepen & Erik Velldal Universitetet i Oslo 03. mai 2013 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer

Detaljer

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2 INF2810: Funksjonell Programmering En metasirkulær evaluator, del 2 Stephan Oepen & Erik Velldal Universitetet i Oslo 03. mai 2013 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer

Detaljer

INF2810: Funksjonell Programmering. Trær og mengder

INF2810: Funksjonell Programmering. Trær og mengder INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Trær og mengder Erik Velldal Universitetet i Oslo 19. februar 2015 Tema Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler

Detaljer

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer INF2810: Funksjonell Programmering Lister og høyereordens prosedyrer Erik Velldal Universitetet i Oslo 2. februar 2017 Agenda 2 Forrige uke Substitusjonsmodellen og evalueringsstrategier. Blokkstruktur

Detaljer

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet INF2810: Funksjonell Programmering Køer, tabeller, og (litt om) parallelitet Stephan Oepen & Erik Velldal Universitetet i Oslo 5. april 2013 Tema 2 Siste gang Kort om underveisevaluering Destruktive listeoperasjoner

Detaljer

INF2810: Funksjonell Programmering. Eksamensforberedelser

INF2810: Funksjonell Programmering. Eksamensforberedelser INF2810: Funksjonell Programmering Eksamensforberedelser Stephan Oepen & Erik Velldal Universitetet i Oslo 24. mai 2013 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen om flest oblig-poeng

Detaljer

INF2810: Funksjonell Programmering. Trær og mengder

INF2810: Funksjonell Programmering. Trær og mengder INF2810: Funksjonell Programmering Trær og mengder Stephan Oepen Universitetet i Oslo 16. februar 2017 Tema 2 Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler Dataabstraksjon I dag Lister

Detaljer

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Lister og høyereordens prosedyrer Erik Velldal Universitetet i Oslo 5. februar 2015 Agenda Forrige uke Substitusjonsmodellen og evalueringsstrategier.

Detaljer

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet INF2810: Funksjonell Programmering Køer, tabeller, og (litt om) parallelitet Stephan Oepen & Erik Velldal Universitetet i Oslo 5. april 2013 Tema 2 Siste gang Kort om underveisevaluering Destruktive listeoperasjoner

Detaljer

Høyere-ordens prosedyrer

Høyere-ordens prosedyrer INF2810: Funksjonell programmering Høyere-ordens prosedyrer Stephan Oepen & Erik Velldal Universitetet i Oslo 8. februar, 2013 Tema 2 Forrige uke Lister og listerekursjon Høyere-ordens prosedyrer Prosedyrer

Detaljer

LISP PVV-kurs 11. mars 2010

LISP PVV-kurs 11. mars 2010 LISP PVV-kurs 11. mars 2010 LISP has jokingly been described as the most intelligent way to misuse a computer. I think that description a great compliment because it transmits the full flavor of liberation:

Detaljer

INF2810: Funksjonell Programmering. Trær og mengder

INF2810: Funksjonell Programmering. Trær og mengder INF2810: Funksjonell Programmering Trær og mengder Stephan Oepen Universitetet i Oslo 16. februar 2016 Tema 2 Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler Dataabstraksjon I dag Lister

Detaljer

Lisp 5: Makroer. Programvareverkstedet. 29. april 2010

Lisp 5: Makroer. Programvareverkstedet. 29. april 2010 Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 29. april 2010 (Introduksjon: Litt om evaluering) (Funksjonskall: Alle argumentformene evalueres først, så kalles funksjonen

Detaljer

INF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer.

INF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer. INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Mer om verditilordning. Tabeller. Og strømmer. Erik Velldal Universitetet i Oslo 29. mars 2016 De siste ukene: destruktive operasjoner

Detaljer

INF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer.

INF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer. INF2810: Funksjonell Programmering Mer om verditilordning. Tabeller. Og strømmer. Erik Velldal Universitetet i Oslo 29. mars 2016 De siste ukene: destruktive operasjoner 2 set! endrer verditilordningen

Detaljer

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

INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon. INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon. Stephan Oepen & Erik Velldal Universitetet i Oslo 25. januar, 2013 På blokka 2 Forrige uke Introduksjon og oversikt Funksjonell

Detaljer

INF2810: Funksjonell Programmering. Muterbare data

INF2810: Funksjonell Programmering. Muterbare data INF2810: Funksjonell Programmering Muterbare data Stephan Oepen Universitetet i Oslo 15. mars 2016 Agenda Forrige uke Prosedyrebasert objektorientering Lokale tilstandsvariabler Innkapsling + set! Eksempel:

Detaljer

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data. INF2810: Funksjonell Programmering Mer om verditilordning og muterbare data. Erik Velldal Universitetet i Oslo 16. mars 2017 De siste ukene: destruktive operasjoner 2 set! endrer verditilordningen til

Detaljer

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data. INF2810: Funksjonell Programmering Mer om verditilordning og muterbare data. Erik Velldal Universitetet i Oslo 16. mars 2017 De siste ukene: destruktive operasjoner 2 set! endrer verditilordningen til

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal Universitetet i Oslo 28. mai 2015 I dag Kort oppsummering Praktisk om eksamen Hvem

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 18. mai 2017 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 18. mai 2017 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 31. mai 2016 I dag Kort oppsummering Praktisk

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 31. mai 2016 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen

Detaljer

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: Funksjonell Programmering. Tilstand og verditilordning INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Tilstand og verditilordning Erik Velldal Universitetet i Oslo 26. februar 2015 Forrige gang 2 I dag Vi blar om til kapittel 3 i SICP.

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Side 1 UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810 Eksamensdag: 7. juni Tid for eksamen: 14.30 Oppgavesettet er på 5 sider Vedlegg Relevante prosedyrer Tillatte

Detaljer

(define (naer-nok-kuberot? y x) (< (abs (- (kube y) x)) 0.001)) (define (naermere-kuberot y x) (/ (+ (* y 2) (/ x (kvadrat y))) 3))

(define (naer-nok-kuberot? y x) (< (abs (- (kube y) x)) 0.001)) (define (naermere-kuberot y x) (/ (+ (* y 2) (/ x (kvadrat y))) 3)) Oppgave 1 For å komme nærmere kuberoten (tredjeroten) til et tall x fra en foreløpig tilnærming y, kan vi bruke formelen (2y + x/y 2 )/3. Skriv prosedyrene (nær-nok-kuberot? y x), (nærmere-kuberot y x)

Detaljer

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: Funksjonell Programmering. Tilstand og verditilordning INF2810: Funksjonell Programmering Tilstand og verditilordning Stephan Oepen Universitetet i Oslo 2. mars 2017 Forrige gang 2 I dag 3 Vi blar om til kapittel 3 i SICP. Tilstand og verditilordning. Destruktive

Detaljer

Eksamen i SLI230, vår 2003.

Eksamen i SLI230, vår 2003. Eksamen i SLI230, vår 2003. Oppgavesettet har 8 sider medregnet denne forsiden. Ingen hjelpemidler er tillatt. Vedlegg: To sider som inneholder en liste over primitiver fra scheme (og simply.scm) samt

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810 Eksamensdag: 5. juni, 2014 Tid for eksamen: 14:30 (4 timer) Oppgavesettet er på 4 sider. Vedlegg: Ingen Tillatte hjelpemidler:

Detaljer

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: Funksjonell Programmering. Tilstand og verditilordning INF2810: Funksjonell Programmering Tilstand og verditilordning Stephan Oepen Universitetet i Oslo 8. mars 2016 Forrige gang 2 I dag 3 Vi blar om til kapittel 3 i SICP. Tilstand og verditilordning. Destruktive

Detaljer

Sideeekter og makroer i Lisp

Sideeekter og makroer i Lisp Sideeekter og makroer i Lisp PVV-kurs 18. mars 2010 Oversikt over kurset (Del 4: Imperativ programmering (utsatt fra forrige kurs)) (Del 5: Makroer) (Del 6: Eksempel: Postmodern) Eirik Alderslyst Nygaard

Detaljer

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Strømmer og utsatt evaluering Erik Velldal Universitetet i Oslo 5. april 2016 Forrige forelesning Mer om (prosedyre)navn, bindinger,

Detaljer

Stack. En enkel, lineær datastruktur

Stack. En enkel, lineær datastruktur Stack En enkel, lineær datastruktur Hva er en stack? En datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist Et nytt element legges alltid på toppen av stakken Skal vi

Detaljer

Vi skal se på lambda-uttrykk. Følgende er definerte og vil bli brukt gjennom oppgaven

Vi skal se på lambda-uttrykk. Følgende er definerte og vil bli brukt gjennom oppgaven SLI 230 - side 2 av 8 EKSAMENSOPPGAVE - SLI 230 - VÅR 2000 Nedenfor følger eksamensoppgaver i SLI 230. Først om oppgavene Bakerst følger to sider med hjelp slik det er avtalt - liste over primitiver fra

Detaljer

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

INF oktober Stein Krogdahl. Kap 23.5: Trær og strategier for spill med to spillere INF 4130 1. oktober 2009 Stein Krogdahl Dagens program: Første time: Kap 23.5: Trær og strategier for spill med to spillere Andre time, gjesteforelesning: Rune Djurhuus: Om sjakkspillende programmer (Ikke

Detaljer

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: Funksjonell Programmering. Tilstand og verditilordning INF2810: Funksjonell Programmering Tilstand og verditilordning Erik Velldal Universitetet i Oslo 1. mars 2018 Forrige gang 2 Kode som trær 3 Ved evaluering oversettes kildekoden i et språk først til et

Detaljer

Definisjon av binært søketre

Definisjon av binært søketre Binære søketrær Definisjon av binært søketre For alle nodene i et binært søketre gjelder: Alle verdiene i nodens venstre subtre er mindre enn verdien i noden Alle verdiene i nodens høyre subtre er større

Detaljer

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

INF 3/ oktober : Avslutte Branch and Bound 23.6: Trær og strategier for spill med to spillere 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.

Detaljer

AlgDat 12. Forelesning 2. Gunnar Misund

AlgDat 12. Forelesning 2. Gunnar Misund AlgDat 12 Forelesning 2 Forrige forelesning Følg med på hiof.no/algdat, ikke minst beskjedsida! Algdat: Fundamentalt, klassisk, morsomt,...krevende :) Pensum: Forelesningene, oppgavene (pluss deler av

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 29: Kompleksitetsteori Roger Antonsen Institutt for informatikk, Universitetet i Oslo 13. mai 2009 (Sist oppdatert: 2009-05-17 22:38) Forelesning 29: Kompleksitetsteori

Detaljer

Forelesning 29: Kompleksitetsteori

Forelesning 29: Kompleksitetsteori MAT1030 Diskret Matematikk Forelesning 29: Kompleksitetsteori Roger Antonsen Institutt for informatikk, Universitetet i Oslo Forelesning 29: Kompleksitetsteori 13. mai 2009 (Sist oppdatert: 2009-05-17

Detaljer

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

6. oktober Dagens program: Første time: Andre time, gjesteforelesning: Uavgjørbarhet. Stein Krogdahl. (Ikke pensum, egne foiler legges ut) Dagens program: Første time: INF 4130 6. oktober 2011 Stein Krogdahl Kap 23.5: Spilltrær og strategier for spill med to spillere Andre time, gjesteforelesning: Rune Djurhuus: Om sjakkspillende programmer

Detaljer

INF3140 Modeller for parallellitet INF3140/4140: Programanalyse

INF3140 Modeller for parallellitet INF3140/4140: Programanalyse INF3140/4140: Programanalyse Uke 4, side 1. Hvordan sjekke egenskaper ved programmer? Testing eller debugging øker tilliten til programmet ved prøving, men gir ingen garanti for korrekthet Operasjonell

Detaljer

Innlevering 2a i INF2810, vår 2017

Innlevering 2a i INF2810, vår 2017 Innlevering 2a i INF2810, vår 2017 Hovedtematikken denne gang er Huffman-koding, som ble dekket i 6. forelesning (23. februar) og i seksjon 2.3.4 i SICP. Det er viktig å ha lest denne seksjonen før dere

Detaljer

Notat 2, ST Sammensatte uttrykk. 27. januar 2006

Notat 2, ST Sammensatte uttrykk. 27. januar 2006 Notat 2, ST1301 27. januar 2006 1 Sammensatte uttrykk Vi har sett at funksjoner ikke trenger å bestå av annet enn ett enkeltuttrykk som angir hva funksjonen skal returnere uttrykkt ved de variable funksjonen

Detaljer

Moderne Funksjonell Programmering i Lisp

Moderne Funksjonell Programmering i Lisp Moderne Funksjonell Programmering i Lisp Lars Tveito 11. mai, 2017 Institutt for Informatikk, University of Oslo Introduksjon Abstract Vi skal utforske programmeringsspråket Clojure, en moderne Lisp-dialekt.

Detaljer

Øving 1 - Gjennomgang

Øving 1 - Gjennomgang INF5390 Kunstig intelligens Øving 1 - Gjennomgang Roar Fjellheim INF5390 Øving 1 - Gjennomgang 1 Øving 1.1 Intelligent Agents (INF5390-AI-02) Skriv pseudo-kode for agentprogrammene for a. GOAL-BASED-AGENT

Detaljer

INF2810: Funksjonell Programmering. Mer om strømmer

INF2810: Funksjonell Programmering. Mer om strømmer INF2810: Funksjonell Programmering Mer om strømmer Stephan Oepen & Erik Velldal Universitetet i Oslo 19. april 2013 Tema 2 Forrige uke Repetisjon: parallelitet Noe helt nytt: strømmer Noe quizzaktivitet

Detaljer

INF2810: Funksjonell Programmering. Mer om strømmer

INF2810: Funksjonell Programmering. Mer om strømmer INF2810: Funksjonell Programmering Mer om strømmer Stephan Oepen & Erik Velldal Universitetet i Oslo 19. april 2013 Tema 2 Forrige uke Repetisjon: parallelitet Noe helt nytt: strømmer Noe quizzaktivitet

Detaljer

Notat 2, ST januar 2005

Notat 2, ST januar 2005 Notat 2, ST1301 25. januar 2005 1 Sammensatte uttrykk Vi har sett at funksjoner ikke trenger å bestå av annet enn ett enkeltuttrykk som angir hva funksjonen skal returnere uttrykkt ved de variable funksjonen

Detaljer

Rekursjon. Binærsøk. Hanois tårn.

Rekursjon. Binærsøk. Hanois tårn. Rekursjon Binærsøk. Hanois tårn. Hvorfor sortering (og søking) er viktig i programmering «orden» i dataene vi blir fort lei av å lete poleksempel internett «alt» er søking og sortering alternativer til

Detaljer

TDT4165 PROGRAMMING LANGUAGES. Exercise 02 Togvogn-skifting

TDT4165 PROGRAMMING LANGUAGES. Exercise 02 Togvogn-skifting TDT4165 PROGRAMMING LANGUAGES Fall 2012 Exercise 02 Togvogn-skifting Problembeskrivelse Du er sjef for å skifte vognene til et tog. Vi antar at hver vogn selv har en motor og at toget ikke har noe lokomotiv.

Detaljer

PG4200 Algoritmer og datastrukturer Forelesning 7

PG4200 Algoritmer og datastrukturer Forelesning 7 PG4200 Algoritmer og datastrukturer Forelesning 7 Lars Sydnes, NITH 19. mars 2014 I. TERMINOLOGI FOR TRÆR TRÆR Lister: Lineære Trær: Hierarkiske Modell / Språk: Bestanddeler: Noder, forbindelser. Forbindelse

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Eksamen i UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamensdag: 13. desember 2011 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 7 sider. Vedlegg: INF2220 lgoritmer og datastrukturer

Detaljer

!"!#$ INF-MAT Geir Hasle - Leksjon 2 2

!!#$ INF-MAT Geir Hasle - Leksjon 2 2 Leksjon 2 !"!#$ Kursinformasjon Motivasjon Operasjonsanalyse Kunstig intelligens Optimeringsproblemer (diskrete) Matematisk program COP Definisjon DOP Anvendelser Kompleksitetsteori Eksakte metoder, approksimasjonsmetoder

Detaljer

Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper.

Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper. Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper. Par kan representeres grafiske slik: Som vi ser kan vi bruke cons til å lage par hvis

Detaljer

Eksamen i SLI 5 høsten 1993

Eksamen i SLI 5 høsten 1993 1 Eksamen i SLI 5 høsten 1993 Tid: Mandag 29.november 1993 kl. 9-15 (6 timer). Det er ikke tillatt med trykte eller skrevne hjelpemidler. Som siste ark i dette eksamenssettet er det lagt ved en liste over

Detaljer

Binære trær: Noen algoritmer og anvendelser

Binære trær: Noen algoritmer og anvendelser Binære trær: Noen algoritmer og anvendelser Algoritmer / anvendelser: Søking i usortert binært tre Telling av antall noder og nivåer i treet Traversering av binære trær Binære uttrykkstrær Kunstig intelligens(?):

Detaljer

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013 NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 20 ette løsningsforslaget er til tider mer detaljert enn det man vil forvente av en eksamensbesvarelse. et er altså ikke et eksempel

Detaljer

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE Emne: Gruppe(r): Tillatte hjelpemidler: Ingen Kunstig intelligens Antall sider (inkl. forsiden): 5 Emnekode: LV 145A Dato: 04.05.05 Antall oppgaver: 3 Faglig

Detaljer

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

KONTINUASJONSEKSAMEN I EMNE. TDT4136 Logikk og resonnerende systemer. Lørdag 8. august 2009, kl Side 1 av 6 KONTINUASJONSEKSAMEN I EMNE TDT4136 Logikk og resonnerende systemer Lørdag 8. august 2009, kl. 09.00 13.00 Oppgaven er utarbeidet av Tore Amble, og kvalitetssikret av Lester Solbakken. Kontaktperson

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i IN 115 og IN 110 Algoritmer og datastrukturer Eksamensdag: 14. mai 1996 Tid for eksamen: 9.00 15.00 Oppgavesettet er på 8 sider.

Detaljer

Definisjon: Et sortert tre

Definisjon: Et sortert tre Binære søketrær Definisjon: Et sortert tre For alle nodene i et binært søketre gjelder: Alle verdiene i nodens venstre subtre er mindre enn verdien i noden Alle verdiene i nodens høyre subtre er større

Detaljer

Rekursiv programmering

Rekursiv programmering Rekursiv programmering Babushka-dukker En russisk Babushkadukke er en sekvens av like dukker inne i hverandre, som kan åpnes Hver gang en dukke åpnes er det en mindre utgave av dukken inni, inntil man

Detaljer

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19 Dagens tema Typer (Kapittel 3 frem til 3.3.1.) Innføring i ML (Kapittel 7.4.3 & ML-kompendiet.) 1/19 Forelesning 2 27.8.2003 Typer En (data-)type består av: en mengde verdier en mengde operasjoner man

Detaljer

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning Dagens tema Typer (Kapittel 3 frem til 331) Innføring i ML (Kapittel 743 & ML-kompendiet) Typer En (data-)type består av: en mengde verdier en mengde operasjoner man kan anvende på disse verdiene Eksempel:

Detaljer

Obligatorisk oppgave 2 i INF 4130, høsten 2009

Obligatorisk oppgave 2 i INF 4130, høsten 2009 Obligatorisk oppgave 2 i INF 410, høsten 2009 Leveringsfrist 2. oktober Generelt for alle oppgavene Samme reglement gjelder som for obligatorisk oppgave 1. Det kan komme presiseringer og forandringer i

Detaljer

Dagens tema: Regulære språk og uttrykk

Dagens tema: Regulære språk og uttrykk IN 2 Programmeringsspråk Dagens tema: Regulære språk og uttrykk Ulike typer språk (Kompendium 47: 23) Hvorfor er regulære uttrykk så interessante? Ulike representasjoner av regulære språk (Kompendium 47:

Detaljer

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk Ark 1 av 18 IN 211 Programmeringsspråk Velkommen til programmeringsspråkenes verden IN 211 Forelesning 20.8.2001 Foreleser Ragnhild Kobro Runde E-post: ragnhilk@ifi.uio.no Kontor: 3345 Treffetid: torsdager

Detaljer

AlgDat 10. Forelesning 2. Gunnar Misund

AlgDat 10. Forelesning 2. Gunnar Misund AlgDat 10 Forelesning 2 Oversikt Java repetisjon IDE eller teksteditor + kommandolinje? Java Collections and Generics Programvareutvikling En mengde mer eller mindre veldefinerte metoder (software engineering):

Detaljer

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

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel ) INF2220: Forelesning 1 Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel 4.1-4.3 + 4.6) PRAKTISK INFORMASJON 2 Praktisk informasjon Kursansvarlige Ragnhild Kobro Runde (ragnhilk@ifi.uio.no)

Detaljer