1 1 Ratkaisuja 2. laskuharjoituksiin Tehtävä 1. (a) Yksinkertainen reeksiagentti ei voi toimia rationaalisesti tässä tilanteessa, eli maksimoida suoriutumismittaansa (performance measure). Yksinkertainen reeksiagentti voi luottaa vain onneensa kulkiessaan paikasta toiseen ja etsiessään roskia. Ympäristöä mallintava reeksiagentti sitä vastoin voi toimia rationaalisesti. Ympäristöä mallintava reeksiagentti pystyy tarkkailemaan, kuinka tiuhaan roskia kertyy eri paikkoihin ja valitsemaan liikkumisensa tämän mukaan. Jos agentti voi havainnoida koko toimintaympäristöään kerralla, voi yksinkertainen reeksiagenttikin toimia rationaalisesti. Eli siirtyä keräämään roskia toiseen ruutuun vasta, kun ruutu roskaantuu. Molemmat agentit pystyvät toimimaan yhtä tehokkaasti tässä ympäristössä. Ympäristöä mallintava refleksiagentti ei enää hyödy kyvystään muistaa ympäristön muutoksia. Tehtävä 1. (b) Tuntemattomassa ympäristössä yksinkertainen reeksiagentti jää helposti jumiin eikä siis voi toimia rationaalisesti. Satunnaistettu reeksiagentti ei jää jumiin tuntemattomaan ympäristöön. Satunnaistetun reeksiagentin heikkous on, että se käy joissakin paikoissa vain hyvin harvoin. (Esim. pitkän suoran päädyissä, mikäli agentti aloittaa keskeltä suoraa.) Koska satunnaistettu reeksiagentti ei pysty muistamaan ympäristöään, ei senkään toimintaa voi kuvata rationaaliseksi toimintaympäristössään. (Sattumalta toiminta voi kylläkin ajoittain näyttää rationaaliselta.)
2 Tehtävä 2. Alkutila Kriteeri lopputilalle seuraajafunktio kustannusfunktio a Värittämätön kartta b Apinalla ei banaaneja, tuolit Kartan kaikki maat Väritä maa Värittämisen väritetty, sama hinta 1 väri ei koskaan esiinny vierekkäisissä maissa. Apina saa banaanit Siirrä tuoli pinoon Jokaisen tai pois pinosta, ki- toiminnan erikseen lattialla, ipeä, ota banaanit hinta 1 banaanit ilmassa. c Ohjelma saanut Löydetty tietue, Siirrä tietueita Siirron hinta syötteenä tiedoston joka aiheuttaa tiedostosta toiseen 1 ja tuloksena virheen virheilmoitus d Kaikki ämpärit tyhjiä Jossakin ämpärissä Täytä ämpäri läh- Toiminnon tasan litra vettä teestä, tyhjennä hinta 1 ämpärin sisältö toiseen ämpäriin (kokonaan tai kunnes toinen ämpäri on täynnä), tyhjennä ämpäri maahan Tehtävä 3. Tehtävän ongelma-avaruus kasvaa kovin suureksi esitettäväksi verkkona. Tehtävä sivuutetaan. Tehtävä 4. Seuraavassa kuvassa esitetään kolmen palikan Hanoin tornin ongelma-avaruus. (Muista, että ongelma-avaruus sisältää kaikki lailliset tilat, joihin alkutilasta päästään suorittamalla tehtävän sallimia toimintoja.)
3 Ongelma-avaruus kolmen palikan Hanoin tornille. ** *** ** ** ** ** ** *** ** ** *** ** ***:llä merkityt kaaret vastaavat ison palikan siirtoa. **:llä merkityt kaaret vastaavat keskikokoisen palikan siirtoa. Ratkaisua vastaavat tilanteet merkitty :lla Kuvassa tähdin merkitsemättömät kaaret vastaavat pienimmän kiekon siirtoa. Tässä on nyt oletettu ratkaisuksi kelpaavan tornin kasaamisen uudelleen kumpaan tahansa alussa tyhjään palikkaan. Algoritmin, joka ratkaisee Hanoin tornin, toimintaidea on ratkaista ensin kahden palikan Hanoin torni. Ensin siis algoritmi ratkaisee, kuinka kaksi palikkaa voidaan siirtää siihen pitimeen, johon kolmen palikan tornia ei haluta. (Siirrä pieni paikkaan, jonne tornia ei haluta muodostaa. Siirrä seuraava palikka paikkaan, johon torni halutaan muodostaa. Siirrä lopuksi pieni isomman päälle.) Tämän jälkeen iso pa-
4 likka siirretään haluttuun paikkaan ja ratkaistaan uudelleen kahden palikan Hanoin torni nyt niin, että kahden palikan torni muodostuu ison palikan päälle. Tätä algoritmia voi yleistää useamman palikan Hanoin torneille. Jos palikoita parillinen määrä 2n, ratkaistaan ensin kahden palikan torni haluttuun (keskelle tai toiseen laitaan) paikkaan. Sitten kolmen torni ei-haluttuun, alussa vapaaseen paikkaan. Siirretään neljäs pala haluttuun paikkaan ja ratkaistaan kolme palikan Hanoin torni sen päälle. Siirretään viiden palikka ei-haluttuun, alussa vapaaseen paikkaan. Ratkaistaan neljän palikan Hanoin torni (ratkaistiin jo äsken) sen päälle. Jne... Jos palikoita on pariton määrä, ratkaistaan aina parittomia lukuja vastaavat Hanoin tornit haluttuun paikkaan. Tehtävässä pyydettiin tehokkainta etsintäalgoritmia, mikä voi tarkoittaa myös algoritmia, joka tehtäväavaruutta kuvaavasta verkosta hakee nopeimmin ja vähimmin muistiresurssein reitin (mielellään lyhimmän) alkutilasta ratkaisuun. Moni algoritmi pystyy löytämään reitin alkutilasta lopputilaan. Esim. leveyshakua muistuttava Dijkstran algoritmi. Dijkstran algoritmi hakee lyhimmän reitin verkossa kahden halutun pisteen välille. Voidaan siis etsiä lyhin reitti ongelma-avaruudessa alkutilanteesta ratkaisuun. Algoritmi laskee lyhyimpiä etäisyyksiä alkutilasta lähtien kaikkiin muihin verkon solmuihin. Algoritmi lopettaa, kun ratkaisuun johtava solmu tulee vastaan. Algoritmi myös tunnistaa lyhimmän reitin, koska se tallettaa muistiin solmujen vanhemmat. Lyhin reitti ratkaisuun on siis alkutila ->... -> p(p(ratkaisu)) -> p(ratkaisu) -> ratkaisu. Ratkaisu on haluttua lopputilaa vastaava solmu, p(ratkaisu), solmu, josta siihen on päädytty, p(p(ratkaisu)), solmu, johon on päädytty p(ratkaisusta) jne. Tilavaativuus on yleisessä tapauksessa tällä algoritmilla O( V ), missä V on verkon solmujen lukumäärä. Aikavaativuus puolestaan on yleisessä tapauksessa O( E + V log V ), missä E on verkon reunojen lukumäärä. Tehokkaampiakin algoritmeja voi olla, algoritmin todistaminen tehokkaimmaksi on useimmiten työlästä.
5 Tehtävä 5. (a): x((h(x) L(x) S(x)) N(x)). Mikäli kuitenkin vaaditaan, ettei produktiosysteemin lauseissa saa esiintyä disjunktioita, vaan implikaatiomuotoisissa lauseissa etujäsenen on oltava atomilauseiden konjunktio ja takajäsenen atomilause, valitaan lauseen (a) käännökseksi lausejoukko: a 1 : x(h(x) N(x)), a 2 : x(l(x) N(x)) ja a 3 : x(s(x) N(x)). (Konjunktiot ovat disjunktioita helpompia käsiteltäviksi.) ( ) (b): x y (H(x) J(y, x)) H(y). (c): H(c B ). (d): V (c B, c C ). (e): x y(v (x, y) J(y, x)). (f ): x(n(x) V (c x, x)). Eksistentiaalisesti kvantioitu muuttuja on korvattu jokaista muuttujan x arvoa kohti uudella vakiosymbolilla c x. Tehtävä 6. Seuraavissa φ 1, φ 2 ja ψ ovat atomikaavoja. Produktiosääntö A: Jos φ(x) ψ(x) ja φ(d) (d vakio) löytyvät työmuistista, niin lisää ψ(d). Produktiosääntö B: Jos φ(x, y) ψ(x, y) ja φ(e, f) (e,f vakioita) löytyvät työmuistista, niin lisää ψ(e, f). Produktiosääntö C: Jos φ 1 (x) φ 2 (x, y) ψ(y) sekä φ 1 (e) ja φ 2 (e, f) (e,f vakioita) löytyvät työmuistista, niin lisää ψ(f). Olkoon työmuistin sisältö alussa: 1: H(x) N(x), 2: H(x) J(y, x) H(y), 3: H(c B ),
6 4: V (c B, c C ), 5: V (x, y) J(y, x) ja 6: N(x) V (c x, x). 1:een voi soveltaa A:ta (valitaan φ(x) = 1) mikäli löytyy sopiva ψ(d), missä d on vakio. 3 kelpaa produktiosäännön A vaatimaksi ψ(d):ksi. Niinpä lisätään työmuistiin lause: 7: N(c B ). Seuraavaksi siirrytään työmuistin sisältöön kohtaan 2. Produktiosääntö C voisi soveltua kohtaan 2. Kuitenkaan työmuistista ei löydy produktiosäännön C vaatimaa φ 2 (e, f):ää. Mikään produktiosääntö ei sovellu kohtiin 3 ja 4. Siirrytään siis kohtaan 5. Produktiosääntö B soveltuu kohtaan 5. Lisäksi kohta 4 kelpaa B:ssä φ(e, f):ksi. Lisätään siis työmuistiin kohta: 8: J(c C, c B ). Kohtia 6,7 ja 8 ei vastaa mikään produktiosääntö, edetään siis takaisin kohtaan 1. 1:stä ei voi päätellä mitään uutta. Kohdasta 2 voi sen sijaan nyt päätellä H(c C ) produktiosäännön C avulla (φ 1 (e):ksi voi valita kohdan 3 ja φ 2 (e, f):ksi voi valita kohdan 8). Lisätään työmuistiin: 9: H(c C ). Mitään uutta kohdista 3-9 ei voikaan päätellä. Siirrytään siis takaisin kohtaan 1. Produktiosäännön A avulla voi nyt päätellä kohdista 1 ja 9: N(c C ). Lisätään työmuistiin: 10: N(c C ). Bluebirdillä on vanhempi voitaisiin päätellä lisäämällä uusi produktiosääntö. Nimittäin produktiosääntö D: Jos φ(x) ψ(c x, x) ja φ(d) (c,d vakioita) löytyvät työmuistista, niin lisää ψ(c d, d). Tällöin halutun päätelmän saa soveltamalla produktiosääntöä D kohtiin 6 ja 7.