python - Puzzle 返回不支持的 TypeError

标签 python

我正在尝试编写一个 python A*。我相信我的遍历和我的启发式是正确的,但我得到了一个我不明白的错误。我无法更改 main测试功能,但其余部分可以操作。

拼图的代码是:

    def pop(self):
        pairs = list()
        for item in self.frontier:
            pairs.append((self.priority[item], item))
        (p, item) = min(pairs)
        self.frontier.remove(item)
        return item

运行代码时出现的错误是:

125
487
36 

Traceback (most recent call last):
  File "C:/Users/mchri/Desktop/AI/Homework/eightpuzzle/eightpuzzle.py", line 129, in <module>
    main()
  File "C:/Users/mchri/Desktop/AI/Homework/eightpuzzle/eightpuzzle.py", line 119, in main
    path = agent.astar(puzzle, goal)
  File "C:/Users/mchri/Desktop/AI/Homework/eightpuzzle/eightpuzzle.py", line 86, in astar
    parent = self.pop()
  File "C:/Users/mchri/Desktop/AI/Homework/eightpuzzle/eightpuzzle.py", line 106, in pop
    (p, item) = min(pairs)
TypeError: '<' not supported between instances of 'Puzzle' and 'Puzzle'

难题几乎自行解决,但开始错放数字,我不明白这是不受支持的 < 的结果实例。

最佳答案

您正在使用 min()从具有优先值和谜题的元组列表中获取最低优先值。一路min()有效的是,它比较元组中的两个值,因此它将首先按优先级值排序,然后按拼图排序。但是没有 < Puzzle 的运算符,因为一个谜题不少于另一个。

我假设您只想按优先级值排序,可以这样做:

(p, item) = min(pairs, key=lambda t: t[0])

如果你确实想按优先级值和拼图排序,你需要实现 lt一个eq Puzzle 运算符(参见 Brian Joseph 的回答)

关于python - Puzzle 返回不支持的 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58012572/

相关文章:

python - Pandas:如何查找来自另一列的一列的唯一元素数量?

python - 在 Python 中更改数据分辨率

python - 由于 ssl 错误,无法在 python 3.6 中 pip 安装包

python - 在 python 2 和 3 的 spyder 之间切换

python - Scrapy Mysql管道如果表没有AUTO_INCRMENT并且没有UNIQUE - 如何分配category_id?

python - KNN 模型的准确度分数(IRIS 数据)

python - 没有带有全局解释器的名为 flask.__main__ 的模块(可以使用 virtualenv)

Python 记录错误

python - Pandas 情节中的小刻度线

python - 通读非结构化 xls 文件