我正在建立一个基于距离的无线传感器网络定位(WSN)仿真。基于距离的无线传感器网络由测量距离的传感器组成.在这个阶段,传感器的技术细节并不重要。
传感器有两种状态:局部性和非局部性。
我需要实现一个观察员模式,原因如下:
传感器具有相邻的,即在其范围内的其他传感器。每当它被本地化时,它就必须向它的邻居广播它的位置。注意,这是一个递归操作。如果它的任何邻居是本地化的,它也会广播它的位置。
一个传感器可以本地化当且仅当它可以确定它的位置使用距离三个本地化邻居。
我有两个问题:
1)我是否应该将Sensor类实现为
public class Sensor extends Observable implements Observer2)如果是这样,如何模拟boradcast()函数?
到目前为止,我已经尝试过:
void broadcastPosition()
{
for(Sensor s : neighbors)
s.neighborLocalized(this);
}
void neighborLocalized(Sensor s)
{
if(!neighborList.contains(s))
throw new IllegalArgumentException("This is not a neighbor");
localizedNeighbors.add(s);
if(localizeSelf()) \\ returns true if the sensor is able to localize itself
broadcastPosition();
}但是,这种方法失败了,因为它进入了一个无限循环。
也许我应该使用wait()和notify()。
总之,我有一个设计问题,我寻求您的帮助,以解决这个问题。
我在Aspnes等人的论文中给出了算法的截图。2008年

发布于 2014-11-30 14:28:21
我能想到两件事:
给你所有的感应器一个身份证,并把它放在博罗阿德广播信息。当您收到消息时,请检查发件人id,如果它是您自己的id,则忽略该消息。
或
2-在传感器类中保留一个成员,类似bool mAlreadyLocalized。第一次本地化时,将其设置为真并广播。下次收到消息时,检查是否已经在本地化时广播,如果已经广播,则不要再次广播。
if(localizeSelf() && !mAlreadyLocalized)
broadcastPosition();https://stackoverflow.com/questions/27212307
复制相似问题