目次
概要
原理:大数の定理によれば、サンプルサイズが十分に大きい場合、イベントの頻度はその確率となります。
例
針の問題
ランダムにシミュレートする必要があるのは、x (中点から最も近い平行線までの距離) と角度 φ です。
%% 由于一次模拟的结果具有偶然性,可以重复100次后再来求一个平均的pi
result = zeros(100,1); % 初始化保存100次结果的矩阵
l = 0.520;
a = 1.314;
n = 1000000;
for num = 1:100
m = 0;
x = rand(1, n) * a / 2 ; % 随机模拟针的终点到平行线的距离
phi = rand(1, n) * pi; % 随机模拟角度
for i=1:n
if x(i) <= l / 2 * sin(phi (i)) % 判断相交的条件
m = m + 1;
end
end
p = m / n;
mypi = (2 * l) / (a * p);
result(num) = mypi; % 把求出来的myphi保存到结果矩阵中
end
mymeanpi = mean(result); % 计算result矩阵中保存的100次结果的均值
3ドアの問題
ブラックジャックの決戦における「3ドア問題」とは?宝くじに当たる確率を上げるにはどうすればいいですか?李永楽先生がモンティ・ホール問題を解説(2018年最新)_bilibili_bilibili
求め方:①無事に当選した場合、変動あり/変動なしによる当選確率を求める
②当選しなかった場合、変動後当選、変動なしで当選の確率を求めます。
シミュレーションする必要があるのは、どのドア x が最初に選ばれたか、賞品はドア y の後ろにあるのか、そして選択が変わるかどうかです。
%%%%%%%%%%%%%%%%%%%%%%%%%% 在成功获奖的条件下,改变还是不改变 赢的概率大
n = 100000; % n代表蒙特卡罗模拟重复次数
a = 0; % a表示不改变主意时能赢得汽车的次数
b = 0; % b表示改变主意时能赢得汽车的次数
for i= 1 : n
% 第一次选的是哪个门
x = randi([1,3]); % 随机生成一个1-3之间的整数x
% 哪个门后有车
y = randi([1,3]);
if x == y % 如果x和y相同,只有不改变主意时才能赢
a = a + 1; b = b + 0;
else % x ~= y % 如果x和y不同,只有改变主意时才能赢
a = a + 0; b = b +1;
end
end
disp(['蒙特卡罗方法得到的不改变主意时的获奖概率为:', num2str(a/n)]);
disp(['蒙特卡罗方法得到的改变主意时的获奖概率为:', num2str(b/n)]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 不获奖、改变获奖、不改变获奖的概率
n = 100000;
a = 0;
b = 0;
c = 0; % c表示没有获奖的次数
for i= 1 : n
x = randi([1,3]);
y = randi([1,3]);
% 改不改变选择
change = randi([0, 1]); % change =0 不改变主意,change = 1 改变主意
% 下面分为两种情况讨论:x=y和x~=y
if x == y % 如果x和y相同,只有不改变主意时才能赢
if change == 0 % 不改变主意
a = a + 1;
else % 改变了主意
c= c + 1;
end
else % x ~= y % 如果x和y不同,只有改变主意时才能赢
if change == 0 % 不改变主意
c = c + 1;
else % 改变了主意
b = b + 1;
end
end
end
disp(['蒙特卡罗方法得到的不改变主意时的获奖概率为:', num2str(a/n)]);
disp(['蒙特卡罗方法得到的改变主意时的获奖概率为:', num2str(b/n)]);
disp(['蒙特卡罗方法得到的没有获奖的概率为:', num2str(c/n)]);
キューの問題をシミュレートする
シミュレーションする必要があるのは次のとおりです。
- i 番目の顧客が到着する時間間隔 xi
- i 番目の顧客のサービス時間 yi (1 未満の場合は 1 に変更してください)
計算します:
- i 番目の顧客の到着時刻 ci = c(i-1) + xi (前回の到着時刻 + 間隔)
- i 番目の顧客のサービス開始時刻 bi = max( e(i-1), ci ) (自分の到着時刻 / 前の人の終了時刻)
- i 番目の顧客のサービス終了時間 ei = bi + yi (開始時間 + サービス時間)
- i 番目の顧客の待ち時間 wi = bi - ci (サービス開始時間 - 到着時間)
ループ条件:
- サービス開始時間 < 480 (1 日 8 時間、単位は分)
初期化:
- e0 = 0、c0 = 0
- n(k) は、k 日目にサービスを提供した人の数を記録します。
制約付き非線形計画問題
非線形計画法の局所最適解を見つけるには、特定の初期値が必要ですが、モンテカルロ アルゴリズムは初期値を取得できます。
書店での書籍購入の問題 (0-1 計画)
変数:
- xij (01 変数) i 番目のショッピングモールで j 番目の本が購入された場合は 1、購入されなかった場合は 0
- mij は i 番目のモールで j 番目の本の販売価格を記録します
- qiはi番目のモールの送料を記録します
- ti には、本が i 番目の店舗で購入されたかどうかが記録されます。購入された場合は、送料が計算されます。
状態:
- 各列の合計は 1 (各書籍は 1 つのストアでのみ購入されます)
目的関数: 総コスト + 運賃
ミサイル追跡問題
アイデア: 短い時間間隔をとり、各時間間隔ごとにミサイルと船舶間の距離を計算し、それが設定値未満の場合は衝突とみなされます。
巡回セールスマン問題 (TSP)
ランダムにルートを生成し、それらを比較して最小のルートを取得します
電球を交換する
自分で時間 T を設定し、T 時間以内に電球を交換するコストを計算します
武器のアップグレード
自然対数の底 e を推定します。