Как мне создать свой объект, чтобы он хорошо работал с networkx? - PullRequest
2 голосов
/ 19 января 2011

Я пытаюсь разработать проект, который будет использовать данные глобального позиционирования, такие как названия городов и штатов, а также широты и местоположения. У меня также будут расстояния между каждой парой городов. Я хочу сделать граф со всей этой информацией и манипулировать им для выполнения некоторых алгоритмов графа. Я решил иметь городские объекты, которые содержат данные каждого местоположения. Теперь я должен иметь хэш-функцию для дифференциации объектов? И как мне обращаться с алгоритмами графа, которые объединяют узлы и удаляют ребра?

def minCut(self):
    """Returns the lowest-cost set of edges that will disconnect a graph"""

    smcut = (float('infinity'), None)
    cities = self.__selectedcities[:]
    edges = self.__selectededges[:]
    g = self.__makeGRAPH(cities, edges)
    if not nx.is_connected(g):
        print("The graph is already diconnected!")
        return
    while len(g.nodes()) >1:
        stphasecut = self.mincutphase(g)
        if stphasecut[2] < smcut:
            smcut = (stphasecut[2], None) 
        self.__merge(g, stphasecut[0], stphasecut[1])
    print("Weight of the min-cut:  "+str(smcut[1]))

Это в очень плохой форме. Я переписываю свою оригинальную программу, но этот подход я использовал в предыдущей версии.

Ответы [ 3 ]

1 голос
/ 19 января 2011

В зависимости от того, какую версию networkx вы установили, доступна встроенная реализация min_cut.

У меня был установлен пакет 1.0RC1, который был недоступен ... но я обновился до версии 1.4, и min_cut там.

Вот (глупый) пример:

import networkx as nx
g = nx.DiGraph()
g.add_nodes_from(['London', 'Boston', 'NY', 'Dallas'])
g.add_edge('NY', 'Boston', capacity)
g.add_edge('Dallas', 'Boston')
g.add_edge('Dallas', 'London')
# add capacity to existing edge
g.edge['Dallas']['London']['capacity'] = 2
# create edge with capacity attribute
g.add_edge('NY', 'London', capacity=3)
print nx.min_cut(g, 'NY', 'London')
0 голосов
/ 19 января 2011

Когда вы объединяете узлы, вы можете создавать новые узлы и хэшировать эти новые узлы в список городов, которые были объединены. Например, в приведенном выше коде вы можете назвать новый узел len (g) и хэшировать его как stphasecut [0] + stphasecut [1] # при условии, что stphasecut [1] и [2] являются списками.

0 голосов
/ 19 января 2011

Вам не нужно создавать хеш-функцию для городских объектов, вы можете передавать городской объект непосредственно в Networkx - из учебника «узлами может быть любой хешируемый объект, например текстовая строка, изображение, объект XML,другой График, настраиваемый объект узла и т. д. "

Вы можете перебрать список городов и добавить их в качестве узлов, а затем перебрать информацию о расстоянии, чтобы построить график.на учебнике?http://networkx.lanl.gov/tutorial/tutorial.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...