進階模型:醫療業-Emergency Department-Part 2-邏輯流程-註冊報到

AnyLogic是非常逼真於真實世界,一個模型可能會包含好幾個議題,甚至可以有好幾種解法。想要有個好架構來講解,的確不容易。在此,也只能試圖去建立一個講解案例架構。
=========

流程簡述

  1. 病患到達時,會先設定出現門口。
  2. 先移動病患至報到櫃台。
  3. 報到櫃台有一位常駐服務人員,每次僅能處理1個病患。
  4. 若報到櫃台處於忙碌狀態,其他病患需等候於等候線。
  5. 若報到櫃台處於空閒狀態,則從等候線釋出1個病患,移動註冊報到服務。
  6. 完成報到後,病人將移往等候室。

現場佈置

  1. entryDoor: 當病患到達時,會先出現在此區域。使用space markup-Rectangular Node[待補連結],並以隨機方式呈現在此區域中。
  2. polyQueueAtReg: 當服務櫃台處於Busy狀態時,病患需在此等候線上等待。使用space markup-Polygonal Node[待補連結]。
  3. registrationDesk: 當病患開始接受服務時,會出現在此區域中。使用space markup-Rectangular Node[待補連結],並採Attractors[待補連結]方式,限定病患面向櫃台。
  4. person_sitting: 櫃台人員。使用3D物件呈現出櫃台狀況。
  5. 使用Path[待補連結]將上述space markup物件串連成一個NetWork。如此,病患才能依循路線移動。
  6. waitingRoom: 完成報到手續者,將被移動到此區域,等待下一個檢傷分類流程。使用 space markup-Rectangular Node[待補連結]。

邏輯流程


流程詳述(整合現場佈置與邏輯流程)

  1. 病患(Patient: Agent Type)到達(arrive: Source),會設定在門口(entryDoor: space markup-Rectangular Node[待補連結])。
  2. 移動病患(gotoRegistration: MoveTo)至報到櫃台(registrationDesk: space markup-Rectangular Node[待補連結])。
  3. 此報到櫃台有一位常駐的服務人員(person_sitting: 3D Object)。每次僅能處理1個病患。
  4. 若報到櫃台處於Busy狀態,則需等候(queueAtReg: Queue)於等候線上(polyQueueAtReg: space markup-Polygonal Node[待補連結])。
  5. 若報到櫃台處於Idle狀態,則可從等候線以FIFO模式,釋出1個病患,進行註冊報到服務(registration: Delay)。
  6. 完成報到後,病人將移往(gotoWaitingRoom1:MoveTo)等候室(waitingRoom: space markup-Rectangular Node[待補連結])。
  7. 下一流程:檢傷分類


元件屬性

1. arrive: Source

設定病患到達模式。相關屬性設定如下:

  1.  採用Rate來定義Entity到達模式。其到達率為0.14人/分鐘。
  2. 使用自訂的Agent Type Patient來定義Entity。Patient主要有兩個屬性:(1) timeAdmitted用來紀錄病患產生之時間點也就是到達急診之時間點。(2) appearance使用uniform_discr(1, 3)來切換病患三種不同的3D物件(這部份在後續的技巧篇會再提到)。
  3. 設定新增的agent(再次提醒,講Agent Type時,是指定義了一個類別。講agent是指產生了一個物件。而我只是習慣用Entity來描述在Flow上流竄的agent。)時,要讓這個Entity放在什麼地方。AnyLogic提供了很多種方式,目前設定是NetWork上的某一個節點。此節點名稱為entryDoor。
  4. 設定此Entity的移動速度。請注意,因為我們的佈置圖有設定比例尺,所以,這個移動速度就不能太離譜,否則模擬結果會大走鐘。
  5. 在Entity離開Source的事件上,補上一段小程式。這是用來將離開Source的模擬時間點,寫入Entity中,為了後續統計分析之用。
  6. 這是用來定義待在Source的物件的類別型態。這個主要是用在程式面。有兩點需要先說明(1) 大部分可以寫程式的地方,都用agent這個區域變數來代表流入元件的Entity。這有點像泛型的概念。先宣告了,那此類別的所定義的屬性與方法就可以在程式面中,透過agent這個區域變數來使用。(2) 別忘了,AnyLogic只是一個Java程式,自然會有物件導向的概念,既然Agent Type是類別,也就可以有繼承關係。也就是說,我可以細分進來的病人是男人與女人兩種不同的類別,但是他們都繼承了人這個類別。那這個地方就要宣告成人這個類別。若此處宣告成男人或女人時,且兩個子類別又有自己宣告的屬性或方法時,那就非常容易出錯。另外是設定此Agent Type是用來產生一個,還是一批。一般而言,離散式都是一個,Agent Base的是一批。不過,有些離散模型,如行人或交通類的,也會一次產生一批。端看模擬目標而定。

2. gotoRegistration: MoveTo[待補連結]



  1. 此元件的主要功能是主觀意識去移動Entity的去處(當然,非主觀就是讓Entity自行移動至下一個流程元件,看那個流程元件的設定來決定。)。此處有兩個選項,第一個選項單純經由路徑移動至指定的節點,這個前提是下一個節點是在同一個Network中。第二個選項是下一個節點並不在同一個NetWork上。這個比較難解釋,需要一些背景知識。簡單講,就是由這個Agent Type(現在是Main),跳去另一個Agent Type,而這個Agent Type有自己的NetWork。因為不同NetWork,表示沒有任何Path進行連接,所以,只好用Jumps的方式。但,這個也要有個前提,就是這兩個沒有連接的NetWork,Entity所停留的節點,必須在佈置圖中要重疊。
  2. 主觀移動到NetWork的另一個節點,目前是移到registrationDesk。
  3. 因為是移動,所以得設定移動的速度模式。有兩種(1) Distance/speed:用距離與速度算出耗費時間,就可以與模擬時間作對應,取得正確的時間距。(2) Trip time:直接設定移動所需的時間。
  4. 是否要重新設定此agent的移動速度。此處重新設定為 uniform( 2.5, 3.3)/second。這個應用非常的重要,因為,不同情境下,Entity的移動速度可能會不一樣。像有些應用,會看年齡來決定移動速度。或者是有無攜帶重物等條件下,設定移動速度。

3. queueAtReg: Queue

  1. 設定此等候容量為20。
  2. 設定佈置圖的對應位置。目前是polyQueueAtReg。
  3. 採用FIFO政策。

4. registration: Delay


  1. 採用指定時間方式。
  2. 目前設定為triangular( 0.5, 1, 1.5 )/minutes
  3. 一次處理一個病患。

5. gotoWaitingRoom1: MoveTo[待補連結]

  1. 目前設定是移往waitingRoom節點。

留言

這個網誌中的熱門文章

等候理論

AnyLogic簡單介紹

機率分配 - Part 5 Geometric