Esercizio - MAX-SAT con clausole miste e aspettative condizionate
Teoria: Metodo probabilistico - valore atteso, alterazioni e derandomizzazioneMetodo probabilistico: se un oggetto casuale ha una proprietà con probabilità positiva (o una variabile ha media mu, quindi qualche esito la raggiunge) allora l'oggetto esiste; taglio di almeno |E|/2, MAX-SAT con 7/8, limite inferiore di Ramsey R(k,k) > 2^(k/2), alterazioni (insiemi indipendenti, Ramsey), derandomizzazione con le aspettative condizionate, lemma locale di Lovász solo enunciato.Metodo probabilistico - valore atteso, alterazioni e derandomizzazione → (MAX-SAT e derandomizzazione), Valore attesoIl valore atteso E[X] = Σ x p_X(x) è la media dei valori di X pesata con le loro probabilità (esiste se la serie converge assolutamente); per una funzione g vale E[g(X)] = Σ g(x) p_X(x) senza trovare la legge di g(X), ed E è lineare: E[aX + bY + c] = aE[X] + bE[Y] + c.Valore atteso →.
Testo. Si consideri la formula in forma normale congiuntiva su con clausole:
, , , , , , , .
- Con un'assegnazione uniforme, qual è il numero atteso di clausole soddisfatte? Cosa si deduce sull'esistenza di un'assegnazione?
- Applicare il metodo delle aspettative condizionate nell'ordine (a parità, scegliere vero), riportando a ogni passo le due attese.
- Calcolare per enumerazione quante assegnazioni soddisfano clausole e confermare la media.
- Dimostrare che ogni CNF ha un'assegnazione che soddisfa almeno metà delle clausole, e che non si può migliorare con clausole da un letterale.
Soluzione
1. Attesa iniziale. Una clausola con letterali su variabili distinte è soddisfatta con probabilità . Qui hanno (probabilità ) e hanno (probabilità ): Quindi esiste un'assegnazione che soddisfa almeno clausole.
2. Aspettative condizionate. Per un'assegnazione parziale ogni clausola vale se ha un letterale vero, altrimenti con letterali ancora liberi (e se non ne restano).
- . Con vero: , ha solo libero: , tre liberi: ciascuna, , ha liberi: , : . Somma . Con falso: , , , , , , somma ancora (la media delle due attese deve valere , e qui sono uguali): parità, si sceglie vero.
- (con vero): vero dà , falso dà . Dettaglio per falso: , , ( vero), , , , , : somma . Si sceglie falso.
- : vero , falso . Si sceglie vero (con vero si soddisfa e ).
- : vero , falso . Si sceglie vero: restano soddisfatte tutte le clausole con ().
- : vero , falso (parità): vero.
Assegnazione finale : tutte e le clausole sono soddisfatte. L'attesa è andata senza mai scendere.
Controllo diretto: ( vero) ✓, () ✓, () ✓, () ✓, () ✓, () ✓, () ✓, () ✓.
3. Enumerazione. Sulle assegnazioni, quelle che soddisfano clausole sono rispettivamente ; la media è ✓. Il caso migliore (tutte e ) si realizza in assegnazioni, quindi il metodo ne ha trovata una; peggior caso clausole. Un'assegnazione casuale soddisfa tutte le clausole con probabilità .
4. Metà delle clausole. Una clausola con letterali è soddisfatta con probabilità , quindi in una CNF di clausole l'attesa è e esiste un'assegnazione che ne soddisfa almeno . Non si può fare meglio in generale: la formula ha clausole e ogni assegnazione ne soddisfa esattamente .
Codice di verifica
from fractions import Fraction
from collections import Counter
from itertools import product
F = [[(1, 1), (2, 1)], [(1, -1), (3, 1)], [(2, -1), (3, -1), (4, 1)], [(2, 1), (3, 1), (5, -1)],
[(3, -1), (4, 1), (5, 1)], [(1, 1), (4, -1), (5, 1)], [(1, -1), (2, -1), (5, -1)], [(4, 1), (5, -1)]]
def attesa(parziale):
tot = Fraction(0)
for c in F:
liberi = 0
for v, s in c:
if v not in parziale:
liberi += 1
elif parziale[v] == (s > 0):
tot += 1
break
else:
tot += 1 - Fraction(1, 2 ** liberi)
return tot
print(attesa({}))
p = {}
for v in range(1, 6):
e1, e0 = attesa({**p, v: True}), attesa({**p, v: False})
print(v, e1, e0)
p[v] = e1 >= e0
print(p, attesa(p))
print(sorted(Counter(int(attesa(dict(zip(range(1, 6), a)))) for a in product((False, True), repeat=5)).items()))Risultato: 53/8, poi le righe 1 53/8 53/8, 2 51/8 55/8, 3 15/2 25/4, 4 8 7, 5 8 8, l'assegnazione {1: True, 2: False, 3: True, 4: True, 5: True} 8 e la distribuzione [(5, 4), (6, 10), (7, 12), (8, 6)].
Versione ripasso
- Attesa. Clausola con letterali distinti: . Tre clausole da () e cinque da (): , quindi esiste un'assegnazione con clausole (Metodo probabilistico - valore atteso, alterazioni e derandomizzazioneMetodo probabilistico: se un oggetto casuale ha una proprietà con probabilità positiva (o una variabile ha media mu, quindi qualche esito la raggiunge) allora l'oggetto esiste; taglio di almeno |E|/2, MAX-SAT con 7/8, limite inferiore di Ramsey R(k,k) > 2^(k/2), alterazioni (insiemi indipendenti, Ramsey), derandomizzazione con le aspettative condizionate, lemma locale di Lovász solo enunciato.Metodo probabilistico - valore atteso, alterazioni e derandomizzazione →).
- Derandomizzazione. Clausola se già vera, con letterali liberi, se falsa. Passi: vero e falso (scelto vero); : contro (falso); : contro (vero); : contro (vero); : e (vero). Risultato soddisfa tutte e ; l'attesa non scende.
- Enumerazione ( assegnazioni). Soddisfano clausole in casi, media .
- Metà delle clausole. probabilità esiste un'assegnazione con clausole; mostra che non si migliora.
- Errori tipici. Usare anche per le clausole da due letterali; dimenticare che con letterali sulla stessa variabile la formula cambia (una clausola è sempre vera); scegliere il valore con attesa minore.