前書き
数学的に解いた記事はこちら
今回は現実世界で実際に行われると仮定して解きます。
数学的と現実的では何が異なるのか
数学的に考えると2つの封筒の金額の組み合わせは無限に考えられます。
例えば、100那由他円と200那由他円だとしても何ら問題ないわけです。
ですが、現実的に考えるとこういった天文学的金額が入っているとは考えられません。
つまりなんらかの上限があると考えるのが現実的です。
解く
解くと言っても数学的に解きません。
プログラムでシミュレーションして交換前と交換後の平均値をとり考察していきます。
また封筒を開けて奇数円の場合、明らかに交換有利なため、
封筒を開けて偶数の場合のみをシミュレーションします。
プログラム
const 最大金額 = 1000000;
const 半額最小金額 = 1;
const 半額最大金額 = 最大金額 / 2;
let 試行回数 = 0;
const 最大試行回数 = 10000000;
let 交換前金額合計 = 0;
let 交換後金額合計 = 0;
function 乱数生成(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
function にぶいち(a, b) {
return Math.random() < 0.5 ? a : b;
};
for (let i = 0; i < 最大試行回数; i++) {
const 封筒1 = 乱数生成(半額最小金額, 半額最大金額);
const 封筒2 = 封筒1 * 2;
const 選択した封筒 = にぶいち(封筒1, 封筒2);
if (選択した封筒 % 2 === 1) {
continue;
}
const 選択していない封筒 = 選択した封筒 === 封筒1 ? 封筒2 : 封筒1;
交換前金額合計 += 選択した封筒;
交換後金額合計 += 選択していない封筒;
試行回数++;
}
const 交換前平均 = 交換前金額合計 / 試行回数;
const 交換後平均 = 交換後金額合計 / 試行回数;
console.log(`交換前平均:${交換前平均}`);
console.log(`交換後平均:${交換後平均}`);
console.log(`交換後平均 - 交換前平均:${交換後平均 - 交換前平均}`);
実行結果
1回目
交換前平均:416695.6769510277
交換後平均:333358.8286292419
交換後平均 - 交換前平均:-83336.8483217858
2回目
交換前平均:416606.64031773026
交換後平均:333295.18355957104
交換後平均 - 交換前平均:-83311.45675815921
3回目
交換前平均:416735.328635139
交換後平均:333457.8777614282
交換後平均 - 交換前平均:-83277.4508737108
4回目
交換前平均:416678.64896057214
交換後平均:333388.62810229266
交換後平均 - 交換前平均:-83290.02085827949
5回目
交換前平均:416716.12026615045
交換後平均:333341.75925688125
交換後平均 - 交換前平均:-83374.3610092692
交換前と交換後で平均値がそれぞれ約417000と約333000となり、交換しないほうが有利という結果になりました。正直予想外です。
また最大金額を10000000や100000000にして試してみましたが、
同様の結論が導き出されました。
結論
現実的に金額に上限があると仮定し、選択した封筒の金額を見た場合
交換しないほうが有利だと分かりました。
もちろんこれは観測した値が偶数の場合の話です。
奇数の場合は100%交換有利なので以下のような戦略をとるとよいでしょう。
選択した封筒の金額が奇数 → 交換する
選択した封筒の金額が偶数 → 交換しない
終わり。
間違いがあれば教えてください。