This shows you the differences between two versions of the page.
pp:25:teme:haskell-sat [2025/05/02 15:16] mihnea.muraru [Etapa 2] |
pp:25:teme:haskell-sat [2025/05/08 23:34] (current) mihnea.muraru [Haskell: SAT Solving] |
||
---|---|---|---|
Line 2: | Line 2: | ||
* Data publicării: 09.04.2025 | * Data publicării: 09.04.2025 | ||
- | * Data ultimei modificări: 30.04.2025 | + | * Data ultimei modificări: 08.05.2025 |
* Deadline hard: ziua laboratorului 10 | * Deadline hard: ziua laboratorului 10 | ||
* [[https://curs.upb.ro/2024/mod/forum/view.php?id=152382|Forum]] | * [[https://curs.upb.ro/2024/mod/forum/view.php?id=152382|Forum]] | ||
Line 250: | Line 250: | ||
==== Aplicație la problema 3-colorare ==== | ==== Aplicație la problema 3-colorare ==== | ||
- | Problema **//3-colorare//** a unui **graf neorientat** urmărește asocierea uneia dintre trei culori (''Red'', ''Green'', ''Blue'') fiecărui nod din graf, astfel încât oricare două **noduri adiacente** să fie **colorate diferit**. Problema poate fi rezolvată prin **reducere la SAT**, parcurgând etapele: | + | Problema **//3-colorare//** a unui **graf neorientat** urmărește asocierea unei culori din trei (''Red'', ''Green'', ''Blue'') fiecărui nod din graf, astfel încât oricare două **noduri adiacente** să fie **colorate diferit**. Problema poate fi rezolvată prin **reducere la SAT**, parcurgând etapele: |
- **Codificarea** instanței //3-colorare// într-o formulă CNF. | - **Codificarea** instanței //3-colorare// într-o formulă CNF. | ||
Line 278: | Line 278: | ||
A treia etapă a temei abordează **rezolvarea** clauzelor, **învățarea** clauzelor, algoritmul de **satisfacere** și aplicația la problema **//3-colorare//**. | A treia etapă a temei abordează **rezolvarea** clauzelor, **învățarea** clauzelor, algoritmul de **satisfacere** și aplicația la problema **//3-colorare//**. | ||
- | Construcțiile și mecanismele de limbaj pe care le veți exploata în rezolvare, pe lângă cele din etapa 1 și 2, sunt: | + | Construcțiile și mecanismele de limbaj pe care le veți exploata în rezolvare, pe lângă cele din etapele 1 și 2, sunt: |
* **polimorfismul ad-hoc** | * **polimorfismul ad-hoc** | ||
Line 285: | Line 285: | ||
Modulul de interes din **schelet** este ''Solver'', care conține **operațiile** pe care trebuie să le implementați. Găsiți detaliile despre **funcționalitate** și despre **constrângerile de implementare**, precum și **exemple**, direct în fișier. Aveți de completat definițiile care încep cu ''%%*** TODO ***%%''. | Modulul de interes din **schelet** este ''Solver'', care conține **operațiile** pe care trebuie să le implementați. Găsiți detaliile despre **funcționalitate** și despre **constrângerile de implementare**, precum și **exemple**, direct în fișier. Aveți de completat definițiile care încep cu ''%%*** TODO ***%%''. | ||
- | Pentru **rularea testelor**, încărcați în interpretor modulul ''TestSolver'' și evaluați ''main''. | + | Pentru **rularea testelor**, încărcați în interpretor modulul ''TestSolver'' și evaluați ''main''. Ultimul test (''stress'') utilizează grafuri mai mari și execuția poate dura câteva secunde. |
Este suficient ca arhiva pentru **vmchecker** să conțină modulele ''Solver'', ''ExtendedFormula'' din etapa 2 și ''Formula'' din etapa 1. | Este suficient ca arhiva pentru **vmchecker** să conțină modulele ''Solver'', ''ExtendedFormula'' din etapa 2 și ''Formula'' din etapa 1. | ||
Line 302: | Line 302: | ||
===== Changelog ===== | ===== Changelog ===== | ||
+ | * 08.05 (23:30): Publicat testele etapei 3 și actualizat tipurile ''Graph'', ''Color'' și ''ThreeColoring'' din ''Solver.hs'' cu ''deriving (Show, Eq)'' în loc de ''deriving Show''. | ||
* 30.04 (22:30): Publicat etapa 3, momentan fără teste | * 30.04 (22:30): Publicat etapa 3, momentan fără teste | ||
* 27.04 (09:50): Etapa 2: Actualizat teste ''backtrackToUnitClause'' | * 27.04 (09:50): Etapa 2: Actualizat teste ''backtrackToUnitClause'' |