йена#
- scipy.sparse.csgraph.йена(csgraph, источник, сток, K, *, направленный=True, return_predecessors=False, невзвешенный=False)#
Алгоритм K-кратчайших путей Йена на ориентированном или неориентированном графе.
Добавлено в версии 1.14.0.
- Параметры:
- csgrapharray_like, или разреженный массив или матрица, 2 измерения
Массив расстояний размером N x N, представляющий входной граф.
- источникint
Индекс начального узла для путей.
- стокint
Индекс конечного узла для путей.
- Kint
Количество кратчайших путей для поиска.
- направленныйbool, необязательно
Если
True(по умолчанию), затем найти кратчайший путь на направленном графе: перемещаться только от точкиiдо точкиjвдоль путейcsgraph[i, j]. Если False, то найти кратчайший путь на неориентированном графе: алгоритм может перейти от точки i к j вдольcsgraph[i, j]илиcsgraph[j, i].- return_predecessorsbool, необязательно
Если
True, вернуть размер(M, N)матрица предшественников. По умолчанию:False.- невзвешенныйbool, необязательно
Если
True, затем найти невзвешенные расстояния. То есть вместо нахождения пути между каждой точкой, минимизирующего сумму весов, найти путь, минимизирующий количество рёбер. По умолчанию:False.
- Возвращает:
- dist_arrayndarray
Массив размера
Mкратчайших расстояний между исходным и конечным узлами.dist_array[i]дает i-е кратчайшее расстояние от источника к стоку вдоль графа.M— это количество найденных кратчайших путей, которое меньше или равно K.- предшественникиndarray
Возвращается только если
return_predecessors == True. Матрица предшественников размером M x N, которую можно использовать для восстановления кратчайших путей.Mэто количество найденных кратчайших путей, которое меньше или равно K. Строкаiматрицы-предшественника содержит информацию оi-й кратчайший путь от источника к стоку: каждая записьpredecessors[i, j]возвращает индекс предыдущего узла в пути от источника к узлуj. Если путь не проходит через узелj, затемpredecessors[i, j] = -9999.
- Вызывает:
- NegativeCycleError:
Если в графе есть отрицательные циклы
Примечания
Алгоритм Йена — это алгоритм поиска в графе, который находит кратчайшие пути из одной вершины K-кратчайшие пути без циклов для графа с неотрицательной стоимостью рёбер. Алгоритм был опубликован Джином Й. Йеном в 1971 году и использует любой алгоритм поиска кратчайшего пути для нахождения наилучшего пути, затем продолжает находить
K - 1отклонения лучшего пути.Алгоритм основан на алгоритме Дейкстры для нахождения каждого кратчайшего пути. В случае наличия отрицательных рёбер в графе применяется алгоритм Джонсона.
Если возможны несколько допустимых решений, вывод может варьироваться в зависимости от версии SciPy и Python.
Ссылки
Примеры
>>> from scipy.sparse import csr_array >>> from scipy.sparse.csgraph import yen
>>> graph = [ ... [0, 1, 2, 0], ... [0, 0, 0, 1], ... [2, 0, 0, 3], ... [0, 0, 0, 0] ... ] >>> graph = csr_array(graph) >>> print(graph)
with 5 stored elements and shape (4, 4)> Coords Values (0, 1) 1 (0, 2) 2 (1, 3) 1 (2, 0) 2 (2, 3) 3 >>> dist_array, predecessors = yen(csgraph=graph, source=0, sink=3, K=2, ... directed=False, return_predecessors=True) >>> dist_array array([2., 5.]) >>> predecessors array([[-9999, 0, -9999, 1], [-9999, -9999, 0, 2]], dtype=int32)