Systemy uczące się – laboratorium (lato 2014)
Transkrypt
Systemy uczące się – laboratorium (lato 2014)
Systemy uczące się – laboratorium (lato 2014) Zadanie 2. Uczenie formuł logicznych Literałem nazywamy zmienną logiczną lub jej negację: x1 , ¬x1 . Klauzulą nazywamy alternatywę literałów, np.: C = x1 ∨ ¬x2 ∨ x3 . Jednomianem nazywamy koniunkcję literałów, np.: D = x1 ∧ ¬x2 ∧ x3 . Formułą logiczną w koniunkcyjnej postaci normalnej (CNF) nazywamy koniunkcję klauzul: F = C1 ∧ C2 ∧ . . . ∧ Cm . Formułą logiczną w dysjunkcyjnej postaci normalnej (DNF) nazywamy alternatywę jednomianów: G = D1 ∨ D2 ∨ . . . ∨ Dm . Formułą logiczną w postaci k-CNF (k-DNF) nazywamy taką formułę CNF (DNF), w której wszystkie klauzule (jednomiany) zawierają co najwyżej k literałów. Formułę nazywamy monotoniczną, jeśli nie zawiera ona żadnych zanegowanych literałów. W dalszym ciągu zakładamy, że mamy dostęp do generatora wektorów binarnych x = (x1 , x2 , . . . , xn ), który zwraca tylko takie wektory, dla których koncept przyjmuje wartość 1, tzn., zwraca jedynie pozytywne przykłady konceptu: f (x) = 1. Algorithm 1 Algorytm uczenia formuł k-CNF 1: utwórz formułę F składającą się ze wszystkich możliwych klauzul długości ≤ k 2: powtarzaj następujący schemat: 3: wygeneruj wektor x 4: for c ∈ F do 5: jeśli x nie spełnia klauzuli c, usuń klauzulę c z formuły F 6: end for Na potrzeby uczenia formuł DNF zakładamy, że dodatkowo mamy dostęp do wyroczni. Wyrocznia przyjmuje argumenty z dziedziny {0, 1, ∗}n , gdzie symbol “∗” oznacza, że wartość danej zmiennej może być dowolna. Dla wektora y ∈ {0, 1, ∗}n , wyrocznia zwraca wartość 1 jeśli koncept jest spełniony dla wszystkich wektorów x ∈ {0, 1}n , zgadzających się z y na wszystkich elementach różnych od “∗”, natomiast wartość 0 w przeciwnym przypadku. Algorithm 2 Algorytm uczenia monotonicznych formuł k-DNF 1: niech F będzie formułą pustą (taka formuła jest zawsze niespełnialna) 2: powtarzaj następujący schemat: 3: wygeneruj wektor v 4: if v nie spełnia formuły F then 5: for i = 1, 2, . . . , n do 6: utwórz wektor v 0 , poprzez wstawienie “∗” na pozycję i-tą w wektorze v 7: if wyrocznia zwraca wartość 1 dla ciągu v 0 then 8: przyjmij v ← v 0 9: end if 10: end for V 11: F ← F ∨ i:vi =1 xi 12: end if Zadania: 1. Zaimplementować algorytm uczenia monotonicznej formuły 3-CNF o n = 4 zmiennych. 2. Przy pomocy algorytmu przeprowadzić uczenie formuły: (x1 ∨ x3 ∨ x4 ) ∧ (x2 ∨ x3 ∨ x4 ) 3. Zaimplementować algorytm uczenia formuły 3-CNF o n = 3 zmiennych. 4. Przy pomocy algorytmu przeprowadzić uczenie formuły, która reprezentuje koncept f : {0, 1}3 → {0, 1}, zdefiniowany jako f (x) = 1 ⇐⇒ wektor x zawiera parzystą liczbę jedynek. 5. Zaimplementować wyrocznię dla konceptu g : {0, 1}n → {0, 1}, zdefiniowanego jako g(x) = 1 ⇐⇒ wektor x zawiera więcej jedynek niż zer. 6. Zaimplementować algorytm uczenia monotonicznej formuły k-DNF o n zmiennych. 7. Przy pomocy algorytmu przeprowadzić uczenie konceptu g z podpunktu 5.