Unelte utilizator

Unelte site


15:teme:prolog-csp

Aceasta e o versiune anterioară a paginii.


Prolog: CSP

  • Responsabil: Tudor Berariu
  • Deadline: 29.05.2015 23:59
  • Data publicării: 07.05.2015 00:00
  • Data ultimei modificări: 07.05.2015 00:00
  • Data arhivei: 07.05.2015 00:00

Obiective

  • înțelegerea problemelor de satisfacere a restricțiilor și a mecanismelor de rezolvare a acestora
  • înțelegerea conceptului de arc-consistență și implementarea unui algoritm de propagare a constrângerilor: AC3
  • utilizarea limbajului Prolog pentru a implementa un mecanism general de rezolvare a problemelor de satisfacere a restricțiilor

Probleme de satisfacere a restricțiilor

O problemă de satisfacere a restricțiilor este descrisă printr-un set de variabile V, o mulțime de domenii finite de valori pentru acestea D și un set de constrângeri C. Vom nota D(X) domeniul variabilei X ∈ V. O constrângere c va fi reprezentată printr-o relație între una sau mai multe variabile din V.

O soluție pentru o astfel de problemă este reprezentată printr-o instanțiere a variabilelor din V cu valori ce satisfac toate restricțiile din C.

Algoritmul GAC3

Arc-consistența reprezintă o metodă pentru propagarea restricțiilor (eliminarea din domeniile variabilelor a acelor valori care nu pot face parte dintr-o soluție a problemei). Arc-consistența este obținută atunci când pentru fiecare valoare din domeniul unei variabile și pentru orice restricție care implică acea variabilă există o instanțiere a tuturor variabilelor implicate care conține acea valoare astfel încât restricția să fie satisfăcută.

Cerințe

Cerința 1 (0.7p): Algoritmul GAC3

Să se scrie un predicat gac3/5 pentru revizuirea domeniilor de valori ale unor variabile folosind algoritmul GAC3 descris mai sus.

gac3(+Vars, +Domains, +Constraints, +HyperArcs, -RevisedDomains)

Vars reprezintă mulțimea tuturor variabilelor problemei (o listă de variabile Prolog). De exemplu: [X, Y, Z].

Domains reprezintă lista domeniilor de valori pentru variabilele Vars. De exemplu: [[1,2,3], [3,4], [1,4,7]].

Constraints reprezintă lista tuturor restricțiilor problemei. O constrângere va fi reprezentată printr-o structură constraint(CVars, Expression) unde

  • CVars reprezintă lista variabilelor implicate de acea constrângere (o listă de variabile Prolog)
  • Expression reprezintă un scop Prolog ce va putea fi verificat după instanțierea variabilelor din CVars

De exemplu: [constraint([X], X > 0), constraint([X, Y, Z], X =:= Y + Z)].

HyperArcs reprezintă lista hiperarcelor ce trebuie verificate. Un hiperarc va fi reprezentat astfel: hypeararc(X, Ys, Constraint), unde

  • X reprezintă variabila al cărei domeniu trebuie verificat pentru consistență
  • Ys reprezintă lista celorlalte variabile implicate în restricție
  • Constraint reprezintă un scop Prolog ce va putea fi verificat după instanțierea lui X și a celorlalte variabile Ys

De exemplu: [hyperarc(X,[], X>0), hyperarc(Z, [X, Y], X =:= Y + Z)].

RevisedDomains reprezintă lista domeniilor variabilelor problemei după impunerea arc-consistenței.

Observație: listele Vars, Domains și RevisedDomains vor avea același număr de elemente.

Cerința 2 (0.3p): Algoritmul MAC

Să se scrie un predicat solve_csp/4 pentru rezolvarea problmelor de satisfacere a restricțiilor:

solve_csp(+Vars, +Domains, +Constraints, -Solution)

Argumentele Vars, Domains și Constraints reprezintă aceleași lucruri precum în cazul predicatului gac3/5.

Prin satisfacerea unui scop solve_csp, variabila Solution va fi legată la o listă de valori pentru variabilele Vars care compun o soluție a problemei.

De exemplu:

?- solve_csp([X,Y,Z],
             [[1,2,3], [1,2,3], [1,2,3]],
             [constraint([X], X > 2), constraint([X, Y, Z], X < Y + Z)],
             Solution).
Solution = [3, 1, 3];
Solution = [3, 2, 2];
Solution = [3, 3, 1].
15/teme/prolog-csp.1430938394.txt.gz · Ultima modificare: 2015/05/06 21:53 de către Tudor Berariu