Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
aa:lab:11 [2020/12/15 17:49]
roxana_elena.stiuca lab number didn't correspond
aa:lab:11 [2026/01/10 23:52] (current)
dmihai
Line 1: Line 1:
-====== ​Lab 11: SAT ======+====== ​Reduceri polinomiale ​======
  
 +În acest laborator veți explora un graf realist cu date despre toate aeroporturile din lume și rutele dintre ele și veți aplica diverși algoritmi *eficienți* pe acesta.
 +Momentan, puteți considera termenul "​eficient"​ să însemne "​fără backtracking"​ (mai precis, ne referim la conceptul de polinomial, i.e. cu o complexitate descrisă de $ O(n^k)$, pentru un $ k$ natural; vom relua conceptul la curs).
  
-=== 0Recap Conjunctive Normal ===+Descărcați de aici arhiva cu datele de intrare: {{:​aa:​lab:​lab.zip|}}
  
 +Aceasta conține în directorul ''​res/''​ trei fișiere cu date despre aeroporturi și rute:
  
-**CNF** is a form of boolean logic formulae that consists of a **conjunction** of one or more **clauses**A **clause** is a **disjunction** of **literals**.+ - ''​airroutes.in''​ - din lume  \\ 
 + - ''​eu-airroutes.in''​ - din Europa ​ \\ 
 + - ''​ro-airroutes.in''​ - din România
  
-A good analogy for **conjunction** is **product** and for **disjunction** is **sum**. Thusa formula in **CNF** can be seen as a product of sums.+Fișierele descriu grafuri orientateale căror noduri au ID-uri întregi începând de la 0; respectă următorul format:
  
 + - pe prima linia, numărul de noduri ''​N''​ și numărul de muchii din graf, separate de un spațiu. \\
 + - pe următoarele ''​N''​ linii, informații despre un nod  \\
 + - pe linia ''​i''​ (probabil indexată de la 1 în editorul de text), găsiți informații despre nodul cu ID ''​i - 2'':​ \\
 +    - [[https://​www.iata.org/​en/​publications/​directories/​code-search/​|codul IATA]] al aeroporturlui \\
 +    - toate rutele de la acel aeroport exprimate folosind trei numere: ID-ul aeroportului destinație,​ distanța zborului în kilometri, durata zborului în minute.
  
-Examples of **terminals**:+<​note>​ 
 +Fișierele sunt doar o versiune parser-friendly a datelor din acest JSONhttps://​github.com/​Jonty/​airline-route-data/​blob/​main/​airline_routes.json
  
-  * $math[X, Y, Z, a, b, X_{1}, X_{2}, ..., X_{n}]+În ''​tools/​extract_c_friendly.py''​ găsiți scriptul care realizat extragerea. 
 +</​note>​
  
-Examples of **disjunctions**:​+==== Exerciții ====
  
-  * $math[X\vee Y\vee Z] +BONUS: Aplicați backtracking naiv pentru ​rezolva problema ​$ \texttt{MINIMAL COLORING}$ pe un graf primit ca input; i.egăsiți numărul minim de culori distincte cu care putem colora nodurile din graf astfel încât să nu existe muchie între două noduri de aceeași culoare.
-  * $math[a\vee b] +
-  * $math[X_{1}\vee X_{2}\vee X_{3}\vee ​... \vee X_{n - 1}\vee X_{n}]+
  
-Examples of **conjunctions**:​+1. Aplicați backtracking naiv pentru a rezolva problema $ \texttt{COLORING}$ pe graful respectiv; va trebui să mai primiți un argument numeric $ k$ și să determinați dacă graful poate fi colorat cu $ k$ culori.
  
-  * $math[a\wedge b\wedge c] +BONUS: implementați o soluție pentru ​$ \texttt{MINIMAL COLORING}$ care să folosească soluția pentru ​$ \texttt{COLORING}$ cu o cantitate minimală de cod adițional.
-  * $math[X\wedge  Z]+
  
-Examples of **CNF**:+BONUSimplementați o soluție pentru $ \texttt{COLORING}$ care să folosească soluția pentru $ \texttt{MINIMAL COLORING}$ cu o cantitate minimală de cod adițional.
  
-  * $math[a\wedge (b\vee c)\wedge d] 
-  * $math[(X_{1}\vee X_{2})\wedge (Y_{1}\vee Y_{2})\wedge (Z_{1}\vee Z_{2})] 
-  * $math[(X\vee Y)\wedge (Y\vee Z)\wedge (Z\vee X)] 
  
-\\ +2. Implementați transformarea necesară pentru reducerea $ \texttt{COLORING} ​\le_P \texttt{CNF SAT}$:
  
-** 1. Conjunctive Normal Form **+ - creați câte o variabilă $ x_{v, c}$ pentru fiecare pereche de nod și culoare $ (v, c)$ \\ 
 + - fiecare nod trebuie să aibă cel puțin o culoare; adăugați pentru fiecare nod $ v$ clauza: $ (x_{v, 0} \lor x_{v, 1} \lor \ldots \lor x_{v, k - 1})$ \\ 
 + - fiecare nod trebuie să aibă maxim o culoare; pentru fiecare nod $ v$ și pentru fiecare pereche de culori $ c1 < c2$ adăugați clauza: $ (\overline{x_{v,​ c1}} \lor \overline{x_{v,​ c2}})$ \\ 
 + - două noduri adiacente nu pot avea aceeași culoare; pentru fiecare pereche de noduri $ (u, v)$ și pentru fiecare culoare $ c$ adăugați clauza: $ (\overline{x_{v,​ c}} \lor \overline{x_{u,​ c}})$
  
 +3. Implementați o soluție pentru a rezolva $ \texttt{CNF SAT}$ prin backtracking naiv.
  
-Rewrite the following formulae ​in Conjunctive Normal Form:+4. Convertiți formula voastră ​in formatul [[https://​jix.github.io/​varisat/​manual/​0.2.0/​formats/​dimacs.html|DIMACS]] și rezolvați-o cu un SAT solver.
  
-** 1.1** $math[\neg (a\leftrightarrow b)\wedge (b\vee c)]+<​note>​ 
 +Ca SAT solver, vă recomandăm [[https://​github.com/​Z3Prover/​z3|Z3]] de la Microsoft Research. 
 +Acesta este de fapt un solver de $ \texttt{SMT}$ ​(//​Satisfiability Modulo Theories//), o problemă mai generală, dar poate rezolva și $ \texttt{SAT}$. 
 +Cel mai probabil, distribuția voastră are Z3 disponibil ca pachet în repositories default. 
 +Dacă nu, instalați [[https://​github.com/​Z3Prover/​z3/​releases|ultimul release]]. 
 +</​note>​
  
 +<​note>​
 +Formatul DIMACS este un format standard pentru a descrie instanțe de probleme $ \texttt{CNF SAT}$.
  
-** 1.2. ** $math[\neg ((a\vee c)\to (b \wedge \neg (a\vee c)))] +În fiecare an are loc o [[https://​satisfiability.org/​SAT26/​|conferință faimoasă]pe tema problemelor de satisfiabilitate
- +Conferințare și o competiție de SAT solving asociată; puteți găsi [[https://​satcompetition.github.io/​2025/​downloads.html|aici]submisiile pentru anul acesta; vă recomandăm să încercați să rulați și unul din aceste solvere, pe lângă Z3 (Z3 este un produs finisat și robustpe o problemă mai generală; aceste solvere doar rezolvă instanțe de SAT; e posibil să fie mai rapide)
-\\  +</​note>​
- +
-** 2Interpretations ** +
- +
-** 2.1. ** Write an interpretation which makes each of the previous formulae: +
-  * true +
-  * false +
- +
-\\  +
- +
-** 3. Satisfiability and validity ** +
- +
-Write down formula with 3 variables which is: +
-  * valid +
-  * satisfiable +
-  * invalid +
- +
-\\  +
- +
-** 4Binary Decision Diagrams ** +
- +
-Write binary decision diagrams for the formulae at 1. +
- +
-\\  +
- +
-** 5Encodings ** +
- +
- +
-** 5.1. ** Express the following as ** CNF SAT ** formulae: +
- +
-    * $math[a\oplus b (xor) +
- +
-    * if c then t else p +
-     +
-    * exactly one of $math[{X_{1}X_{2}, ..., X_{n}}] is true. +
- +
- +
-** 5.2. ** Encode the n-queens ​problem ​as a ** SAT ** formula. In the n-queens problem, we have a n x n board and we need to find a position for each n queens such that no queen is attacking another. +
- +
- +
-** 5.3. ** What is ** 3SAT **? Construct a transformation that takes a ** SAT ** formula and builds a ** 3SAT ** formula. Motivation: a lot of ** SAT ** solvers use as input ** 3SAT **+