Wumpus World SLI 370. Linn Irén Humlekjρr. Universitetet i Oslo. Institutt for lingvistiske fag

Størrelse: px
Begynne med side:

Download "Wumpus World SLI 370. Linn Irén Humlekjρr. Universitetet i Oslo. Institutt for lingvistiske fag"

Transkript

1 Wumpus World SLI 370 Eksamen Hfisten 1999 av Gyrd Brρndeland og Linn Irén Humlekjρr. Universitetet i Oslo Institutt for lingvistiske fag

2

3 Innhold 1 En logisk agent Konseptet Wumpus World" Spillet en beskrivelse Agenten Omgivelsen Kunnskapsbasen Strategier Sfikestrategi Prioritering mellom ulike mνal Sprνaket, slutningsmekanismen og Prolog Begrensninger i utsagnslogikk Begrensninger i predikatlogikk Skille mellom fakta og deres representasjon Forskjeller mellom Prolog og predikatlogikk Problemer med eksistens Problemer med negasjon Effektivisering av sfik Aktuelle utvidelser av applikasjonen Omgivelsen Agenten Kunnskapsbasen Teknisk dokumentasjon Getting started Defsystem Agenten Omgivelsen Kunnskapsbasen Typer og metoder Kommunikasjon mellom agenten, KB og brukeren Miscellaneous Effektivisering og optimering Effektiviserings-tiltak Optimerings-tiltak

4 AWumpus World kildekode 27 A.1 wumpus-types.cl A.2 kb-agent.lisp A.3 system.cl A.4 optimizing.cl A.5 actions.cl A.6 action-value.cl A.7 wumpus-rules.cl A.8 new-values.cl A.9 chicke-value.cl A.10 abstractions.cl A.11 utilities.cl A.12 init.cl A.13 pretty-printing.cl A.14 gold-digger.cl A.15 prolog-till.cl A.16 onprolog3.lisp B Kjfiringseksempel 67

5 Innledning Jeg gir stort sett faen i rom, men jeg har problemer med tid. Erlend Loe Dette dokumentet inneholder dokumentasjon for spillet Wumpus World, og er en del av SLI 370 eksamen, hfisten 1999, ved Universitetet i Oslo. Dokumentasjonen er delt i to: kapittel 1 inneholder en beskrivelese av spillet og strategien, samt begrunnelse av ulike valg vi har foretatt, kapittel 2 er en teknisk rapport av spillet. Valg av oppgave Mνalet med oppgaven er νa lage en agent som ved hjelp av logisk resonnering kan lfise oppgaver i en forholdsvis enkel kunstig omgivelse. Vi har valgt νa bruke Wumpus-verden, omtalt i del III, kapittel 6-10, i Russel og Norvig (1995). Vi valgte Wumpus-verden, blant annet for νa ha en omgivelse hvor det ville vre gjennomffirbart νa implementere en logisk slutningsmekanisme som kunne fungere, i lfipet av overskuelig tid. χnske omenenkel omgivelse I startfasen samarbeidet vi med Karl Otto Dfiviken Ekle om Robo Rally. Dette spillet er mer omfattende en Wumpus-verden, bνade med hensyn pνa selve implementasjonen av brettet og kompleksiteten av omgivelsen. Blant annet kan omgivelsen til Robo rally-spillet sies νa vre ikke-deterministisk, fordi nye tilstander i verden ikke bare er bestemt av foregνaende tilstand pluss agentens handling, men ogsνa av endringer iverden og andre agenters trekk. Vi skiftet derfor til et enklere spill, hvor implementasjonen av brettet og metodene rundt det er forholdsvis enkel, slik at vi kunne vie mer av arbeidet til νa bygge opp en kunnskapsbase for en agent ogfνa en slutningsmekanisme til νa fungere. Vurdering av applikasjonen Vi har oppnνadd mνalsetningen om νa lage en agent som bruker et logisk sprνak til νa resonnere for νa lfise oppgaver i Wumpus-verden. Vi har laget et minimum av setninger i Prolog, som er tilstrekkelig for νa fνa agenten til νa fungere. Bνade oppgaven som agenten skal lse og omgivelsen er svrt enkel. En kunne tenke seg utvidelser for νa gi agenten flere oppgaver, og endringer i omgivelsen som ville gjfire den mer kompleks, men dette ville krevd en mer omfattende kunnskapsbase. Kunnskapen agenten har er nok til νa lfise oppgaven i noen instansieringer av Wumpusverden, men ikke i alle. Den stfirste utfordringen har ligget i νa bygge opp en kunnskapsbase 5

6 med setninger om verden som er generelle nok til νa kunne gjelde i alle tilfeller. Et spfirsmνal i arbeidet medνa lage en logisk agent, er hvor mange fakta om en omgivelse det er muligνa fange inn med logiske setninger. Dette har vist seg vanskeligere enn vi trodde pνa forhνand. Selv for en sνa enkel omgivelse som Wumpus-verden, en det problematisk νa gi agenten kategoriske imperativ om allmene gode eller dνarlige handlinger. Dersom en skulle prfive νa fange inn alle mulige situasjoner en kunne tenke seg (hvis det i det hele tatt er mulig), ville sfike jobben blitt veldig stor. En mer komplett sfikestrateg, kan derfor gνa pνa bekostning av tidskompleksitet og romkompleksitet ved sfikingen. Det at vi mfiter denne typen problemer i en sνa enkel omgivelse som Wumpus-verden, indikerer at en mer kompleks omgivelse hvor ikke alle fakta er kjent, trolig vil kreve en noe mer fleksibel hνandtering av hva som er rett og galt. For mer om dette, se Problemer under utvikling Underveis i arbeidet stfitte vi pνa problemer med hensyn pνa hvilket logisk sprνak vi skulle velge til νa representere kunnskap, og spfirsmνal om hvor detaljert vi klarer νa beskrive verden ved hjelp av logikk, se 1.3. Videre hadde vi en del tekniske problemer med optimering av koden, for νa fνa den til νa kjfire i Allegro CL 2. Hvordan behandle ting som kunne vρrt gjort annerledes Vi har gjort flere valg bνade med hensyn til den fysiske implementasjonen av spillet, og med hensyn pνa valg av sprνak for νa representere kunnskap. Valgene har ofte vrt styrt av praktiske hensyn, det vi si vi har valgt de metodene vi har fνatt til νa fungere. Men vi mener de valgene vi har foretatt kan forsvares i forhold til beskrivelsen av oppgaven. Der vi har foretatt valg har vi forsfikt νa begrunne dette i dokumentasjonen.

7 Kapittel 1 En logisk agent 1.1 Konseptet Wumpus World" Spillet en beskrivelse Spillet bestνar av en kunnskapsbasert agent og en kunstig omgivelse. Det er ingen fysiske spillere, kun én virtuell (agenten) og én statisk spiller (Wumpus). Wumpus World er et lukket informasjons-spill der agenten ikke har informasjon om spill-brettet (omgivelsen). Agenten har et hovedmaal og flere delmνal, som hun forsfiker νa oppnνa ved et uinformert sfik, det vil si agenten kan skille mνal-tilstand fra ikke-mνaltilstand, men har ikke informasjon om hvor mange steg som mνa til eller hva kostnaden er, for νa komme i mνal. Dette gir forfivrig et sνakalt horisont-problem, som innebρrer at agenten ikkekan forutsi eller kaste blikk over spill-brettet for νa planlegge neste trekk. Trekkene eller de handlingene som agenten utffirer bestemmes ikke ffir etter at agenten har sanset, og informasjonen om de sansede persepsjonene er lagt til kunnskapsbasen (agentens hukommelse). Det er to farer som truer agentens sikkerhet. Agenten kan falle i endelfise brfinner, og hun kan stfite pνa en Wumpus. I begge tilfellene vil agenten dfi pνa stedet. Hvert brett genereres tilfeldig og pfinget er at agenten skal kunne klare oppgaven sin pνa en tilfredsstillende mνate innenfor et sett av ulike brett. For νa fνa til dette mνa reglene i kunnskapsbasen vρre bνade generelle og kompakte. Vi finsker νa beskrive trekk ved omgivelsen som gjelder i alle mulige permutasjoner av Wumpus-verden med enkle og konsise regler. En viktig utfordring ved νa lage en "god" spiller i Wumpus-verden ligger derfor i oppbyggingen av kunnskapsbasen De beste trekkene som agenten foretar er bestemt ut fra strategien og vurdert etter verdien pνa konsekvensen av handlingen Agenten En mνalbasert agent har de samme egenskapene som en en modell-basert agent i tillegg til at den har viten om mνal og den har evner til νa konstruere en indre representasjon av verdenen eller omgivelsen den befinner seg i. Denne indre representasjonen bruker agenten til νa handle. Den setter seg mνal og forsfiker νa oppnνa disse. Agenten i Wumpus World er en mνal-basert 7

8 agent. Hun har en indre representasjonen av persepsjoner, som hun bruker til νa utffire og valuere handlinger. Pνa grun av dette kan vi si at hun til en viss utstrekning er autonom (jfr AI s 49). Til tross for at hun famler rundt i mfirke, kan hun via sine sanser, vite om det det er gull i det rommet hun er eller om det er en Wumpus eller et sort hull i umiddelbar nρrhet. Hun resonnerer seg frem, via kunnskapsbasen, til hva som til enhver tid er delmνal og hva det overordnede (hoved-) mνalet er. Hovedmνalet er νa finne gullet for sνa νa komme seg til tilbake til *start*, levende og pνa kortest mulig antall skritt. Siden agenten vet om hun bρrer med seg gullet, er hun i stand til νa utffire fruktbare handlinger i forhold til de delmνalene som er satt nνar agenten befinner seg i en gitt situasjon. Agentens sentrale bestanddeler er en kunnskapsbase og en slutningsmekanisme. Kunnskapsbasen inneholder setninger, som representerer fakta om verden. Agenten har et logisk sprνak som den bruker til νa representere fakta om verden, og en fysikalistisk del av sensorer som mottar input fra omgivelsen. Etterhvert som agenten gνar rundt pνa brettet, oppdaterer den kunnskapsbasen med de erfaringene den gjfir seg. Ved hjelp av regler og erfaringer skal agenten kunne slutte seg til hvor det er trygt/ikke trygt νa gνa, hvor det er lurt νa gνa osv Omgivelsen Kort beskrevet bestνar omgivelsen til Wumpus-verden av en hule, representert som et brett med 4x4 ruter, omgitt av vegger. Et monster og en klump med gull plasseres tilfeldig pνa brettet, men aldri i startposisjonen. I tillegg kan hver rute med sannsynlighet 0.2 vρre en bunnlfis brfinn. Agenten starter i rute (1 1), i henhold til det kartesiske koordinatsystemet (se ogsνa avsnittet om koordinater, seksjon 2.8). En mer utffirlig beskrivelse av omgivelsen for Wumpus-spillet gis pνa side i "Artificial Intelligence". Pνa side 46 i "Aritificial Intelligence" gis en oversikt over noen ulike omgivelser og deres karakteristikker. Vi gir her en kort oppsummering av de viktigste distinksjonene: * Aksessibelt versus inaksessibelt, som gνar pνa hvorvidt den komplette tilstanden til en omgivelse er tilgjengelig fra agentens sesorer eller ikke. * Determisitisk versus ikke-deterministisk. Det vil si hvorvidt neste tilstand av omgivelsen er bestemt kun av foregνaende tilstand samt agentens handling, eller ikke. * Episodisk versus ikke-episodisk. I en episodisk omgivelse er agentens erfaringshistorie delt opp i "episoder" som bestνar av sensor-input for agenten + en handling. Kvaliteten av handlingene avhenger kun av episoden selv, og agenten trenger dermed ikke tenke framover. * Statisk versus dynamisk. En omgivelse sies νa vρre dynamisk hvis den kan endre seg samtidig med at agenten resonnerer, ellers er den statisk. En kan ogsνa ha semidynamiske omgivelser hvor omgivelsen ikke endrer seg, men kvaliteten pνa responsen endres. * Diskret versus kontinuerlig. En diskret omgivelse kjennetegnes ved at det finnes et endelig antall utvetydige beskrivelser av mulige handlinger og sensor-input. En omgivelse er kontinuerlig nνar uforutsatte, ikke-definerte fenomener plutselig oppstνar.

9 Hvilken type omgivelse man velger har betydning for utforming av agenten. Det finnes flere typer av omgivelser og hvor kompleks den er avhenger av dens karakteristika. Vνar versjon av Wumpus-verden er en av de enklere omgivelsene man kan lage. Den er riktignok ikke aksessibel; agenten har kun oversikt over den ruten hun befinner seg i. Av andre mulige karakteristikker passer imidlertid Wumpus-verden med de enklere variantene. Omgivelsen er deterministisk - det er kun agenten som flytter pνa seg. Derfor vil de trekkene ved verden som agenten oppdager holde seg stabile igjennom et helt spill. Vνar Wumpus-verden er ogsνa episodisk, statisk og diskret. En kan argumentere for at det ikke finnes et endelig antall regler om trekk ved verden. Det vil sannsynligvis alltid vρre mulig νa utvide kunnskapsbasen med regler om sammenhenger i verden og nytten av ulike handlinger for νa gjfire agenten enda bedre, slik at omgivelsen ikke kan kalles hundre prosent deterministisk. Poenget er imidlertid at det kun finnes et endelig antall lovlige handlinger (gνa fram, snu til venstre, snu til hfiyre, skyt, grip og klatr) og mulige sensor-input (lukt, vind, glitring, skrik og bump). Slik vi tolker Russel/Norvig er det dette som avgjfir om verden er diskret Kunnskapsbasen Kunnskapsbasen bestνar av * Konkrete ting som gull * Hendelse, ting i tid og rom * Historieforlfip *Valuerte handlinger Oppbygging av kunnskapsbasen Kunnskapsbasen er delt i tre. Filene wumpus-rules inneholder setninger om sammenhenger i verden. Filene action-value og new-values inneholder nytteregler, hvor en verdi knyttes til en handling, som agenten bruker pνa sin vei til νa oppnνa mνalene. Nνar agenten har funnet gull mνa hun skifte strategi, og da mνa handlingene evalueres pνa en annen mνate enn tidligere. Hvordan man skal fνa til dette kan gjfires pνa flere mνater, for eksempel ved νa lahver regel sjekke om agenten holder gullet eller ikke. Vi valgte isteden νa legge setningene om verdier i to atskilte baser, og bytte base nνar agenten har gullet. Pνa den mνaten begrenser vi sfiket og tydeliggjfir at det dreier seg om ulike mνal/delmνal. Hvordan representere kunnskap Et sentralt problem i oppbygging av kunnskapsbasen er hvorvidt en klarer νa lage setninger som til sammen beskriver alle mulige sammenhenger i verden, og hvordan kunnskapen skal representeres. Dette henger blant annet sammen med hvor utrykksfult sprνaket en velger er, og vi redegjfir grundigere for problemer rundt dette i Ivalg av ontologi har vi i stor grad fulgt oppskriften i AI.Envanskelighet var hvordan vi skulle skille mellom situasjoner, eller hvordan vi skulle representere tid. I eksemplene fra AI

10 ffilger det med en situasjonsparameter, s, i setningene om verden. Vi tolket denne som en tidsparameter, t, som fikes med 1 for hver ny situasjon. En utfordring i oppbygging av kb ligger i νa uttrykke kompakte regler, det vil si regler som er generelle nok til νa kunne brukes i flere situasjoner. Etter hvert som vi lager nye regler, kan vi da bruke de grunnleggende reglene vi allerede har laget. Vνar kunnskapsbase er spesialisert til νa hνandtere fakta om klassen av mulige Wumpus-verdener. 1.2 Strategier Sfikestrategi Vi tar her med fire kriterier som vi vil vurdere vνart valg av sfikestrategi etter. * Kompletthet; vil agenten kunne oppnνa de mνalsetningene den har satt seg for alle brett som genereres? * Tidskompleksitet; vil mνalet nνas i endelig tid? * Romkompleksitet; vil det vρre nok minne slik at agenten kommer i mνal? * Optimalitet; finner agenten den beste og letteste vei νa komme i mνal? I henhod til kriteriene over, kan vi si at vνar sfikestrategi ikke oppfyller kompletthets-kriteriet, det vil si at agenten ikke er garantert νa komme i mνal selv om det finnes en mulig vei til gullet. Problemet er at agenten ikke har tilgang pνa hele sannheten om omgivelsen. Det vil alltid vρre spfirsmνal hvor det ikke finnes kategoriske svar og agenten mνa derfor av og til handle i usikkerhet. For eksempel vil en agent ofte ikke vρre i stand til νa avgjfire hvilken rute av to som er en brfinn. Tidskompleksitet er tilfredsstillbar. Agenten bruker litt tid, men er i stand til νa nνa mνalet, eller gi opp hvis den ikke finner en sikker vei, i endelig tid og unngνa uendelige looper. Nνar det gjelder romkompleksiteten har vi nok minne slik som systemet ser ut nνa. Men ved en utvidelse av kunnskapsbasen vil vi kunne fνa problemer. Vνar algoritme oppfyller ikke kriteriet om optimalt sfik, fordi den ikke garanterer den beste og strake veien til mνalet. Dette skyldes blant annet at agenten utffirer et sνakalt blindt-sfik Prioritering mellom ulike mνal Et mνal for agenten er νa finne gullet. Et annet mνal er νa overleve, det vil si bevege seg i trygge omrνader. Et tredje mνal gνar pνa effektivitet. Vi finsker at agenten ikkeskal surre for mye rundt, men finne gullet raskest mulig. Vi har forsfikt νa sikre at agenten ffilger denne strategien ved νa formulere at det er best νa gνa til trygge uutforskede steder, nest best νa gνa til trygge utforskete steder og tredje best νa gνa til utrygge steder. Agenten skal under ingen omstendighet gνa til steder den vet er dfidelige. Hvor bra agenten lfiser oppgaven vil avhenge av hvor godt reglene klarer νa fange inn det en finsker νa oppnνa. Vi har valgt et minimum av nytteregler som skal til for at agenten klarer νa lfise oppgaven i noen av verdenene. Men vi kunne sannsynligvis klart νa fνa agenten til νa

11 lfise oppgaven raskere eller klart νa hνandtere flere verdener ved νa utvide reglene, eller kanskje finmasket dem ennνa mer. Nytteverdien av en handling er som nevnt bestemt ut fra hvordan vi vurderer konsekvensen av handlingen. Vi har forsfikt νa holde oss til en vurdering av de beste handlingene (great) til νa vρre mνalrettet adferd, de nest beste (good) til νa vρre trygge handlinger nνar agenten er pνa jakt efter gull og mνalrettede handlinger nνar gullet er funnet og agenten er pνa vei hjem. I dette ligger ogsνa en del avνarsaken til at en ny fil blir lastet inn i hukommelsen. Medium" handlinger er de aksjonene som er safe, men ikke nfidvendigvis i riktig retning. Risky" handlinger er handlinger hvis konsekvensene er usikre. De handlinger som medffirer dfiden er de karakterisert som deadly" handlinger. Mνalet om νa finne gullet trygt vil ikke vρre oppnνaelig innenfor alle typer verdener, noen ganger kan gullet ligge nede i en brfinn. Andre ganger kan det finnes en vei til gullet, men agenten er nfidt til νa ta sjanser for νa finne det. Dette ga problemer nνar vi skulle definere nytten av ulike handlinger. I utgangspunktet skal agenten snu og prfive en trygg vei, hvis veien fram er riskabel. Men hva er riktig νa gjfire nνar alle bomsikre veier er utprfivd? Vi har kjfirt to agenter med ulik strategi; en feig" som setter sin egen sikkerhet hfiyere enn mνalet om νa finne gullet, og en som begynner νa ta sjanser nνar de sikre veiene er utprfivd. Den dristige agenten klarer νa finne gullet litt oftere enn den feige", men sνa har ogsνa den dristige agenten en hfiyere dfidsrate. Ikke overraskende scoret den feige" agenten gjennomsnittlig hfiyere enn den "dristige" da straffen for νa dfiermye stfirre en gevinsten ved νa finne gullet. For sjekke ulike strategier opp mot hverandre kan man lage statistikk over hvor bra en agent gjr det med funksjonen make-statistics. Den kalles med antall ganger man vil at agenten skal gjennomfre spillet, og en strategi. Mulige forbedringer av sfikestrategien Som nevnt vil agentens yteevne avhenge av hvor godt reglene klarer νa fange inn det en finsker νa oppnνa. Vi har ikke gjort noen grundige undersfikelser av hvilke nytteverdier som vil fungere best, utover hva vi tror er mest hensiktsmessig, og hva vi har sett fungerer i bestemte situasjoner, og sνa definere nytteverdiene en gang for alle. Vi vil kunne fνa agenten vνar til νa lfise oppgaven i et stfirre antall Wumpus-verdener hvis vi jobbet mer med reglene. En mνate kunne vρrt νa tillatt sνakalt stokastisk sfik, hvor agenten av og til kunne velge handlinger som ikke var definert som optimale. Etter νa ha kjfirt flere agenter gjennom en serie spill kunne en sett hva som fungerte best, og gνatt inn og justert standarden i henhold til hva man hadde funnet ut. Slik reglene er nνa, kan agenten noen ganger velge tilfeldig mellom jevngode handlinger, men det er ikke lagt opp til at den skal lρre av det. 1.3 Sprνaket, slutningsmekanismen og Prolog Et viktig spfirsmνal i arbeidet med νa lage en kunnskapsbasert agent er hvilket sprνak en skal velge, for νa representere kunnskapen til agenten. Hvilket logisk sprνak en velger har betydning for hvilken type slutningsmekanisme en finsker νa bruke.

12 1.3.1 Begrensninger i utsagnslogikk Vi laget ffirst en agent som bruker utsagnslogisk sprνak til νa representere kunnskap om verden og regler i utsagnslogikk til νa resonnere om mulige handlinger (funksjonen gold-digger i filen gold-digger.cl). Til dette brukte vi en slutningsmekanisme i utsagnslogikk hentet fra AI. Ved hjelp av denne klarte agenten νa gjfire noen fνa trekk i Wumpus-verden. Men det viste seg fort at utsagnslogikk ikke er uttrykksfullt nok til νa hνandtere selv en sνa enkel omgivelse. Fordi det utsagsnslogiske sprνaket kun bestνar av enkle utsagn, vil en kunnskapsbase med regler om mulige posisjoner i alle mulige permutasjoner av Wumpus-verden blir alt for stor til νa vρre praktisk hνandterlig. Nνar utsagnslogikken viste seg νa ikke strekke til, finsket vi i utgangspunktet νa utvide til det predikatlogiske sprνaket, som i tillegg til utsagn kan representere ting og relasjoner mellom ting (for mer om representasjon i predikatlogikk, se kapittel 7 i AI). Videre finsket vi νa bruke resolusjon til νa resonnere om verden (for mer om bevismetoder i predikatlogikk se kapittel 9 i AI). Russel/Norvig har laget en skisse for en teorembeviser ved hjelp av resolusjon tilsvarende OTTER, s. 311 i AI. Men vi fikk ikke denne funksjonen til νa virkeogkom fram til at det ville bli for mye arbeid og skulle lage en teorembeviser fra grunnen av pνa egen hνand. Vi valgte derfor νa bruke Prolog som sprνak og slutningsmekanisme istedenfor regulρr predikatlogikk. Prolog tilsvarer ikke helt predikatlogikk, verken i sprνaket eller i slutningsmekanismen, men vi fant at Prolog allikevel ville tjene vνare formνal for en agent i Wumpus-verden. Prologs mekanisme for mfinsterpassing og unifikasjon passer bra til vνart formνal, da sfiking etter hvilke handlinger agenten skal foreta skjer ved mfinsterpassing og unifikasjon. Agenten sender inn et spfirsmνal av typen handling(?variabel tid) til kunnskapsbasen og fνar tilbake en handling bundet til?variabel. Nνar vi hadde valgt Prolog som slutningsmekanisme ga ogsνa det logiske sprνaket seg selv Begrensninger i predikatlogikk Et problem med bruke predikatlogikk eller Prolog til beskrive enverden hvor ikke alle fakta er kjent, er at predikatlogikk ikke gir noe rom for tvil. Ting er enten sant eller usant. Dette kan bli for rigid, selv for en sνa enkel omgivelse som Wumpus-verden. Noe som er bra i situasjon n, gitt visse kriterier, er ikke nfidvendigvis bra i situasjon m gitt de samme kriteriene. Dermed blir det vanskelig νa gi generelle regler, som er sanne eller gale i alle situasjoner. For eksempel beskrev vi ffirst regler som sa: pkt 1: Det er bra νa gνa fram, hvis agenten ikke har gullet, ruten rett fram er trygg og hun ikke har besfikt den ffir. Hvis ruten foran er utrygg er det bra νa snu. Disse reglene holder i mange situasjoner. Men i noen tilfeller kan reglene fνa agentene til νa gνa fram og tilbake mellom to utrygge ruter. I enkelte av spillene er agenten nfidt til νa ta sjanser for νa klare νa finne gullet. Men hvordan skal skille mellom situasjoner nνar det er lurt νa snu, og nνar det er pνa tide νa ta en sjanse? Vi lfiste dette ved νa si at agenten skulle ta en sjanse, eventuelt gi seg hvis ruten den siste besfikte var blitt besfikt mer enn en gang. Sannsynligvis vil vi kunne finne flere spesielle situasjoner som krever egne regler. Vi kan risikere νa fνa en veldig stor kunnskapsbase dersom vi skal fange inn alle mulige situasjoner, og da nρrmer vi oss problemet ved utsagnslogikk. For en agent i Wumpus-verden er disse problemene til νa leve med, men for mer komplekse omgivelser, hvor alle fakta ikke er tilgjengelig for agenten, vil en kanskje trenge en noe mer fleksibel hνandtering av hva som er rett og galt.

13 1.3.3 Skille mellom fakta og deres representasjon Vi skiller mellom den fysiske omgivelsen og agentens representasjon av fakta om verden. Representasjon av fakta tar det logiske sprνaket og slutningsmekanismen, Prolog, seg av. Metodene og brettet tilhfirer den fysiske delen av verden. Funksjonen implement-action i fila actions.cl operer i grenseland mellom det logiske og det fysiske sprνaket; den fνar en handling fra slutningsmekanismen og oppdaterer den fysiske verden. Funksjonen tell i fila prolog-till.cl oppdaterer agentens representasjon av verden Forskjeller mellom Prolog og predikatlogikk Programmering i Prolog ligner ganske myepνa predikatlogikk bνade i syntaks og bevismetode. Et prolog-system er basert pνa en teorembeviser for Horn-klausuler som bruker prinsippet om resolusjon. Men Prolog gir ikke full predikatlogikk. Blant annet har negasjon en litt annen betydning i Prolog enn i predikatlogikk. Prolog likestiller det at noe ikke kan bevises med at det er usant, fordi det antar at den vet alt som er sant. Videre kan en ikke uttrykke disjunksjon helt pνa samme mνate som i predikatlogikk Prolog har ogsνa problemer med νa representere eksistenskvantorer. Valg av Prolog som slutningsmekanisme legger ffiringer pνa syntaksen, fordi Prolog bare aksepterer Horn-klausuler. Hver setning enten er en atomρr setning eller en implikasjon uten negerte antecedencer og med en atomρr konsekvent. Klausuler i Prolog skrives dessuten "motsatt vei" av predikatlogikk, med konsekventen pνa venstre side av implikasjonspila. I oppbyggingen av reglene har vi i stor grad basert oss pνa forslagene i AI, s Mange av reglene var noksνa greie νa oversette, ved νa snupνa dem. Men enkelte regler var vanskelig νa oversette pνa grunn av Prologs problemer med νa uttrykke negasjon og eksistens, slik de ffilgende eksemplene viser Problemer med eksistens Siden eksistenskvantorene ikke lar seg oversette direkte, mνatte vi i uttrykk med eksistens, finne et tilnρrmet uttrykk som best mulig bevarte meningen i det opprinnelige uttrykket. Et eksempel er regelen som skal hjelpe agenten til νa slutte hvor monsteret er 8l1; ssmelly(l1) )9l2At(W umpus; l2;s) V (l2 =l1 W Adjacent(l1;l2)))) Denne lar seg ikke oversette direkte til prolog, men vi klarer likevel νa uttrykke det vi finsker. Vi vil at agenten skal kunne resonnere seg fram til at monsteret er i en bestemt rute, enten fordi hun har besfikt naborutene og fant at de luktet vondt, eller fordi hun ut i fra tidligere erfaringer kan slutte at det bare er en mulig rute monsteret kan vρre pνa. Dette gjorde vi ved νa dele opp i tre regler: (<- (not-wumpus?location) (and (adjacent?location?neighbour) (visited?neighbour) (not (smelly?neighbour)))) ii

14 (<- (at 'Wumpus?location) (not (wall?location)) (and (adjacent?location?neighbour) (smelly?neighbour) (and (locationtoward?neighbour 0?L1) (or (lisp (equal?l1?location)) (wall?l1) (not-wumpus?l1))) (and (locationtoward?neighbour 90?L2) (or (lisp (equal?l2?location)) (wall?l2) (not-wumpus?l2))) (and (locationtoward?neighbour 180?L3) (or (lisp (equal?l3?location)) (wall?l3) (not-wumpus?l3))) (and (locationtoward?neighbour 270?L4) (or (lisp (equal?l4?location)) (wall?l4) (not-wumpus?l4)))) (cut)) iii (<- (at 'Wumpus?location) (not (wall?location)) (and (and (locationtoward?location 0?l1) (or (smelly?l1) (wall?l1))) (and (locationtoward?location 90?l2) (or (smelly?l2) (wall?l2))) (and (locationtoward?location 180?l3) (or (smelly?l3) (wall?l3))) (and (locationtoward?location 270?l4) (or (smelly?l4) (wall?l4))))) Regel ii sier at ffilgende kriterier mνa vρre oppfylt for νa kunne slutte at Wumpusen er i en bestemt rute: Det finnes en naborute som lukter vondt og alle naborutene til naboruta (naboene til naboen), er enten den samme som ruta vi spfir etter, en vegg, eller vi vet at det ikke er en Wumpus der Problemer med negasjon Prolog kan ikke representere at noe ikke er tilfelle. Det vil si du kan ikke ha en regel av typen: (<- (not (at (wumpus, l1, t))))

15 Denne mangelen ga ogsνa noe problemer da vi skulle uttrykke reglene om hvor Wumpusen er. Som nevnt finsket vi i regel ii νa ha med som kriterium at monsteret ikke skulle vρre pνa en rute. Men hvis vi skrev noe ala: at(wumpus, l, result(a, s)):- cond1.. not(at(wumpus, neighnours(neighbour))). fikk vi en selvrefererende regel som ble gνaende i evig lfikke. For νa kunne uttykke at monsteret ikke var et bestemt sted laget vi derfor regelen: (<- (not-wumpus?location) (and (adjacent?location?neighbour) (visited?neighbour) (not (smelly?neighbour)))) For mer om forholdet mellom Prolog og predikatlogikk, se Clocksin og Mellish (1987) (s ), Bratko (1990) (s. 63, 64), Norvig (1992) (s ), Russel og Norvig (1995) (s ) Effektivisering av sfik For νa fνa sfikingen i Prolog til νa gνa litt fortere har vi gjort noen grep som begrenser sfikerommet. Inoenav reglene som vi vet bare angνar et bestemt individ som for eksempel denne: (<- (at 'dumpy?location?s1) (or (and (is?s0 (-?s1 1)) (action 'forward?s0) (locationahead 'dumpy?location?s0) (not (wall?location))) (and (is?s0 (-?s1 1)) (action?a?s0) (not (lisp (eq?a 'forward))) (at 'dumpy?location?s0)))) Her har vi valgt νa la regelen snakke om konstanten 'dumpy (navnet pνa agenten), i stedet for en mer generell variant, som gjelder for alle. Dette er ogsνa fordi det er forskjellige regler for hvorvidt 'dumpy er et sted og hvorvidt 'wumpus eller en brfinn er et sted. Med denne avgrensingen slipper vi at programmet prfiver νa instansiere alle regler som begynner med at, nνar den skal finne ut om agenten er et sted. Videre har vi valgt νa oppdatere lokalisering og orientering til agenten etter hver handling i spill-lfikka, med funksjonen tell-first i fila prolog-till.cl. Nνar vi ikke gjorde det ville Prolog gjfir det samme sfikene hver eneste gang. Nνar den skulle finne ut om en handling var lur i tid n, ville den ffirst sfike seg ned til hvor agenten var i tid 0 og deretter instansiere tilstander for hvert tidspunkt fram til tid n. En annen effektivisering er funksjonen push-rule, som pusher reglene ffirst i listen slik at prolog ikke trenger νa lete seg ned til bunnen for νa fνa tak i siste regel som er lagt til regelbasen.

16 1.4 Aktuelle utvidelser av applikasjonen Spillet Wumpus World er sνa og si blottet for fiffigheter ala det νa kunne gνa til nye nivνa (level) eller fike vanskelighetsgraden og sette nye delmνal. Slike ideer kan man f.eks hente fra et hvilket som helst Play Station-spill. Vi finner det irrelevant νa utvide spillet pνa slike mνater. Derfor inneholder denne seksjonen forslag til vidreutvikling av metoder og teknikker Omgivelsen Nνar vi har fνatt slutningsmekanismen pνa plass i denne enkle omgivelsen, kan en se for seg mulige utvidelser av omgivelsen, som vil gjfire den mer kompleks. En ser ganske fort at utvidelser i omgivelsen ofte vil kreve endringer i agentens kunnskapsbase og slutningsmekansime. For eksempel kan en forholdsvis enkel mνate νa gjfire omgivelsen ikke-deterministisk pνa vρre νa la monsteret Wumpus, flytte pνa seg. Persepsjon av lukt sammen med tidligere erfaringer ville da ikke vρre nok til νa slutte hvor Wumpusen er, og agenten fνar behov for νa kunne si noe om sannsyligheten for at Wumpusen er pνa ulike steder. I en ikke-episodisk omgivelse vil agenten mνatte ta hensyn til hele sitt handlingsforlfip og persepsjonsregister. Den har da mulighet til νa planlegge. En ikke-episodisk utvidelse av Wumpus World vil gνa pνa bekostning av rom-kompleksiteten til sfikestrategien. Hadde vi tillatt et ukjentantall monstre bevege seg i rommet, ville agenten fνatt en ikke-statisk verden νa forholde seg til. Neste avsnitt omhandler blant annet konsekvenser en ikke-statisk omgivelse ville ha fνatt for agenten Agenten En relevant utvidelse av agent-type ville vρre νa lage en desisjons-agent. En desisjons-agent er en agent som foretar beregninger av sannsynligheter og benytter utility-teori. Dette innebρrer at agenten nνa mνa oppdatere, kontinuerlig, sannsynligheten for hvordan den tror verden (omgivelsen) er. Med en ikke-statisk omgivelse (som vi fνar nνar f.eks monstret beveger seg rundt i omgivelsen) vil en desisjons-agent kunne planlegge og dermed oppdatere forbindelsen mellom handlinger og sannynligheter for hvordan verden blir. En slik agent vil velge handlinger med maksimal nytte. Hνandtering av usikkerhet Som nevnt fνar vi ikke til νa lage en komplett sfikestrategi for agenten, fordi den ikke har tilgang til hele sannheten om omgivelsen. Det vil alltid vρre spfirsmνal hvor det ikke finnes kategoriske svar og agenten mνa derfor av og til handle i usikkerhet. I de fleste tilfeller i Wumpus-verden vil sannsynligheten for at noe er tilfelle vρre 50/50, sνa en trenger ikke en egen teori for νa hνandtere usikkerhet. Men innen et omrνade som medisin, vil predikatlogikk alene ikke strekke til som slutningsmekansime. Hvis vi skulle utvidet agenten til νa hνandtere usikkerhet ville det fνa konsekvenser for valg av logisk sprνak, og hvordan vi representerer agentens kunnskap. Vi finsker ikke lenger setninger som sier at noe enten er sant eller galt. Sannsynlighetsteori er en metode for νa knytte usikkerhet/sannsynlighet til regelbaserte systemer. Innenfor sannsynlighetsteori snakker en om bνade prinsipiell uvitenhet; en kjenner ikke

17 alle fakta om et domene, og usikkerhet som skyldes "latskap"; det er for mye arbeid og liste opp hele mengden av antecedencer og konsekvenser som trengs for νa sikre en regel uten unntak. Sannsynlighet gir en mνate νa summere usikkerheten som skyldes latskap og uvitenhet, (s. 417 AI). I henhold til sannsynlighetsteori kan en agent regne ut sannsynligheten av noe gitt noe annet, forutsatt at den kjenner til fakta om hvor ofte noe forekommer og hvor ofte noe annet forekommer sammen med noe. Dette kalles betinget sannsynlighet. P(A B) = p(a ^ B)/p(B) Kommunikasjon med andre agenter Det er ogsνa mulig νa lage en kommunikasjons-agent som snakker (spfir og forteller) med andre agenter via hverandres kunnskapsbaser Kunnskapsbasen En kunne tenke seg at kunnskapsbasen ble gjort mer generell tilνa hνandtere liknende verdener, ved en enda finere inndeling av fakta. For eksempel kunne man definere en egen kategori av hindere som agenten skal unngνa, hvor Wumpus og brfinn begge er objekter av typen hinder.

18

19 Kapittel 2 Teknisk dokumentasjon 2.1 Getting started Vi hadde problemer med sfike-teknikkene som gjorde et Franz Allegro CL til tider ikke klarte νa kjfire hele spillet helt igjennom. Det viste seg imidlertid at Macintosh CL klarte νa hνandtere disse problemene, slik at hvis du kjfirer systemet pνa MCL vil du vρre garantert at applikasjonen ikke krρsjer. Derfor vil du nedenfor finne tre beskrivelser for νa kunne kjfire applikasjonen fra plattformermene Unix, Microsoft Windows og Macintosh. (Se seksjon for nρrmere beskrivelse av optimerings-tiltakene vi far foretatt.) Vi anbefaler at systemet testes ut i Windows- og Mac-implementasjonene fordi agenten tross alt er, til tider, i stand til νa nνa delmνal som νa finne gullet, og man fνar muligheten til νa teste ut defsystem, som er en implementasjons-avhengig feature. Pνa disketten finner du en mappe for hver av de tre plattformene. Felles for alle applikasjonene er at system-filen system.cl inneholder de riktige path'ene (dirigert til disketten), og er den eneste fila som trener νa load'es manuelt. Kjfiring via Allegro CL pνa Dec Vi starter systemet ved νa bruke riktig pakke. Dette kan man gjfire med top-level kommadoen :package user Deretter loader du fila system.cl. Kaller du nνa pνa (compile-wumpus) i listener vil systemet kompilere alle filene angitt i defsystem (se seksjon 2.2), og alle de kompilerte filene vil loades. Systemet er nνa klar for νa dumpes. Dette gjfir du med funksjonen (dumplisp :name "dumpy.dxl"). Fra nνa avkan du starte lispen med et Wumpus World-image: lisp -I dumpy.dxl. Dermed holder det nνa med νa kalle pνa (wumpus-world) for νa starte spillet. (Se seksjon for nρrmere beskrivelse av image.) Kjfiring via Allegro CL Windows Kjfirer du systemet fra ACL for Microsoft Windows, laster du inn filen system.cl, kaller funksjonen [ved ffirste gangs kjfiring av spillet] (comilewumpus) og deretter holder det med νa kalle (wumpus-world). Vρr oppmerksom pνa atnνar du kompilerer filene for ffirste gang vil Allegro entre debugger. Du skal da dobbelt-klikke pνa den fiverste linjen som sier set the function definition of name compiler:tail-call-self-mergeswitch anyway." for νa kompilere alle filene. 19

20 Nνar du fνar feilmelingen Error: Stack overflow (signal 1000) [condition type: synchronousoperating-system-signal]" kan du godt forsfikeνa tvinge lispen til vidre kjfiring, ved νa dobbeltklikke pνa continue computation". Vi har funnet at det gνar an νa presse lispen til νa fortsette sfiket. I filen kjfirings-ex.txt i Wumpus-Windows"-mappen finner du et kjfiringseksempel der agenten oppnνar hovedmνalet. Kjfiring via Macintosh CL Filene kompileres med compile-wumpus, og spillet startes med wumpus-world i fila system.cl, som du finner pνa disketten i mappa Wumpu-system. 2.2 Defsystem Allegro Common Lisp har en innebygget feature kalt defsystem. Dette er en feature som gir utviklere av store applikasjoner meget god kontroll pνa kompilering og load'ing av filer. Man kan bl.a dirigere filer til νa kompileres eller/og loades parallelt eller sekvesielt. I tillegg gir defsystem oss mulighet til νa se/analysere hvilke filer som avhenger av andre. Vi har brukt defsystem for νa ha kontroll med kompilering og loading av filene vi bruker i spillet. Filene er gruppert og tillagt navn med relevans for den modulene de tilhfirer. Pνa denne mνaten unngνar vi problemer som at en funksjon ikkekan kompileres fordi den bruker en annen funksjon som ennνa ikkeerkompilert. I filen system.cl" finner du defsystem til Wumpus World.Funksjonen compile-wumpus utffirer de nfidvendige kallene for at filene i applikasjonen skal kompileres og loades. Vi ser at dette gjfires pνa en lett og elegant mνate. 1 Tross alle fordelene er defsystem et system som gir oss kompabilitets-problemer siden applikasjonen forelfipig kun er gjennomkjfirbar pνa MCL og ikke i Allegro (se seksjon 2.1). 2.3 Agenten Vi har tre viktige kontroll-funksjoner rundt agentens hjerne; selve agenten-funksjonen kgbagent, update-agent og implement-action. Disse funksjonene finner du i hhv kb-agent.lisp, utilities.cl og actions.cl. Vi betrakter den ffirste funksjonen i tillegg til kunnskapsbasen og slutningemekanismen (prolog) som agentens hjerne.update-agent og implement-action befinner seg i grenselandet mellom agentens hjerne og den fysiskeverden siden dette er funksjoner som hhv tar i mot persepsjoner fra agentens sensorer i tillegg til νa legge disse agent-objektets slot'er, og trigger agentens forsfik pνa handling. Update-agent kalles i oppstart-funksjonen wumpus-world og i implement-action. I start-funksjonen kalles den fordi agenten har et behov for νa bli oppdatert i det hun blir ffidt" inn i spill-brettet (omgivelsen). Hun trenger νa oppdatere sine persepsjoner (altsνa setf'er persepsjonsvektoren til νa inneholde persepsjonspredikatene som befinner seg pνa ruten), i tillegg tilνa vite om det er en Wumpus pνa start-ruten. Er Wumpus pνa start-ruten skal ikke agenten gνa vidre, men i stedet skal livet termineres. Update-agent setter tilstanden til agenten. 1 Dog ser det ut til at det er en bug i Franz' ACL fordi det virker som at funksjonen compile-system ignorerer key-word'et :silent, og dette pνa tross av at det ikke er noen andre key word argumenter" som overskriver :silent t.

21 Funksjonen kgb-agent er selve agenten som har sine del- og hovedmνal. Det er en loop i denne funksjonen som gνar til agenten nνar sitt hovedmνal, gir opp letingen eller dfir. I innmaten av kgb-agent er det funksjonen make-percept-sentence-prol som oppdaterer kunnskapsbasen med persepsjonene agenten sanser. Deretter fanger agenten opp forslag til handling returnert av funksjonen make-action-query. Vi betrakter kodesnutten (setf action (make-action-query time)) som en del av viljen til agenten. make-action-sentence forteller kunnskapsbasen om handlingen som foretas. Sνa funksjonen kgb-agent kan betraktes som den delen av hjernen som legger ting til hukommelsen og henter ut beslutningene om valg av handling. Funksjonen implement-action er det leddet som knytter verden, de faktiske handlingene og fysiske lover, og agenten sammen. Den er, som sagt, en slags grenseland-funksjon fordi den tar inn agentens vilje som argument, mens den bνade sender impulser som stimulerer aksjonene (metodene) og formidler informasjon til brukeren (observatfiren) om hva som skjer. Vi betrakter metodene som fenomener i verden som avgjfir om handlingene kan utffires eller ikke. Vi tenkte ffirst pνa metodene som handlinger utffirt av effektorer, men fant at det ikke gir meningνa snakke om effektorer siden det er en virtuell agent vi har medνa gjfire, og det bl.a er de fysiskelover og fenomener i verden som avgjfir om en fysisk handling er gjennomffirbar. Sνa funksjonen trigger handlingene, og disse handlingene ligger i omgivelsen, utenfor agenten. Lρrebokas presentasjon av agenter er at de returner en handling etter νa ha rνadffirt seg med kunnskapsbasen. Vνar agent returnerer ikke en handling man den kaller en funksjon som tar seg av de tingene. Dermed vil vνar agent loope til den dfir, gir opp eller nνar mνalet. Dette er fordi vi betrakter agenten som en person som selv styrer sin kontinuitet av handlinger. For oss sνa ser det ut som at forfatterne mener at agenten skal settes igang av noen utenforstaρnde, noe annet enn sin egen vilje. fixme 2.4 Omgivelsen Den visuelle representasjonen for oss som observatfirer er spill-brettet. Det er funksjonen print-board som tar seg av utskrivingenn av brettet. I filen pretty-printing.cl finner du de hjelpefunksjonene som print-board bruker. Alle rutene er objekter som kan inneholde predikater (sanseinntrykk) og andre objekter som monster og agenter. Print-board henter altsνa ut nye verdier av objektene for hver gang den blir kalt. For en nρrmere beskrivelse av typene finner du i seksjon Kunnskapsbasen Til νa representere kunnskaper om verden, bruker vi Paul Grahams implementasjon av Prolog i Lisp, fra Graham (1994) /refsubsec:diff-prlog-pred. Vi har modifisert noe pνakoden med ider fra Norvig, for νa kunne bruke noen hjelpefunksjoner og for νa kunne samle alle instansieringer av variable i et sfik, i en liste. Makroen <-", som du finner i filen on-lisp/prolog-till.cl, legger reglene i regelbasen *rules* (se dokumentasjonen til Paul Graham On Lisp" for nρrmere beskrivelse).

22 2.6 Typer og metoder Vi har valgt CLOS fordi det ligger nρrt νa tenke pνa (eller kategorisere) ting som ulike typer av objekter. Filen wumpus-types.cl inneholder de globale variablene og alle klassene som er opprettet i systemet. Vi har en klasse for objektene som befinner seg i spillet, gold og arrow (som er subklasser av object), vi har en agent klasse med player og wumpus som subklasser. Square er en klasse med wall som subklasse og en open-square som subklasser square, med subsubklasse pit. Filen actions.cl inneholder de metodene pνa klassene som spillet gjfir bruk av. Disse metodene er faktiske handlinger som agenten utffirer. Metodene trigges av dispatch-funksjonen implement-action. 2.7 Kommunikasjon mellom agenten, KB og brukeren Det er to funksjoner som kommuniserer med brukeren; det ene er agent-funksjonen selv: kgbagent, som forteller hva hun sanser, og den andre er implement-action som holder brukeren oppdatert pνa hva som skjer i tillegg til νa trigge handlings-metodene og skrive ut spill-brettet. 2.8 Miscellaneous Koordinatsystemene. Representasjonen av koordinatene til spill-brettet i array'et og i kunnskapsbasen er forskjellige. Aref bruker det kartesiske koordinatsystemet. Spill-brettet representeres ogsνa som et 2-dimensjonalt kartesisk koordinatsystem, men skiller seg fra arrayrepresentasjonen ved at det 2-dimensjonale array'et er rotert 90 grader clockwise". Derfor er f.eks koordinatene til agentens startposisjon, *start*, i array'et listen '(4 1), mens den samme posisjonen i det visuelle spill-brettet '(1 1). Dette er mulig fordi vi har et skille mellom det fysiske og logiske sprνaket (jfr seksjon??). Vi valgte νa ikke abstrahere aref for νa bruke den rotasjonen vi er vant med (dvs x-aksen peker mot fist og y-aksen peker nordover, hvis koordinatsystem vi har brukt under den visuelle representasjonen brettet) selv om vi lett kunne gjort det med mappings-funksjoner som ser ut ala: (defun map-to-cartesian (i s) "returns the cartesian cooridinates by rotate the coord-system 90 degrees ``counter-clockwise''" (let ((x s) (y (- (+ 1 *row-length*) i))) (list x y))) (defun map-from-cartesian (x y) "returns the coordinates according to Common Lisp arrays, rotating the cartesian 90 degrees clockwise" (let ((i (- (+ 1 *row-length*) y)) (s x)) (list i s)))

23 Statistikk. I filen stat-lisp.cl inneholder funksjonen make-statistics og infrastruktur for to agenter ulike kvaliteter. Man kan for morroskyld se hvilken av disse agenten som gjor det best pνa spill-brettet tatt i betrakting deres ulike egenskaper. 2.9 Effektivisering og optimering Prolog-implementasjon i Lisp vi benytter som slutningsmekanisme bruker ganske lang tid. Muligens ville Prolog-kompilatoren til Norvig i PAIP vρrt raskere. Denne har vi imidlertid heller ikke fνatt til νa fungere. Prolog-versjonen i On Lisp brukte Line Bergem under eksamen i SLI 330, sνa denne visste vi fungerte. Prolog-versjonen til Graham bestνar av mindre og kode enn Norvigs, og den er derfor lettere og forstνa. Iffilge Graham (On Lisp, s. 346 og 347) er hans versjon en kompilator pνa et vis, den oversetter regler til Lisp funksjoner Og Common Lisp oversetter til maskinkode. Men den er ikke en full Prolog-kompilator, fordi kompilering gjfires av en Lisp-kompilator som ser etter optimering av Lisp og ikke av Prolog. Da vi tok i bruk Paul Grahams kode fra On Lisp visste vi ikke at det var nfidvendigνa optimere rekursive funksjoner til hale-rekursive. Vi fikk noen feil-meldinger fra ACL om at stacken var full. Underveis i debug-ingen foretok vi en rekke optimerings- og effektiviseringstiltak for νa kunne forstνa hva den overnevnte feilen lνa i,og hva vi kunne gjfire for νa overvinne slike feil. Det viste seg at et kall pνa (gc) ikke ville hjelpe siden garbage-collector ikke opererer pνa stack'en, men pνa heap'en. Derfor var en fikning av heap'en ikke noen lfisning for vνart stack-problem. Vi har likevel fikt heap-size med en million bytes for kjfiring pνa Dec-stasjon. Vi testet systemet pνa Macintosh og fant at MCL (Macintosh Common LISP) ikke har de problemer med stack overflow som ACL har fordi MCL alltid optimerer hale-kall. Vi har sett at MCL gc'er hele tiden. (Se seksjon 2.1 for beskrivelse av hvordan applikasjonen kjfires pνa Macintosh). I de ffilgende avsnittene skal vi ta for oss de effektiviserings- og optimerings-tiltakene vi har foretatt i Wumpus World. Seksjon viser vi hvordan vi bygger et image for unix-versjonen av applikasjonen, og seksjon omhandler vνare optimerings-forsfik Effektiviserings-tiltak Effektivisering pνa DEC. Et av effektiviserings-tiltakene vi har foretatt er νa bygge et image for systemet. Nνar et slik image er bygget, kan man dumpe lisp'en. Dette gjfir at nνar vi starter systemet med det allerede dumpede imaget, slipper vi νa kompilere og loade alle de filene systemet bruker. Med fuksjonen (som du ogsνa finner i filen system.cl; (build-lisp-image "wumpus.dxl" :include-compiler t :c-heap-size :lisp-heap-size ) bygger vi et image "wumpus.dxl" med fikt heap-size bνade c-heap'en og lisp-heap'en. Utffirer vi en (dumplisp :name "dumpy.cl") etter at systemets kompilerte filer er loadet, slipper vi νa

24 loade og kompilere filer ved neste oppstart av systemet. Vi kaller da pνa lisp'en med lisp: lisp -I dumpy.dxl Effektivisering pνa MAC og Windows Ved νa kompilere filene og laste inn disse vil systemet kjfire raskere enn nνar man kjfirer kilde-filen fordi i siste tilfelle vil interpreteren oppffire seg som den aldri har sett funksjonene ffir Optimerings-tiltak Optimering av hale-rekursivekall Vi hadde store problemer med νafνa Allegro Common Lisp til νa kjfire spillet vνart. Programmet knelte allerede nνar agenten hadde gjort svρrt fνa handliner pνa grunn av ffilgende melding Error: Stack overflow (signal 1000) [condition type: synchronous-operating-system-signal] Vi skjfinte at stacken ikke ble poppet, men visste ikke hvorfor. Ved grundigere lesning i On Lisp-boken til Graham (s. 396), fant vi at kontinuasjonsmakrfine, som brukes i hans Lispimplementasjon av Prolog, avhenger sterkt av optimalisering av hale-kall, for at det ikke skal gνa tom for plass pνa stacken. Vi gjorde en del forsfik pνaνafνa Allegro til νa optimere hale-kall, og nedenfor beskriver vi optimerings-funksjonene. Funksjonene comp:tail-call-self-merge-switch og comp:tail-call-non-self-merge-switch vil, i ffilge ACL-manualen, optimerimere rekursive funksjoner til halerekursive (under gitte omstendigheter), som vi vet er mye mer effektive nνar antall rekursive kall blir veldig stort. Funsjonene som her setf'es finner du i system-filen (setf comp:tail-call-self-merge-switch #'(lambda (safety speed debug space) (declaim (optimize (safety 1) (speed 3) (debug 1) (space 3)))) comp:tail-call-non-self-merge-switch #'(lambda (safety speed debug space) (declaim (optimize (safety 1) (speed 3) (debug 1) (space 3))))) Mye arbeid skulle til for νa fνa koden til νa kjfire, men etter at vi fant funksjonen peepholeoptimize-switch, og skrudde den pνa var agenten i stand til νa gνa opptil 11 steg, og dette ser ut til νa vρre avhengig av belastningen lispen utsettes for nνar et sfik etter beste handling mνa ta i betraktning om agenten sanser noe i de ulike rommene hun beveger seg i. comp:peephole-optimize-switch

signalet som et signal i en komponent, og utgangs signalet som et signal i en annen komponent, en helt annen plass i nettverket. Oppgave 1 Gitt spenni

signalet som et signal i en komponent, og utgangs signalet som et signal i en annen komponent, en helt annen plass i nettverket. Oppgave 1 Gitt spenni Frekvensrespons, impedans og reaktans? Mats Hfivin 23rd May 2002 1 Innledning Bruken av komplekse tall ved beregninger innen elektronikk og signalbehandling er meget utbre. For nye studenter er dette vanligvis

Detaljer

ii Innhold 4.3 Oppsummering : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34 5 Innsamling av datamateriale Litteraturstudier : :

ii Innhold 4.3 Oppsummering : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34 5 Innsamling av datamateriale Litteraturstudier : : Innhold 1 Innledning 1 1.1 Mνalsetning med oppgaven : : : : : : : : : : : : : : : : : : : : : : : : 1 1.2 Oppgavens oppbygging : : : : : : : : : : : : : : : : : : : : : : : : : : 2 2 Integrering av nye

Detaljer

Ta ffirst punkt to i oppgaven, der vi forutsatte at vi kunne telle eksakt de N gjenvρrende atomene. Da er alderen t usikker bare pga. den statistiske

Ta ffirst punkt to i oppgaven, der vi forutsatte at vi kunne telle eksakt de N gjenvρrende atomene. Da er alderen t usikker bare pga. den statistiske Lfisninger, hjemmeeksamen i fag nummer 74 355 Kjernefysikk, tirsdag 30. mai til fredag 2. juni 2000 1a) 12 g av karbon 12 inneholder 1 mol atomer, i ffilge definisjonen pνa atommasseenheten, det er 6;

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

bok The Theory of Games and Economic Behavior i Feltet fattet straks stor interesse

bok The Theory of Games and Economic Behavior i Feltet fattet straks stor interesse 0. Innledning Spillteori som disiplin begynte med publiseringen av Von Neumann og Morgensterns bok The Theory of Games and Economic Behavior i 1944. Feltet fattet straks stor interesse og det ble i lfipet

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Øving 10 Frist: 2014-04-11 Mål for denne øvinga:

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 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

Innlevering 2b i INF2810, vår 2017

Innlevering 2b i INF2810, vår 2017 Innlevering 2b i INF2810, vår 2017 Dette er del to av den andre obligatoriske oppgaven i INF2810. Man kan oppnå 10 poeng for oppgavene i 2b, og man må ha minst 12 poeng tilsammen for 2a + 2b for å få godkjent.

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

Debugging. Tore Berg Hansen, TISIP

Debugging. Tore Berg Hansen, TISIP Debugging Tore Berg Hansen, TISIP Innhold Innledning... 1 Å kompilere og bygge et program for debugging... 1 Når debugger er i gang... 2 Symbolene i verktøylinjen... 3 Start på nytt... 3 Stopp debugging...

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

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. 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

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Forelesning 27: Trær Dag Normann Matematisk Institutt, Universitetet i Oslo 30. april 2008 Oppsummering Mandag så vi på hvordan vi kan finne uttrykk og termer på infiks form,

Detaljer

Forelesning 27. MAT1030 Diskret Matematikk. Bevistrær. Bevistrær. Forelesning 27: Trær. Roger Antonsen. 6. mai 2009 (Sist oppdatert: :28)

Forelesning 27. MAT1030 Diskret Matematikk. Bevistrær. Bevistrær. Forelesning 27: Trær. Roger Antonsen. 6. mai 2009 (Sist oppdatert: :28) MAT1030 Diskret Matematikk Forelesning 27: Trær Roger Antonsen Institutt for informatikk, Universitetet i Oslo Forelesning 27 6. mai 2009 (Sist oppdatert: 2009-05-06 22:28) MAT1030 Diskret Matematikk 6.

Detaljer

bok The Theory of Games and Economic Behavior i Feltet fattet straks stor interesse

bok The Theory of Games and Economic Behavior i Feltet fattet straks stor interesse 0. Innledning Spillteori som disiplin begynte med publiseringen av Von Neumann og Morgensterns bok The Theory of Games and Economic Behavior i 1944. Feltet fattet straks stor interesse og det ble i lfipet

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

Hjemmeeksamen 2 i INF3110/4110

Hjemmeeksamen 2 i INF3110/4110 Hjemmeeksamen 2 i INF3110/4110 Innleveringsfrist: onsdag 19. november kl. 1400 Innlevering Besvarelsen av oppgave 2,3,4 og 5 skal leveres skriftlig på papir i IFI-ekspedisjonen. Merk denne med navn, kurskode,

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 27: Trær Dag Normann Matematisk Institutt, Universitetet i Oslo 4. mai 2010 (Sist oppdatert: 2010-05-04 14:11) Forelesning 27 MAT1030 Diskret Matematikk 4. mai 2010

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

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din. UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i IN 211 Programmeringsspråk Eksamensdag: 6. desember 2001 Tid for eksamen: 9.00 15.00 Oppgavesettet er på 9 sider. Vedlegg: Ingen

Detaljer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Institutt for datateknikk og informasjonsvitenskap Eksamensoppgave i TDT0 Algoritmer og datastrukturer Faglig kontakt under eksamen Magnus Lie Hetland Telefon 98 5 99 Eksamensdato 9. august, 07 Eksamenstid

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

Vi har at ' 0 = 4ex +e 2x = 2 cosh x ; ' 00 = 2 sinh x cosh 2 x : Definer χ = arctan e x. Da har vi f.eks. at 2 sin χ cos χ sin(2χ) = cos 2 χ + sin 2

Vi har at ' 0 = 4ex +e 2x = 2 cosh x ; ' 00 = 2 sinh x cosh 2 x : Definer χ = arctan e x. Da har vi f.eks. at 2 sin χ cos χ sin(2χ) = cos 2 χ + sin 2 Eksamen i ikkelineρr dynamikk, fag 74 993 Onsdag 6. mai 998 Lfisninger a) En permanent bfilge forandrer ikke form. Dvs. at hvis den forplanter seg med en konstant hastighet c i en rom-dimensjon, sνa er

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i IN 211 Programmeringsspråk Eksamensdag: 4. desember 2002 Tid for eksamen: 9.00 15.00 Oppgavesettet er på 10 sider. Vedlegg: Tillatte

Detaljer

v : T, kan bare ha verdi av typen T. n =0 slyfes alltid parentesene. Typet uttrykkssprak type representerer en verdimengde. variabel, deklarert funksjon, herunder karakteriseres syntaktisk ved a angi navn

Detaljer

Forelesning 30: Kompleksitetsteori

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

Detaljer

Kapittel 4: Logikk. MAT1030 Diskret Matematikk. Oppsummering. En digresjon. Forelesning 6: Utsagnslogikk og predikatlogikk.

Kapittel 4: Logikk. MAT1030 Diskret Matematikk. Oppsummering. En digresjon. Forelesning 6: Utsagnslogikk og predikatlogikk. MAT1030 Diskret Matematikk Forelesning 6: Utsagnslogikk og predikatlogikk Dag Normann Matematisk Institutt, Universitetet i Oslo Kapittel 4: Logikk 3. februar 2010 (Sist oppdatert: 2010-02-03 12:49) MAT1030

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

Lfisningsforslag SIF4045 Kvantemekanikk Oppgave 1 a) Den tidsavhengige Schrödingerlikningen = c HΨ= Separable lfisninger av denn

Lfisningsforslag SIF4045 Kvantemekanikk Oppgave 1 a) Den tidsavhengige Schrödingerlikningen  = c HΨ= Separable lfisninger av denn Lfisningsforslag SIF4045 Kvantemekanikk 0.08.00 Oppgave a) Den tidsavhengige Schrödingerlikningen er i @Ψ @t = c HΨ= Separable lfisninger av denne, 4 c ~p m + V (~r) 3 5 Ψ= Ψ(~r; t) =ψ(~r) e iet= ; er

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 4: Logikk Dag Normann Matematisk Institutt, Universitetet i Oslo 27. januar 2010 (Sist oppdatert: 2010-01-27 12:47) Kapittel 4: Logikk (fortsettelse) MAT1030 Diskret

Detaljer

Donkey Kong. Introduksjon. Oversikt over prosjektet. Skrevet av: Geir Arne Hjelle

Donkey Kong. Introduksjon. Oversikt over prosjektet. Skrevet av: Geir Arne Hjelle Donkey Kong Skrevet av: Geir Arne Hjelle Kurs: Scratch Tema: Blokkbasert, Spill, Animasjon Fag: Naturfag, Programmering, Engelsk, Kunst og håndverk Klassetrinn: 5.-7. klasse, 8.-10. klasse Introduksjon

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

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

EKSAMEN I EMNE. TDT4136 Logikk og resonnerende systemer. Tirsdag 4. desember 2007 Tid: kl. 09.00 13.00

EKSAMEN I EMNE. TDT4136 Logikk og resonnerende systemer. Tirsdag 4. desember 2007 Tid: kl. 09.00 13.00 Side 1 av 6 Faglig kontakt under eksamen: Tore Amble (94451) En engelsk versjon av oppgaven er vedlagt. Oppgaven kan besvares på engelsk eller norsk. BOKMÅL EKSAMEN I EMNE TDT4136 Logikk og resonnerende

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

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator? Kursopplegg Velkommen til INF2100 Bakgrunnen Bakgrunnen for INF2100 Jeg er Dag Langmyhr (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får

Detaljer

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Forelesning 33: Repetisjon Dag Normann Matematisk Institutt, Universitetet i Oslo 26. mai 2008 Innledning Onsdag 21/5 gjorde vi oss ferdige med det meste av den systematiske

Detaljer

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon Innledning MAT1030 Diskret matematikk Forelesning 33: Repetisjon Dag Normann Matematisk Institutt, Universitetet i Oslo 26. mai 2008 Onsdag 21/5 gjorde vi oss ferdige med det meste av den systematiske

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

INF1000 HashMap. Marit Nybakken marnybak@ifi.uio.no 2. november 2003

INF1000 HashMap. Marit Nybakken marnybak@ifi.uio.no 2. november 2003 INF1000 HashMap Marit Nybakken marnybak@ifi.uio.no 2. november 2003 Dette dokumentet skal tas med en klype salt og forfatteren sier fra seg alt ansvar. Dere bør ikke bruke definisjonene i dette dokumentet

Detaljer

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030 MAT1030 Diskret Matematikk Plenumsregning 1: Kapittel 1 Mathias Barra Matematisk institutt, Universitetet i Oslo Plenumsregning 1 16. januar 2009 (Sist oppdatert: 2009-02-02 14:21) MAT1030 Diskret Matematikk

Detaljer

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3 Programmeringsspråket C Del 3 Michael Welzl E-mail: michawe@ifi.uio.no 8/25/10 inf1060 1 Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Plenumsregning 1: Kapittel 1 Mathias Barra Matematisk institutt, Universitetet i Oslo 16. januar 2009 (Sist oppdatert: 2009-02-02 14:21) Plenumsregning 1 MAT1030 Diskret Matematikk

Detaljer

Kanter, kanter, mange mangekanter

Kanter, kanter, mange mangekanter Kanter, kanter, mange mangekanter Nybegynner Processing PDF Introduksjon: Her skal vi se på litt mer avansert opptegning og bevegelse. Vi skal ta utgangspunkt i oppgaven om den sprettende ballen, men bytte

Detaljer

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

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Dag Normann MAT1030 Diskret Matematikk Forelesning 25: Trær Dag Normann Matematisk Institutt, Universitetet i Oslo Forelesning 25 27. april 2010 (Sist oppdatert: 2010-04-27 14:16) MAT1030 Diskret Matematikk 27. april

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 25: Trær Dag Normann Matematisk Institutt, Universitetet i Oslo 27. april 2010 (Sist oppdatert: 2010-04-27 14:15) Forelesning 25 MAT1030 Diskret Matematikk 27. april

Detaljer

Velkommen til INF2100

Velkommen til INF2100 Kursopplegg Velkommen til INF2100 Jeg er Dag Langmyhr (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får man det godkjent? Pause (med registrering

Detaljer

Generiske mekanismer i statisk typede programmeringsspråk

Generiske mekanismer i statisk typede programmeringsspråk Generiske mekanismer i statisk typede programmeringsspråk Dette stoffet er Pensum, og det er bare beskrevet her Mye her er nok kjent stoff for mange INF5110 7. mai 2013 Stein Krogdahl 1 Hvordan kunne skrive

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

INF4170 Logikk. Forelesning 12: Automatisk bevissøk IV matriser og koblingskalkyle. Bjarne Holen. Institutt for informatikk, Universitetet i Oslo

INF4170 Logikk. Forelesning 12: Automatisk bevissøk IV matriser og koblingskalkyle. Bjarne Holen. Institutt for informatikk, Universitetet i Oslo INF4170 Logikk Forelesning 12: matriser og koblingskalkyle Bjarne Holen Institutt for informatikk, Universitetet i Oslo 11. mai 2010 Dagens plan 1 Institutt for informatikk (UiO) INF4170 Logikk 11.05.2010

Detaljer

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3 Programmeringsspråket C Del 3 Michael Welzl E-mail: michawe@ifi.uio.no 29.08.13 inf1060 1 Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen

Detaljer

Litt om Javas class-filer og byte-kode

Litt om Javas class-filer og byte-kode Litt om Javas class-filer og byte-kode INF 5110, 11/5-2010, Stein Krogdahl (Dessverre litt få figurer) Disse formatene ble planlagt fra start som en del av hele Java-ideen Bt Byte-koden gir portabilitet

Detaljer

Tildeling av minne til prosesser

Tildeling av minne til prosesser Tildeling av minne til prosesser Tildeling av minne til prosesser OS må hele tiden holde rede på hvilke deler av RAM som er ledig/opptatt Når (asynkrone) prosesser/run-time system krever tildeling av en

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 7: Logikk, predikatlogikk Roger Antonsen Institutt for informatikk, Universitetet i Oslo 10. februar 2009 (Sist oppdatert: 2009-02-11 01:52) Kapittel 4: Logikk (predikatlogikk)

Detaljer

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen Kanter, kanter, mange mangekanter Skrevet av: Sigmund Hansen Kurs: Processing Tema: Tekstbasert, Animasjon Fag: Matematikk, Programmering, Kunst og håndverk Klassetrinn: 8.-10. klasse, Videregående skole

Detaljer

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3 Programmeringsspråket C Del 3 Kjell Åge Bringsrud E-mail: kjellb@ifi.uio.no Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen malloc

Detaljer

Logisk Programmering. Relasjoner vz. funksjoner. Funksjon: inn og ut, en verdi. Relasjon: ingen retning, null eller flere verdier

Logisk Programmering. Relasjoner vz. funksjoner. Funksjon: inn og ut, en verdi. Relasjon: ingen retning, null eller flere verdier 1 Logisk Programmering Relasjoner vz. funksjoner Funksjon: inn og ut, en verdi Relasjon: ingen retning, null eller flere verdier LP slagord: algoritme = logikk + kontroll Logikk ( hva ): logisk program

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

Anatomien til en kompilator - I

Anatomien til en kompilator - I Anatomien til en kompilator - I program Symboltabell tekst tokens syntaks-tre beriket syntaks-tre Finne struktur i programmet OK i henhold til grammatikk? Preprocessor Makroer Betinget kompilering Filer

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

Kompleksitet og Beregnbarhet

Kompleksitet og Beregnbarhet Kompleksitet og Beregnbarhet 16. September, 2019 Institutt for Informatikk 1 Dagens plan Avgjørelsesproblemer. P EXPTIME NP Reduksjoner NP-kompletthet Uavgjørbarhet UNDECIDABLE DECIDABLE PSPACE NPC NP

Detaljer

PXT: Himmelfall. Introduksjon. Skrevet av: Helene Isnes og Julie Revdahl

PXT: Himmelfall. Introduksjon. Skrevet av: Helene Isnes og Julie Revdahl PXT: Himmelfall Skrevet av: Helene Isnes og Julie Revdahl Kurs: Microbit Tema: Elektronikk, Blokkbasert, Spill Fag: Programmering, Matematikk Klassetrinn: 5.-7. klasse, 8.-10. klasse, Videregående skole

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 12. desember 2008 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 7 sider. Vedlegg: Tillatte hjelpemidler: INF2220

Detaljer

Obligatorisk Innlevering 2

Obligatorisk Innlevering 2 Obligatorisk Innlevering 2 INF5110 - Kompilatorteknikk Våren 2017 Frist 07.05.2017 23:59 Dette er den andre av to oppgaver våren 2017. Den bygger videre på det som er gjort i den første innleveringen.

Detaljer

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Programmering i C++ Løsningsforslag Eksamen høsten 2005 Programmering i C++ Eksamen høsten 2005 Simen Hagen Høgskolen i Oslo, Avdeling for Ingeniørutdanning 7. desember 2005 Generelt Denne eksamensoppgaven består av tre oppgaver, pluss en ekstraoppgave. Det

Detaljer

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve Løkker og arrayer Løse problemer med programmering INF1000, uke3 Geir Kjetil Sandve Hva vi har lært så langt Variabler og uttrykk Beslutninger Kontrollflyt og feilmeldinger Metoder og parametre Fokus i

Detaljer

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyreog objektorientert programmering Vår 2016 Øving 4 Frist: 2016-02-12 Mål for denne øvingen:

Detaljer

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode) Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode) Disse foilene er pensum INF 5110, 30/4-2013, Stein Krogdahl Byte-koden for Java og.nett (C#) kan leses her: http://en.wikipedia.org/wiki/java_bytecode_instruction_listings

Detaljer

Runtime-omgivelser Kap 7 - I

Runtime-omgivelser Kap 7 - I Runtime-omgivelser Kap 7 - I Generelt Språk som bare trenger statiske omgivelser Språk som trenger stakk-orienterte omgivelser Språk som trenger mer generelle omgivelser Vel så riktig å si at forskjellige

Detaljer

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse Dessverre litt få figurer INF 5110, 10/5-2011, Stein Krogdahl Oversikt over Javas class-filer og byte-kode Disse formatene ble planlagt fra start

Detaljer

Kapittel 5: Mengdelære

Kapittel 5: Mengdelære MAT1030 Diskret Matematikk Forelesning 10: Mengdelære Dag Normann Matematisk Institutt, Universitetet i Oslo Kapittel 5: Mengdelære 17. februar 2010 (Sist oppdatert: 2010-02-17 12:41) MAT1030 Diskret Matematikk

Detaljer

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering Eksamensoppgave i TDT4100 Objektorientert programmering Tirsdag 2. juni 2009, kl. 09:00-13:00 Oppgaven er utarbeidet av faglærer Hallvard Trætteberg og kvalitetssikrer Trond Aalberg. Kontaktperson under

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 10: Mengdelære Dag Normann Matematisk Institutt, Universitetet i Oslo 17. februar 2010 (Sist oppdatert: 2010-02-17 12:40) Kapittel 5: Mengdelære MAT1030 Diskret Matematikk

Detaljer

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Forelesning 8: Predikatlogikk, bevisføring Dag Normann Matematisk Institutt, Universitetet i Oslo 6. februar 2008 Kvantorer Mandag 04.02.2008 introduserte vi predikatlogikk Vi

Detaljer

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet! 1 Kunnskap for en bedre verden TDT4105 Informasjonsteknologi, grunnkurs Mer om funksjoner. Logiske betingelser og betinget programutførelse (valg). Amanuensis Terje Rydland Kontor: ITV-021 i IT-bygget

Detaljer

Deduksjon i utsagnslogikk

Deduksjon i utsagnslogikk Deduksjon i utsagnslogikk Lars Reinholdtsen, Universitetet i Oslo Merknad Dette notatet om deduksjon er ikke pensum, og den behandlingen som Goldfarb gir av emnet fra 33 og utover dekker fullt ut det som

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

Kvantorer. MAT1030 Diskret matematikk. Kvantorer. Kvantorer. Eksempel. Eksempel (Fortsatt) Forelesning 8: Predikatlogikk, bevisføring

Kvantorer. MAT1030 Diskret matematikk. Kvantorer. Kvantorer. Eksempel. Eksempel (Fortsatt) Forelesning 8: Predikatlogikk, bevisføring Kvantorer MAT1030 Diskret matematikk Forelesning 8: Predikatlogikk, bevisføring Dag Normann Matematisk Institutt, Universitetet i Oslo 6. februar 008 Mandag 04.0.008 introduserte vi predikatlogikk Vi innførte

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

Del 4 Noen spesielle C-elementer

Del 4 Noen spesielle C-elementer Del 4 Noen spesielle C-elementer 1 RR 2016 Header-filer inneholder Prototypene til funksjonene i standard biblioteket Verdier og definisjoner som disse funksjonene bruker #include #include

Detaljer

Turingmaskiner en kortfattet introduksjon. Christian F Heide

Turingmaskiner en kortfattet introduksjon. Christian F Heide 13. november 2014 Turingmaskiner en kortfattet introduksjon Christian F Heide En turingmaskin er ikke en fysisk datamaskin, men et konsept eller en tankekonstruksjon laget for å kunne resonnere omkring

Detaljer

Tilkobling og Triggere

Tilkobling og Triggere Tilkobling og Triggere Lars Vidar Magnusson October 12, 2011 Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 1 / 25 Tilkobling med PHP PHP bruker databasespesifike moduler til å koble

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

Pong. Oversikt over prosjektet. Steg 1: En sprettende ball. Plan. Sjekkliste. Introduksjon

Pong. Oversikt over prosjektet. Steg 1: En sprettende ball. Plan. Sjekkliste. Introduksjon Pong Introduksjon Pong er et av de aller første dataspillene som ble laget, og det første dataspillet som ble en kommersiell suksess. Selve spillet er en forenklet variant av tennis hvor to spillere slår

Detaljer

Snake Expert Scratch PDF

Snake Expert Scratch PDF Snake Expert Scratch PDF Introduksjon En eller annen variant av Snake har eksistert på nesten alle personlige datamaskiner helt siden slutten av 1970-tallet. Ekstra populært ble spillet da det dukket opp

Detaljer

BESLUTNINGER UNDER USIKKERHET

BESLUTNINGER UNDER USIKKERHET 24. april 2002 Aanund Hylland: # BESLUTNINGER UNDER USIKKERHET Standard teori og kritikk av denne 1. Innledning En (individuell) beslutning under usikkerhet kan beskrives på følgende måte: Beslutningstakeren

Detaljer

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3 Programmeringsspråket C Del 3 Kjell Åge Bringsrud E-mail: kjellb@ifi.uio.no 9/1/2005 inf1060 V05 1 Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen

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

Kompleksitetsanalyse Helge Hafting 25.1.2005 Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO117D Algoritmiske metoder

Kompleksitetsanalyse Helge Hafting 25.1.2005 Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO117D Algoritmiske metoder Helge Hafting 25.1.2005 Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO117D Algoritmiske metoder Innhold 1 1 1.1 Hva er en algoritme?............................... 1 1.2

Detaljer

Velkommen til plenumsregning for MAT1030. MAT1030 Diskret matematikk. Repetisjon: Algoritmer og pseudokode. Eksempel fra boka. Eksempel

Velkommen til plenumsregning for MAT1030. MAT1030 Diskret matematikk. Repetisjon: Algoritmer og pseudokode. Eksempel fra boka. Eksempel Velkommen til plenumsregning for MAT1030 MAT1030 Diskret matematikk Plenumsregning 1: Kapittel 1 Roger Antonsen Matematisk Institutt, Universitetet i Oslo 17. januar 2008 Torsdager 10:15 12:00 Gjennomgang

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

Oppgave 1 - Linux kommandolinje (%)

Oppgave 1 - Linux kommandolinje (%) Løsningsforslag Eksamen høst 2017 Operativsystemer Oppgave 1 - Linux kommandolinje (%) a) pwd b) ps Oppgave 2 - Bash-scripting (%) a) ping -i 5 www.hin.no b) ping -c 1 www.hin.no ping -c 1 -t 1 www.hin.no

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

INF1800 LOGIKK OG BEREGNBARHET

INF1800 LOGIKK OG BEREGNBARHET INF1800 LOGIKK OG BEREGNBARHET FORELESNING 4: UTSAGNSLOGIKK Roger Antonsen Institutt for informatikk Universitetet i Oslo 27. august 2008 (Sist oppdatert: 2008-09-03 12:39) Før vi begynner Praktiske opplysninger

Detaljer

Kapittel 4: Mer predikatlogikk

Kapittel 4: Mer predikatlogikk MAT1030 Diskret Matematikk Forelesning 8: Logikk, predikatlogikk, bevisteknikker Roger Antonsen Institutt for informatikk, Universitetet i Oslo Kapittel 4: Mer predikatlogikk 11. februar 009 (Sist oppdatert:

Detaljer

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

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Dagens tema Kjøresystemer (Ghezzi&Jazayeri.6,.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/5 Repetisjon: Statiske språk uten rekursive

Detaljer

IN1010 V18, Obligatorisk oppgave 5

IN1010 V18, Obligatorisk oppgave 5 IN1010 V18, Obligatorisk oppgave 5 Innleveringsfrist: Tirsdag 17.04. kl 10:00 Versjon 1.3 (12.04.2018) Sist modifisert av Silje Merethe Dahl. Innledning I denne oppgaven skal du bruke rekursjon til å lage

Detaljer

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en

Detaljer