leach.out中节点总消耗能量大于200J的一个修改方法(摘)
对于leach中节点死亡后继续发消息,并且消耗能量的问题,在网上找了一些方法,暂时记录于此,方便查阅。
方法尚未测试,感谢原作者~
补充一句,我的ns是2.35.
原出处http://www.linuxquestions.org/questions/linux-newbie-8/running-leach-on-ns2-34-a-860250/
1. deepa_2111提到:
In \mac\Wireless-Phy.cc
if (energy_)
{
if(alive_ != 0) // Deepa
{ //Deepa
if (energy_->remove(pktEnergy(Pt_, PXcvr_, ch->size())) != 0)
{
printf("alive = 0\n");
alive_ = 0;
}
} // Deepa
}
i.e., add the <code> if(alive_ != 0) </code> wherever the remove energy function is called,
就是说把后面有// Deepa注释的代码加进来,不论后面的 if (energy_->remove……那一段代码在什么位置。
and in mit\rca\energy.cc :
int EnergyResource::remove(double amount)
{
double new_level = energy_level_ - amount;
if(new_level >= 0 )
{
energy_level_ = new_level;
expended_ += amount;
} // Deepa
check if the new_level is greater or equal to 0. if it is not, energy can‘t be removed
添了if一句后,if一句是用来检查new_level的值是否大于等于0,如果不是,这个能量值就不能被移除。
今个测试了一下,修改了这两段之后。直接./test,发现还是不行,最后还是高。然后重新编译了下ns。
$make clean
$make
再去跑leach的测试程序./test
发现最后的能量约是199.665J(当然后面还有很多位,省略了)。
这次结果是保持在200J以内了,但还需要再模拟几次,看看是否每次都行。