Paradoks Monty’ego Halla

Tu można porozmawiać na dowolny temat nie koniecznie związany z tematyką maszyn i CNC
Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 15
Posty: 9323
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Paradoks Monty’ego Halla

#1

Post napisał: tuxcnc » 15 sie 2024, 12:31

Oglądając TV (nie pamiętam jaki program i który kanał) zostałem zaintrygowany przypadkiem pewnej pani z wysokim IQ, która udzieliła głupiej odpowiedzi na głupie pytanie.
Niespecjalnie mnie to zdziwiło, bo nie wierzę w związek zdolności do rozwiązywania zagadek z rzeczywistą inteligencją...
Najpierw znalazłem to: https://www.empowerment-coaching.com/po ... na-swiecie
No niby wszystko się zgadzało...
Stamtąd trafiłem na Wikipedię https://pl.wikipedia.org/wiki/Paradoks_ ... 9ego_Halla
Ale czym więcej czytałem tych wyjaśnień, tym bardziej sprawa mi śmierdziała i coraz bardziej kojarzyła się z brakującą złotówką https://forum.szafa.pl/17/6307799/zagad ... t-1zl.html
Otóż jedno z podstawowych praw informatyki mówi, że przetwarzanie błędnych danych daje błędne wyniki.
Nie ma w tym prawie ani słowa o sprawności urządzenia przetwarzającego.
Czy to będzie najnowocześniejszy superkomputer, czy geniusz z IQ idącym w setki, to jeśli będzie przetwarzał błędne dane, otrzyma błędne wyniki.
Nawiasem mówiąc, to tłumaczy dlaczego ludzie doskonale wykształceni, ponadprzeciętnie inteligentni i wybitni w określonych dziedzinach, wypowiadając się w innych tematach potrafią pleść takie bzdury, że zęby bolą kiedy się ich słucha...
Wróćmy jednak do meritum.
Zwykle takie "paradoksy" opierają się na zestawieniu rzeczy nie mających ze sobą żadnego związku, ale uparcie się ze sobą kojarzącymi, albo ignorowaniu rzeczy o istotnym znaczeniu.
Ale sprawę postanowiłem wyjaśnić naukowo, czyli napisać odpowiedni symulator, na Arduino, bo najłatwiej, najszybciej, a sprzęt wystarczy w zupełności...
Wyszło mi coś takiego:

Kod: Zaznacz cały

uint32_t hit = 0;
uint32_t changed = 0;
uint8_t bid = 0;
uint8_t win = 0;
uint8_t lost =0;

void setup() {
Serial.begin(115200);
}

void loop() {

for ( int i=0; i<1000; i++) {

do {
bid = random(1,4);
win = random(1,4);
lost = random(1, 4);
}while (( lost == bid ) || ( lost == win ));

if ( bid == win ) hit++;

if ((bid != win) && (bid != lost) ) changed++;

} 
Serial.println(hit);
Serial.println(changed);
Serial.println(" ");
//if ((lost==bid)||(lost==win)) Serial.println("FAILED");
//Serial.println(bid);
//Serial.println(win);
//Serial.println(lost);
//Serial.println(" ");
delay(500);

}
Najpierw losujemy zmienne bid, win i lost.
Odpowiadają one numerom trzech bramek zgodnie z zasadą, że wygrana i obstawiana mogą mieć dowolne numery, ale tracona nie może być wygraną lub obstawianą.
Potem zwiększamy zmienną hit jeśli trafiliśmy w wygraną skrytkę i jest to sytuacja gdy nie zmieniamy wyboru i jest on dobry.
No i tutaj zaczynają się schody...
Porównywać należy rzeczy porównywalne, czyli ilość trafień bez zmiany wyboru z ilością trafień po zmianie wyboru.
Otóż żeby zmiana wyboru była skuteczna, to pierwszy wybór musiał być błędny i nie da się znaleźć innych warunków.
U mnie jest linia if ((bid != win) && (bid != lost) ) changed++; ale to nie ma sensu, bo drugi warunek jest zawsze spełniony.
Najzwyczajniej zostawiłem program w takim stanie do jakiego doszedłem i dalej nie mam pomysłu.

Wytłumaczenia mam dwa.
Pierwsze i dość popularne, że mamy dwa wybory, które nie są ze sobą w żaden sposób związane, czyli najpierw wybieramy 1 z 3, ale potem 1 z 2.
Drugie, moje własne, że od początku mamy ten sam wybór 1 z 2. No bo albo wybierzemy bramkę z nagrodą, albo nie ważne którą pustą, bo i tak puste zostaną zredukowane do jednej.

No a teraz wyzwanie.
Wielu tutaj marzy o tym żeby udowodnić że jestem debilem, no to macie okazję.
Tak przepiszcie mój program, żeby był poprawny i dawał wynik inny niż pół na pół...



Awatar użytkownika

grg12
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 4
Posty: 1743
Rejestracja: 03 sty 2007, 14:27
Lokalizacja: Wiedeń

Re: Paradoks Monty’ego Halla

#2

Post napisał: grg12 » 15 sie 2024, 16:23

Po pierwsze - za dużo władowałeś do pętli do, while - bid i win powinny być losowane tylko raz, dopiero potem możesz szukać "lost" który nie jest równy ani win ani bid - twój kod nie odpowiada regułom gry. Po drugie twoje logika zliczająca changed jest trochę podejrzana - zgodnie z zasadami wystarczy że bid != win - zgodnie z twoim kodem changed jest zliczane tylko jeśli gracz wybrał pustą bramkę której nie wybrał monty?
Po trzecie - w załączniku jest kod w pythonie (nie mam arduino po ręką) który produkuje wyniki zgodne z rzeczywistością :)
Typowy przykład:
Hits without change = 336
Hits after change = 663

mój kod jest dość idiotyczny bo pisałem pod wpływem tutoriala pythona (oraz alkoholu)
Załączniki
monty.zip
(490 Bajtów) Pobrany 15 razy

Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 15
Posty: 9323
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: Paradoks Monty’ego Halla

#3

Post napisał: tuxcnc » 15 sie 2024, 18:38

grg12 pisze:
15 sie 2024, 16:23
Po pierwsze - za dużo władowałeś do pętli do, while - bid i win powinny być losowane tylko raz, dopiero potem możesz szukać "lost" który nie jest równy ani win ani bid - twój kod nie odpowiada regułom gry.
Faktycznie, ten fragment jest błędny, ale to niewiele zmienia.
Twój kod też jest bez sensu.
Dowolny kod będzie bez sensu.
W ogóle ten "paradoks" jest bez sensu.
Najpierw możesz wybrać jedną bramkę spośród trzech, a potem jedną albo dwie pozostałe - a to są różne wybory.


drzasiek90
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 10
Posty: 2329
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

Re: Paradoks Monty’ego Halla

#4

Post napisał: drzasiek90 » 15 sie 2024, 18:49

tuxcnc pisze:
15 sie 2024, 18:38
W ogóle ten "paradoks" jest bez sensu.
Najpierw możesz wybrać jedną bramkę spośród trzech, a potem jedną albo dwie pozostałe - a to są różne wybory.
Dokładnie tak, to są zupełnie inne sytuacje.

Awatar użytkownika

pbugdol
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 1
Posty: 157
Rejestracja: 09 mar 2022, 11:25
Lokalizacja: Śląskie

Re: Paradoks Monty’ego Halla

#5

Post napisał: pbugdol » 19 sie 2024, 07:16

Może nie całkiem na temat programu, ale jeśli chodzi o problem paradoksu to nawet Pogromcy Mitów "badali" sprawę i zrobili chyba cały odcinek poświęcony temu tematowi.


lepi
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 6
Posty: 1563
Rejestracja: 09 lip 2012, 20:34
Lokalizacja: Poznań

Re: Paradoks Monty’ego Halla

#6

Post napisał: lepi » 19 sie 2024, 09:58

Dla mnie paradoksem jest, że umysły ścisłe mają problem z prostym zagadnieniem z rachunku prawdopodobieństwa. To pewnie ci sami, którzy nie wierzą w statystykę :)


drzasiek90
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 10
Posty: 2329
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

Re: Paradoks Monty’ego Halla

#7

Post napisał: drzasiek90 » 19 sie 2024, 11:19

To są zupełnie inne sytuacje, bo na początku zawodnik nie miał żadnej podpowiedzi.
Po odłonięciu pustej pramki, zawodnik dostał podpowiedź a wiec jest to inna sytuacja.

Prawdopodobieństwo, że zawodnik wybrał bramkę pustą jest większe (2/3), niż że wybrał bramkę z nagrodą(1/3).
Więc skoro Monty odsłoni bramkę pustą (z większym prawdopodobieństwem jest to druga pusta), tak więc bardziej prawdopodobne jest to, że bramka z wygraną to ta trzecia a więc opłaca się zmienić.

Ale jeśli potrzebny program na udowodnienie, to ja dla odmiany w C:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIMULATIONS 1000000

int main() 
{
    int stayWins = 0;
    int switchWins = 0;

    // Inicjalizacja generatora losowego
    srand(time(0));

    for (int i = 0; i < SIMULATIONS; i++) 
    {
        // Losowy wybór drzwi z nagrodą (0, 1, 2)
        int prizeDoor = rand() % 3;
        // Losowy wybór drzwi przez gracza
        int playerChoice = rand() % 3;

        // Monty wybiera drzwi do odsłonięcia (nie mogą to być drzwi z nagrodą ani wybór gracza)
        int montyChoice;
        do 
        {
            montyChoice = rand() % 3;
        } while (montyChoice == prizeDoor || montyChoice == playerChoice);

        // Strategia 1: Gracz pozostaje przy swoim wyborze
        if (playerChoice == prizeDoor) 
        {
            stayWins++;
        }

        // Strategia 2: Gracz zmienia wybór
        int switchChoice;
        do 
        {
            switchChoice = rand() % 3;
        } while (switchChoice == playerChoice || switchChoice == montyChoice);

        if (switchChoice == prizeDoor) 
        {
            switchWins++;
        }
    }

    printf("Po %d symulacjach:\n", SIMULATIONS);
    printf("Wygrane przy pozostaniu przy pierwszym wyborze: %d (%.2f%%)\n", stayWins, (stayWins * 100.0 / SIMULATIONS));
    printf("Wygrane przy zmianie wyboru: %d (%.2f%%)\n", switchWins, (switchWins * 100.0 / SIMULATIONS));

    return 0;
}
Można wrzucić w kompilator online:
https://www.onlinegdb.com/online_c_compiler
i sprawdzić.

Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 15
Posty: 9323
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: Paradoks Monty’ego Halla

#8

Post napisał: tuxcnc » 19 sie 2024, 15:06

drzasiek90 pisze:
19 sie 2024, 11:19
To są zupełnie inne sytuacje, bo na początku zawodnik nie miał żadnej podpowiedzi.
Po odłonięciu pustej pramki, zawodnik dostał podpowiedź a wiec jest to inna sytuacja.

Prawdopodobieństwo, że zawodnik wybrał bramkę pustą jest większe (2/3), niż że wybrał bramkę z nagrodą(1/3).
Więc skoro Monty odsłoni bramkę pustą (z większym prawdopodobieństwem jest to druga pusta), tak więc bardziej prawdopodobne jest to, że bramka z wygraną to ta trzecia a więc opłaca się zmienić.
Nie.
To nie jest problem matematyczny, tylko psychologiczny, więc nie należy go rozwiązywać matematycznie.
Zadanie można równie dobrze opisać następująco:
Są trzy pojemniki, w jednym jest nagroda, czy bardziej korzystne jest obstawienie jednego pojemnika czy obu pozostałych?
Na tak postawione pytanie każdy bez namysłu odpowie prawidłowo.
Wstawienie do pytania kóz, teleturnieju i historii o "zmianie wyboru" jest wyłącznie robieniem słuchaczowi wody z mózgu, aby zagmatwać proste zadanie, żeby się pogubił i zaczął domyślać zamiast analizować.

Awatar użytkownika

grg12
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 4
Posty: 1743
Rejestracja: 03 sty 2007, 14:27
Lokalizacja: Wiedeń

Re: Paradoks Monty’ego Halla

#9

Post napisał: grg12 » 19 sie 2024, 15:20

lepi pisze:
19 sie 2024, 09:58
Dla mnie paradoksem jest, że umysły ścisłe mają problem z prostym zagadnieniem z rachunku prawdopodobieństwa. To pewnie ci sami, którzy nie wierzą w statystykę :)
Po prostu ludzie (jako gatunek) mają bardzo marną intuicję jeśli chodzi o statystykę. Gdyby było inaczej mielibyśmy znacznie mniej dyskusji na temat skuteczności szczepionek ("base rate fallacy", paradoks Simpsona) a kasyna by zbankrutowały z braku klientów :)

Tuxcnc - widziałem jeszcze batdziej łopatologiczne wyjaśnienie. Zamiast 3 bramek jest 100, w tym 99 pustych. Po wyborze gracza monty odsłania 98.

Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 15
Posty: 9323
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: Paradoks Monty’ego Halla

#10

Post napisał: tuxcnc » 19 sie 2024, 15:48

grg12 pisze:
19 sie 2024, 15:20
Tuxcnc - widziałem jeszcze batdziej łopatologiczne wyjaśnienie. Zamiast 3 bramek jest 100, w tym 99 pustych. Po wyborze gracza monty odsłania 98.
Też to czytałem i też są to informacje nadmiarowe.
Dla dowolnej ilości bramek wybierasz albo jedną, albo wszystkie pozostałe.
Reszta, to robienie wody z mózgu.

Ja się tylko zastanawiam, ilu cwaniaków stosuje ten mechanizm w praktyce.
No na przykład w polityce, kiedy w proste pytanie wlewa się tyle wody, że każdy się w niej topi i wybiera odpowiedź najbardziej dla siebie niekorzystną...

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Na luzie”