LEACH算法源代码(12页).doc
《LEACH算法源代码(12页).doc》由会员分享,可在线阅读,更多相关《LEACH算法源代码(12页).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-LEACH算法源代码-第 12 页 * Created on: 2011-4-17 * Author: syj#include #include #include #include bs.h#include node.h#include cl_msg_m.h#include leach.hDefine_Module( BS);/定义简单模块 (1) 直接或间接定义一个 CSimpleModule 的子类;/(2) 以 define_Module() 或 define_Module_Like()宏注册之;/*第一个执行的函数*/void BS:initialize() int i;cModul
2、e* parent = getParentModule();/消息参数的访问 调用cModule 的par()成员函数可以访问模块指针:/cPar& delayPar = par(delay);cPar类是一个存储值的对象,/它支持数据类型,指针值可以这样读:/周围的复合模块可以通过 parentModule()成员函数访问: cModule *parent = parentModule();/例如,父模块的参数像这样被访问: double timeout = parentModule()-par( tthis-myId = par(id);this-xpos = par(xpos);this
3、-ypos = par(ypos);this-nrNodes = parent-par(numNodes);/?this-nrGates = parent-par(numNodes);/?this-nrRounds = parent-par(rounds);this-deadNodes = 0;this-roundsDone = 0;this-oldDeadNodes = 0;this-nrStatusRec = 0;/?this-halfDeadCtr = 0;/?this-halfDead = 0;/?this-calledEnd = 0;/?this-P = 0.05;/?this-cH
4、eadsRound = 0;/每一轮簇头的个数this-roundEnergyLoss = 80001.0;/?/*记录图像用的变量的名字*加的*/roundVector.setName(round);/轮数deadNodesVector.setName(nodes dead);/死亡的节点olddeadNodesVector.setName(all dead);/所有死亡的节点nrheadVector.setName(headnumber);/簇头的个数tVector.setName(T);/运行的时间lastrecVector.setName(lastrec);/最后记录的消息cheadV
5、ector.setName(all head num);/所有的节点个数for (i = 0; i setGateSize(out, nrGates + 1);/需要 设置参数值或门向量大小?this-setGateSize(in, nrGates + 1);/创建消息cMessage* cmsg = new cMessage(init);/创建消息/cMessage是OMNET的一个中心类。CMessage和子类的对象可以模拟一些东西:事/件;消息;包;帧;蜂窝;网络中的位或信号传输;系统中的实体传输等/等。一个cMessage对象有许多属性: cmsg-setKind(SMSG_INIT)
6、;/初始化消息scheduleAt(simTime(), cmsg);/立即发送给基站自己evid:myId par(numNodes);ev BS numNodes is: numNodes par(trRange);ev BS trRange is: trRange n;/总的轮数是:for(i=1;igetName(),node)=0)/遍历节点,把模块指针填充nodePtr(Node*)mod)-myId=(Node*)mod;/Id标识,指针/*第六个执行的函数*/void BS:handleMessage(cMessage* msg) /消息处理函数if (msg-isSelfMe
7、ssage() /本身的身消息ev BS: got self message type getKind() getKind() = SMSG_INIT) ev initNodes(); else /其他消息no selfmessage来自节点的消息或者是簇头的消息if (ClusterMessage*) msg)-getProto() = CL_TOBS) /簇头到基站的消息(红色的)。ev status message getSrcAddress();/发送信息地址energy = (Status2BSMessage*) msg)-getEnergy();/发送信息能量cluster = (
8、Status2BSMessage*) msg)-getCluster();/簇status = (Status2BSMessage*) msg)-getStatus();/状态xpos = (Status2BSMessage*) msg)-getXpos();ypos = (Status2BSMessage*) msg)-getYpos(); if (energy halfDead = 0)this-halfDeadCtr+;/? advInfosender.id = sender;/信息表中的发射量发射地址advInfosender.energy = energy;advInfosender
9、.status = status;advInfosender.xpos = xpos;advInfosender.ypos = ypos;if (advInfosender.energy myStatus != STATUS_DEAD)this-deadNodes+;/消息的状态advInfosender.status = STATUS_DEAD;/此时的状态赋值为死亡status = STATUS_DEAD;(Node*) nodePtrsender)-myStatus = STATUS_DEAD;rating = energy - roundEnergyLoss;/发送功率advInfos
10、ender.rating = rating;ev BS received from sender status status rating: rating nrStatusRec+;/接收到的节点自加ev BS rec nrStatusRec nrNodes: nrNodes nrStatusRec = this-nrNodes - this-oldDeadNodes) /接收状态的节点=所有的节点已经死亡的节点this-oldDeadNodes += this-deadNodes;/已经死亡的节点数deadNodes为本轮死亡的节点ev nodes dead deadNodes all de
11、ad oldDeadNodes deadNodes);/记录当前死亡的节点*I*olddeadNodesVector.record(this-oldDeadNodes);/记录所有死亡的节点*I*this-deadRoundthis-roundsDone = this-deadNodes;if (this-halfDeadCtr (this-nrNodes / 10) & this-halfDead= 0) this-halfDead = roundsDone;ev calledEnd = 2;simulation.endRun();/f仿真结束?if (this-roundsDone nrR
12、ounds) /已经循环的次数=ev BS call compute bestn;/调用最优算法releaseConnections();/释放连接?computeBest();/用computerBdst算法选出簇头成簇resetStatus();/重设节点状态ev roundsDone+;/轮询的次数自加。evroundsDone:roundsDoneroundsDone this-nrRounds) this-calledEnd = 1;simulation.endRun();/仿真结束delete msg;void BS:resetStatus() /从置状态this-nrStatus
13、Rec = 0;/接收状态的节点this-deadNodes = 0;/死亡节点的数目/集中式的computer best/*#define FBEST8#define LBEST6void BS:computeBest() struct _adv bestFBEST;int i, j;double sum;double min = 999999999;int minPtr = 0;ev first 3 n;/put FBEST nodes in best,compute minfor (i = 0; i advInfoi + 2.rating advInfoi.rating;minPtr =
14、 i;besti.id = this-advInfoi + 2.id;besti.xpos = this-advInfoi + 2.xpos;besti.ypos = this-advInfoi + 2.ypos;besti.status = this-advInfoi + 2.status;besti.rating = this-advInfoi + 2.rating;ev Id: besti.id rating: besti.rating n;for (i = FBEST; i nrNodes; i+) if (this-advInfoi + 2.rating min&this-advIn
15、foi+2.status=STATUS_OK) min = this-advInfoi + 2.rating;bestminPtr.id = this-advInfoi + 2.id;bestminPtr.rating = this-advInfoi + 2.rating;bestminPtr.xpos = this-advInfoi + 2.xpos;bestminPtr.ypos = this-advInfoi + 2.ypos;/ recompute min and minPtrminPtr = 0;min = 9999999;for (j = 0; j FBEST; j+) if (b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LEACH 算法 源代码 12
限制150内