#python #hungarian-algorithm
#python #венгерский-алгоритм
Вопрос:
Я пытаюсь реализовать венгерский алгоритм в своем проекте, но я не понимаю, почему он дает бесконечный цикл…Я пробовал с другим бибартовым графом, и он работает. Поэтому я хочу знать, что не так с моим графиком G
from hungarian_algorithm import algorithm
G={
'agt2': {'Commentaire':200,'PhotoProfil': 8, 'PhotoSupp': 10, 'Prenom': 0},
'coco': {'Commentaire': 300, 'PhotoProfil': 200, 'PhotoSupp': 300, 'Prenom': 300}
}
res=algorithm.find_matching(G,matching_type='max',return_type='list')
print(res)
Комментарии:
1. Это объект hungarian_algorithm
2. Я не знаком с этим конкретным пакетом, это может быть ошибка в этой реализации. Возможно, вы могли бы использовать более устоявшуюся реализацию, например
scipy.optimize.linear_sum_assignment
?3. Вы можете попробовать свой график в этой онлайн-версии алгоритма, чтобы доказать, что это не ваш график: венгерский алгоритм . Он также предоставляет пошаговое описание решения.
4. Проблема не в моем графике! Я буду использовать scipy.optimize.linear_sum_assignment. Спасибо
5. @TojoRandrianarimanana SciPy наконец-то сработал для вас? Я нахожусь в очень похожем положении, и я понял, что библиотека венгерского алгоритма не работает для некоторых входных графиков. Я тоже хочу переключиться на SciPy, поэтому просто хотел спросить, получилось ли у вас, чтобы он работал на вас
Ответ №1:
График в порядке, вероятно, это ошибка в реализации этого пакета. Как указано в моем комментарии, вместо этого вы можете использовать scipy.optimize.linear_sum_assignment
from SciPy.
Например
import numpy as np
from scipy.optimize import linear_sum_assignment
# solve the assignment problem
G = np.array([[200, 8, 10, 0],
[300, 200, 300, 300]])
row_indices, col_indices = linear_sum_assignment(G, maximize=True)
# print results
row_names = ['agt2', 'coco']
col_names = ['Commentaire', 'PhotoProfil', 'PhotoSupp', 'Prenom']
edges = [((row_names[r], col_names[c]), G[r, c]) for r, c in zip(row_indices, col_indices)]
print(edges)
С принтами
[(('agt2', 'Commentaire'), 200), (('coco', 'PhotoSupp'), 300)]
Комментарии:
1. Хорошо, извините меня, я новый участник: D