Как протестировать алгоритм BFS для поиска маршрута в коде AIMA?
Я хочу протестировать несколько лучших алгоритмов первого поиска из кода AIMA для поиска маршрутов. Класс карты определяется в книге следующим образом:
class Map:
def __init__(self, links, locations=None, directed=False):
if not hasattr(links, 'items'): # Distances are 1 by default
links = {link: 1 for link in links}
if not directed:
for (v1, v2) in list(links):
links[v2, v1] = links[v1, v2]
self.distances = links
self.neighbors = multimap(links)
self.locations = locations or defaultdict(lambda: (0, 0))
def multimap(pairs) -> dict:
result = defaultdict(list)
for key, val in pairs:
result[key].append(val)
return result
эта карта создана в книге AIMA как:
romaina = Map(
{('O', 'Z'): 71,
('O', 'S'): 151,
('A', 'Z'): 75,
('A', 'S'): 140,
('A', 'T'): 118,
('I', 'V'): 92,
('I', 'N'): 87,
('P', 'R'): 97})
Теперь я хочу импортировать другую карту, указанную во входном файле. Формат входного файла имеет два города, определенные как числа и расстояние между каждой парой, например:
151 155 96.8
Я создал экземпляр Map, а затем прочитал в него города из файла:
country_road = Map({})
with open(inputfile) as f:
for line in f:
(key1, key2, val) = line.split()
country_road.distances[( "%3i"%int(key1), "%3i"%int(key2) )] = float(val)
И создал часть соседей отдельно, используя:
country_road.neighbors = multimap(country_road.distances)
Таким образом, не были созданы все
links[v2,v1]
правильно.
Я попытался создать еще один словарь, названный ссылками, и инициализировал карту, используя его, например
country_road = Map({links})
но это сгенерировало нехешируемый словарь, и я не мог его использовать.
Есть ли у кого-нибудь здесь представление об этих нечленораздельных словарях или о другом способе сделать это?