3

Youtube ビデオNumberphile Infinity (6:09 から開始) では、ゲームの期待値が無限大であるという実験 (サンクトペテルブルクのパラドックス) が説明されています。

長期的な期待値(平均)を求めるJavaプログラムを書いてみました。理論上の期待値は無限ですが、得られるのは 10 前後の数値です。プログラムが間違っているためでしょうか? 実験の数が十分に多い場合、実験の平均は数学的な期待に非常に近くなると思います。これが私のプログラムです。

public class Main {
    public static final int NUM_EXPERIMENT = 1000000;
    public static void main(String[] args) {
        int total = 0;
        for (int i = 0; i < NUM_EXPERIMENT; i++) {
            int counter = 1;
            int subtotal = 1;
            while ((int) (Math.random() * 2) == 0) {
                subtotal *= 2;
                counter++;
            }
            total += subtotal;
        }
        double expectation = total / (double) NUM_EXPERIMENT;
        System.out.println("The expectation of this experiment is " + expectation);
    }
}
4

3 に答える 3

4

これは数学と関係があり、s とはほとんど関係がないと思いますint

お気づきかもしれませんが、試行回数を重ねるほど、期待値がどんどん大きくなっていくということです。期待値は無限大です。なぜなら、非常に大きな見返りをもたらす非常にありそうもない出来事があるからです。2 nの利益を得る確率は 2 -nであるため、これが起こる可能性は低いです。たとえば、これは、1,000,000 ドル (約 2 20ドル) を獲得する確率が 2 20分の1 であることを意味します。. 予想通り、これが発生する前に 100 万回の試行を実行する必要があります。したがって、10 万回の試行しか実行しない場合、このようなことが起こるとは予想できません。ただし、試行回数が増えるにつれて、これらの種類のシーケンスのいずれかにヒットする確率が高くなるため、期待値が増加します。

このように考えてみてください:最終的にコインが間違った方向に投げられ、賞金を回収するため、無限の利益が得られることは決してありません。したがって、プログラムによって報告される無限の利益を得ることはありません。ただし、より多くのゲームをプレイするにつれて、平均は増加します。大数の法則によれば、ゲームをプレイすればするほど平均値に近づくということは確かですが、試行回数を少なくすれば十分であるとは言えません。期待値は無限であるため、無限に収束する前に多くの試行が必要になります。^_^

他の回答では、 an の最大値をオーバーフローしている可能性があることが指摘されていますがint、これは本当ですが、ここでは無関係だと思います。doubleまたはのようなものを使用して値を保持するように切り替える必要longがありますが、無限のペイアウトが表示されない理由は、極端なペイアウトを生成するシーケンスの 1 つが表示される可能性が指数関数的に低いためです。

お役に立てれば!

于 2013-10-13T19:30:58.527 に答える