在我尝试实现 A* 搜索的简单版本时,我试图将以下内容排入优先级队列:
- 优先级:从源到当前元素的启发式值和成本的总和
- 队列节点:具有数据成员点和成本的类队列节点的对象代码如下所示:'''s = queueNode(start, 0) q.put((s.dist + heuristics[s.pt[0]] [s.pt[1]],s)) # 使源单元入队'''
但是,它给出了以下错误: in _put heappush(self.queue, item) TypeError: '<' not supported between 'queueNode' and 'queueNode'
这是类队列节点的代码
class queueNode:
def __init__(self, pt, dist: int):
self.pt = pt # The cordinates of the cell
self.dist = dist # Cell's distance from the source
更新: 我试图通过这两个实现使类具有可比性
第一的
class queueNode:
def __init__(self, pt, dist):
self.pt = pt # The cordinates of the cell
self.dist = dist # Cell's distance from the source
def __it__(self,other):
return self.dist < other.dist
第二
class queueNode:
def __init__(self, pt, dist):
self.pt = pt # The cordinates of the cell
self.dist = dist # Cell's distance from the source
def __it__(self,other):
return id(self) < id(other)
它仍然给出同样的错误
更新: 解决方法是使用列表对象而不是优先队列,并在每次输入新元素时对其进行排序。 代码 q=[] 追加 q.append ((heuristics[i][j],queueNodeObject)) 基于 成本排序
def sort(q):
#start stop step
for i in range(0,q.__len__(),1):
for j in range(i+1,q.__len__()-1,1):
if q[i][0]<q[j][0]:
#q[i] returns the element in queue list i.e tuple=(cost, object) q[i][0] returns #the cost
temp=q[i]
q[i]=q[j]
q[j]=temp