Startsidan  ▸  Texter  ▸  Teknikblogg

Anders Hesselbom

Programmerare, skeptiker, sekulärhumanist, antirasist.
Författare till bok om C64 och senbliven lantis.
Röstar pirat.

Byt dörr!

2013-12-23

I det amerikanska tv-programmet “Let’s make a deal” fick en gäst, spelaren, välja en dörr av tre tillgängliga i förhoppning att vinna en bil. Spelaren vet inte vilken dörr som innehåller bilen, men programlendaren Monty Hall vet precis vart bilen finns. Efter att spelaren gjort sitt val, öppnar Hall en dörr som spelaren inte valt, och visar att denna är en nit. Alltså, om spelaren väljer t.ex. dörr två, öppnar Hall t.ex. dörr tre och visar att dörr tre är en nitlott.

Nu frågar Hall om spelaren vill byta dörr eller inte. Om spelaren vill vinna bilen, ska han acceptera erbjudandet?

Ja, eftersom första valet är gjort med en vinstsannolikhet på 1/3, men bytet görs med en vinstsannolikhet på 1/2.

Alltså, om vi använder C# för att undersöka spelarens sannolikhet att vinna bilen om han inte byter dörr, kommer vi se att vi vinner bilen ungefär 333 333 gånger av 1 000 000, eftersom vi helt uppenbart har en chans av tre att pricka rätt.

var rnd = new Random();
var correctGuesses = 0;
for (var i = 0; i < 1000000; i++)
{
   var correctPosition = rnd.Next(1, 4); //Ger ett tal mellan 1 och 3.
   var playersGuess = rnd.Next(1, 4); //Ger ett tal mellan 1 och 3.
   if (correctPosition == playersGuess)
      correctGuesses++;
}
Console.WriteLine(correctGuesses.ToString("n0"));

Spontant kan man tycka att om spelaren inte byter dörr efter att han fått se att en annan dörr är en nit, borde det ändå vara 50% chans att han redan valt en vinst, men det stämmer inte. Valet gjordes när chansen var 33% att välja rätt. Låt oss se vad som händer när spelaren byter dörr efter att ha fått se en nit.

Vi kan konstatera att valet var rätt redan från början med 33% sannolikhet. Med 33% sannolikhet väljer alltså spelaren bort en vinst, men när vi kör exemplet ser vi att antalet korrekta gissningar landar på ungefär 666 666 av 1 000 000.

var rnd = new Random();
var correctGuesses = 0;
for (var i = 0; i < 1000000; i++)
{
   var correctPosition = rnd.Next(1, 4); //Ger ett tal mellan 1 och 3.
   var playersGuess = rnd.Next(1, 4); //Ger ett tal mellan 1 och 3.
   //Bestämm vilken dörr som Monty Hall ska visa för spelaren.
   var shownByHall = rnd.Next(1, 4);
   while (shownByHall == correctPosition || shownByHall == playersGuess)
      shownByHall = rnd.Next(1, 4);
   //Låt spelare välja en ny dörr, inte den han redan valt
   //och inte den han valde tidigare.
   var newGuess = rnd.Next(1, 4);
   while (newGuess == playersGuess || newGuess == shownByHall)
      newGuess = rnd.Next(1, 4);
   if (correctPosition == newGuess)
      correctGuesses++;
}
Console.WriteLine(correctGuesses.ToString("n0"));

Detta avslöjar alltså att bytet ger en bil med 66% sannolikhet.

Categories: General

One response to “Byt dörr!”

  1. Pontus says:

    Ett enklare sätt att illustrera problemet är att man ger spelaren 100 val vid första försöket sedan öppnar man de 98 felaktiga valen och frågar om han vill byta…

Leave a Reply

Your email address will not be published. Required fields are marked *



En kopp kaffe!

Bjud mig på en kopp kaffe (20:-) som tack för bra innehåll!

Bjud på en kopp kaffe!

Om...

Kontaktuppgifter, med mera, finns här.

Följ mig

Twitter Instagram
GitHub RSS

Public Service

Folkbildning om public service.

Hem   |   linktr.ee/hesselbom   |   winsoft.se   |   80tal.se   |   Filmtips