參考 mpi對道路車輛情況的nagel-schreckenberg 模型進行蒙特卡洛模擬
題目:利用 mpi 進行蒙特卡洛模擬
內容:在道路交通規劃上,需要對單條道路的擁堵情況進行估計。因為僅考慮單條車道,所以不存在超車。假設共有 n 輛車,分別編號 0, 1, …, n-1,每輛車佔據乙個單位的空間。初始狀態如下,n 輛車首尾相連,速度都是 0。每個時間週期裡每個車輛的運動滿足以下規則:
實驗要求:
作業系統
編譯器硬體配置
ubuntu 16.04
mpicc
雙核 4g記憶體
n輛車首尾相連,速度都是0。第0號車,d=無窮大。第 n-1 號車的位置為0,每輛車佔據乙個單位的空間。最大速度10,最小速度0。隨機減速概率為0.5。
v是速度,pos是位置,d是與前車的距離。
typedef
struct
car;
根據題意可以推出以下邏輯。需要對這段程式進行週期次數的迴圈。
當 d>v 且 v 不超過最大速度時,v 增加到 v+1;
當 d<=v 時,v 變成 d;
使用 srand() 和 rand() 產生隨機數進行減速;
車輛向前移動 v 個單位;
每輛車與前車的距離等於牽扯與自己的位置之差。
if
(list[k]
.d > list[k]
.v && list[k]
.v < v_max) list[k]
.v++;if
(list[k]
.d <= list[k]
.v) list[k]
.v = list[k]
.d;srand
(k * j +
clock()
);if(list[k]
.v >=1)
list[k]
.pos +
= list[k]
.v;list[k]
.d = list[k -1]
.pos - list[k]
.pos;
下圖是16輛車,4執行緒的概念模型。n是車輛總數,numprocs是執行緒數,myid是執行緒號。
初始化mpi環境,獲取並行環境引數(匯流排程數、本地程序編號等)。
mpi_init
(&argc,
&ar**)
;mpi_comm_size
(mpi_comm_world,
&numprocs)
;mpi_comm_rank
(mpi_comm_world,
&myid)
;
從0號程序獲取輸入車輛數和週期,並將其廣播出去。
if
(myid ==0)
mpi_bcast
(&n,
1, mpi_int,
0, mpi_comm_world)
;//將n值廣播出去
mpi_bcast
(&t,
1, mpi_int,
0, mpi_comm_world)
;//將t值廣播出去
初始化車輛列表。
list =
(car*
)malloc
(n *
sizeof
(car));
for(
int i =
0; i < n; i++
) list[0]
.d = d_max;
根據執行緒數numprocs的值,將車輛分為numprocs個區間,每個區間負責 n/numprocs 輛車的計算。
除 numprocs-1 號執行緒外每個執行緒需要把最後一輛車 n/numprocs*(myid+1)-1 的位置資訊傳送給後乙個執行緒的第一輛車 n/numprocs*myid,因為後車需要前車的位置來更新自己與前車的距離。因此,每個執行緒的第一輛車的 d 值的更新方式有些不同。其次,第0號車的 d 值不需要更新,一直是無窮大。
int k = n / numprocs *
(myid +1)
-1;if
(myid != numprocs -1)
for
(; k > n / numprocs * myid; k--)if
(myid !=0)
在統計結果之前等待所有程序完成。
執行時間(s)
規模/執行緒數12
48100000輛車 2000週期
668.715471
345.102948
343.784128
356.262993
500000輛車 500週期
804.459397
431.121841
442.075001
433.319804
1000000輛車 300週期
938.806691
552.925860
537.474469
573.570365
加速比
規模/執行緒數12
48100000輛車 2000週期
1
1.938
1.945
1.877
500000輛車 500週期
1
1.866
1.820
1.857
1000000輛車 300週期
1
1.698
1.747
1.637
從柱狀圖來看,大部分車輛處於堵車狀態,這與迴圈週期,隨機減速概率,最大速度都有關係。
相同規模下,當執行緒數超過2後,加速比不再提公升,這主要受限於硬體本身(本實驗為雙核)。
蒙特卡洛模擬 R語言 蒙特卡洛模擬計算
蒙特卡洛法的基本思想是 為了求解問題,首先建立乙個概率模型或隨機過程,使它的引數或數字特徵等於問題的解 然後通過對模型或過程的觀察或抽樣試驗來計算這些引數或數字特徵,最後給出所求解的近似值。解的精確度用估計值的標準誤差來表示。蒙特卡洛法的主要理論基礎是概率統計理論,主要手段是隨機抽樣 統計試驗。用蒙...
用蒙特卡洛求pi R語言 蒙特卡洛模擬計算
蒙特卡洛法的基本思想是 為了求解問題,首先建立乙個概率模型或隨機過程,使它的引數或數字特徵等於問題的解 然後通過對模型或過程的觀察或抽樣試驗來計算這些引數或數字特徵,最後給出所求解的近似值。解的精確度用估計值的標準誤差來表示。蒙特卡洛法的主要理論基礎是概率統計理論,主要手段是隨機抽樣 統計試驗。用蒙...
13027 蒙特卡洛模擬工具
文章從pmp考試和實戰層面對蒙特卡洛模擬進行闡述,重要是掌握這種理念。一 試題匯入 乙個大型專案的專案經理使用蒙特卡洛模擬計算各種不同可能的專案完工日期,為此,計算計畫持續時間是下列哪一項隨機化的成果 a 風險概率和影響評估 b 積累圖 c 概率分布功能 d 關鍵路徑計算 蒙特卡洛模擬目的是依據所輸...