2011-01-05 4 views
1

Je ne suis pas très expérimenté sur Prolog et j'essaie de résoudre un exercice qui consiste à utiliser un algorithme heuristique (par exemple A * ou BFS ou Hill-Climbing) pour trouver une solution à un problème donné. Comme je ne suis pas familier avec ce genre de programmation et qu'une recherche dans google ne m'a pas vraiment aidé, je me demandais si quelqu'un pouvait me donner un lien vers un exemple similaire déjà solvable pour voir comment cela est fait.
Je n'essaie pas de copier quoi que ce soit, c'est juste que j'ai étudié beaucoup de prolog Commants etc et je sais comment ces algorithmes fonctionnent en théorie et comment ils résolvent le problème (Fe dans mon exercice je pense BFS ou A * serait un bon choix) mais je ne comprends pas comment je suis supposé composer un programme en prologue qui utilise un algorithme et donne une solution. Juste une clarification, je crois vraiment que de vrais exemples de code prolog serait très utile et non une explication théorique du fonctionnement d'un algorithme. Je fais kwon comment le problème est censé être résolu, ce qui se produit et en particulier dans prolog est ce que je ne comprends pas ..Algorithmes heuristiques dans prolog

Thnx à l'avance ..

Répondre

0

Bizarrement j'ai récemment mis en œuvre un BFS en Prolog. Je n'ai posté le code nulle part et j'hésite à le faire, car c'est une réimplémentation d'une tâche qui sera probablement réutilisée.

Je peux vous donner la définition BFS réelle:

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

Pour ce problème, était un nombre particulier « but » et « Chemin » a été la séquence d'actions nécessaires pour atteindre cet objectif. Le second paramètre est la file d'attente, où chaque état est représenté sous la forme d'une liste de deux éléments (le premier est le nombre actuel et le second le chemin nécessaire pour générer ce nombre). Il retourne le chemin nécessaire pour obtenir le nombre donné dans "Path". L'ensemble des états observés a été enregistré dans la base de données elle-même, en utilisant des affirmations.

En dehors de cette définition, tout est spécifique au problème.

EDIT: J'aurais dû dire que presque tout est spécifique au problème. J'ai revisité mon code, fait quelques modifications mineures et changé le problème qu'il résout. C'est assez différent de l'affectation que je me sens à l'aise de poster, alors voici: BFS in Prolog(AI)

+0

thnx pour la réponse..très utile! – yiannis