JOHDATUS TEKOÄLYYN TEEMU ROOS

Samankaltaiset tiedostot
JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

.. X JOHDATUS TEKOÄLYYN TEEMU ROOS

Johdatus tekoälyyn (T. Roos) Kurssikoe

a. (2 p) Selitä Turingin koe. (Huom. ei Turingin kone.) Minkälainen tekoäly on saavutettu, kun Turingin koe ratkaistaan?

Kognitiivinen mallintaminen 1

JOHDATUS TEKOÄLYYN TEEMU ROOS

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

13 Lyhimmät painotetut polut

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Algoritmit 2. Luento 7 Ti Timo Männikkö

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Kokeessa piti vastata viiteen (5) tehtävään kuudesta (6). Jokaisen tehtävän maksimipistemäärä on 8.

JOHDATUS TEKOÄLYYN TEEMU ROOS

Algoritmit 1. Luento 1 Ti Timo Männikkö

Johdatus tekoälyyn (T. Roos) Kurssikoe ARVOSTELUPERUSTEET

Määrittelydokumentti

Miten käydä läpi puun alkiot (traversal)?

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

A TIETORAKENTEET JA ALGORITMIT

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Algoritmit 1. Luento 13 Ti Timo Männikkö

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Diskreetin matematiikan perusteet Esimerkkiratkaisut 3 / vko 10

Algoritmit 1. Luento 9 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Tervetuloa! Matematiikka tutuksi

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

JOHDATUS TEKOÄLYYN TEEMU ROOS

Kurssikoe on maanantaina Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla.

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

Tervetuloa 2. vuositason infoiltaan

TKT50004: Akateemiset taidot (1 op)

Ohjelmistoprosessit ja ohjelmistojen laatu Ohjelmistoprosessit ja ohjelmistojen laatu (4op)

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Johdatus tekoälyyn

Lyhin kahden solmun välinen polku

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

Algoritmit 1. Luento 13 Ma Timo Männikkö

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

Tietokoneen rakenne (2 ov / 4 op) Syksy 2006

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

A* Reitinhaku Aloittelijoille

Kognitiivinen mallintaminen I

Laskennan teoria

JOHDATUS TEKOÄLYYN TEEMU ROOS

Koe on kaksiosainen: siihen kuuluvat tekstitaidon koe ja esseekoe. Tekstitaidon kokeen arvioinnissa painottuu lukutaito ja esseekokeessa

T : Max-flow / min-cut -ongelmat

JOHDATUS TEKOÄLYYN TEEMU ROOS

Algoritmit 1. Luento 8 Ke Timo Männikkö

Ylioppilaskokeisiin ilmoittautuminen

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Algoritmit 1. Demot Timo Männikkö

Matematiikan opintosuunta

Algoritmit 1. Luento 5 Ti Timo Männikkö

Tervetuloa 2. vuositason infoiltaan!

Luento 0: Kurssihallinto Tietokoneen rakenne (2 ov / 4 op) Syksy 2006

Matematiikka ja tilastotiede. Orientoivat opinnot /

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

32 Ke avajaiset klo Forumilla 1. To ro kaikki ryhmät 2

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

4 Heuristinen haku. Eero Hyvönen Helsingin yliopisto

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Algoritmit 1. Luento 14 Ke Timo Männikkö

Ylioppilaskokeisiin ilmoittautuminen

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

JOHDATUS TEKOÄLYYN TEEMU ROOS

Mallilukujärjestys Teknistieteellinen kandidaattiohjelma Tietotekniikka, 2. vuosikurssi

14. Luennon sisältö. Kuljetustehtävä. Verkkoteoria ja optimointi. esimerkki. verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut

Viestintätieteet VIESTINTÄTIETEET , N = 193

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Laskennan mallit

O P I N T O S U O R I T U S O T E

Johdatus tekoälyyn

Ohjelmoinnin peruskurssi Y1

Juha Merikoski. Jyväskylän yliopiston Fysiikan laitos Kevät 2009

Kasvatustieteet

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

Ohjelmoinnin peruskurssien laaja oppimäärä

Algoritmit 2. Luento 2 To Timo Männikkö

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu.

Tietokoneen toiminta (Computer Organization I)

Ohjelmoinnin peruskurssien laaja oppimäärä

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

811312A Tietorakenteet ja algoritmit I Johdanto

Tietokoneen rakenne (2 ov / 4 op) Syksy 2007 Liisa Marttinen. Helsingin yliopisto Tietojenkäsittelytieteen laitos

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

MS-C2103 Koesuunnittelu ja tilastolliset mallit (5 op)

A TIETORAKENTEET JA ALGORITMIT

Ohjelmistotekniikan laitos OHJ-2550 Tekoäly, kevät

Transkriptio:

JOHDATUS TEKOÄLYYN TEEMU ROOS

KURSSIN PERUSTIEDOT VALINNAINEN AINEOPINTOTASOINEN KURSSI, 5 OP PERIODI 3: 16.1.2017-3.3.2016 (7 VIIKKOA+KOE) LUENNOT (CK112): MA 14-16, TI 14-16 LASKUHARJOITUKSET: RYHMÄ 1: TO 12-14 (HANNU) RYHMÄ 2: TO 14-16 (TEEMU) RYHMÄ 3: PE 14-16 (HANNU) RYHMÄ 4? KURSSIKOE TO 9.3. KLO 16-18:30 (SAATTAA MUUTTUA!)

TIIMI TEEMU.ROOS@CS.HELSINKI.FI HUONE: A322 HANNU KÄRNÄ PIAZZA: LIITTYMINEN SÄHKÖPOSTIN LINKILLÄ IRC: #johtek

ESITIETOVAATIMUKSET TIETORAKENTEET-KURSSI JOHDATUS YLIOPISTOMATEMATIIKKAAN -KURSSI TODENNÄKÖISYYSLASKENNAN KURSSISTA ON HYÖTYÄ OHJELMOINTITAITO KIELI VAPAA. JAVAAN OHJAUSTA.

MITÄ PITÄÄ TEHDÄ? LUENNOILLA EI OLE PAKKO ISTUA KURSSIKIRJAA EI OLE -- MATERIAALI KURSSIN SIVULLA KURSSIMONISTE LUENTOKALVOT (SIS. LINKKEJÄ) LASKUHARJOITUKSET MAX 20 PISTETTÄ KURSSIKOE MAX 40 PISTETTÄ HYVÄKSYMISRAJA N. 30 PISTETTÄ

VIELÄ PARI JUTTUA ERILAINEN KUIN TYYPILLINEN AI-KURSSI: - VARHAISEMMASSA VAIHEESSA OPINTOJA - VÄHEMMÄN MATEMATIIKKAA (MUTTA > 0) P(B A) = P(B) P(A B) / P(A)

VIELÄ PARI JUTTUA ERILAINEN KUIN TYYPILLINEN AI-KURSSI: - VARHAISEMMASSA VAIHEESSA OPINTOJA - VÄHEMMÄN MATEMATIIKKAA (MUTTA > 0) RAKENTAVA KRITIIKKI TERVETULLUTTA! TAVOITE: 100% LÄPÄISEE TYÖMÄÄRÄ: YHTEENSÄ N. 125 TUNTIA TAI 18 TUNTIA VIIKOSSA NO PAIN, NO GAIN!

AIHEITA 1. MITÄ ON TEKOÄLY? HISTORIA JA FILOSOFIA 2. PELIT JA ETSINTÄ GOFAI 3. LOGIIKKA(-OHJELMOINTI) 4. KONEOPPIMINEN JA PÄÄTTELY EPÄVARMUUDEN VALLITESSA 5. LUONNOLLISEN KIELEN KÄSITTELY 6. ROBOTIIKKA MODERN AI

KESKUSTELUA TEKOÄLY KULTTUURISSA REITTIOPAS SKYNET SAMANTHA GLADOS H.A.L.

KESKUSTELUA MITÄ KAIKKEA SAMANTHA (*) OSAA? MITÄ NÄISTÄ EI OSATA VIELÄ TOTEUTTAA? ONKO SAMANTHALLA TIETOISUUS? *) TAI MUU ELOKUVAN TEKOÄLY

TEKOÄLYN FILOSOFIAA ÄLYKKÄÄSTI vahva tekoäly logiikka heikko tekoäly rationaaliset agentit parviäly AJATTELEE kognitiotiede neurotiede psykologia Turingin koe David (A.I.) HAL Samantha TOIMII IHMISMÄISESTI

TOIMII IHMISMÄISESTI: TURINGIN TESTI

MITÄ TEKOÄLY OIKEASTI ON? KONENÄKÖ REITINOPTIMOINTI PUHE NLP PELIT KONEOPPIMINEN TIEDONHAKU LOGIIKKA TIEDON LOUHINTA KONEKÄÄNNÖS SUOSITTELU

MITÄ TEKOÄLY OIKEASTI ON?

ETSINTÄ 3 2 1 1 3 2 3 4 3 2 1 2 1 2 1 1 3 4 2 1 2 3 1 2 3 4 2 1 122 31 4 3 1 4 3 1 2 1 122 31........ X.... X X 2 3 1 4 1 4 3 2 3 2 4 1 4

ETSINTÄ LEVEYSSUUNTAINEN HAKU

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ LYHIN REITTI SELVIÄÄ PERUUTTAMALLA NUOLTEN SUUNTAAN

ETSINTÄ ETSINTÄ(Alkusolmu) Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) C A D F B E LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: Solmu [A] Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: [] Solmu Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] ETSINTÄ Solmulista: [] Solmu (Käsitellyt-lista oranssilla) if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) [B,C,D] C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) [C,D] C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: [D] Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) [D,F] C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: [F] Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: [] Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: [E] Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ(Alkusolmu) ETSINTÄ Solmulista: [] Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) C A (vihreät solmut) B D E F LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ ETSINTÄ(Alkusolmu) Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) JONO ( FIRST-IN-FIRST-OUT ) LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f] (jos a Käsitellyt-listalla)

ETSINTÄ ETSINTÄ(Alkusolmu) Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) PINO ( LAST-IN-FIRST-OUT ) LISÄÄ(Naapurit, Solmulista) SYVYYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt return(peräkkäin(uudet, Solmulista)) # LISÄÄ([a,f],[d]) => [a,f,d] (jos a Käsitellyt-listalla)

ETSINTÄ ONGELMANRATKAISUNA HAKU- ALGORITMI

ETSINTÄ ONGELMANRATKAISUNA

ETSINTÄ ONGELMANRATKAISUNA KOLME KANNIBAALIA JA KOLME LÄHETYSSAARNAAJAA HALUAA YLITTÄÄ JOEN VENEELLÄ, JOHON MAHTUU VAIN KAKSI HENKILÖÄ. JOS JOMMALLA KUMMALLA RANNALLA ON ENEMMÄN KANNIBAALEJA KUIN LÄHETYSSAARNAAJIA (MUTTA KUITENKIN VÄHINTÄÄN YKSI LÄHETYSSAARNAAJA), KANNIBAALIT SYÖVÄT HEIDÄT. MITEN JOKI SAADAAN YLITETTYÄ ILMAN, ETTÄ KETÄÄN SYÖDÄÄN? VOIT KOKEILLA KLIKKAAMALLA TÄSTÄ.

SUDOKU 3 2 1

SUDOKU YKSINKERTAINEN SUDOKU-ALGORITMI: 1. ALOITA VASEMMASTA YLÄKULMASTA. 2. JOS RUUTU ANNETTU, SIIRRY SEURAAVAAN. 3. LISÄÄ NUMERO 0 RUUTUUN. 4. KASVATA NUMEROA YHDELLÄ. 5. JOS LISÄTTY NUMERO SOPII, SIIRRY SEURAAVAAN RUUTUUN JA JATKA ASKELEESTA 2. 6. JOS NUMERO LIIAN SUURI, PERUUTA EDELLISEN ITSE VALITUN NUMERON KOHDALLE. 7. JATKA ASKELEESTA 4.

SUDOKU 1 3 2 1

SUDOKU 1 3 1 2 1

SUDOKU 1 3 2 2 1

SUDOKU 1 3 3 2 1

SUDOKU 1 3 4 2 1

SUDOKU 1 3 4 2 2 1

SUDOKU 1 3 4 2 2 2 1

SUDOKU 1 3 4 2 2 4 2 1

SUDOKU 1 3 4 2 2 4 1 2 1

SUDOKU 1 3 4 2 2 4 1? 2 1

SUDOKU 1 3 4 2 2 4 3 2 1

SUDOKU 1 3 4 2 2 4 3? 2 1

SUDOKU 1 3 4 2 2 4? 2 1

SUDOKU 1 3 4 2 2? 2 1

SUDOKU 1 3 4 2 4 2 1

SUDOKU 1 3 4 2 4? 2 1

SUDOKU 1 3 4 2? 2 1

SUDOKU 1 3 4? 2 1

SUDOKU 1 3? 2 1

SUDOKU 2 3 2 1

SUDOKU 2 3 1 2 1

SUDOKU 2 3 1 4 2 1

SUDOKU 2 3 1 4 1 2 1

SUDOKU 2 3 1 4 1 4 2 1

SUDOKU 2 3 1 4 1 4 3 2 1

SUDOKU 2 3 1 4 1 4 3 2 2 1

SUDOKU 2 3 1 4 1 4 3 2 3 2 1

SUDOKU 2 3 1 4 1 4 3 2 3 2 4 1

SUDOKU 2 3 1 4 1 4 3 2 3 2 4 1 4

SUDOKU 3 2 1 1 3 2 3 4 3 2 1 2 1 2 1 1 3 4 2 1 2 3 1 2 3 4 2 1 1 2 2 3 1 4 3 1 4 3 1 2 1 1 2 2 3 1............ X...... X X ALGORITMI VASTAA 2 3 1 4 1 4 3 2 3 2 4 1 4 SYVYYSSUUNTAISTA HAKUA!

PARAS-ENSIN HAKU ETSINTÄ(Alkusolmu) Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) LISÄÄ(Solmulista1, Solmulista2) PARAS-ENSIN -HAKU: return(järjestä(solmulista1, Solmulista2)) # [(a,5),(b,3),(c,1)], [(a,2),(c,3),(f,5)] => [(c,1),(a,2),(c,3),(b,3),(f,5),(a,5)]

HEURISTIIKAT KUSTANNUSARVIO: f(n) - ARVIO LÄHTÖSOLMUSTA SOLMUN N KAUTTA MAALISOLMUUN KULKEVAN POLUN KUSTANNUKSESTA HEURISTIIKKA : h(n) - ARVIO KUSTANNUKSESTA SOLMUSTA N MAALISOLMUUN POLKUKUSTANNUS: g(n) - KUSTANNUS ALKUSOLMUSTA SOLMUUN N (RIIPPUU KULJETUSTA REITISTÄ) f(n) = g(n) + h(n)

A* ETSINTÄ(Alkusolmu) Solmulista = [Alkusolmu] Käsitellyt = [ ] while Solmulista not empty Solmu = EKA(Solmulista) Solmulista = LOPUT(Solmulista) if Solmu not in Käsitellyt Käsitellyt = Käsitellyt + [Solmu] if MAALI(Solmu) return( ratkaisu, Solmu) Solmulista = LISÄÄ(NAAPURIT(Solmu),Solmulista) end if end while return( ei ratkaisua ) A*-HAKU: f(n) = g(n) + h(n) LISÄÄ(Solmulista1, Solmulista2) PARAS-ENSIN -HAKU: return(järjestä(solmulista1, Solmulista2)) # [(a,5),(b,3),(c,1)], [(a,2),(c,3),(f,5)] => [(c,1),(a,2),(c,3),(b,3),(f,5),(a,5)]

A* OLETUS: HEURISTIIKKA h(n) ANTAA AINA ENINTÄÄN YHTÄ SUUREN ARVON KUIN TODELLINEN KUSTANNUS SOLMUSTA N MAALIIN. TÄLLÖIN A* TUOTTAA AINA OPTIMAALISEN RATKAISUN TODISTUKSEN IDEA: JONON EKAKSI EI VOI PÄÄSTÄ MAALISOLMU, JONKA POLKUKUSTANNUS ON SUUREMPI KUIN OPTIMAALISEN REITIN KUSTANNUS. JOS HEURISTIIKKA HYVÄ, SUURIMMASSA OSASSA HUONOJA SOLMUJA EI KÄYDÄ OLLENKAAN.

REITTIOPAS

REITTIOPAS TILA: (PYSÄKKI, KULUNUT AIKA) KUSTANNUSARVIO: (MATKA-AIKA (MIN)) SIIRTYMÄT: (UUSI PYSÄKKI, VÄLIMATKA (MIN)) TEHTÄVÄ: ETSI NOPEIN REITTI PYSÄKILTÄ A PYSÄKILLE B (EI KÄVELYÄ) MENETELMÄ: A*-HAKU