저는 파이썬에서 초보자입니다. 현재 경로에 새 노드를 삽입하여 경로가 짧아 지는지 여부를 확인하려고합니다. 그러나 내 코드가 잘 돌아 가지 않으면 내게 실수를 보여주십시오. 단계는 다음과 같습니다. 1. 임의 하위 집합 만들기 (예 : 0-2-0) 2. 방문하지 않은 노드를 임의로 가져 와서 현재 경로의 각 노드 쌍에서이 노드를 확인합니다. 노드가 더 짧은 요구 사항을 만족하면 현재 노드에 삽입합니다 (예 : 0-4-2-0). 3. 경로에 모든 노드가 삽입 될 때까지 계속하십시오. 그대로삽입 알고리즘이 모든 노드를 삽입 할 수 없습니다
import random
distMatrix = [
[100, 14, 20, 10, 35, 18, 5],
[6, 100, 7, 35, 17, 9, 24],
[8, 35, 100, 36, 27, 3, 15],
[21, 7, 12, 100, 7, 4, 26],
[33, 25, 6, 18, 100, 19, 11],
[6, 2, 22, 30, 9, 100, 8],
[24, 3, 12, 5,17, 16, 100],
]
def get_total_distance(route,d):
total = 0
for i in range (len(route)-1):
pre = route[i]
succ = route[i+1]
total += d[pre][succ]
return total
def insertion(d):
numNodes = len(d)
notVisited = list(range(1, numNodes))
first_random_node = random.choice(notVisited)
route = [0]
route.append(first_random_node)
notVisited.remove(first_random_node)
route.append(0) #create first subtour
print("1st",route)
location = 0
while len(notVisited) != 0:
for j in notVisited:
for i in range (len(route)-1):
pre = route[i]
succ = route[i+1]
check_route = d[pre][j] + d[j][succ]
current_distance = d[pre][succ]
if check_route <= current_distance:
print(j)
route.insert(i + 1, j)
notVisited.remove(j)
print("2nd", route)
return route
solution = insertion(distMatrix)
print("The solution for the route is:",solution)
print("The total distance is:", get_total_distance(solution,distMatrix))
StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. MCVE 코드를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. 게시 된 코드를 텍스트 파일에 붙여넣고 설명한 문제를 재현 할 수 있어야합니다. "내 코드가 제대로 실행되지 않습니다"는 문제 사양이 아닙니다. – Prune
@roganjosh 그건 맞지 않아. 이것은 Hausdorff 공간이 아닌 일반적인 그래프입니다. 삼각형 부등식은 유지할 필요가 없습니다. AB + BC
Prune
물론 있습니다. 실제로 배송 세계는 양방향 여행이 어떤 의미에서는 직접적인 경로보다 저렴 한 경우가 많습니다. FedEx는 직접 운송하는 대신 Memphis로 모든 것을 보내고 "출발"항공편에서부터 "도착"항공편으로 패키지를 옮기고 출발 한 모든 비행기를 다시 보냅니다. 실제로, 당신의 차량 배정 문제는 더 짧은 여행 시간을위한 더 긴 경로 떨어져 무역하는 그 케이스가 있어야한다. – Prune