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

Kognitiivinen mallintaminen 1

JOHDATUS TEKOÄLYYN TEEMU ROOS

13 Lyhimmät painotetut polut

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?

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

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

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

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

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

JOHDATUS TEKOÄLYYN TEEMU ROOS

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

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

JOHDATUS TEKOÄLYYN TEEMU ROOS

Johdatus tekoälyyn (T. Roos) Kurssikoe ARVOSTELUPERUSTEET

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Laskennan teoria

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Algoritmit 1. Luento 1 Ti Timo Männikkö

JOHDATUS TEKOÄLYYN TEEMU ROOS

A TIETORAKENTEET JA ALGORITMIT

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

Määrittelydokumentti

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

JOHDATUS TEKOÄLYYN TEEMU ROOS

Lyhin kahden solmun välinen polku

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

JOHDATUS TEKOÄLYYN TEEMU ROOS

Kognitiivinen mallintaminen I

JOHDATUS TEKOÄLYYN TEEMU ROOS

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 1. Luento 8 Ke Timo Männikkö

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

JOHDATUS TEKOÄLYYN TEEMU ROOS

T : Max-flow / min-cut -ongelmat

Johdatus tekoälyyn

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

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.

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

Laskennan mallit

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

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

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

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

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

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

Diskreetin matematiikan perusteet Esimerkkiratkaisut 3 / vko 10

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

Algoritmit 1. Luento 13 Ma Timo Männikkö

Ongelma(t): Voiko älykkyyden määritellä ja voiko sitä mitata, myös objektiivisesti? Onko älykkyyttä ilman (näkyvää) toimintaa? Voiko kone olla älykäs

Tervetuloa 2. vuositason infoiltaan

Ylioppilaskokeisiin ilmoittautuminen

JOHDATUS TEKOÄLYYN TEEMU ROOS

811120P Diskreetit rakenteet

Tervetuloa 2. vuositason infoiltaan!

TEEMU ROOS (KALVOT MUOKATTU PATRIK HOYERIN LUENTOMATERIAALISTA)

4 Heuristinen haku. Eero Hyvönen Helsingin yliopisto

811312A Tietorakenteet ja algoritmit I Johdanto

Algoritmit 1. Luento 9 Ti Timo Männikkö

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

Algoritmit 1. Luento 14 Ke Timo Männikkö

1. Mitä tehdään ensiksi?

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

Ylioppilaskokeisiin ilmoittautuminen

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

Tekoäly tukiäly. Eija Kalliala, Marjatta Ikkala

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

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

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Jukola Tekstioppi Sanoma Pro Kaikki kurssit. Jukola 1 Sanoma Pro Kurssi 1. Jukola 2 Sanoma Pro Kurssi 2. Jukola 3 Sanoma Pro Kurssi 3

Johdatus tekoälyyn

TKT50004: Akateemiset taidot (1 op)

Ohjelmoinnin peruskurssien laaja oppimäärä

Algoritmit 1. Luento 2 Ke Timo Männikkö

TEKOÄLY JA TIETOISET KONEET

Padasjoen lukion aikuislinjan LOPS

A* Reitinhaku Aloittelijoille

Algoritmi on periaatteellisella tasolla seuraava:

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

Laskennan teoria

IISALMEN LYSEO OPPIKIRJALISTA

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku

Viestintätieteet VIESTINTÄTIETEET , N = 193

Syksyn 2018 ylioppilaskokeet

LUKUJÄRJESTYKSEN SUUNNITTELU

S BAB ABA A aas bba B bbs c

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

KURSSIVALINNAT & YLIOPPILASKIRJOITUKSET

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

Transkriptio:

JOHDATUS TEKOÄLYYN TEEMU ROOS

KURSSIN PERUSTIEDOT VALINNAINEN AINEOPINTOTASOINEN KURSSI, 4 OP PERIODI 1: 6.9.2012-12.10.2012 (6 VIIKKOA) LUENNOT (B123, LINUS TORVALDS -AUDITORIO): TO 10-12, PE 12-14 LASKUHARJOITUKSET (B222): RYHMÄ 1: KE 12-14 (TEEMU) RYHMÄ 2: TO 12-14 (SIMO) RYHMÄ 3: TO 16-18 (ALEKSI) KURSSIKOE PE 19.10.2012 KLO 9-12 A111

TIIMI TEEMU.ROOS@CS.HELSINKI.FI HUONE A322 SIMO LINKOLA ALEKSI MAJANDER

ESITIETOVAATIMUKSET TIETORAKENTEET-KURSSI JOHDATUS DISKREETTIIN MATEMATIIKKAAN -KURSSI OHJELMOINTITAITO KIELI VAPAA. JAVAAN OHJAUSTA.

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

VIELÄ PARI JUTTUA KURSSI ERILAINEN KUIN VIIME VUOSINA: - ERI LUENNOIJA (NYT TOISTA VUOTTA) - ERI PAINOTUKSET RAKENTAVA KRITIIKKI TERVETULLUTTA! TAVOITE: 100% LÄPÄISEE TYÖMÄÄRÄ: YHTEENSÄ N. 100 TUNTIA TAI 15 TUNTIA VIIKOSSA YES WE CAN!

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

KESKUSTELUA TEKOÄLY KULTTUURISSA SKYNET HAL 9000 SHODAN DEEP BLUE GLADOS

KESKUSTELUA MITÄ KAIKKEA HAL OSAA? MITÄ NÄISTÄ EI OSATA VIELÄ TOTEUTTAA? ONKO HALILLA TIETOISUUS?

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

TOIMII IHMISMÄISESTI: TURINGIN TESTI

KIINALAINEN HUONE VOIKO TOIMIA ÄLYKKÄÄSTI ILMAN ETTÄ AJATTELEE? TIETOISUUS?

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Ä 1 3 1 3 4 3 2 3 4 3 2 3 1 2 3 4 122 31 4 3 1 4 3 1 122 31........ X.... X X 2 3 1 4 1 4 3 2 3 2 4 1 4

ETSINTÄ LEVEYSSUUNTAINEN HAKU

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 ) LISÄÄ(Naapurit, Solmulista) LEVEYSSUUNTAINEN HAKU: Uudet = Naapurilista Käsitellyt Solmulista return(peräkkäin(solmulista, Uudet)) # LISÄÄ([a,f],[d]) => [d,a,f]

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]

ETSINTÄ [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 ) 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]

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]

ETSINTÄ [B,C,D] 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]

ETSINTÄ [C,D] 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]

ETSINTÄ [D] 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]

ETSINTÄ [D,F] 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]

2. ETSINTÄ JA PELIT [F] 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]

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]

ETSINTÄ [E] 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]

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]

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]

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]

ETSINTÄ ONGELMANRATKAISUNA I KU M HA RIT GO AL

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

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 YKSI RUUTU. 7. JATKA ASKELEESTA 4.

SUDOKU 3

SUDOKU 1 3

SUDOKU 1 3 1

SUDOKU 1 3 2

SUDOKU 1 3 3

SUDOKU 1 3 4

SUDOKU 1 3 4 2

SUDOKU 1 3 4 2 2

SUDOKU 1 3 4 2 2 4

SUDOKU 1 3 4 2 2 4 1

SUDOKU 1 3 4 2 2 4 1?

SUDOKU 1 3 4 2 2 4 3

SUDOKU 1 3 4 2 2 4 3?

SUDOKU 1 3 4 2 2 4?

SUDOKU 1 3 4 2 2?

SUDOKU 1 3 4 2 4

SUDOKU 1 3 4 2 4?

SUDOKU 1 3 4 2?

SUDOKU 1 3 4?

SUDOKU 1 3?

SUDOKU 2 3

SUDOKU 2 3 1

SUDOKU 2 3 1 4

SUDOKU 2 3 1 4 1

SUDOKU 2 3 1 4 1 4

SUDOKU 2 3 1 4 1 4 3

SUDOKU 2 3 1 4 1 4 3 2

SUDOKU 2 3 1 4 1 4 3 2 3

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 1 3 2 3 4 3 1 3 4 2 3 1 2 3 4 1 2 2 3 1 4 3 1 4 3 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),(b,3),(f,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),(b,3),(f,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) 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