算法筆記(X) 模擬與仿真

圖片

前做過仿真模擬的內容,大約是在交通流問題中初次藉助模擬完成對高速公路流量的分析。後來主要對模擬形成了一種固定的看法,當然也是最爲直覺的看法,下面我們簡單說一說:

我們在現實生活中,往往是基於時間爲軸去看待 事物 之變化,所以說 時間是變化的一種形式。於是在以往的模擬思路上我們大約遵循一下模式:

STEP 0:初始化起始時間|

STEP 1:判斷時間有未越界?

        是:則停止仿真,進入STEP 3

        否:觀察此時的變化,系統做出反應(如遷移狀態)

繼續.......

STEP 2:推動時間前進(比如向前推進一秒)

STEP 3:做出結果的輸出

--------------------------------------------------------

      MODEL   時間驅動仿真 

然以上只是一個最簡單的框架,實質上仿真程序要比之更爲複雜。如此簡單的時間驅動模擬模式往往是我對模擬的設計有了固定的理解,我們總是以時間作爲演進的依據,難道沒有其他的辦法了麼?

好,問題並不在於這,我們考察與交通流不同的另一類問題(當然他們兩者有着區分,相信這一點)

 

排隊模型

 

這一點來自選修《高等計算機網絡》一課的感受,當時老師讓大家寫一個ALOHA協議的仿真,於是我很自信,開始使用上述的模式寫代碼,寫着寫着我發現一個問題: 

如果我們將時間軸(當然他是連續的,但因爲計算機只能做離散的事情,我們值得割愛)以定時間段進行剖分,在一個時間點上如何決定在此時會有“顧客”,或者更爲普遍的說是 有事件發生 麼? 

是我們陷入了一個窘境,我們知道 以往模擬我們可以假設事件發生之概率來完成對 某時間點 可能有事發生的評判? 但這個概率又有誰來定呢? 

我們知道 顧客 的來到是服從泊松分佈的,但當以時間爲軸時,這一概率分佈是很難被描述的,(也許有,但我沒遇見),遇到這種窘境之原因我們後面會繼續探討。 

{最近看了一篇排隊模型模擬的文章,發現確實可以完成泊松分佈的產生,原理大概是利用數據確定泊松分佈中lambda的值,已產生在單位時間段事件發生的數目。因此回想一下,但是之所以遇到那個窘境是因爲我們當時並不知道每個分組發送消息的數據,故無法推算他的分佈情況。而對於事件驅動的模擬方式,我猜想可以採用 期望的間隔時間 來完成對事件發生的概率分佈進行模擬。想一下,確實自己的看法仍非常的片面 09-09-15}

節課上的很糾結,因爲我發現我們曾以爲傲的模擬框架在此類問題上卻無能爲力,老師大概會預知到我們的問題所在,他寫了另一種模擬的方式,大概是: 

STEP 0:產生 事件的發生時間

STEP 1:以  事件的發生時間爲準,將時間移到此點;

STEP 2:做出對該事件的處理,產生下一事件的發生 時間;

STEP 3:判斷時間有未越界

是,終止

否,則以最近事件的發生時間爲準,將時間移到此點;進入STEP 1

--------------------------------------------------------------------------

      MODEL   事件驅動仿真 

看完上面的框架以後,我們驚喜的發現,在上面遇到的問題將迎刃而解,

兩者的區別在於 驅動方式的差別,儘管兩者看起來都是離散的,但實質上,我們觀察到兩者本質上的不同,在時間驅動框架上,雖然時間被離散化了,但是 其本質在於對於連續系統的離散化,我們發現 交通流 與 排隊模型 的區別:

 

前者是連續的系統,而後者是離散系統

 

這一本質差別,在上述問題發生的半年後我才發現之所以時間驅動模型在排隊模型中無能爲力的原因。我覺得這一點在《離散事件系統建模與仿真(王維平)》一書中就有很透徹的說明,見page 147:(提到的事件調度法即大約是事件驅動的模型) 

事件調度法的“將仿真時鐘推進到下一最早發生時刻”體現了仿真時鐘的推進機制,是將仿真時鐘推進到下一最早事件的發生時刻。它與連續系統仿真中時間推進方法- 固定時間增量法不同,反映了離散系統狀態僅在離散時刻上發生變化的特點,這種時間推進方法爲離散系統仿真策略所普遍採用,成爲下一事件增量法,簡稱爲 事件增量法。 

看了上文的描述我們大概清晰的觀察到 連續系統模擬 與 離散系統的差異。

 

!事情還沒完,現在還有些迷惑....那就是 歸根結底 我爲什麼會形成 這種對時間驅動的偏執呢? 我又是在交通流模型中使用了什麼一種方法? 需求這個問題的答案往往會對問題的涉及領域有了很大的拓展。是的, 

時我用的是 元胞自動機 模型對高速公路上車輛進行模擬的。我想很多人都對他並不陌生,也即是 我們曾說過的 wolfram 博士推崇這種離散的仿真模型,並稱之爲 一種新科學(NKS)

之所以如此,我們可以想象一下 當遇到一個連續系統時 我們往往建立微分方程進行對其的描述,而遇到一類離散的問題,我們可以使用 建立差分方程(當然可以將之比作 微分方程之離散化)、有限狀態自動機等等模型,而元胞自動機 給了我們新的思路去模擬一個複雜的系統,雖說他是離散的,但對於連續系統他並不必微分方程遜色: 

大量元胞 的 局部規則驅動變化下,系統的整體往往呈現某種 相對穩定 的性質 

其實,這在人類社會中也能體會到這一規律,一個較大的社會現象 往往是各個 個體協作併發的結果。

我想這就是爲什麼 Wolfram之所以將其看做一種新科學的原因了。

呵呵,好像對於我提出的問題並沒有一個合理的解釋,我想大概是我們以往使用的 元胞自動機 模型都是事件驅動的方式進行設計的


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章