def basic_greedy():
start = 1
mindist = d_dict[(1,2)]
m = 0
while len(tour)!=size:
tour.append(start)
for k in range(len(cities)):
if cities[k] not in tour:
if d_dict[(start,cities[k])]<mindist:
mindist = d_dict[(start,cities[k])]
m = k
start = cities[m]
return tour
Это мой код для базового жадного поиска в Python. начать это начало город, тур список, который должен содержать города, чтобы они посетили, города список, содержащий все города от 1 до размера (1,2,3,4 ... ..12..размер), где размер - это число городов. d_dict - словарь, содержащий расстояния между всеми возможными парами городов. mindist и м лишь временные переменные, отслеживающие ближайших соседей и т.д.Basic Greedy Поиск в Python
Я ожидаю, что код начинается с города 1, перейти к ближайшему соседу, а затем в ближайший до каждого города покрыта раз. Я ожидаю, что выход этого кода будет чем-то вроде строк [1,5,3,8,4,6,2,7] для городов с 1 по 8 (некоторая комбинация посещений всех городов ровно один раз), но Я получаю [1,7,7,7,7,7,7,7]. Что не так?
Включается ли d_dict расстояния между городами и сам по себе? Похоже, вы можете оказаться в бесконечной строке 7, потому что 7 ближе всего к себе. Также вы, вероятно, захотите сбросить умника до начала следующего цикла; что произойдет, если я поеду city1 в city2 и это 1 единица расстояния, а затем, чтобы добраться откуда-нибудь из города2, будет> 1 единица расстояния. –
@AlbertRothman Только что сработал умник: D Я только что включил mindist = 99 в начале. Отдых такой, какой есть. Спасибо огромное! – singhuist
рад, что сработал. Чтобы сделать его еще лучше, вы можете искать словарь и находить наибольшее расстояние, а затем добавлять его к нему и использовать его как умника в начале каждого цикла; таким образом, ваше большое расстояние не жестко закодировано (так что вы можете добавить города, которые находятся дальше 99 и до сих пор получают решение). –