システムとモデリング

SysML, Matlab/Simulink,他モデリング全般について。たまにプロジェクトマネジメント。

カイジ「救出」ゲーム 勝率計算プログラム

こんばんは!Otepipiです。

前回の記事でソースプログラムを載せていなかったので今回掲載します。Matlabでのプログラム作成は初めてなので粗が大変多いと思いますが……

 

%「救出ゲーム」の勝率計算%

clear

%時間間隔誤差 人間が1秒をカウントする時、平均1秒分散0.2秒の正規分布になるとした。
ave = 1;
variance = 0.2;

count=100000%ゲーム試行回数

mituyama_time=36;
mario_time=44;
chan_time=52;

%救出者決定のための乱数発生。1=三山 2=マリオ 3=チャン が救出者%
rng('shuffle')
lump=randi(3,count,1);

%三山、マリオ、チャンのボタン押下時間の乱数発生%
rng('shuffle')
mituyama = sqrt(mituyama_time*variance).*randn(count,1) + mituyama_time;
rng('shuffle')
mario =sqrt( mario_time*variance).*randn(count,1) + mario_time;
rng('shuffle')
chan = sqrt(chan_time*variance).*randn(count,1) + chan_time;

 


A=[lump mituyama mario chan];
B = sortrows(A) ;

mituyama_l=B(1:3,:);
mario_l=B(4:6,:);
chan_l=B(7:10,:);
mituyama_rows=find(B==1);
mario_rows=find(B==2);
chan_rows=find(B==3);
mituyama_turn=B([mituyama_rows],:);
mario_turn=B([mario_rows],:);
chan_turn=B([chan_rows],:);

%三山救出者の場合の成功判定
mituyama_turn(:,1)=;

over_thirty_mituyama=find(mituyama_turn(:,1)<30);%開始30秒未満での回答を失敗として削除
mituyama_turn(over_thirty_mituyama,:)=;

[M_mituyama,I_mituyama] = min(mituyama_turn,,2);
mituyama_win=I_mituyama==1;
mituyama_win_number=nnz(mituyama_win); %三山成功数


%マリオ救出者の場合の成功判定
mario_turn(:,1:2)=;
over_thirty_mario=find(mario_turn(:,1)<30);%開始30秒未満での回答を失敗として削除
mario_turn(over_thirty_mario,:)=;

[M_mario,I_mario] = min(mario_turn,,2);
mario_win=I_mario==1;
mario_win_number=nnz(mario_win); %マリオ成功数

%チャン救出者の場合の成功判定
chan_turn(:,1:3)=;

over_thirty_chan=find(chan_turn(:,1)<30);%開始30秒未満での回答を失敗として削除
chan_turn(over_thirty_chan,:)=;

chan_win=chan_turn<60;
chan_win_number=nnz(chan_win); %チャン成功数


%成功回数総括
win_number=mituyama_win_number+mario_win_number+chan_win_number;

 

前回の記事は↓です。

otepipi.hatenablog.com