私はA *での試行に問題があります - これは実行されるたびに発生しますが、頻繁に2つのセルがお互いの親になるようにします。 これは、パスを再作成しようとすると無限ループになります。私はこれがなぜ今のところ起こるのかを調べようとしてきましたが、それを理解することはできないので、どんな助けもありがたいです。ここでA *アルゴリズムの実装ノード - 親バグ
def find_path(self, start, end):
tstart = time.time()
count = 0
evaled = set()
notEvaled = set([start])
start.g_score(start)
start.h_score(end)
start.f_score()
while len(notEvaled) != 0:
current = min(notEvaled, key=attrgetter('f'))
notEvaled.remove(current)
for neighbour in current.neighbours:
if neighbour.full or neighbour in evaled: continue
if neighbour in notEvaled:
if neighbour.parent != None and neighbour.parent.g > current.g:
neighbour.parent = current
neighbour.g_score(start)
neighbour.f_score()
else:
neighbour.parent = current
neighbour.g_score(start)
neighbour.h_score(end)
neighbour.f_score()
notEvaled.add(neighbour)
if neighbour == end:
path = []
while end != None:
path.insert(0, end)
end = end.parent
return path
evaled.add(current)
return None
は私のスコア関数ですが、私は私が開始する前に、彼らは
def g_score(self, start):
if self == start:
self.g = 0
else:
self.g = self.parent.g + 1
def h_score(self, end):
self.h = abs(end.x - self.x) + abs(end.y - self.y)
def f_score(self):
self.f = self.g + self.h
'何をneighbor.full'ん:それは、それが
reconstruct_path
方法を統合することを除いてpseudo code from Wikipediaに基づいていますか? –