2017年9月23日 星期六

離散事件模擬

系統採用離散事件模擬(discrete-event simulation)主要是因為該系統在時間歷程上,在某些時間點上會有個別事件(event)發生,某一事件發生代表系統的狀態參數在該時間點產生改變。由於離散事件模式的動態特性,在模擬過程中均必須記錄經歷的時間,因此必須有某種前進機制使模擬時間能往前推進,此機制稱為模擬時鐘(simulation clock),模擬的時間與實際電腦的執行時間並不一定具相關性。

模擬時鐘前進的機制有兩種:下一事件時間前進與定量時間前進。第一種方式普遍應用於現行模擬方式,因為後者僅是前者之特例。下一事件時間前進是將模擬時鐘設定為零,並決定未來事件發生之時間,然後將時鐘時間指向即將發生的第一個事件,所有系統狀態參數亦依據該事件進行更新。此過程將連續進行,直到系統的停止條件符合為止。在離散事件模擬中,由於所有狀態參數均在事件發生點改變,模擬時鐘將跳過事件間不活動的部份;這點與定量時間前進不同,因為定量時間前進會產生無事忙的現象,浪費電腦的運算資源。當系統呼叫離散事件模擬程序會執行下列三項工作:

    1. 擷取事件佇列第一個事件;
    2. 依據事件更新系統狀態;
    3. 產生新事件發生之時間,並加入事件清單中。


如上圖所示,事件佇列(pending-event set)是一個用來儲存所有將會發生但尚未發生且尚未被執行事件的資料結構,其中的事件是依其被記錄所將發生之時間的順序來儲存,每一個事件本身的資料結構中包含事件種類與將要發生的時間。

沒有留言:

張貼留言