Conversione di problemi (matematici) in istanze SAT


22

Quello che voglio fare è trasformare un problema di matematica che ho in un problema booleano di soddisfacibilità (SAT) e quindi risolverlo usando un Risolutore SAT. Mi chiedo se qualcuno conosce un manuale, una guida o qualcosa che mi aiuterà a convertire il mio problema in un'istanza SAT.

Inoltre, voglio risolverlo in un tempo migliore di quello esponenziale. Spero che un Risolutore SAT mi aiuti.


1
SAT non ha metodi efficienti ... ma dai un'occhiata a queste diapositive
Fayez Abdlrazaq Deab


Solo una soluzione rapida e sporca prima di provare qualcos'altro, nel caso in cui tu voglia semplicemente provare qualcosa: cryptlogver . Lo strumento dice che è focalizzato su crypto, ma farà il trucco. Inoltre, la sintassi della lingua che userete è molto simile a quella di modo che non avrete molti problemi. L'installazione non è difficile ma il quartus è grande, quindi prendi una tazza di caffè.
absinthe_minded

1
Vedi anche la domanda correlata cs.stackexchange.com/q/30790
András Salamon,

Risposte:


20

Il capitolo 2 del Manuale di SAT (di Steven Prestwich) spiega come trasformare i problemi di decisione discreti in CNF, in modo approfondito. (Sfortunatamente, non penso che ci sia una versione in bozza online - probabilmente è meglio consultare la tua biblioteca locale.) Molte delle altre referenze citate nella bizzarra panoramica di Magnus Björk sono utili anche tecniche di codifica SAT di successo .

Se i tuoi problemi sono continui o sei particolarmente interessato ai sistemi di disuguaglianze, è più probabile che altri tipi di solutori ti siano utili. Come sottolinea Kyle, i risolutori SMT (come Z3 , Yices o OpenSMT ) potrebbero essere utili, sebbene tradizionalmente le teorie SMT tendano a concentrarsi sulla verifica del software per computer, quindi i solutori SMT di solito hanno un grande supporto per cose come le espressioni che coinvolgono intervalli di numeri interi , ma può avere prestazioni scarse sui vincoli di iniettività. Per i problemi che sono naturalmente espressi come sistemi di disuguaglianze, CPLEX è quello da battere (era disponibile gratuitamente per uso accademico e potrebbe essere ancora). Per alcuni problemi di decisione combinatoria (come trovareimballaggi di rettangoli in un quadrato ), i risolutori di vincoli come Minion superano i solutori SAT e sono spesso più facili da usare.


13

A meno che tu non stia traducendo problemi matematici in istanze SAT come un esercizio di apprendimento, il tuo tempo sarà molto più fruttuosamente dedicato all'apprendimento delle teorie del modulo di soddisfacibilità . SMT ti consentirà di esprimere equazioni e altri vincoli in modo molto più naturale rispetto alle istanze SAT booleane. Alcuni risolutori SMT supportano quantificatori esistenziali e universali, che consentono di spostarsi oltre NP ed esprimere i problemi di PSPACE.

Oltre ad essere più espressivi, i risolutori SMT sono più veloci. Non P = NP più veloce, ma più efficiente in quanto un buon risolutore SMT non elimina le informazioni strutturali specifiche della teoria che aiutano a guidare il risolutore attraverso lo spazio di ricerca. Fare una riduzione di Karp direttamente a un'istanza SAT costringe il solutore SAT a riapprendere tutta quella struttura, spesso a costi esponenziali. Ad esempio, il fatto che l'addizione sia commutativa viene persa sia sui solutori SAT basati sulla ricerca DPLL che su quelli locali; il risolutore non è a conoscenza del fatto che ha a che fare con i numeri! Per evitare di provare tutte le permutazioni di x + y + z = 10 un solutore SAT ha bisogno di un codice di rottura della simmetria, che richiede il rilevamento dell'automorfismo grafico. I migliori algoritmi di riconoscimento dell'automorfismo grafico corrente richiedono il tempo esponenziale al numero di vertici nel caso peggiore,


2
suggerisci qualche risolutore smt specifico?
Dchris

5

Due strumenti che convertono le lingue di alto livello in SMT o CNF.

CVC La sintassi è vicina a CAS.

CBMC Converte un programma C in CNF, permettendo affermazioni. Le asserzioni sono sempre vere o se viene trovato un falso input di controesempio. CBMC svolge i cicli, quindi alcuni programmi C hanno CNF / SMT esponenzialmente grandi.


Sembra che CBMC non converta un programma C arbitrario in un CNF; crea un CNF basato sul programma C che esegue un'analisi statica per overflow di interi, buffer overflow e simili.
vy32,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.