空間佈置: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也只是一個群組類別。是類別,就可以有屬性。

屬性

  1. 名稱。預設值是network。若有很多個Network時,命名很重要。
  2. 是否可以忽略。很多元件都有,使用上要小心,若這個元件有被其他元件用程式呼叫時,在編譯時會出錯。
  3. 是否要顯示在最上層。之前提到Agent Type可以有自己的network,但是都會疊在一起。這個是設定疊在一起時要不要顯示。
  4. 鎖定。這個很重要。實務上一個模型會有好多個Network疊來疊去,保證會昏頭轉向。我做了三層樓的,疊在一起,很難辨識。而且很容易被選擇且移動到。避免如此,當某個Network確認好相對位置後,就可以先鎖起來,避免被選取與移動。
  5. 可見與否。這個跟地3不太一樣。這個是在Agent Type本身。
  6. Z軸座標。是的,當有三層樓時,這個z座標就很重要。
  7. 決定此network要顯示在2D或3D,或兩者都要。

函數

network也提供了一些函數方便我們在程式面使用。
  • Ground getGround() - 回傳此Network屬於哪個ground。這個是行人模型庫會使用到。
  • Node getNearestNode(double x, double y, double z) - 取得最近於此3維座標值的節點。
  • Node getNearestNode(Point p) - 取得最近於此3維座標值的節點。
  • Agent getSpace() - 這個Network是在哪個Agent定義的。
  • double getZ() - 取得此Network的Z座標值。這是相對於Main的座標系統。 

留言

這個網誌中的熱門文章

等候理論

AnyLogic簡單介紹

機率分配 - Part 6 Poisson