發表文章

元件詳解:離散事件 - 流程模型 - ResourcePool - 1

圖片
ResourcePool元件圖 ReourcePool是用來宣告資源定義的元件。 應該可以強烈感受到這個元件與其他的最大不同點。他沒有Port。也就是說,他不會放在邏輯流程中,但他要被其他元件所呼叫使用。 資源型態可以分成三種: Static:靜態資源。這類資源不能被移動。例如說會議室等。 Moving:移動資源。這類資源具有自主移動能力。大部分具有生命的Agent都屬於這種。 Portable:可攜資源。這類資源沒有自主移動能力,需要移動資源之協助來移動。例如車輛等。這種叫用方式比較麻煩,因為要先叫用Moving資源,例如司機,然後移動司機到Portable資源,然後再送到抓取這兩個資源的Entity。還需要用到另一組元件。所以,有時候會偷懶,或者不在意移動資源的使用率,可以把Portable設成Moving。  一般而言,Static資源會直接定義於Network中的某個空間。依據指定要的空間數量,當作此資源的數量。 若是Moving與Portable資源,雖然可以在Network中移動,但是仍需要在Network中,宣告一個空間當作他們的家Home Node,也就是起始位置。 任何資源都會有Busy(忙碌)或Idle(空閒)狀態,利用這個狀態的變化,可以取得此資源的相關統計資料。 資源有能量(Capacity)的問題。定義的方法有下列三種: Direct:直接宣告數量。 Home Location:透過宣告此資源的Home Node數量來決定(可以有多個Home Node)。也可以使用Home Node內的attractors數量來決定。 Schedule:有可以分成四種。 根據Schedule物件所設定時間區隔,宣告整數來決定有多少數量。(圖一) 根據Schedule物件所設定時間區隔,宣告布林來決定資源數量是否可得。(圖二) 根據多個Schedule所組合之整數來決定有多少數量。(圖三、圖四) 根據一個Schedule,宣告不同群組之數量。(圖五、圖六) 圖一 圖二 圖三 圖四 圖五 圖六 配對元件 Seize Release Assembler Service 類似元件 無

元件詳解:離散事件 - 流程模型 - Service

圖片
Service 元件圖 若注意看Service元件圖的內部,是否有似曾相識的感覺。沒錯,他就是由 Queue 與 Delay 所組成。 因為, Delay 常常需要Resource來支援,所以,叫用Resource的 Seize 也內建在Service元件中。 有叫用Resource來完成這個Service,自然在完成後,就會 Release Resource。 若實務情境是很單純,例如一個櫃台。Entity會過來乖乖地排隊,不會東跑西跑;資源也是乖乖地就定位;然後作業時間也沒有那麼多條件變化,就可以考慮使用Service。當你使用PEL版本搞複雜模型時,Service就很重要了。 配對元件 無 類似元件 Assembler 相關元件 Queue Delay Seize Release 屬性 Name:此物件名稱。主要是用在程式面。 這個等同 Seize 元件。 這個等同 Queue 元件。 這個等同 Delay 元件。 這個等同 Seize 元件。 如屬性名稱所示,設定Network相對應節點位置。 事件 On enter 當Entity進入時。 Local variable:   agent  - the agent 本身 On exit (timeout) [選擇 Queue: exit on timeout 時出現]  當Entity發生timeout時。 Local variable:   agent  - the agent本身 On exit (preempted)  [code] [選擇 Queue: enable preemption 時出現]  Entity從preemption port被擠出時。 Local variable:   agent  - the agentㄅ本身 On seize unit 當Entity有抓到資源時。 Local variables:   agent  - the agent本身                            Agent unit  - 所抓到的資源 On enter delay 當Entity開始進入delay狀態時。 Local variables

進階模型:醫療業-Emergency Department-Part 2-邏輯流程-處置

圖片
本篇是接續上一篇 進階模型:醫療業-Emergency Department-Part 2-邏輯流程-診斷 ========== 流程簡述 病人已經取得醫師助理(PA)資源。 系統設立有一半的機會去作X-Ray,另一半去作Ultra-Sound。 完成後,釋放助理醫師。 離開醫院。 現場佈置 USoundStorage:超音波所在位置。利用Attractors來定義資源數量。 xRayRoom:放射室所在位置。直接宣告只有1 間資源數量。 exitDoor:設定當完成處置後,病患離開之處。 techHomeRoom:這是技師的HomeNode。會用在超音波與X光室的Agent流程中。 邏輯流程 流程詳述(整合現場佈置與邏輯流程) 病人已經取得醫師助理(PA)資源。(請參考 進階模型:醫療業-Emergency Department-Part 2-邏輯流程-診斷 ) 系統設立有一半的機會去作X-Ray(xRayProcess: Agent),另一半去作Ultra-Sound(uSoundProcess: Agent)。(X-Ray與Ultra-Sound是使用具有邏輯流程之Agent處理,需要另外多加解釋。) 完成後,釋放助理醫師(releasePA: Release )。 離開醫院(gotoExit:   MoveTo )到門口(exitDoor: space markup-Rectangular Node)。 最後讓病患這個Entity消失(leave: Sink )。 補充說明 X-Ray與Ultra-Sound是使用具有邏輯流程之Agent處理。因為又增加了一些技術問題,需要新的一篇來解釋。不過,在此先概略提供說明。 請注意看左圖。 USound是用在資源而定義的Agent。頂多就是有一個外在表現圖形。 但是, USoundProcess是定義一個具有邏輯流程的Agent,除了有外在表現圖形外,他用了一堆的元件來表示邏輯(這些元件也是Agent啦)。 應該這麼說,其實這就是自己設計一個元件來用。 因為他是元件,所以冒出一個重點,那就是Ports。他跟其他元件一樣,用來連接其他元件造成流程結果。

進階模型:醫療業-Emergency Department-Part 2-邏輯流程-診斷

圖片
本篇是接續上一篇 進階模型:醫療業-Emergency Department-Part 2-邏輯流程-檢傷分類 。 ========== 流程簡述 病患已經過檢傷分類。並且回到等候室。 叫用急診診間。 確認取得急診診間後,由護士移往急診診間。 釋放護士。 呼叫醫師助理(PA)。 下一流程處置。 現場佈置 waitingRoom:完成檢傷者,將被移動到此區域,等待下一個處置流程。使用 space markup-Rectangular Node[待補連結]。 EC Room:急診診間,共有五個。因為部分佈置形狀不同,使用space markup-Rectangular Node與space markup-Polygonal Node。 邏輯流程 流程詳述(整合現場佈置與邏輯流程) 病患已經過檢傷分類。並且回到等候室。 叫用(seizeECRoom: Seize )急診診間(ECRoom: ResourcePool)。 確認取得急診診間後,由護士移往急診診間(gotoECRoom: MoveTo )。 到達急診診間後,釋放護士(releaseNurse: Release )。 呼叫醫師助理(callPA:  Seize )。 元件屬性 1. seizeECRoom: Seize 此元件如之前,並無特殊性。 選擇ECRoom此靜態資源,每次需要一間。 2. gotoECRoom:  MoveTo 此元件如之前,並無特殊性。 將Agent移到所抓取到的靜態資源所在地。此處之靜態資源為ECRoom。 3. releaseNurse:  Release 此元件如之前,並無特殊性。 將特定資源釋放。此處之資源為nurse。 4. callPA :  Seize 此元件如之前,並無特殊性。 抓取資源,此可移動資源為PA。

元件詳解:離散事件 - 流程模型 - Release

圖片
這個元件主要是搭配 Seize 元件。 隨著 Seize 複雜的設定,也造成Release元件有複雜的釋放策略。 配對元件 Seize 類似元件 無 相關元件 ResourcePool ResourceTaskStart ResourceTaskEnd ResourceTask ResourceSend ResourceAttach ResourceDetach 屬性 (1) 釋放策略:總計有5種方法。 All seized resources (of any pool ):釋放此Entity目前所有抓取的資源。 All resources  seized  by given Seize block(s):釋放此Entity在哪一個Seize所抓取得所有資源。 All seized resources from given pool(s):釋放此Entity從哪一個資源來源所抓取得所有資源。 Specified resources (list of pools):選擇哪些資源來源要釋放。 A specified quantity of  resources:設定釋放哪種資源與數量。 (2) 設定資源釋放後之去處:回到原始點,或者停留在原地。在某些情境下,資源使用後可能需要經過整備(充電,或補充耗材)之後,才能被Entity抓取。 (3) 設定整備任務:每一次都要,這個跟設定讓資源回到原始點相同。注意,資源移動過程是不能被抓取,且需要耗時;若沒有其他任務時,就回原始點;自訂整備條件。 (4) 整備狀態之統計設定:設為busy;設為idle;或者是不收集。

元件詳解:離散事件 - 流程模型 - Seize

圖片
這個元件非常非常重要。他扮演的角色是將邏輯流程與資源使用進行結合。資源的運用情況,更是系統模擬最關心的事情。 資源我們會用ResourcePool[待補連結]來定義,而Seize就是用來定義如何抓取這些資源。請注意看左方圖示,中間有一個很短的 Queue ,他有點Queue的機制,也就是有了上方四個Port。當設定了Capacity時,等候資源的Entity超過此數目時,就要規定從哪裡溢出,然後要接到哪個流程或作哪些程式處理。然後他帶了一個向上的符號,那代表了下方多了一個preparedUnits。這是用來因應有些資源並不能直接抓取,他需要事先準備好。例如說,有超音波設備,他被定義為Portable的資源。他無法自行行走,得要靠另一個Moving的護士資源來移動。這個過程應該是超音波設備叫用護士,準備好後,才回到主流程讓病人(Entity)叫用。這時候,事先準備好的資源與主流程的連接就是靠這個Port。 配對元件 Release 類似元件 無 相關元件 ResourcePool ResourceTaskStart ResourceTaskEnd ResourceTask ResourceSend ResourceAttach ResourceDetach 屬性 在講解Seize這個元件之前,應該要先理解ResourcePool這個元件。ResourcePool是定義模型中資源型態,而資源型態其實就是Agent Type只是透過ResourcePool來進行資源相關欄位資源。真的無須搞到很複雜,Agent Type就是類別宣告,而類別在模型可以被歸類成Entity類、Resource類。Entity有生有死;Resource沒有。 ResourcePool只是宣告而已,透過Seize就可真正的去你所需要的ResourcePool中去取得你要的那些Instance。注意,是用「那些」這個字眼,因為Seize可以定義資源集。一個資源項目的定義是{ResoourcePool, 數量},所謂資源集是[[{ResoourcePool, 數量}, {ResoourcePool, 數量},...],[{ResoourcePool, 數量}, {ResoourcePool, 數量},...],...]希望這樣

空間佈置:Network

圖片
這是AnyLogic非常重要的觀念,有別於其他模擬軟體。我在這邊摔了很多次跤。AnyLogic把邏輯流程與空間佈置分開來處理。你可以有個模型沒有空間佈置,純粹就是看邏輯流程裡的元件,進出多少個Entity。當你有了空間佈置,那就有2D與3D的視圖。設計時是有3維座標的2D編輯區。執行時2D編輯區仍可顯示3D物件,但是真正的3D,是另外一個3D Window來顯示。 講空間佈置,原則上是在一個2D的編輯區中設計3D物件的擺放與流動。這個擺放與流動所形成的結構,就叫做Network。下圖是AnyLogic的說明檔中的圖。 左邊是我們拉一些空間佈置的節點(Node)到編輯區,並仿照實務情形來擺放位置,並且使用Path[待補連結]來將這些Node串起來,形成Entity可以流動的路線。這樣結合起來,就形成一個Network。注意,一個Agnet Type可以有多個Network,節點也可以單獨存在。右方就是形成一個Network。一般節點有(1) Rectangular node[待補連結], (2) Point node[待補連結], (3) Polygonal node[待補連結]三種類型。上圖例都是用Rectangular node。 形成Network的節點與路徑,在專案目錄中會以下圖方式顯示。 看到這,就可以想想Network也只是一個群組類別。是類別,就可以有屬性。 屬性 名稱。預設值是network。若有很多個Network時,命名很重要。 是否可以忽略。很多元件都有,使用上要小心,若這個元件有被其他元件用程式呼叫時,在編譯時會出錯。 是否要顯示在最上層。之前提到Agent Type可以有自己的network,但是都會疊在一起。這個是設定疊在一起時要不要顯示。 鎖定。這個很重要。實務上一個模型會有好多個Network疊來疊去,保證會昏頭轉向。我做了三層樓的,疊在一起,很難辨識。而且很容易被選擇且移動到。避免如此,當某個Network確認好相對位置後,就可以先鎖起來,避免被選取與移動。 可見與否。這個跟地3不太一樣。這個是在Agent Type本身。 Z軸座標。是的,當有三層樓時,這個z座標就很重要。 決定此network要顯示在2D或3D,或兩者都要。 函數 network也提供了一些函數方便我們在程式面使