从优先队列中拿起带有主要向量的物品
实现A*
优先级队列
import heapq
class PriorityQueue:
def __init__(self):
self.elements = []
def empty(self):
return len(self.elements) == 0
def put(self, item, priority):
heapq.heappush(self.elements, (priority, item))
def get(self):
return heapq.heappop(self.elements)[1]
可以使用 。当item
被拾取时,priority
数字是队列中剩余项目的优先级数字中最小的。在 NAMOA
算法中,而不是单个数字定义优先级,使用向量。因此,当拾取item
时,相关向量是“主导的”。
如果
f支配向量
f'
src="https://latex.codecogs.com/gif.image?%5Cdpi%7B110%7D%5Cforall%20%5Cvec%7Bf%7D ,%20%5Cvec%7Bf%7D%27,%20%5Cin%20%5Cmathbb%7BR%7D%5Eq%20%5Cquad%20%20%5Cvec%7Bf%7D% 20%5Cprec%20%5Cvec%7Bf%7D%27%20%5C左箭头%20%5Cforall%20i%20%7E%20f_i%20%5C leq%20f_i%27%7E%5Ctext%7Band%7D%7E%20%5Cvec%7Bf%7D%20%5Cneq%20%5Cvec%7Bf%7D%27%20" alt="输入图像描述 这里>.
例如,向量 (2, 3)
支配 (2, 4)
,但 (2, 3)< 不存在支配 /code> 和
(3, 2)
要确定向量是否占主导地位,我们可以使用 这个到目前为止我已经尝试过
class Node(object):
def __init__(self, item: int, vec: list):
self.item = item
self.vec = vec
def __lt__(self, obj):
"""self.vec < obj.vec"""
return map(operator.lt, self.vec, obj.vec)
def __le__(self, obj):
"""self <= obj."""
return map(operator.le, self.vec, obj.vec)
def __eq__(self, obj):
"""self == obj."""
return map(operator.eq, self.vec, obj.vec)
def __ne__(self, obj):
"""self != obj."""
return map(operator.ne, self.vec, obj.vec)
def __gt__(self, obj):
"""self > obj."""
return map(operator.gt, self.vec, obj.vec)
def __ge__(self, obj):
"""self >= obj."""
return map(operator.ge, self.vec, obj.vec)
class PriorityQueue:
def __init__(self):
self.elements = []
def empty(self):
return len(self.elements) == 0
def push(self, node):
heapq.heappush(self.elements, node)
def pop(self):
x = heapq.heappop(self.elements)
return x.item
# Example
open = PriorityQueue()
open.push(Node('source1', [2, 3]))
open.push(Node('source2', [1, 1]))
open.push(Node('source3', [2, 4]))
item = open.pop()
拾取的项目是source3
,而所需的结果是 source2
,具有主导向量,即 [1, 1]
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论