2011-01-05 7 views
1

저는 Prolog에 대해 경험이 많지 않습니다. 주어진 문제에 대한 해결책을 찾기 위해 휴리스틱 알고리즘 (f * A 또는 BFS 또는 Hill-Climbing)을 사용하는 연습 문제를 해결하려고합니다.프롤로그의 경험적 알고리즘

저는 이런 종류의 프로그래밍에 익숙하지 않고 Google의 검색 기능이 도움이되지 않았기 때문에 누구나 비슷한 해결책을 제시 할 수 있는지 궁금합니다.
저는 아무것도 복사하려고하지 않습니다. 단지 프롤로그 커턴트 등등에 대해 많은 연구를했기 때문에 이론적으로 어떻게 작동하는지, 어떻게 문제를 해결하는지 알 수 있습니다. (BFS 나 A * 좋은 choise 것입니다)하지만 실제로 알고리즘을 사용하여 솔루션을 제공하는 프롤로그 프로그램을 작성하는 방법을 이해할 수 없습니다.

실제 프롤로그 코드 예제는 알고리즘이 어떻게 작동하는지에 대한 이론적 인 설명이 아니라 매우 유용 할 것입니다. 나는 문제를 해결할 방법을 권합니다. 특히 프롤로그에서 일어납니다. 사전에 Thnx

.. 이상하게

답변

0

내가 최근 프롤로그에서 BFS을 구현 .. 내가 이해하지 못하는 것입니다. 코드를 어디에나 게시하지 않았으며 재사용 가능성이있는 구현을 다시 구현하기 때문에 주저합니다.

내가 당신에게 실제 BFS 정의를 제공 할 수 있습니다 :이 문제에 대한

% performs a BFS, with the given goal and queue 
bfs(Goal, [[Goal|[Path]]|_], Path). 
bfs(Goal, [State|Rest], Result) :- 
    successors_list(State, Successors), 
    remove_seen(Successors, NewStates), 
    add_to_seen(NewStates), 
    append(Rest, NewStates, Queue), 
    bfs(Goal, Queue, Result). 

를, "목표는"특정 수, "경로"그 목표에 도달하기 위해 필요한 일련의 작업을 하였다. 두 번째 매개 변수는 대기열입니다. 각 상태는 두 요소의 목록으로 표시됩니다 (첫 번째 숫자는 현재 숫자이고 두 번째 숫자는 숫자를 생성하는 데 필요한 경로입니다). "Path"에 주어진 숫자를 얻기 위해 필요한 경로를 반환합니다. 보인 상태 세트는 어설 션을 사용하여 데이터베이스 자체에 기록됩니다.

이 정의 외의 모든 것은 문제가 있습니다.

편집 : 대부분의 모든 것이 문제가 있다고 말했어야합니다. 코드를 다시 방문하고 약간의 수정을 가해서 해결 한 문제를 변경했습니다. 과제를 게시하는 것이 상당히 어려워서 여기에 게재됩니다. BFS in Prolog(AI)

+0

대답은 매우 유용합니다! – yiannis

관련 문제