Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

逐次的方法によるブラックジャック

この例では、別名 21 とも呼ばれるカード ゲームのブラックジャックをプレイします。別々に数千のゲーム数をプレイする多数のプレーヤーを同時にシミュレートし、利得の統計を表示します。ブラックジャックのプレイのシミュレートは、金融商品のモンテカルロ解析の応用となります。最後のデータ収集を除いて、シミュレーションは完全に並列で実行できます。

計算の詳細については、pctdemo_setup_blackjack のコードを参照してください。

関連する例:

例の設定とデータの読み込み

例の難易度を取得することから開始します。異なる難易度を例で使用する場合は、paralleldemoconfig を使用してからこの例をもう一度実行します。

difficulty = pctdemo_helper_getDefaults();

プレーヤーの数と各プレーヤーがプレイするゲーム数を、pctdemo_setup_blackjack から取得します。difficulty パラメーターによって、シミュレートするプレーヤーの数が制御されます。詳細については、pctdemo_setup_blackjack のコードを参照してください。

[fig, numHands, numPlayers] = pctdemo_setup_blackjack(difficulty);

シミュレーションの実行

pctdemo_task_blackjack を使用して、ゲームを numHands 回プレイする 1 人のプレーヤーをシミュレートし、この関数を numPlayers 回呼び出してすべてのプレーヤーをシミュレートします。この関数の別々の呼び出しは互いに独立しているため、Parallel Computing Toolbox を使用してこれらのシミュレーションを簡単に実行できます。詳細については、pctdemo_task_blackjack のコードを参照してください。

startTime = clock;
S = zeros(numHands, numPlayers); % Preallocate for the results.
for i = 1:numPlayers
    S(:, i) = pctdemo_task_blackjack(numHands, 1);
end

経過時間の測定

逐次シミュレーションの所要時間は、分散的方法によるブラックジャックの例で Parallel Computing Toolbox を使用して同じ一連の計算を実行するために要する時間と比較する必要があります。経過時間は基礎となるハードウェアによって変わります。

elapsedTime = etime(clock, startTime);
fprintf('Elapsed time is %2.1f seconds\n', elapsedTime);
Elapsed time is 34.7 seconds

結果のプロット

各手での賭けの勝敗に対する期待値を表す小数を、信頼区間と共に表示します。また、シミュレートする各プレーヤーの勝ち負けの経時的変化も示します。詳細については、pctdemo_plot_blackjack のコードを参照してください。

pctdemo_plot_blackjack(fig, S);