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.