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

Kognitiivinen mallintaminen 1

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

13 Lyhimmät painotetut polut

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

JOHDATUS TEKOÄLYYN TEEMU ROOS

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

JOHDATUS TEKOÄLYYN TEEMU ROOS

Johdatus tekoälyyn

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

A TIETORAKENTEET JA ALGORITMIT

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

Johdatus tekoälyyn (T. Roos) Kurssikoe ARVOSTELUPERUSTEET

Algoritmit 2. Luento 7 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

Algoritmit 1. Luento 13 Ti Timo Männikkö

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

Määrittelydokumentti

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

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

Kognitiivinen mallintaminen I

Johdatus tekoälyyn

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

Tervetuloa 2. vuositason infoiltaan

Lyhin kahden solmun välinen polku

TKT50004: Akateemiset taidot (1 op)

Algoritmit 1. Luento 13 Ma Timo Männikkö

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

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.

Matematiikka ja tilastotiede. Orientoivat opinnot /

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

Laskennan teoria

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

JOHDATUS TEKOÄLYYN TEEMU ROOS

Ylioppilaskokeisiin ilmoittautuminen

1. Mitä tehdään ensiksi?

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

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

Matematiikan opintosuunta

Tervetuloa 2. vuositason infoiltaan!

Tietokoneen rakenne (2 ov / 4 op) Syksy 2006

811312A Tietorakenteet ja algoritmit I Johdanto

Algoritmit 1. Luento 9 Ti Timo Männikkö

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

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

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

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Ylioppilaskokeisiin ilmoittautuminen

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

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

Mallilukujärjestys Teknistieteellinen kandidaattiohjelma Tietotekniikka, 2. vuosikurssi

T : Max-flow / min-cut -ongelmat

Algoritmit 2. Luento 10 To Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

Diskreetin matematiikan perusteet Esimerkkiratkaisut 3 / vko 10

Laskennan mallit

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

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

Tietokoneen toiminta (Computer Organization I)

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

ALGORITMIT & OPPIMINEN

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

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

MS-C2103 Koesuunnittelu ja tilastolliset mallit (5 op)

4 Heuristinen haku. Eero Hyvönen Helsingin yliopisto

Algoritmi on periaatteellisella tasolla seuraava:

TFM-fuksit/Mallilukujärjestys I periodi / viikot /

Yhteenveto palautteesta kurssilla Johdatus tekoälyyn (syksy 2011), Teemu Roos

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

OPS2016 ja ohjelmointi

TEEMU ROOS (KALVOT MUOKATTU PATRIK HOYERIN LUENTOMATERIAALISTA)

Tervetuloa! Matematiikka tutuksi

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

Algoritmit 2. Luento 11 Ti Timo Männikkö

LuK-HOPS: Henkilökohtainen opintosuunnitelma ja osallistuminen opettajatuutorointiin (1 op)

LUKUJÄRJESTYKSEN SUUNNITTELU

Myös opettajaksi aikova voi suorittaa LuK-tutkinnon, mutta sillä ei saa opettajan kelpoisuutta.

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Syksyn 2018 ylioppilaskokeet

LuK-HOPS: Henkilökohtainen opintosuunnitelma ja osallistuminen opettajatuutorointiin (1 op)

Transkriptio:

JOHDATUS TEKOÄLYYN TEEMU ROOS

KURSSIN PERUSTIEDOT VALINNAINEN AINEOPINTOTASOINEN KURSSI, 5 OP PERIODI 3: 18.1.2016-6.3.2016 (7 VIIKKOA+KOE) LUENNOT (CK112): MA 14-16, TI 14-16 LASKUHARJOITUKSET: RYHMÄ 1: TI 12-14 (TEEMU) RYHMÄ 2: TO 14-16 (ELIAS) RYHMÄ 3: PE 12-14 (ELIAS) RYHMÄ 4? KURSSIKOE TO 10.3. KLO 16-18:30

TIIMI TEEMU.ROOS@CS.HELSINKI.FI IRC: teemuroos HUONE: A322 ELIAS JÄÄSAARI IRC: 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) 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 R2-D2 GLADOS (PORTAL) GOOGLE AUTO SKYNET DATA

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 AJATTELEE kognitiotiede neurotiede psykologia Turingin koe David (A.I.) HAL Samantha TOIMII IHMISMÄISESTI

TOIMII IHMISMÄISESTI: TURINGIN TESTI

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

MITÄ TEKOÄLY OIKEASTI ON?

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

ETSINTÄ LEVEYSSUUNTAINEN HAKU

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ

ETSINTÄ LYHIN REITTI SELVIÄÄ PERUUTTAMALLA NUOLTEN SUUNTAAN

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

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 1 2 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 EDELLISEN ITSE VALITUN NUMERON KOHDALLE. 7. JATKA ASKELEESTA 4.

SUDOKU 3 2 1 1 2 3

SUDOKU 1 3 2 1 1 2 3

SUDOKU 1 3 1 2 1 1 2 3

SUDOKU 1 3 2 2 1 1 2 3

SUDOKU 1 3 3 2 1 1 2 3

SUDOKU 1 3 4 2 1 1 2 3

SUDOKU 1 3 4 2 2 1 1 2 3

SUDOKU 1 3 4 2 2 2 1 1 2 3

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

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

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

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

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

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

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

SUDOKU 1 3 4 2 4 2 1 1 2 3

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

SUDOKU 1 3 4 2? 2 1 1 2 3

SUDOKU 1 3 4? 2 1 1 2 3

SUDOKU 1 3? 2 1 1 2 3

SUDOKU 2 3 2 1 1 2 3

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

SUDOKU 3 2 1 1 2 3 1 3 2 3 4 3 2 1 1 2 3 2 1 1 2 3 2 1 1 2 3 1 3 4 2 1 1 2 3 2 3 1 2 3 4 2 1 1 2 2 3 1 1 2 3 4 3 1 4 3 1 2 1 1 2 2 3 1 1 2 3............ X...... X X ALGORITMI VASTAA 2 3 1 4 1 4 3 2 3 2 4 1 4 1 2 3 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

HUOMENNA PELIT CASE: SHAKKI MINIMAX JA ALPHA-BETA-KARSINTA