2013-05-27 3 views
0

저는 타일에 숫자가없는 슬라이딩 타일 퍼즐의 일반화 된 버전에서 작업 해 왔습니다. 대신 각 위치에 타일 또는 구멍이 있으며 true 또는 false (부울 또는 구멍)로 부울 값으로 나타납니다.A * 허용 성을 깨는 것은 기하 급수적 인 속도 향상을 가져 왔습니까?

검색의 요점은 n 개의 타일을 가진 초기 상태와 n 개의 목표 위치를 가진 목표 상태를 취하고 모든 목표 위치가 채워지도록 타일을 이동하는 방법을 찾기 위해 A *를 사용하는 것입니다.

Initial State: 
T F T F 
F F T F 
F F T T 

Goal State 
T T T T 
T F F F 
F F F F 
나는이 작업을 수행하기 위해 다른 추론에 일하고 있었다

가장 성공적인 이런 식으로 뭔가 갔다 논리했다 : 불행하게도

int heuristicVal = 0 

for every tile (i)... 
int closest = infinity 
for every goal location (j)... 
if (manhattan distance of ij < closest) closest = manhattan distance of ij 
end for 
heuristicVal += closest 
end for 

return heuristicVal 

을이, 다음은 4x3의 격자 아래 예입니다 두 개 이상의 타일이 동일한 대상 위치에 대한 휴리스틱으로 안내되는 상황에서 여전히 너무 느립니다. 타일 ​​수로 heuristicVal을 곱하려고 시도했는데 갑자기 지수가 올라갔습니다. 28 초 전의 문제는 1 초도 걸리지 않았습니다.

편집 :이 변경으로 인해 최적의 솔루션이 항상 생성되는 것은 아닙니다. 그러나, 나는 그것이 왜 그렇게 빨리 일어 났는지 이해할 수 없거나 더 이상 받아 들일 수 없는데도 여전히 올바른 답을 찾지 못하는 이유를 이해하지 못한다.

답변

1

수용 가능성을 깨면 A *는 더 이상 올바르게 작동하지 않습니다. 은 더 이상 올바르게 작동하지 않습니다.은 결코 최적의 결과를 얻지 못할 것이라는 의미는 아닙니다. 더 이상 보장 할 수는 없습니다. 또한 솔루션에서보다 빠르게 수렴을 끝낼 수도 있지만, 그 솔루션이 옳지 않다면 무엇이 중요한가?

+0

더 이상 올바르게 작동하지 않는다고 말하면 잠재적으로 솔루션을 찾지 못하거나 차선책을 만들 수 있다는 뜻입니까? 이 테스트의 최종 목표는 시각적 인 요소를 서로 충돌하지 않고 움직이는 것입니다. 문제가 해결되지 않은 최적의 솔루션 일 경우에는 절충안이 빠른 경우 나에게 도움이 될 수 있습니다. – asimes

+0

@asimes 나는 차선책을 의미하지는 않습니다. 나는 무엇이든 의미한다. 휴리스틱은 인정할 수 없습니다 (즉, 휴리스틱이 아닙니다). 결국 아무 것도 찾을 수 없습니다. A *는 항상 해결책을 찾아야하지만, 당신의 발견 적 방법이 경험적이지 않다면 당신이 실제로하고있는 것은 A *가 아닙니다. – Cubic

+0

곱해진 경험적 발견법이 옳지 않은 것을 의미합니까? 나는 하나가 아니라는 것을 압니다 만, 원래의 솔루션이 최적의 솔루션을 생산할 것이라는 것을 확신합니다 (때로는 매우 천천히). – asimes