元件詳解:離散事件 - 流程模型 - Source - Basic
Source
在離散事件中,Source元件是必要元件。(也就是說,其他代理人與系統動力學就不需要了)一個模型中,可有數個Source,並可建立彼此依賴關係。小綠圈圈叫Port代表與其他元件的連接點,一個元件可能會有1到數個。Port就元件本身而言,有Inbound與Outbound兩種類型。Source只有一個Outbound Port,所有Entity由此而生。就程式的角度,他就是建構元。協助你產生模擬中所需要用到的Entity與你所預期的數量與各別時間點。
配對元件
Source必須與Sink配對。一個模型中,一定至少要有一組Source與Sink,才能讓Entity有生有死。
屬性
元件的屬性結構有點複雜,不容易講解。某些屬性是相依於其他屬性。有些屬性是下拉清單,因選擇不同,又會冒出不同的屬性需進一步填寫。這麼複雜的結構,還是可以讓你自訂屬性。從系統發展的角度,這是非常好的機制。
因為難講解,只能挑重點講,細節得看手冊。手冊非常重要,就算我研究他已經三年多,還是得常常去翻手冊。只是,手冊真的不容易閱讀,這部份也會有專篇來討論。下圖是Source的基本屬性。逐行解釋,若後續元件有重複的屬性,就不再說明。
- Name:元件的名稱。這個取名非常重要,因為程式會用到。你可以想像他就是宣告一個物件名稱(Source是類別,希望你有OOP的觀念)。一般為了辨識且容易在城市中呼叫,這個類別名稱(source)會保留,然後再輸入你的識別字。因為AnyLogic的城市編輯部分,有支援Code Completion。
- Show name或者Ignore。很單純的功能,就是在AnyLogic的模型編輯區中是否要顯示Name。因為,有些元件可能是過渡的,或者不是重點,你就可選擇Ignore,讓編輯區保持清爽。
- Arrivals defined by:這是source獨有,決定要用什麼方式來定義Entity的到達模式。其選項有[Rate], [Arrival table in Database],[Arrival schedule],[Calls of inject() function],[Rate schedule],[Arrival schedule]。不同選項,會衍生出不同的動態屬性。圖中是配合Rate的屬性。其他的希望能在Advance篇幅中說明。
- 因為選擇Arrival採Rate的方式,所以要定義Arrivate Rate。有兩個欄位需要填寫,一個是值(分子),一個是單位(分母)。後者是時間單位;前者可以是數字,或者任何可以產生數字的隨機函數、自訂方法或函數。
- Source的目的是生成Entity。我們可以勾選這個,讓生成的Entity可以從某個資料表當參照,來給定Entity的初始值。點選後會問使用哪個資料表,當然,前提是有把資料表匯入AnyLogic中。
- 第4行只是定義,多久會發生事件,這邊定義每次發生時,要產生幾個Entity。預設值是1個。
- 這是用來限定你的模型最多只能生成出幾個Entity。
- 定義你要生成出什麼類別的Entity。預設是Agent。你可自行定義自己的Agent,也就是宣告一個類別。其實,這裡就已經與Agent-Based模型綁在一起了。
- 點選可以協助你產生一個新的Agent類別宣告。
- 這個是定義生成出來的Entity,一開始要放在布置圖的什麼地方。當然,你要先畫好模擬情境的設施佈置圖。進階版的AnyLogic可讓你直接匯入AutoCAD圖形。一般,產生客戶類的Entity當然是放在門外。若是要模擬不同汽車的車速,那可能會在你佈置區的主體外,選擇一個點,開始生成Entity,然後讓他們依個別的車速前進。模擬應用純乎一心。
事件
Source支援:
- On before arrival [code]:生成Entity之前,可以寫程式。例如先讀取資料表,取得一個參數組,用來設定這個Entity。
- On at exit [code]:Entity在準備離開Source之前。這時候,你已經可以利用agent變數來呼叫這個Entity。Local variable: agent - the agent.
- On exit [code]:Entity離開Source的那瞬間。一般都是利用這個機會把一些時間點,寫入Entity身上。Local variable: agent - the agent.
- On discard [code]:若Entity無法順利離開Source,要被消滅時。例如寫入Log作紀錄。Local variable: agent - the agent. 很多方法在所有元件上都差不多,以後除非有新的,特用的,否則就不多解釋了。
方法
Source支援:
- void inject(int n) - 在複雜的模型中,這個方法常被用到。他可以協助我們在需要的時候才生成Entity,並指定數量。前提是,這個Source的Arrival的型態定義必須是Calls of inject() function
- long count() - 目前這個Source生成Entity的總數。
- long countArrivals() - 目前這個Source生成Entity並且順利到達的總數。生成並不一定能到達。例如某屬性是用隨機變數,但系統卻規定,什麼樣條件下,這個Entity必須要放棄,不送出。
留言
張貼留言