나는 이것을 읽고있다 : http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html
그러나 내가 이해할 수없는 몇 가지가 있습니다. 예를 들어 기사는 대각선 이동으로 길 찾기에 이와 같은 것을 사용한다고 말합니다.
function heuristic(node) =
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return D * max(dx, dy)
나는 기사 에서처럼 자연스럽게 보이는 경로를 얻기 위해 D를 설정하는 방법을 모른다 .D는 그것이 말하는 것처럼 인접한 사각형 사이에서 가장 낮은 비용으로 설정했으며 휴리스틱에 대한 것들이 무엇을 의미하는지 모르겠다. 4 * D이어야합니다. 아무것도 변경하지 않는 것 같습니다.
이것은 휴리스틱 함수 및 이동 함수입니다.
def heuristic(self, node, goal):
D = 5
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return D * max(dx, dy)
def move_cost(self, current, node):
cross = abs(current.x - node.x) == 1 and abs(current.y - node.y) == 1
return 7 if cross else 5
결과:
원활한 항해 경로 :
내 코드의 나머지 부분 : http://pastebin.com/TL2cEkeX
최신 정보
이것이 지금까지 찾은 최고의 솔루션입니다.
def heuristic(node, start, goal):
dx1 = node.x - goal.x
dy1 = node.y - goal.y
dx2 = start.x - goal.x
dy2 = start.y - goal.y
cross = abs(dx1*dy2 - dx2*dy1)
dx3 = abs(dx1)
dy3 = abs(dy1)
return 5 + (cross*0.01) * (dx3+dy3) + (sqrt(2)-2) * min(dx3, dy3)
def move_cost(current, node):
cross = abs(current.x - node.x) == 1 and abs(current.y - node.y) == 1
return 7 if cross else 5
그것은 두 번째 그림에서 원하는 경로를 생성하지만 장애물을 잘 처리하지 못하고 (벽을 기어 다니는 경향이 있음) 때로는 더 먼 거리에서 최적의 경로를 생성하지 못합니다.
개선을 위해 적용 할 수있는 조정 및 최적화에는 어떤 것이 있습니까?