В формуле расстояния для TSP не возвращается число

Я пытаюсь создать базовое решение TSP на Python, и у меня возникает небольшая проблема при попытке вычислить общее расстояние между каждым порядком городов. Города создаются и хранятся в виде случайно сгенерированного 2-мерного списка; внутренние списки, каждый из которых содержит значения x и y, и внешний список, содержащий внутренние списки. У меня есть успешная формула расстояния, которая берет 2 из этих внутренних списков и находит расстояние между ними с помощью:

def distance(pt1, pt2):
    return np.sqrt((pt2[0]-pt1[0]) ^ 2 + (pt2[1]-pt1[1]) ^ 2)

Что возвращало правильный ответ в тестовых случаях. Однако у меня также есть функция, которую нужно взять в список (предназначенный для использования с внешним списком) и вычислить общее расстояние между всеми точками, используя указанную выше функцию в качестве помощника. Эта функция выглядит следующим образом:

def distTotal(points):
    total = 0
    for i in range(0, numCities-1):
        total += distance(points[i], points[i+1])

    return total

И конкретный пример его вызова приведен ниже:

print(distTotal(cities))

Где «города» - это случайно сгенерированный двумерный список. Однако при тестировании этой функции она каждый раз возвращала «nan» («не число»). При отладке кажется, что первая попытка запустить функцию расстояния с помощью функции distTotal происходит тогда, когда значение «total» становится равным nan.

Есть идеи, что я здесь сделал не так? Спасибо


person Jordan Lejman    schedule 26.11.2019    source источник


Ответы (1)


Оператор ^ - это оператор XOR. Вместо этого используйте оператор мощности **:

def distance(pt1, pt2):
    return np.sqrt((pt2[0]-pt1[0]) ** 2 + (pt2[1]-pt1[1]) ** 2)
person Gilles-Philippe Paillé    schedule 26.11.2019