2017-02-04 121 views
0

我的源代碼在「On at exit」字段中有以下代碼: TRUCK.ID_number = parameter; parameter = parameter + 1;Anylogic將值分配給所有實體,而不是隻有一個

然後,每個卡車將收到的ID:1,2,3,...

的問題是,所有卡車同時循環,它看起來像每次生成新的卡車和代碼運行時會重置所有卡車的ID。

例如:當在貨源處創建貨車4(ID = 4)時,所有其他貨車將收到ID 4,因此我無法知道每輛卡車的正確ID。

我在做什麼錯?

+0

你在哪裏牽着你的'parameter'領域,是什麼類型呢?如果它是一個'Integer'而不是'int',那麼你會得到你提到的症狀,因爲'ID_number'是一個對象引用。如果是這樣的話,我可以在答案中解釋更多... –

+0

參數在主窗口中保存,輸入「int」。 我真的迷失在這裏。它應該是非常簡單的事情...在這個過程中記錄每個實體的ID和其他特徵,然後收集信息(匯) – Leo

回答

1

有幾件事。首先,您需要在onExit代碼框中使用關鍵字agent。所以在你的情況下,agent.ID_number=parameter。請閱讀這些在AnyLogic代碼框中隨處可見的特定關鍵字。我把它叫做「魔術燈泡」,還發現該主題的我的博客:

The magic lightbulb

其次,新創建的代理會自動獲得一個唯一索引(如果他們屬於同一個羣體)。您可以使用卡車代理內的getIndex()方法訪問該方法。

+0

謝謝!但我仍然認爲我在這裏做錯了什麼。 當我添加您說的代碼時,我收到錯誤消息。 agent.ID_number =參數===>劑不能被解析爲一個可變 Agent.ID_number =參數===> ID_NUMBER不能解析器或不是字段 Entity.ID_number =參數===>實體無法解析爲變量 entity.ID_number = parameter ===> ID_number不能解析器或不是字段 – Leo

+0

您需要使用小寫「agent」,而不是「Agent」。你真的需要閱讀這些關鍵詞和一般的Java編程。這是非常區分大小寫的。此外,請確保您將其輸入到實際支持關鍵字「代理」的代碼框中(請閱讀我的博客瞭解如何操作)。希望有助於 – Benjamin

-1

答案是:使用entity.ID_number =參數

+0

Leo,它是AnyLogic 6中的「實體」(以及AnyLogic 7中已廢棄的企業庫)。但是,它是AnyLogic 7中的「代理」。如果您使用舊版本的軟件,請指定您使用的版本。乾杯 – Benjamin

相關問題