我注意到函数t.runNextEvent()在模拟时有很大的影响。为了确保所有事件都是模拟的,我会多次调用它。在某些情况下(特别是当我使用洪水来传播信息时)这还不够。
因此,如果这个数字太大,我必须等待更多才能获得结果。如果调用次数太小,则模拟变得无用。
有什么方法可以知道正确的通话次数吗?在这里,我们必须考虑高度随机性和可能使用洪水的事实。
答案 0 :(得分:0)
默认情况下,TOSSIM会模拟可能会产生大量事件的低级别TinyOS组件。了解确切次需要调用t.runNextEvent()
的唯一方法是知道这些层中究竟发生了什么。但这是a)可能是不可能的,而b)是不必要的。
我一直在使用以下方法:
t.ticksPerSecond()
找出每个模拟秒数有多少刻度。请注意,我说模拟第二个 (Usefull paper on TOSSIM, see top of page 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