Параметры networkx find_negative_cycle

Что я должен передать в качестве исходного параметра методу find_negative_cycle() модуля python networkx? В документация указано передать список, но когда я пытаюсь это сделать, я получаю сообщение об ошибке:

TypeError: unhashable type: 'list'

вы можете попробовать вместо этого отправить кортеж (ваш список)

ymmx 06.05.2022 16:06

Затем я получаю сообщение об ошибке, что кортеж не является узлом в моем графике.

Bumblebee18 06.05.2022 16:21

в исходном коде источник используется для создания словаря: pred = {source: []}, поэтому вы получаете нерешаемую проблему

ymmx 06.05.2022 16:26

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

Bumblebee18 06.05.2022 16:28

должен ли источник быть только одним узлом?

ymmx 06.05.2022 16:29

Можете ли вы попробовать список из списка, например [[node1],[node2],...]

ymmx 06.05.2022 16:32

Список списка тоже не работает, к сожалению. Я думаю, что я должен передать несколько узлов. Я не получил TypeError, когда передал одно целое число, но функция тоже не работала правильно.

Bumblebee18 06.05.2022 16:33

Я предлагаю вам поднять вопрос в сетиx git github.com/networkx

ymmx 06.05.2022 16:37

Я сделаю так. Спасибо за ваши советы.

Bumblebee18 06.05.2022 16:48
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
9
20
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вы также можете попробовать изменить саму функцию

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] должен быть вашим списком источников

К сожалению, не работает. Затем он ищет генератор в графе, и этот узел явно не существует.

Bumblebee18 06.05.2022 16:58
Ответ принят как подходящий

В документации была ошибка. Это должно быть исправлено в версии 2.8.1. https://github.com/networkx/networkx/issues/5610#event-6575071112

Другие вопросы по теме