選択ノード群の中心ノード

center_node.zip

指定したノード群において、中心となるノードはどのように考えればよいでしょうか。指定ノード群からの分散が最も小さくなるノードを探す場合 mini deviation と 指定ノード群からの距離の合計が基も小さくなる場合 mini-sum のサンプルです。入力点群の最寄が指定ノードとなります。入力ノード群を動かして、どちらが中心ノードに使えそうか試してみてください。

分散の小さいノードを探す

#find the node which is 
smalldev = sys.float_info.max
centernode = None
for n in g.nodes:
    g.DijkstraFast(n)
    sum = 0
    for ng in nodesToCome:
        sum += ng.cost
    avg = sum / len(nodesToCome)
    dev = 0
    for ng in nodesToCome:
        dev += math.pow(ng.cost-avg,2)
    dev /= len(nodesToCome)
    if smalldev > dev:
        smalldev = dev
        centernode = n

距離の合計が小さいノードを探す

#find the minisum node
minisum = sys.float_info.max
minisumnode = None
for n in g.nodes:
    g.DijkstraFast(n)
    sum = 0
    for ng in nodesToCome:
        sum += ng.cost    
    if minisum > sum:
        minisum = sum
        minisumnode = n

Comments are closed.