手動模擬
所謂打鐵趁熱,上回留個「次數分配-直方圖」與「機率分配函數」之間的關係與應用原想接著來說說,但時間有限,所以,先來講講手動模擬。
==========
透過手動模擬,對於模擬所需要的「時間」能有更清楚的理解。網路上有說十維空間,那是數學的世界。但是透過模擬系統,我們可以掌握時間,可以達到仿四度空間的能力。
「時光」,時不可逆,光可逆。
透過模擬系統的時間架構,可以預測未來。若不滿意,可以拉回現況時間點(抱歉,已經不再是上一個模型的啟動時點),再來一次。
上回收集的原始資料可拆解兩個使用目的病患到達時間與服務時間。兩者並列如下。
==========
透過手動模擬,對於模擬所需要的「時間」能有更清楚的理解。網路上有說十維空間,那是數學的世界。但是透過模擬系統,我們可以掌握時間,可以達到仿四度空間的能力。
「時光」,時不可逆,光可逆。
透過模擬系統的時間架構,可以預測未來。若不滿意,可以拉回現況時間點(抱歉,已經不再是上一個模型的啟動時點),再來一次。
上回收集的原始資料可拆解兩個使用目的病患到達時間與服務時間。兩者並列如下。
對模擬來看,時間雖然持續性發生,但是發生任何事件時,都是一個頓點,外力介入點,程式撰寫點。這跟電腦系統是相同的道理。也就是說,你要設定中斷點,並且收集必要資料。
我們先把收集什麼資料放一邊,專心在到底可以有什麼樣的事件,各事件的關係以及跟等候理論到底有什麼關聯性。
首先我們要來問問,既然時間不斷地演進,那到底由誰來決定斷點呢?就我們的模型來說,就是那個病患,由他來決定很多事件的發生與結束。這個傢伙叫Entity,在Anylogic中叫Agent。
就是這個entity遊歷了我們模擬系統中的元素,抱歉,條件複雜下,哪些Entity遊歷了哪幾個元素,不到最後關頭,我們還不曉得勒。這些過程重不重要,就是決定你要收集哪些資訊了。
回過來說Entity因為遊歷了元素,所以觸發元素所支援的中斷事件。一個模擬系統內,往往不會只有一個Entity,但也不可能無限制,甚至不同模擬規模就得設定其Entity數量。這也是為何大巨蛋疏散模擬,要設定不同的人員數量。
言歸正傳,那到底有哪些中斷事件,哈~還是跟元素的設計目的有關。不過,一般起碼都會有{初始、[{到達、離開}]、結束}。有看懂嗎?硬是要用JSON表示法。整體而言是一個物件,一定有初始、結束,然後中間歷經不同元素,是可重複的陣列,裡面會有一個{到達、離開}的物件。模擬結束後,這兩個數據一定要同時存在,不會有Entity進入元素後,沒有離開的。
=========
準備好基本資料與基本知識後,我們開始用Excel進行手動模擬。首先要準備好模擬原始狀態的試算表。這個模型只有一個Queue,只有一個Service。多了,老子才不幹勒,白癡才會用手動去搞1/M/M的模型。而且假設Queue的Capacity為無限;Service的Capacity為1。
第一欄是根據原始數據轉換成每一個病患到達的時間軸。
第二欄是只哪一個Entity到達了。
第三欄是事件。整個系統一開始有初始,每個Entity有到達。離開呢?又還沒開始,接著就是要配合其他Entity的到達,與其他元素的互動與時間造成離開時間的差異性。還好,這邊只有一個Queue,一個Service。
第四欄沒用,純間隔。
第五欄是entity進入Service元素所耗費時間(也是從原始資料來的,別忘了,這是時間間隔)。
第六欄是entity離開Service的時間。(欄1+欄5,又回到時間序)
第七欄沒用,間隔好看而已。
第八、九欄是這個Service在第五欄時間點之前後,是空閒(0)還是忙碌(1)。
第十欄是代表這個entity他進來後得在Queue中等待,還是可以離開。
第十一欄是代表目前Queue這個元素,目前有多少個entity在裡面。
所以,結果是:
==========
不再多作解釋了。病患6以下,就是給同學的作業了。
留言
張貼留言