Как протестировать алгоритм 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}) но это сгенерировало нехешируемый словарь, и я не мог его использовать.

Есть ли у кого-нибудь здесь представление об этих нечленораздельных словарях или о другом способе сделать это?

0 ответов

Другие вопросы по тегам