[數學建模(一)]蒙特卡羅方法


1.概念

蒙特卡羅方法(隨機取樣法)是一種計算方法。原理是通過大量隨機樣本,去了解一個系統,進而得到所要計算的值。

2.兩個應用例子

例子1:求π的值。

正方形內部有一個相切的圓,它們的面積之比是π/4。現在,在這個正方形內部,隨機產生1000000個點(即1000000個坐標對 (x, y)),計算它們與中心點的距離,從而判斷是否落在圓的內部。如果這些點均勻分布,那么圓內的點應該占到所有點的 π/4,因此將這個比值乘以4,就是π的值。

 

MATLAB實現:

 

N=1000000;    %隨機點的數目

x=rand(N,1);  %rand 生成均勻分布的偽隨機數。分布在(0~1)之間

y=rand(N,1);  %矩陣的維數為N×1

count=0;

for i=1:N

   if (x(i)^2+y(i)^2<=1)

     count=count+1;

    end

end

PI=4*count/N

 

例子2:計算積分

計算函數 y = x^2 在 [0, 1] 區間的積分,就是求出紅色曲線下面的面積。這個函數在 (1,1) 點的取值為1,所以整個紅色區域在一個面積為1的正方形里面。在該正方形內部,產生大量隨機點,可以計算出有多少點落在紅色區域(判斷條件 y < x^2)。這個比重就是所要求的積分值。

 

 

MATLAB實現:

clear

clc

N=10000;  

x=rand(N,1); 

y=rand(N,1);

count=0;

for i=1:N

   if (y(i)<=x(i)^2)

     count=count+1;

   end

end

result=count/N


 

3. 與拉斯維加斯方法的比較

(1)蒙特卡羅算法:假如筐里有100個蘋果,讓我每次閉眼拿1個,挑出最大的。於是我隨機拿1個,再隨機拿1個跟它比,留下大的,再隨機拿1個……我每拿一次,留下的蘋果都至少不比上次的小。拿的次數越多,挑出的蘋果就越大,但我除非拿100次,否則無法肯定挑出了最大的。——盡量找好的,但不保證是最好的。

特點:采樣越多,越近似最優解;

(2)拉斯維加斯方法:假如有一把鎖,給我100把鑰匙,只有1把是對的。於是我每次隨機拿1把鑰匙去試,打不開就再換1把。我試的次數越多,打開(最優解)的機會就越大,但在打開之前,那些錯的鑰匙都是沒有用的。——盡量找最好的,但不保證能找到。

特點:采樣越多,越有機會找到最優解。

4.利用蒙特卡羅算法求機器人的工作空間

思想:設置機器人每個關節角的運動范圍,利用蒙特卡羅算法求機器人工作空間。

 

%**************************蒙特卡洛法求解機器人工作空間*********************

%定義變量
deg=pi/180;
num=0.001;

%定義關節角范圍
theta1=[-180,180]*deg;
theta2=[-90,90]*deg;
theta3=[-150,150]*deg;
theta4=[-150,150]*deg;
theta5=[-180,180]*deg;
theta6=[-180,180]*deg;

%定義連桿變量
a2=612.7*num;
a3=571.6*num;
d2=163.9*num;
d5=115.7*num;

%生成一個數組來保存隨機變量
i=1:20000;
PX=zeros(size(i));
PY=zeros(size(i));
PZ=zeros(size(i));
%設置隨機點
for j=1:1:10000
    %randNum=rand();

    theta1=(-180+360*rand());
    theta2=(-90+180*rand());
    theta3=(-150+300*rand());
    theta4=(-150+300*rand());
    theta5=(-180+360*rand());
    theta6=(-180+180*rand());
    
%根據運動學方程,求出機械臂末端執行器在基坐標中的位置向量表達式
   PX(j)=cos(theta1)*(d5*sin(theta2+theta3+theta4)+a2*cos(theta2)+...
       a3*cos(theta2+theta3))+d2*sin(theta1);
   PY(j)=sin(theta1)*(d5*sin(theta2+theta3+theta4)+a2*cos(theta2)+...
        a3*cos(theta2+theta3))-d2*cos(theta1);
   PZ(j)=d5*sin(theta2+theta3+theta4)+a3*sin(theta2+theta3)+a2*sin(theta2);
end

%求解坐標值並且輸出三視圖
subplot(2,2,1);
plot3(PX,PY,PZ,'.');
hold on;
subplot(2,2,2);
plot3(PX,PY,PZ,'.');
view([0 0]);
hold on;
subplot(2,2,3);
plot3(PX,PY,PZ,'.');
view(2);
hold on;

 

5.更深度的應用

蒙特卡洛樹搜索---深度學習,強化學習

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM