数学的モデリング: 10 モンテカルロ シミュレーション

目次

概要

針の問題

3ドアの問題

キューの問題をシミュレートする

制約付き非線形計画問題

書店での書籍購入の問題 (0-1 計画)

ミサイル追跡問題

巡回セールスマン問題 (TSP)

電球を交換する

武器のアップグレード

自然対数の底 e を推定します。


概要

原理:大数の定理によれば、サンプルサイズが十分に大きい場合、イベントの頻度はその確率となります。

針の問題

 ​​​​​​

ランダムにシミュレートする必要があるのは、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 を推定します。

 

おすすめ

転載: blog.csdn.net/m0_54625820/article/details/128682161