Kirjautuminen

Haku

Tehtävät

Koodit: QB: Kolmen oven ongelma

Kirjoittaja: Antti Laaksonen

Kirjoitettu: 15.05.2007 – 15.05.2007

Tagit: matematiikka, ohjelmointitavat, koodi näytille, vinkki

Tunnettu todennäköisyyden ongelma kuuluu hieman mukaillen näin: Huoneessa on kolme ovea, joista yhden takana on kruunu ja kahden muun takana ei ole mitään. Saat avata vain yhden oven, ja jos oven takana on kruunu, saat pitää sen. Mutta juuri kun olet valinnut oven, avataan jokin toinen ovi, jonka takana ei ole kruunua. Lisäksi sinulle annetaan vielä mahdollisuus muuttaa valintaasi. Kannattaako tässä tilanteessa pysyä alkuperäisessä valinnassa vai siirtyä toisen avaamattoman oven luokse?

Tällaisen ongelman miettimisessä ovat tarpeen kynä ja paperi ja riittävästi aikaa - tai sopiva tietokoneohjelma. Asiaa on helppo tutkia tietokoneella arpomalla lukuisia kertoja kruunun sijainti ja aluksi valittu ovi. Näin pystytään selvittämään, miten mahdollinen oven vaihto vaikuttaa kruunun saamisen todennäköisyyteen. Käytännössä ohjelman tulokset alkavat lähestyä varsin nopeasti teoreettisia todennäköisyyksiä. Kun sitten oikeat tulokset ovat selvillä, asiasta on mukava väitellä muiden kanssa, kun tietää itse olevansa oikeassa.

Pienimmillään todennäköisyyksien laskemiseen riittää kymmenrivinen ohjelma, mutta tässä on hieman monipuolisempi ja havainnollisempi graafinen ohjelma. Ruutu on jaettu kolmeen huoneeseen, joissa kussakin tapahtuu samaan aikaan yksittäinen valintatilanne. Vasemmassa huoneessa ovea vaihdetaan aina, keskimmäisessä huoneessa ei koskaan ja oikeassa huoneessa menetellään satunnaisesti. Huoneiden yläpuolella näkyvät jatkuvasti muuttuvat tiedot, kuinka usein valinta osuu oikeaan kullakin tavalla.

Mikä on sitten oikea vastaus ongelmaan? Jos ovea ei vaihda, todennäköisyys saada kruunu on 1 / 3. Mutta jos oven vaihtaa, todennäköisyys onkin 2 / 3. Tämä aika yllättävä tulos on loppujen lopuksi helposti ymmärrettävissä. Jos oven vaihtaa, ainoa tilanne, jossa kruunu jää saamatta, on se, kun on alun perin valinnut oikean oven. Eli jos onnistuu aluksi valitsemaan "väärän" oven, kruunun saanti on varmaa, ja tämän todennäköisyys on 2 / 3.

Kolmen oven ongelmasta voi lukea lisää vaikkapa Wikipediasta:
http://en.wikipedia.org/wiki/Monty_Hall_problem

' Kolmen oven ongelma
' Antti Laaksonen, 2007

DIM ukot%(1200), ovi%(400), kruunu%(400)

SCREEN 7, , 0, 1

CLS ' kolme ukkoa
DRAW "c1bm5,1r7fdfgdf2d5hgfhbrp6,1blc1ld5"
DRAW "l7ur6l2u4ld4l3u4lghegbrp6,1blc1u5ef2"
DRAW "r7ebdp9,1buc1hbrp6,1blc1l7bdp6,1buc1"
DRAW "hbdp6,1buc1uheuf2r5ebdp6,1bublp9,1"
GET (0, 0)-(19, 19), ukot%(0)
DRAW "c6bm4,7r8c0bm7,5r0bm10,5r0bm6,7fr3e"
GET (0, 0)-(19, 19), ukot%(400)
DRAW "bm11,7c6gl3hbdc0er3f"
GET (0, 0)-(19, 19), ukot%(800)

CLS ' ovi
DRAW "c4bm2,1d17r15u17l15"
DRAW "bm8,8erfg2bd2d0bd2p3,4"
GET (0, 0)-(19, 19), ovi%

CLS ' kruunu
DRAW "c6bm3,6f2e2f2e2f2e2d9l12u8bf1p14,6"
GET (0, 0)-(19, 19), kruunu%

CLS

' erotusviivat
LINE (102, 0)-(102, 200)
LINE (213, 0)-(213, 200)

DIM ukkox%(3), ukkoy%(3), ukkok%(3)
DIM kruunut%(3), avatut%(3), mielet%(3)
DIM maarat%(3)

DO
   ' piirretään ovet
   FOR i% = 0 TO 8
      PUT (i% * 37, 105), ovi%, PSET
   NEXT
   PCOPY 0, 1
   ' arvotaan valinnat ja kruunujen paikat
   FOR i% = 0 TO 2
      ukkok%(i%) = INT(RND * 3)
      kruunut%(i%) = INT(RND * 3)
      ukkox%(i%) = i% * 37 * 3 + ukkok%(i%) * 37
      ukkoy%(i%) = 180
   NEXT
   ' liikutetaan valitsijoita ylös
   FOR h% = 1 TO 50
      FOR i% = 0 TO 2
         ukkoy%(i%) = ukkoy%(i%) - 1
         PUT (ukkox%(i%), ukkoy%(i%)), ukot%(0), PSET
         WAIT &H3DA, 8
         PCOPY 0, 1
      NEXT
   NEXT
   SLEEP 1
   ' näytetään toinen tyhjistä ovista
   FOR i% = 0 TO 2
      FOR j% = 0 TO 2
         IF ukkok%(i%) <> j% AND kruunut%(i%) <> j% THEN
            PUT (i% * 37 * 3 + j% * 37, 105), ovi%
            avatut%(i%) = j%
            EXIT FOR
         END IF
      NEXT
   NEXT
   PCOPY 0, 1
   SLEEP 1
   ' muutetaan vasemman valitsijan ovea
   FOR j% = 0 TO 2
      IF ukkok%(0) <> j% AND avatut%(0) <> j% THEN
         ukkok%(0) = j%
         EXIT FOR
      END IF
   NEXT
   ' muutetaan ehkä oikean valitsijan ovea
   IF RND < .5 THEN
      FOR j% = 0 TO 2
         IF ukkok%(2) <> j% AND avatut%(2) <> j% THEN
            ukkok%(2) = j%
            EXIT FOR
         END IF
      NEXT
   END IF
   ' näytetään, mitä valitun oven takana on
   ' ja merkitään tulokset muistiin
   FOR i% = 0 TO 2
      PUT (i% * 37 * 3 + ukkok%(i%) * 37, 105), ovi%
      IF ukkok%(i%) = kruunut%(i%) THEN
         PUT (i% * 37 * 3 + ukkok%(i%) * 37, 105), kruunu%
         maarat%(i%) = maarat%(i%) + 1
         mielet%(i%) = 400
      ELSE
         mielet%(i%) = 800
      END IF
   NEXT
   yhteensa% = yhteensa% + 1
   PCOPY 0, 1
   ' liikutetaan valitsijoita alas
   FOR h% = 1 TO 50
      FOR i% = 0 TO 2
         ukkoy%(i%) = ukkoy%(i%) + 1
         PUT (ukkox%(i%), ukkoy%(i%)), ukot%(mielet%(i%)), PSET
         WAIT &H3DA, 8
         PCOPY 0, 1
      NEXT
   NEXT
   ' näytetään uudet tiedot ylhäällä
   FOR i% = 0 TO 2
      PUT (ukkox%(i%), ukkoy%(i%)), ukot%(mielet%(i%))
      LOCATE 2, i% * 13.5 + 1
      PRINT yhteensa%; "kertaa"
      LOCATE 3, i% * 13.5 + 1
      PRINT maarat%(i%); "oikein"
      LOCATE 5, i% * 13.5 + 1
      PRINT INT(maarat%(i%) / yhteensa% * 100 * 10) / 10; "%   "
   NEXT
   PCOPY 0, 1
LOOP UNTIL INKEY$ = CHR$(27)

Kommentit

Jaska [16.05.2007 12:15:19]

#

Täytyy kuitenkin muistaa, että yleensä matemaattiset ongelmat on syytä ratkoa kynällä ja paperilla. Matematiikka on eksakti tiede ja siinä jokainen päättelyaskel on pystyttävä varmistamaan. Mikä takaa, että tietokone toimii virheettömästä? Vaikka koneen antaisi laskea miljardi kertaa laskun 10*0 ja tulos olisi nolla, ei tämä vielä todista mitään, joskin antaa viitteitä siitä, mikä tulos mahdollisesti on.

T.M. [16.05.2007 13:38:24]

#

Joo, ihan turhia noi tietokoneet on, kaikki vaan laskemaan käsin niitä satoja miljardeja laskuja :D

Mikä takaa että ihminen toimii virheettömästi? :D:D

Grez [16.05.2007 15:18:21]

#

Yleisesti ottaen mielestäni aika turhaa käyttää tähän nimenomaiseen tehtävään aikaa enempää kuin se max. 20 sekuntia, joka menee päätellä oikea vastaus.

Tämä kuuluu tähän sarjaan tehtävät, joita en koskaan ole voinut ymmärtää. Siis en ole voinut ymmärtää että mikä tämän sarjan tehtävissä on "hankalaa".

Antti Laaksonen [16.05.2007 20:11:12]

#

Jaska kirjoitti:

Matematiikka on eksakti tiede ja siinä jokainen päättelyaskel on pystyttävä varmistamaan. Mikä takaa, että tietokone toimii virheettömästä?

Jos tietokoneohjelma on laadittu oikein, ei se minusta paljonkaan eroa matemaattisesta todistuksesta. Olisi äärimmäisen epätodennäköistä, että tietokoneessa tapahtuisi joka kerta sama sisäinen virhe, kun ohjelmaa suoritetaan lukuisia kertoja eri koneissa. Minusta melkein tuntuu, että tietokone toimii varmemmin kuin yksikään matemaatikko.

Grez kirjoitti:

Siis en ole voinut ymmärtää että mikä tämän sarjan tehtävissä on "hankalaa".

Ainakaan minulle ei alkuun ollut lainkaan päivänselvää, miksi todennäköisyys on niin kuin se on. Tuon Wikipedian artikkelin mukaan ongelmaa joskus esitettäessä jopa sadat matematiikan professorit erehtyivät, vaikka he varmasti pohtivat asiaa enemmän kuin 20 sekuntia. Eli ainakin tavalliselle kadunmiehelle tämä ongelma voi helposti aiheuttaa paljon miettimistä.

Jaska [16.05.2007 22:42:28]

#

Antti Laaksonen kirjoitti:

Minusta melkein tuntuu, että tietokone toimii varmemmin kuin yksikään matemaatikko.

Aika rohkea väite. Kyllä alan asiantuntijat lukevat toistensa papereita tarkasti, jos siellä on itseään kiinnostavia tuloksia. Ja matemaatikot osaavat kuitenkin laskea (toivottavasti) irrationaalilukujen tarkoilla arvoilla toisin kuin tietokoneet, jotka tallentavat arvot liukulukuina. Tietysti kone voidaan laittaa myös laskemaan symbolisesti, mutta ainakaan minä en ole nähnyt symbolista matikkaohjelmaa, joka osaisi laskea kunnolla funktion sqrt(exp(z)+sinh(z)) integraalin 0:sta äärettömään.

mauku [16.05.2007 23:45:00]

#

Eikös se ollut niin, että yhden takana on hieno urheiluauto ja 2 muun takana pukki, joka puskee sinua?
No ihan miten vaan...

Antti Laaksonen [16.05.2007 23:55:47]

#

Jaska kirjoitti:

Tietysti kone voidaan laittaa myös laskemaan symbolisesti, mutta ainakaan minä en ole nähnyt symbolista matikkaohjelmaa, - -

Ihmisen rajat taitavat tulla vastaan ennen koneen rajoja. Tietokone pystyisi laskemaan ja todistamaan vaikka mitä ylivoimaisen tarkasti ja nopeasti, mutta toistaiseksi ihmisen taidot eivät riitä sen ohjelmointiin. Eli ongelmana on tällä hetkellä, miten kone saadaan tekemään monimutkaisia asioita - ei niinkään se, että kone ei onnistuisi noudattamaan luotettavasti tarkkoja ohjeita.

Grez [17.05.2007 11:29:59]

#

Antti Laaksonen kirjoitti:

Grez kirjoitti:

Siis en ole voinut ymmärtää että mikä tämän sarjan tehtävissä on "hankalaa".

Ainakaan minulle ei alkuun ollut lainkaan päivänselvää, miksi todennäköisyys on niin kuin se on. Tuon Wikipedian artikkelin mukaan ongelmaa joskus esitettäessä jopa sadat matematiikan professorit erehtyivät, vaikka he varmasti pohtivat asiaa enemmän kuin 20 sekuntia.

Ko. matematiikan professorit vissiin sitten ajattelevat asiaa jotenkin liian vaikeasti.

Ongelmassahan on hyvin yksinkertaisesti kyse siitä, että pitää arvata oikea vastaus järjestelmässä josta ei ole paljoa tietoa. Sen vastauksen antamisen jälkeen annetaan lisää tietoa järjestelmästä ja kysytään haluaako pitäytyä vastauksessa jonka on jo antanut, vai antaa vastauksen jossa hyödyntää myös saamansa uuden tiedon. Jotkuthan uskovat että vaihtamisella todennäköisyys ei parane, eli he uskovat että lisätiedon saaminen järjestelmästä ei paranna todennäköisyyttä löytää oikea vastaus, joka on mielestäni jo jossain määrin uskomatonta.

Varmaan tuossa kilpailutilanteessa jotkut pitäytyvät alkuperäisessä valinnassa ihan vaan psykologisista syistä (kun eivät kykene hahmottamaan tilannetta rationaalisesti) koska pelkäävät tilannetta jossa ovat jo valinneet oikein ja menettävät sen vaihtaessaan. Eli "parempi pyy pivossa kuin kymmenen oksalla". Ongelma vaan tuossa ajattelumallissa on se, että todellisuudessa pyy ei vielä ole pivossa yhtään sen enempää kuin ennen arvaamista, koska todellisuudessa kilpailija ei tiedä, onko oven valitsemansa oven takana palkinto vai ei.

setä [17.05.2007 11:56:52]

#

Tässä esimerkissä on kiintoisaa nähdä, että päättelemällä saatu tulos pitää yhtä koneen tilastollisesti saatavan tuloksen kanssa ja näin vermentaa oikean päättelyn. Varmasti löytyy tehtäviä, joissa päättely on vaikeaa tai jopa mahdotonta jolloin ainoa keino oikean ratkaisun saamiseksi on tällainen tilastollinen ratkaisu. Sen oikeellisuuden voi taas tarkastaa testaamalla sitä tehtävällä, jonka voi ratkaista päättelyllä.
Hieman vastaava esimerkki saadaan, kun vastus, häviöllinen konkka, jossa siis sarjavastus, ja häviöllinen kela kytketään rinnakkain. Konkassa aluksi jokin varaus. Löytääkö joku matemaatikkoguru tällaisen piirin värähtelylle matemaattisen ratkaisun. Itse en löytänyt matemaatikkogollegoideni avullakaan. Sen sijaan tietokoneen numeerisen ratkaisun ja kokeilujen avulla löytyi kaava, joka on laskentatarkkuuden rajoissa yhtäpitävä numeerisen ratkaisun kanssa ja voidaan pitää oikeana.

Grez [17.05.2007 13:45:28]

#

No kommentoinkin lähinnä tätä kyseistä tehtävää, jossa tarvitsee kyetä lähinnä laskemaan erotus (1 - 1/3 = 2/3)

setä [17.05.2007 14:22:51]

#

Tämä tehtävä tosiaan on helppo kun ratkaisun on löytänyt. Itse kyllä erehdyin kun ajattelin että valinnan jälkeen yksi tyhjä lokero on pois, jäljellä on siis kaksi jolloin todennäköisyys on 0,5 eli tasan. Ja vipuun menin. Ja siinä koko ongelman ydin juuri onkin.

os [17.05.2007 23:50:52]

#

Grez kirjoitti:

... eli he uskovat että lisätiedon saaminen järjestelmästä ei paranna todennäköisyyttä löytää oikea vastaus, joka on mielestäni jo jossain määrin uskomatonta.

Mikä sääntö tuo nyt oli?

Arvaa tuntemattoman järjestelmän tuottaman jonon 35241563... kymmenes luku. Lisätietoja järjestelmästä: luvut on arvottu nopalla ja yhdeksäs luku on 4. Helpottuiko päättely?

Jaska kirjoitti:

Matematiikka on eksakti tiede ja siinä jokainen päättelyaskel on pystyttävä varmistamaan. Mikä takaa, että tietokone toimii virheettömästä? Vaikka koneen antaisi laskea miljardi kertaa laskun 10*0 ja tulos olisi nolla, ei tämä vielä todista mitään, joskin antaa viitteitä siitä, mikä tulos mahdollisesti on.

Eksaktius alkaa tässä tapauksessa olla lähinnä teoreettinen ihanne. Jos tietokoneen toimintaperiaate on todettu matemaattisesti oikeaksi, on sen tekemä mekaaninen todistus aivan yhtä oikea kuin käsintehtykin (Neliväriongelma). Tietokoneen satunnaisista (esimerkiksi kosmisen säteilyn aiheuttamista) laskuvirheistä johtuva teoreettinen epäluotettavuus on olematon verrattuna ihmisen tekemiin lasku- ja päättelyvirheisiin. Jos miljardi matemaatikkoa laskee saman laskun, on tulos luultavasti useammassa tapauksessa jotakin muuta kuin 0.

Grez [17.05.2007 23:58:23]

#

os kirjoitti:

Arvaa tuntemattoman järjestelmän tuottaman jonon 35241563... kymmenes luku. Lisätietoja järjestelmästä: luvut on arvottu nopalla ja yhdeksäs luku on 4. Helpottuiko päättely?

Niin, päättely helpottui, enää 6 vaihtoehtoa kymmenestä. Eli jos olisit ensin arvannut vaikka 7 ja nyt kysyttäisiin haluatko vaihtaa, niin varmasti kannattaisi.

Kaiken kaikkiaan tuo ei kuitenkaan ollut se mitä tarkoitin.

os [18.05.2007 12:27:06]

#

http://en.wikipedia.org/wiki/Ten-sided_die :)

Oviongelma on sinänsä helppo tehtävä, jonka ratkaisussa keskeistä on se, että onglemaa lähestyy riittävän analyyttisellä (oikealla) tavalla. Ongelma kuitenkin vaikuttaa vielä helpommalta kuin oikeasti on, lähes itsestäänselvältä, minkä vuoksi moni (jopa matematiikan professorit) sortuu ajattelemaan ongelmaa liian yksinkertaisesti ja intuitiivisesti.

tkarkkainen [20.05.2007 21:32:33]

#

setä kirjoitti:

Hieman vastaava esimerkki saadaan, kun vastus, häviöllinen konkka, jossa siis sarjavastus, ja häviöllinen kela kytketään rinnakkain. Konkassa aluksi jokin varaus. Löytääkö joku matemaatikkoguru tällaisen piirin värähtelylle matemaattisen ratkaisun.

Tokihan tuolle piirille ratkaisu löytyy. Differentiaaliyhtälön kautta voidaan osoittaa, että jos ideaalinen varattu kondensaattori ja ideaalinen kela kytketään rinnan, muodostuu siniaalto, jonka taajuus on f = 1/(2*pi) * sqrt(1/(LC)). Reaalisten komponenttien häviöllisyyden vuoksi todellisessa kytkennässä siniaallosta tulee vaimeneva, ja jos rinnalle kytketään vielä erillinen vastuskomponentti, vaimenemisesta tulee nopeampaa.

Ja jos nyt en ihan väärin muista syksyn sähkökurssia, niin reaalista kondensaattoria kuvataan kapasitanssin ja konduktanssin (resistanssin) rinnankytkennällä, koska reaalinen kondensaattori ei voi varastoida varausta ikuisesti, vaan kadottaa sen ajan myötä, ikään kuin sen rinnalle olisi kytketty resistanssiltaan suuri vastus.

En nyt millään jaksaisi ruveta rakentamaan noita diff. yhtälöitä tähän aikaan päivästä, toivottavasti uskot ilmankin :)

Offtopikkiahan tämä oli, mutta ei toivottavasti häirinnyt varsinaista keskustelua :)

setä [25.05.2007 01:04:47]

#

Valitettavasti on tosiaan aika kaukana varsinaisesta aiheesta mutta mutta liittyy kuitenkin tietokoneen avulla löytyvään ratkaisuun. Kirjallisuudesta kyllä löytyy ratkaisut erikoistapauksiin, mutta yleisessä muodossa nuo kaikki kolme vastusta on mukana ja siihen ei löydy ratkaisua mistään paitsi tuo numeerisen ratkaisun ja intuition avulla löytynyt kaava. Tehtävä ei ratkea tavanomaisin diff. yhtälöin vaan vaatii korkeampaa matikkaa. Vaimennuksen kasvaessa tässä tapauksessa myös taajuus laskee.

Darwen [25.06.2007 18:07:44]

#

Tollanen löyty http://www.lintukoto.net/testit/ovi/index.php

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta