微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 AIMA 代码中测试用于路由查找的 BFS 算法?

如何解决如何在 AIMA 代码中测试用于路由查找的 BFS 算法?

我想从 aimA 代码中测试一些用于查找路线的最佳优先搜索算法。 map类在书中定义如下:

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,'S'): 140,'T'): 118,('I','V'):  92,'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]

我尝试创建另一个名为 links 的字典并使用它初始化地图,例如 country_road = Map({links}) 但这生成了不可哈希的字典,我无法使用它。

这里有人知道这个不可哈希的字典或其他方法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。