2013-07-23 39 views
1

我注意到函數t.runNextEvent()對仿真時間有很大影響。爲了確保所有事件都是模擬的,我會多次調用它。在某些情況下(特別是當我用洪泛來傳播信息時)是不夠的。如何在TinyOS和TOSSIM中確定正確的事件數量?

因此,如果這個數字太大,我必須等待更多來獲得結果。如果調用的數量太小,模擬將變得毫無用處。

有什麼方法可以知道正確的通話次數?在這裏,我們必須考慮高度隨機性和可能使用洪水的事實。

回答

0

默認情況下TOSSIM模擬可能產生大量事件的低級別TinyOS組件。知道確切您需要呼叫t.runNextEvent()的次數的唯一方法是要知道這些層中到底發生了什麼。但這是a)可能不可能和b)不必要的。

我一直在使用以下方法:

  1. 估算的時間(以秒/分鐘/小時),我想我的模擬運行。這可能取決於項目要求或您正在模擬的代碼的性質。
  2. 使用t.ticksPerSecond()找出每個模擬秒有多少個刻度。請注意,我說模擬第二(Usefull paper on TOSSIM, see top of page 3)
  3. 調用t.runNextEvent()在一個循環內,迭代t.ticksPerSecond() * simulation_length次。雖然你的代碼在真實時間上運行的時間與使用TOSSIM模擬時間之間沒有直接的聯繫,但我發現使用實時時間間隔對於確定一個特定的模擬。

實施例:

simLength = 60*5 #run code for simulated 5 minutes 

while True: 
    t.runNextEvent() 
    if t.time() > simLength * t.ticksPerSecond(): 
     break