基于距离的无线传感器网络(WSN)定位的Java观察者模式

基于距离的无线传感器网络(WSN)定位的Java观察者模式,java,algorithm,design-patterns,Java,Algorithm,Design Patterns,我正在构建一个基于距离的无线传感器网络定位(WSN)的仿真。基于距离的无线传感器网络由测量距离的传感器组成。在此阶段,传感器的技术细节并不重要 传感器有两种状态:局部和非局部 我需要实现一个观察者模式,原因如下: 传感器有邻居,即其范围内的其他传感器。无论何时它被本地化,它都必须向邻国广播它的位置。 请注意,这是一个递归操作。 如果它的任何邻居被本地化,它也会广播它的位置 当且仅当传感器能够利用与三个局部邻居的距离确定其位置时,才可以对传感器进行局部定位 我有两个问题: 1) 我是否应该将传感器

我正在构建一个基于距离的无线传感器网络定位(WSN)的仿真。基于距离的无线传感器网络由测量距离的传感器组成。在此阶段,传感器的技术细节并不重要

传感器有两种状态:局部和非局部

我需要实现一个观察者模式,原因如下:

传感器有邻居,即其范围内的其他传感器。无论何时它被本地化,它都必须向邻国广播它的位置。 请注意,这是一个递归操作。 如果它的任何邻居被本地化,它也会广播它的位置

当且仅当传感器能够利用与三个局部邻居的距离确定其位置时,才可以对传感器进行局部定位

我有两个问题:

1) 我是否应该将
传感器
类作为

public class Sensor extends Observable implements Observer
2) 如果是,如何模拟
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年论文中提出的算法的屏幕截图


我能想到两件事:

1-为所有传感器提供一个id,并将其放入boroadcast消息中。收到邮件时,请检查发件人id,如果是您自己的id,则忽略邮件

2-将传感器类中的一个成员保持为bool mAlreadyLocalized。第一次本地化时,将其设置为true并广播。下次收到消息时,请检查本地化后是否已广播,如果已广播,请不要再次广播

if(localizeSelf() && !mAlreadyLocalized) 
        broadcastPosition();

传感器将自身定位并广播其位置并接收自己的消息,而在邻域定位方法中,再次广播消息,此时您处于循环中。“我做对了吗?”布里夫布拉夫说得很对。你完全正确。