2011-01-05 3 views
1

Я не очень опытен в Prolog, и я пытаюсь решить упражнение, посвященное использованию эвристического алгоритма (f.e. A * или BFS или Hill-Climbing), чтобы найти решение данной проблемы.Эвристические алгоритмы в прологе

Поскольку я не знаком с такого рода программированием, и поиск в google на самом деле не помог мне, мне было интересно, может ли кто-нибудь дать мне ссылку на аналогичный уже разрешенный пример, чтобы увидеть, как это делается.
Я ничего не пытаюсь скопировать, просто я много изучил пролог и т. Д., И я знаю, как эти алгоритмы работают в теории и как они решают проблему (в моем упражнении я думаю, что BFS или A * был бы хорошим выбором), но я не понимаю, как я должен составлять программу в прологе, которая фактически использует алгоритм и дает решение.

Просто пояснение, я действительно считаю, что реальные примеры прологового кода были бы очень полезными, а не теоретическим объяснением того, как работает алгоритм. Я делаю kwon, как проблема должна быть решена, что происходит, и особенно в прологе это то, что я не понимаю ..

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). 

Для решения этой проблемы «Цель» было определенное количество, и «Путь» была последовательность действий, необходимых для получения этой цели. Второй параметр - это очередь, где каждое состояние представлено в виде списка из двух элементов (первое - это текущее число, а второе - путь, необходимый для генерации этого числа). Он возвращает путь, необходимый для получения заданного числа в «Путь». Набор наблюдаемых состояний был записан в самой базе данных, используя утверждения.

Вне этого определения все зависит от конкретной проблемы.

EDIT: Я должен был сказать, что все это проблема. Я пересмотрел свой код, сделал несколько небольших изменений и изменил проблему, которую он решает. Это значительно отличается от заданий, которые мне удобны в размещении, так что вот оно: BFS in Prolog(AI)

+0

thnx для ответа. Очень полезно! – yiannis