Was ist das Monty Hall-Problem? Laut [Wikipedia](https://ja.wikipedia.org/wiki/Monty Hall-Problem)
Vor dem Spieler befinden sich drei geschlossene Türen, hinter einer Tür ein neues Preisauto und hinter den beiden Türen eine Ziege, was bedeutet, dass sie ausgeschaltet ist. Spieler können ein neues Auto bekommen, indem sie gegen die Tür des neuen Autos schlagen. Nachdem der Spieler eine Tür ausgewählt hat, öffnet der Moderator Monty die verbleibende Tür mit der Ziege und zeigt die Ziege. Dem Spieler wird nun gesagt, dass er die erste Tür, die er wählt, in die verbleibende ungeöffnete Tür ändern darf. Sollte der Spieler hier die Tür wechseln?
Es scheint, dass es ein Problem ist. (* Monty weiß jedoch, wohin er gehen muss und öffnet immer den Ort, an dem sich die Ziege befindet.) Auf den ersten Blick scheint sich die Wahrscheinlichkeit nicht zu ändern, selbst wenn die Tür geändert wird oder nicht, aber tatsächlich scheint es für den Spieler vorteilhaft zu sein, sie zu ändern **. Dieses Mal möchte ich dieses Experiment viel ausprobieren und die Ergebnisse vergleichen. Die Sprache ist immer sicher Java ~~ (so viel du willst) ~~.
Monty.java
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
public class Monty {
public static final int NUMBER_DOORS = 4;
public static final int TRY_TIMES = 10000;
public static final boolean CHANGE_DOOR = true;
//Holen Sie sich zufällig andere Türen als die angegebene Tür
public static int getOtherDoor(Collection<Integer> doorIndices) {
List<Integer> notSelectedDoors = new ArrayList<>();
for (int i = 0; i < NUMBER_DOORS; i++) {
if(!doorIndices.contains(i)){
notSelectedDoors.add(i);
}
}
Collections.shuffle(notSelectedDoors);
return notSelectedDoors.get(0);
}
//Monty Hall-Prozess
public static boolean montyHoll(){
//Wie oft Monty die Tür öffnet
final int OPEN_DORE_TIMES = NUMBER_DOORS - 2;
Random r = new Random();
int collectDoorIndex = r.nextInt(NUMBER_DOORS);
int firstSelectDoorIndex = r.nextInt(NUMBER_DOORS);
Set<Integer> notWillOpenDoorIndices = new HashSet<>();
Set<Integer> openDoorIndices = new HashSet<>();
notWillOpenDoorIndices.add(collectDoorIndex);
notWillOpenDoorIndices.add(firstSelectDoorIndex);
for (int i = 0; i < OPEN_DORE_TIMES; i++) {
int otherDoor = getOtherDoor(notWillOpenDoorIndices);
openDoorIndices.add(otherDoor);
notWillOpenDoorIndices.add(otherDoor);
}
Set<Integer> notWillSelectDoorIndices = new HashSet<>(openDoorIndices);
notWillSelectDoorIndices.add(firstSelectDoorIndex);
int secondSelectDoorIndex = CHANGE_DOOR?getOtherDoor(notWillSelectDoorIndices):firstSelectDoorIndex;
boolean getCar = (collectDoorIndex == secondSelectDoorIndex);
/*System.out.printf("c:%d,fs:%d,ss:%d,g:%s\n",
collectDoorIndex, firstSelectDoorIndex, secondSelectDoorIndex, Boolean.toString(getCar));*/
return getCar;
}
public static void main(String[] args) {
int getCarTimes = 0;
for (int i = 0; i < TRY_TIMES; i++) {
if(montyHoll()){
getCarTimes++;
}
}
System.out.println((double)getCarTimes / (double)TRY_TIMES);
}
}
――Wir haben jeweils dreimal experimentiert. ――Wenn Sie jedoch die Tür wechseln und wenn Sie sie nicht ändern, werden wir dies separat tun. (Das heißt, die horizontale Richtung entspricht nicht.)
Tabelle 1: Drei Türen
No. | Wenn Sie die Tür wechseln | Wenn Sie die Tür nicht wechseln |
---|---|---|
1 | 0.6687 | 0.3401 |
2 | 0.6683 | 0.3409 |
3 | 0.6631 | 0.3351 |
Tabelle 2: 4 Türen
No. | Wenn Sie die Tür wechseln | Wenn Sie die Tür nicht wechseln |
---|---|---|
1 | 0.7561 | 0.2531 |
2 | 0.7486 | 0.2463 |
3 | 0.7534 | 0.2514 |
Tabelle 3: Fünf Türen
No. | Wenn Sie die Tür wechseln | Wenn Sie die Tür nicht wechseln |
---|---|---|
1 | 0.8006 | 0.2086 |
2 | 0.8038 | 0.2059 |
3 | 0.8011 | 0.1947 |
―― Egal wie viele Türen Sie haben, ein Türwechsel scheint eine höhere Wahrscheinlichkeit zu haben. ―― Je mehr Türen Sie haben, desto vorteilhafter ist es, sie zu wechseln.
Bis vor kurzem blieb dieses Problem nicht unbemerkt. Damit habe ich das Gefühl, dass ich es vorerst schlucken konnte. Immerhin ist es wichtig zu bestätigen.
Recommended Posts