基于范围的无线传感器网络(WSN)本地化的Java观察者模式

时间:2014-11-30 10:36:46

标签: java algorithm design-patterns

我正在构建基于范围的无线传感器网络本地化(WSN)的模拟。基于范围的WSN由测量距离的传感器组成。在这个阶段,传感器的技术细节并不重要。

传感器有两种状态:本地化未本地化

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

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

当且仅当传感器可以使用距离三个局部邻居的距离来确定其位置时,才能对传感器进行本地化。

我有两个问题:

1)我应该将Sensor类实现为

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

enter image description here

1 个答案:

答案 0 :(得分:1)

我能想到两件事:

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

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

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