Эвристические алгоритмы в прологе - PullRequest
1 голос
/ 05 января 2011

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

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

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

Спасибо заранее ..

1 Ответ

0 голосов
/ 05 января 2011

Как ни странно, я недавно реализовал 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 в Прологе (AI)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...