在我的 Anylogic 模型中,我有一個hub可以存盤 5 個容器的容器。所以它有一個capacity值為 5 的引數。我還給它一個變數,當時numberOfContainers存盤在集線器上。當我運行模型時,我看到變數有效(它隨時間變化為當時存盤的容器數量)。
現在我希望我的模型中的另一個代理根據當時是否達到集線器的容量(在其狀態圖中)做出決定。我嘗試創建一個具有以下條件的分支:
main.hub.numberOfContainers > main.hub.capacity
但它不起作用,狀態圖的行為就像從未達到容量,即使容器的數量遠高于容量。有誰知道如何使這項作業?
uj5u.com熱心網友回復:
通常,條件分支很棘手,因為條件可能不會在您希望的時間進行評估。這是一個例子。
- 在時間 n 中,集線器中有 3 個容器
- 在時間 n 1 時,集線器中有 10 個容器
- 在時間 n 2 時,集線器中有 2 個容器
該模型可能錯過了在時間 (n 1) 評估條件,這就是您的轉換不會被觸發的原因。
為了解決這個問題,我有 3 個可能的建議:
不要使用條件轉換。相反,使用訊息。例如,如果您將容器存盤在佇列中,則在佇列的“On Enter”和“On Exit”欄位中,添加條件:
if(queue.size >= main.hub.numberOfContainers) <send msg to the statechart>使用回圈事件檢查條件是否滿足每秒或毫秒或任何對您有意義的時間段。當條件滿足時,發送訊息觸發轉換。但是這種方法的問題是它可能會減慢你的模型,性能很差。
使用 onChange() 函式。此函式用于向您的模型發出信號,表明發生了更改并且需要評估條件觸發器。因此,您需要確保在發生可能導致條件為真的更改時放置 onChange() 。在上面選項 1 下提供的示例中,這將位于佇列“On Enter”和“On Exit”的欄位中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/416594.html
標籤:
