원본 경로와 대상 노드 (OD 쌍) 간의 최단 경로를 찾기 위해 무차별 방식을 적용하려고합니다. networkX를 사용하여 네트워크를 만들고 순열을 호출 한 다음 무차별 대입을 적용합니다.
네트워크의 모든 노드가 다른 모든 노드와 연결되어 있으면이 작업이 정상입니다. 그러나 일부 또는 많은 가장자리가 없으면이 방법은 효과가 없을 것입니다. 맞도록, 나는 불법적 인 가장자리를 포함하는 모든 permuations을 삭제해야합니다. 예를 들어 퍼뮤 테이션 세트 (파이썬)에서 불법 에지 제거
[(1,2,3,4,5), (1,2,4,3,5)]
및에 있다면 내 네트워크 노드 2와 3 사이의 가장자리가 존재하지 않는 경우 언급 된 목록의 첫 번째 튜플을 삭제해야합니다.
첫 번째 질문 : 우선 순열을 만들고 거기에 가서 불법적 인 가장자리를 포함하는 것을 삭제하는 것이 효율적인 방법입니까? 만약 내가 뭘해야하지?
두 번째 질문 : 그래, 내 전략은 처음 "G.has_edge (U, V)"명령 networkx에서 모든 불법 가장자리를 포함하는 튜플의 목록을 만든 다음 순열로가는 경우 찾고 있다는 것입니다 경우 그런 가장자리는 존재하고, 그 순열을 삭제한다. 좋은 전략입니까? 그렇지 않다면, 당신은 또 무엇을 제안합니다.
감사합니다 :) 이
, 나는 OD 쌍 사이에 발생하는 모든 노드를 방문해야한다는 말을 잊어 버렸습니다. – Achter
저는 예제를 이해하지 못합니다. 순열 튜플의 의미와 그 튜플로 무엇을하려고합니까? – TurtleIzzy
실제로이 코드 다음입니다 : 각 노드가 연결되어 있음을 알 수있다 다음 http://codereview.stackexchange.com/questions/81865/travelling-salesman-using-brute-force-and-heuristics 모든 다른 것들과 많은 순열이 존재하지만 도로 네트워크에서는 많은 노드가 서로 직접 연결되지 않습니다. 순열 튜플이 가능한 경로입니다. 첫 번째 경로는 노드 1에서 시작하여 2 - 3 - 4로 이동하여 5로 끝납니다.하지만 노드 2와 3은 네트워크에 직접 연결되어 있지 않으므로 조합은 불법이며 삭제해야합니다. – Achter