我有一个松散连接的图。对于该图中的每条边,我知道节点v和w在位置p(v)和p(w ) 之间的近似距离 d(v,w )作为R3 中的向量,而不仅仅是欧几里得距离。误差应该很小(假设 < 3%)并且第一个节点位于 <0,0,0>。
如果根本没有错误,我可以这样计算节点位置:
set p(first_node) = <0,0,0>
calculate_position(first_node)
calculate_position(v):
for (v,w) in Edges:
if p(w) is not set:
set p(w) = p(v) + d(v,w)
calculate_position(w)
for (u,v) in Edges:
if p(u) is not set:
set p(u) = p(v) - d(u,v)
calculate_position(u)
距离的误差不相等。但是为了简单起见,假设相对误差(d(v,w)-d'(v,w))/E(v,w)是 N(0,1)-正态分布的。我想最小化平方误差的总和
sum( ((p(v)-p(w)) - d(v,w) )^2/E(v,w)^2 ) for all edges
该图可能具有中等数量的节点(> 100),但节点之间只有一些连接并且已被“预过滤”(如果这些子图之间只有一个连接,则拆分为子图)。
我尝试了一个简单的“物理模型”,钩子很低,但速度慢且不稳定。这类问题有更好的算法或启发式方法吗?