發表文章

目前顯示的是有「Space Markup」標籤的文章

空間佈置: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也提供了一些函數方便我們在程式面使...

進階模型:醫療業-Emergency Department-Part 2-邏輯流程-檢傷分類

圖片
本篇是接續上一篇 進階模型:醫療業-Emergency Department-Part 2-邏輯流程-註冊報到 。 ========== 流程簡述 病患已經完成報到註冊程序,且被移往等候室,等待檢傷分類作業。 檢傷作業由護士引領病患至檢傷室。 確認同時取得護士與檢傷室這兩種資源後,則將病患與護士一同送往檢查室。 進行檢傷作業。 完成檢傷後,離開檢傷室。 仍由護士將病患移往等候室。 現場佈置 waitingRoom: 完成報到手續者,將被移動到此區域,等待檢傷分類流程。完成檢傷分類的病患也會回到此區域,等待處置作業流程。使用 space markup-Rectangular Node[待補連結]。 rectangle3、rectangle4: 這兩個space markup-Rectangular Node[待補連結],被用來定義檢查室(triageRoom: ResourcePool[待補連結])的HomeNode。這部份需要專門篇幅兩解講。簡單地說,可以利用節點空間來定義資源的數量。目前檢查室宣告了兩個空間(rectangle3、rectangle4),就是表示檢查室有兩間的意思。 nurseHomeRoom: 與前項意義同。被用來定義護士的資源數量。只是,這邊不是用空間數量來定義,而是直接使用數字。區域中有箭號的圖示是指Attractor,他可以設定3D圖的前方的方向。當然,也可用Attractor的數量來決定資源的數量。 邏輯流程 流程詳述(整合現場佈置與邏輯流程) 病患已經完成報到註冊程序,且被移往(gotoWaitingRoom1:  MoveTo )等候室(waitingRoom: space markup-Rectangular Node[待補連結])等待檢傷分類作業。 檢傷作業需由護士(nurse: ResourcePool[待補連結])引領至檢傷室(triageRoom: ResourcePool[待補連結])。所以,必須先確認這兩項資源是否有空閒。 確認同時擁有(seizeTriageRoom: Seize )護士與檢傷室這兩種資源後,則將病患與護士一同送往檢傷室(triageRoom's HomeNode: space mark...

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

圖片
AnyLogic是非常逼真於真實世界,一個模型可能會包含好幾個議題,甚至可以有好幾種解法。想要有個好架構來講解,的確不容易。在此,也只能試圖去建立一個講解案例架構。 ========= 流程簡述 病患到達時,會先設定出現門口。 先移動病患至報到櫃台。 報到櫃台有一位常駐服務人員,每次僅能處理1個病患。 若報到櫃台處於忙碌狀態,其他病患需等候於等候線。 若報到櫃台處於空閒狀態,則從等候線釋出1個病患,移動註冊報到服務。 完成報到後,病人將移往等候室。 現場佈置 entryDoor: 當病患到達時,會先出現在此區域。使用space markup-Rectangular Node[待補連結],並以隨機方式呈現在此區域中。 polyQueueAtReg: 當服務櫃台處於Busy狀態時,病患需在此等候線上等待。使用space markup-Polygonal Node[待補連結]。 registrationDesk: 當病患開始接受服務時,會出現在此區域中。使用space markup-Rectangular Node[待補連結],並採Attractors[待補連結]方式,限定病患面向櫃台。 person_sitting: 櫃台人員。使用3D物件呈現出櫃台狀況。 使用Path[待補連結]將上述space markup物件串連成一個 NetWork 。如此,病患才能依循路線移動。 waitingRoom: 完成報到手續者,將被移動到此區域,等待下一個檢傷分類流程。使用 space markup-Rectangular Node[待補連結]。 邏輯流程 流程詳述(整合現場佈置與邏輯流程) 病患(Patient: Agent Type)到達(arrive:  Source ),會設定在門口(entryDoor: space markup-Rectangular Node[待補連結])。 移動病患(gotoRegistration:  MoveTo )至報到櫃台(registrationDesk: space markup-Rectangular Node[待補連結])。 此報到櫃台有一位常駐的服務人員(person_sitting: 3D Object)。每次僅能處理1個病患。 若...

最簡模型-ATM-Part3-動畫設定

圖片
隨著個人電腦的運算能力精進,近年系統模擬的最大差異就是採用3D動畫來呈現模型。 3D技術博大精深,這篇僅能提到一些空間佈置(Space Markup)應用。至於詳細的內容,得參考空間佈置系列的文章。若要詳談3D的話,又得再開另一系列才行。 ========== 首先我們知道模型中的元件,在真實世界裡是否需要呈現。例如說Source,可以僅設定一個點,當作Entity Arrival時,要出現的位置。如果,你的模型設計是一次Arrival事件發生,會同時來很多個Entity,用點來表示,就無法感受多個Entity,就需要設定一個空間。再複雜點,你還可以設計一個門放在那兒,如時間很夠,你還可以加上動畫,用來顯示人進來是開門關門的動作。工作站也是,你可以僅僅用一個方型區間來代表,可是,若你想明確表達這空間中,工作人員等候時站在哪,操作時站在哪,Entity進來時先放哪,加工時會在哪,結束後會放哪。甚至你可以設計加工前Entity的外觀樣式,加工中,加工後,都可以不同。總之,彈性甚大,也因為如此AnyLogic很強大,也正因為如此,想學好AnyLogic真的不容易。 1. 設定ATM ATM是一個服務點,此方案的Entity是提款人,他不會跑進ATM裡面,所以,用「點節點」來代表就可以了。 可從Process Modeling或者是專用的Space markup頁籤中取得Point Node,將其拖曳到編輯區中。 接下來的動作是要把邏輯流程的元件與Space markup的元件進行連結。回到ATM這個物件,他是Delay這個類別的案例。設定Agent Location指向剛剛拖曳的Point Node(預設名稱為point)。右方兩個按鈕,左邊那個是協助你在Space Markup網路中,點選對應的元件。右邊那個是當你設定完成後,點選之後,系統會告訴你他是在Spacke Markup中的哪個元件。前者是新增,後者是查詢。 2. 設定等候線 ATM的排隊模式是先到先贏,每個人都得乖乖排在線上,所以,會使用Path來設定這條等候線。Path可提供很複雜的操控模型,讓你可以呈現真實世界的動線。一樣用拖拉入編輯區,然後移動至適當位置(預設名稱是path)。 接著就是進行連結。選擇queue,再設定Agent location的屬性。記得...

空間佈置:Part 1-比例尺

圖片
空間佈置相關元件是用來定義實體世界之物件與虛擬物件在空間中的對應關係。例如說一個等候線應該要長什麼樣子,從哪裡到哪裡。或者是工作站應該要長什麼樣子,他的範圍是從哪裡到哪裡。然後,Entity的流動路線應該是從哪裡到哪裡等問題。 不過,要談這一系列之前,首先要搞清楚尺規。AnyLogic之所以可以對應於真實世界,是因其畫布(編輯區)可定義與真實世界之比例尺。 編輯區在正常的視圖下,上方位置會有一個比例尺。而編輯區也可以看到有格線。我們就是利用格線來定義實際尺寸。 把編輯區放大至400倍,透過圖中格線與右方屬性設定,我們發現到目前這個專案的定義是100px相當於10公尺。當然,你可以任意調整成適當的比例尺。 這個是要提醒,當我們設定一個等候線或等候區,一個加工站,一個櫃台等等,都不是亂放的。有些模擬軟體雖然號稱3D,但與實務的空間關係是無法真實對應的。 從圖中我們要知道格線的一格其長寬為5px,是0.5公尺。 接者要確認的是,你的模型展示的精密度。一般建議是用Entity的大小作為最基礎單位。這樣子,比較能夠感受到等候線與空間的相對感,以及Entity在加工區應有的位置。但若,實務的Scall很大,例如是搞GIS,那就不能夠這樣子搞,也僅能用抽象比率。否則,就算是一台車也是一個點,那就不好搞視覺差異。