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以内了,但还需要再模拟几次,看看是否每次都行。


posted @ 2012-02-14 17:13  Reaver21  阅读(582)  评论(0编辑  收藏  举报