Re[2]: ТВ: задача Монти Холла
От: Andy77 Ниоткуда  
Дата: 16.01.07 18:46
Оценка:
Здравствуйте, Andy77, Вы писали:

A>Кстати, сегодня топику исполнилось ровно три года


Опс... четыре года никудышный из меня родитель.
Re[11]: Простое объяснение
От: raskin Россия  
Дата: 17.01.07 00:26
Оценка:
Andy77 wrote:
>>> Как это? Эта задача ведь ничем не отличается от оригинальной. Конечно,
> R>Как ничем? Про ведущего мы знали, что нашу дверь он не откроет никогда,
> R>поэтому про неё мы узнать и не могли. Про тигра таких странных данных у
> R>нас нет, он мог бы зарычать и за нашей дверью, и оставшиеся две двери,
> R>за которыми ничего не слышно, симметричны. На открытие двери ведущим наш
> R>выбор повлиял. Тигры его для простоты ещё не знали.
>
> Не мог он зарычать за нашей дверью, так как по условию "Из-за другой
> двери *(не той,
> что выбрал игрок)* послышалось рычание тигра."

Не зарычал и не мог зарычать — разные вещи в теории вероятностей, не
правда ли?
Posted via RSDN NNTP Server 2.1 beta
Re[12]: Простое объяснение
От: Andy77 Ниоткуда  
Дата: 17.01.07 09:54
Оценка:
Здравствуйте, raskin, Вы писали:

R>Andy77 wrote:

>>>> Как это? Эта задача ведь ничем не отличается от оригинальной. Конечно,
>> R>Как ничем? Про ведущего мы знали, что нашу дверь он не откроет никогда,
>> R>поэтому про неё мы узнать и не могли. Про тигра таких странных данных у
>> R>нас нет, он мог бы зарычать и за нашей дверью, и оставшиеся две двери,
>> R>за которыми ничего не слышно, симметричны. На открытие двери ведущим наш
>> R>выбор повлиял. Тигры его для простоты ещё не знали.
>>
>> Не мог он зарычать за нашей дверью, так как по условию "Из-за другой
>> двери *(не той,
>> что выбрал игрок)* послышалось рычание тигра."

R>Не зарычал и не мог зарычать — разные вещи в теории вероятностей, не

R>правда ли?

А, понял, я просто считал эту фразу частью условия. Тогда — да, симметричны, конечно.
Re: ТВ: задача Монти Холла
От: minorlogic Украина  
Дата: 18.01.07 13:39
Оценка:
Поскольку продул сегодня на спор 20 баксов, изложу свою версию .

Я придержзивался версии что в обоих случаях вероятность одинакова , после прогона тестовой программы , оказалось что я неправ и я впал в ступор.

Изъян моих рассуждений состоял в том , что я думал о дверях как о равноценных , но оказывается ведущий дает подсказку и про двери мы знаем разную информацию .


Как пример предлагаю такие рассуждения

1. Пусть у нас таже задача и 1000 дверей.

2. Выбираем дверь.

3. Ведущий закрывает (1000 — 2) == 998 дверей и оставляет 2 двери , одна из них моя выбранная и вторая , ту которую оставил ведущий.

Теперь у нас дополнительняа информация о дверях , а именно.

первая дверь выигрышна с вероятностью 1/1000

вторая с вероятностью 998/1000

и конечно логично теперь выбрать вторую дверь !!!

4. Выбираем 2 дверь и выигрываем с вероятностью 998/1000 вместо 1/1000

код программы которая помогла изьять у меня 20 баксов (автор пожелал остаться неизвестным)

#include <cstdlib>
#include <ctime>
#include <cassert>

#include <iostream>

int random(int arg)
{
   int val = (rand() * arg) / (RAND_MAX +1);
   assert(val < arg);
   return val;
}


bool correct_choice(bool change)
{
   int correct_door = random(3);
   int choice       = random(3);

   int hint = -1;
   if (choice != correct_door)
   {
      int i = 0;
      while (i < 3)
      {
         if (i == choice || i == correct_door)
         {
            i++;
            continue;
         }
         hint = i;
         break;
      }
   }
   else
   {
      int hints[2];
      int i = 0;
      int counter = 0;
      while (i < 3)
      {
         if (i == correct_door)
         {
            i++;
            continue;
         }
         hints[counter] = i;
         ++i;
         ++counter;
      }
      hint = hints[random(2)];
   }

   assert(hint != -1);
   assert(hint != choice);
   assert(hint != correct_door);

   int new_choice = -1;

   if (!change) 
   {
      new_choice = choice;
   }
   else
   {
      int i = 0;
      while (i < 3)
      {
         if (i == hint || i == choice)
         {
            i++;
            continue;
         }
         new_choice = i;
         break;
      }

      assert(new_choice != choice);
   }

   assert(hint != new_choice);
   assert(new_choice != -1);
   
   return new_choice == correct_door;
}

int main()
{
   srand(time(NULL));

   int total   = 0;
   int correct = 0;
   while (total < 10000)
   {
      total++;
      if (correct_choice(false))
      {
         correct++;
      }
   }
   std::cout << correct << '\n';
   
   total   = 0;
   correct = 0;
   while (total < 10000)
   {
      total++;
      if (correct_choice(true))
      {
         correct++;
      }
   }
   std::cout << correct << '\n';


   return 0;
}
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: ТВ: задача Монти Холла
От: Vasiyarov  
Дата: 31.01.07 14:13
Оценка:
Здравствуйте, Andy77, Вы писали:

skipped

Странно, что сплошные программисты, а простую тестовую программу никто не написал.

Результаты эксперимента при ста тысячах опытов для N=3 (кол-во дверей):

p=    0     val=    0.33419         33419    /    100000
p=    0.25     val=    0.41773         41773    /    100000
p=    0.5     val=    0.50033         50033    /    100000
p=    0.75     val=    0.58305         58305    /    100000
p=    1     val=    0.66528         66528    /    100000

Где: p — вероятность смены выбора игроком (стратегия поведения);
val — вероятность выигрыша.

Общая зависимость вероятности выигрыша (P) от вероятности смены выбора (p) для N=3:
 P = 1/3 * (1-p) + 2/3 * p

Для N > 3 явно остается первый член суммы: 1/N * (1-p) (то есть нижняя граница).
Код программы (Lua) здесь.
Re: ТВ: задача Монти Холла
От: Аноним  
Дата: 04.02.07 22:19
Оценка:
Здравствуйте, Andy77, Вы писали:

A>Монти Холл — ведущий пеpедачи "Let's make a deal"


A>Вы — участник пеpедачи "Давайте заключим сделку". Монти Холл показывает вам тpи закpытых двеpи. Он говоpит, что за двумя двеpьми ничего нет, а за тpетьей двеpью находится машина. Вы выбиpаете двеpь, но, пеpед тем как откpыть ее, Монти откpывает одну из оставшихся двеpей (он всегда выбирает пустую, т.к. знает, где машина) и показывает, что за ней ничего нет. Затем он пpедлагает вам изменить свой выбоp на оставшуюся двеpь. Дает ли это вам пpеимущества?


Вероятность выигрыша 2/3 при стратегии со сменой дверей, действительно вы выигрываете если изначально выбрали дверь за которой нет машины.
Re: ТВ: задача Монти Холла
От: kost-BebiX Украина http://fedorastones.blogspot.com
Дата: 19.02.07 14:24
Оценка:
Здравствуйте, Andy77, Вы писали:

A>Монти Холл — ведущий пеpедачи "Let's make a deal"


A>Вы — участник пеpедачи "Давайте заключим сделку". Монти Холл показывает вам тpи закpытых двеpи. Он говоpит, что за двумя двеpьми ничего нет, а за тpетьей двеpью находится машина. Вы выбиpаете двеpь, но, пеpед тем как откpыть ее, Монти откpывает одну из оставшихся двеpей (он всегда выбирает пустую, т.к. знает, где машина) и показывает, что за ней ничего нет. Затем он пpедлагает вам изменить свой выбоp на оставшуюся двеpь. Дает ли это вам пpеимущества?


В общем, код на php.

Для исходной задачи:
http://pastebin.mozilla-russia.org/804
<?php
  
  $answers = array(
    'correct' => 0,
    'incorrect' => 0,
  );
  
  $n_Dveri = 100;
  
  for ($i=0; $i < 1000; $i++) {
    // Задаем дверь, в которой машина не находится
    $r = rand(1, 3);
    // Выбираем случайную дверь
    $d = rand(1, 3);
    // Отсекаем одну из дверей, в которой машина не находится
    $notCar = ($r !== 1 && $d !== 1) ? 1 : (($r !== 2 && $d !== 2) ? 2 : 3);
    // Меняем выбор
    $d = ($d !== 1 && $notCar !== 1) ? 1 : (($d !== 2 && $notCar !== 2) ? 2 : 3);
    // Верно / неверно
    if ($r == $d)
      $answers['correct']++;
    else 
      $answers['incorrect']++;
  }
  
  print_r($answers);


Тесты:

[correct] => 661
[incorrect] => 339

[correct] => 675
[incorrect] => 325

[correct] => 649
[incorrect] => 351

[correct] => 670
[incorrect] => 330



Для задачи, если начальное кол-во дверей увеличить до ста, а потом просто убирать все крое 2-х дверей —
http://pastebin.mozilla-russia.org/805
<?php
  
  $answers = array(
    'correct' => 0,
    'incorrect' => 0,
  );
  
  $n_Dveri = 100;
  
  for ($i=0; $i < 1000; $i++) {
    // Задаем дверь, в которой машина находится
    $r = rand(1, $n_Dveri);
    // Выбираем случайную дверь
    $d = rand(1, $n_Dveri);
    // Отсекаем все кроме двух дверей, в которой машина не находится
    $notCar = array();
    for ($j=0; $j < $n_Dveri - 2; $j++) {
      $possibleNot = rand(1, $n_Dveri);
      while (in_array($possibleNot, $notCar) || $possibleNot == $r) {
        $possibleNot--;
      }
      $notCar[] = $possibleNot;
    }
    // Меняем выбор
    for ($j=0; $j < $notCar; $j++) {
      if (!in_array($j+1, $notCar)
      &&  $j+1 !== $d) {
        $d = $j+1;
        break;
      }
    }
    // Верно / неверно
    if ($r == $d)
      $answers['correct']++;
    else 
      $answers['incorrect']++;
  }
  
  print_r($answers);


Тесты:

[correct] => 532
[incorrect] => 468

[correct] => 555
[incorrect] => 445

[correct] => 546
[incorrect] => 454

[correct] => 539
[incorrect] => 461

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Если программист в рабочее время играет, значит —
либо у него мало работы и большая зарплата,
либо у него много работы и маленькая зарплата.
Re[2]: ТВ: задача Монти Холла
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 21.02.07 20:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вероятность выигрыша 2/3 при стратегии со сменой дверей, действительно вы выигрываете если изначально выбрали дверь за которой нет машины.


К счастью, не все это понимают, не проиграв $10 (привет, minorlogic )
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.