Что я должен передать в качестве исходного параметра методу find_negative_cycle()
модуля python networkx? В документация указано передать список, но когда я пытаюсь это сделать, я получаю сообщение об ошибке:
TypeError: unhashable type: 'list'
Затем я получаю сообщение об ошибке, что кортеж не является узлом в моем графике.
в исходном коде источник используется для создания словаря: pred = {source: []}
, поэтому вы получаете нерешаемую проблему
Я тоже это заметил. Это ошибка в коде или что я могу передать, чтобы функция все еще выполняла свою работу?
должен ли источник быть только одним узлом?
Можете ли вы попробовать список из списка, например [[node1],[node2],...]
Список списка тоже не работает, к сожалению. Я думаю, что я должен передать несколько узлов. Я не получил TypeError, когда передал одно целое число, но функция тоже не работала правильно.
Я предлагаю вам поднять вопрос в сетиx git github.com/networkx
Я сделаю так. Спасибо за ваши советы.
вы также можете попробовать изменить саму функцию
https://github.com/networkx/networkx/blob/main/networkx/algorithms/shortest_paths/weighted.py#L2191
в find_negative_cycle
строке 2191
pred = {source: []}
v = _inner_bellman_ford(G, [source], weight, pred=pred)
с
pred = {v: [] for v in sources}
v = _inner_bellman_ford(G, source, weight, pred=pred)
если source
это список.
Я думаю, что об этой проблеме следует сообщить
Можете ли вы попробовать это:
def get_sequence_upto(x):
for i in range(x):
yield i
source = get_sequence_upto([1,2,3])
find_negative_cycle(G, source )
где [1,2,3] должен быть вашим списком источников
К сожалению, не работает. Затем он ищет генератор в графе, и этот узел явно не существует.
В документации была ошибка. Это должно быть исправлено в версии 2.8.1. https://github.com/networkx/networkx/issues/5610#event-6575071112
вы можете попробовать вместо этого отправить кортеж (ваш список)