Bonjour
Je dois realiser un Casse tete le jeu du taquin, j'ai quelque questions:
Je dois utiliser une fonction heuristique
J'ai donc choisit d'utiliser "Manhattan" a savoir calculer la distance entre l'emplacement actuel de la piéce du puzzle et l'objectif.
Le problème qui se pose c'est que je dispose de prédicat pour me déplacer à droite , à gauche, ne bas , en haut comme par exemple:
down ( A/B/C/D/E/0/H/I/J , A/B/C/D/E/J/H/I/0 ).
Ces prédicats sont appelés dans des fonctions du type :
move(P,C,up) :- down(P,C).
Et ma fonction heuristique est :
Donc P contient la distance totale, je cherche donc la distance la plus petite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Heuristique(A/B/C/D/E/F/G/H/I, P) :- a(A,Pa), b(B,Pb), c(C,Pc), d(D,Pd), e(E,Pe), f(F,Pf), g(G,Pg), h(H,Ph), i(I,Pi), P is Pa+Pb+Pc+Pd+Pe+Pf+Pg+Ph+Pg+Pi. is_goal(1/2/3/8/0/4/7/6/5).
Donc pour lancer
solver(A,Z):-is_goal(Z). // cas de base
// je n'arrive pas à faire le cas général, car il faut bien que je stock le type de mouvement, deplus je pense que ma fonction heuristique n'est pas suffisante car elle donne juste le chemin le plus court, mais elle ne se préoccupe pas des cases voisines .. Donc les chemins ne sont pas forcement bon.
Mais bon je voudrais d'abord pouvoir faire fonctionner mon algo avec une fonction heuristique.
solver(A,Z):-
Merci d'avance
Partager