MDS 定位算法实现
问题:
在二维情况下,根据给定的整个网络的邻接矩阵和其中任意三个信标节点的真实坐标预测整个网络的所有节点的真实坐标.
算法流程:
- 邻接矩阵通过dijkstra(迪杰斯特拉)算法得到最短距离矩阵
- 距离矩阵作为MDS算法的输入,输出预测节点的相对坐标
- 根据预测相对节点的坐标通过线性变换得到绝对坐标
以上是最简单的MDS方法配合信标节点共同实现定位的算法,命名为 MDSMAP(C).
在步骤2和步骤3之间可以根据预测的相对坐标节点之间的距离矩阵和原始的最短距离矩阵的均方差为最目标函数,通过最小均方差函数,调整预测的相对坐标,叫做refinement. 添加refinement过程后的算法叫做 MDSMAP(C,R).
代码实现
- 抽象类
MDSABC
定义接口方法- 主要抽象属性
- 预测出的所有节点坐标
predicted_coors
- 预测出的误差
errors
- …
- 预测出的所有节点坐标
- 抽象方法
- 初始化方法
__init__
- 计算预测坐标方法
compute_predicted_coors
- 邻接矩阵转换为距离矩阵
connective_matrix_to_distance_matrix
- MDS 算法计算相对坐标
mds
- *根据以算出的预测坐标得出的距离矩阵和原始距离矩阵相比较,对预测坐标进行修正.
refine
注: MDSMAPC 不需要实现该方法 . - 相对坐标通过信标节点转化为绝对坐标
relative_to_absolute
- 邻接矩阵转换为距离矩阵
- 初始化方法
- 主要抽象属性
- 父类
MDSBASE
实现共用的抽象类方法- 实现所有方法
- 子类设有
MDSMAPC
MDSMAPCR
子类继承父类.MDSMAPC
继承除refine
方法之外的所有方法MDSMAPCR
继承所有方法.
代码展示
看文件