如何在 unetstack 中实现水下网络的能量模型?

How to implement energy model for underwater networks in unetstack?

我想在 unetstack 中实现能量模型,我知道这是理论,但不知道如何在 unetstack 中实现它,因为我还在学习它。请提供其中涉及的步骤。基本代码框架也会有所帮助。

预期输出: 我期望每个节点在 transmitting/receiving 数据包之后的输出,它打印出剩余的能量。

跟踪能量最自然的地方是在 PHYSICAL (phy) 代理中。假设您在 UnetSim 中使用 HalfDuplexModem phy,我会将其子类化并通过覆盖 send() 方法来监视 TxFrameNtfRxFrameNtf。然后我会添加相关的 energy 属性来跟踪能源使用情况。

示例 Groovy 代码:

import org.arl.fjage.Message
import org.arl.unet.sim.HalfDuplexModem

class MyHalfDuplexModem extends HalfDuplexModem {

  float energy = 1000   // change to whatever initial energy your node has

  @Override
  boolean send(Message m) {
    if (m instanceof TxFrameNtf) energy -= 10  // change according to your model
    if (m instanceof RxFrameNtf) energy -= 1   // change according to your model
    return super.send(m)
  }

}

最后,在模拟DSL中,您可以将默认的HalfDuplexModem替换为您自定义的版本:

modem.model = MyHalfDuplexModem