Ricettario per codifiche SAT?


17

I solutori SAT stanno diventando sempre più efficienti nella risoluzione di istanze di grandi dimensioni e vengono utilizzati come back-end in vari contesti. Ogni volta che si desidera utilizzarli per risolvere un problema in un dominio specifico, deve elaborare una codifica ad-hoc che non solo abbia il giusto set di soluzioni ma metta anche i vincoli (anche ridondanti) in una forma ciò aiuta l'euristica dei solutori a trovare una soluzione più velocemente.

Molte di queste codifiche mi sembrano molto comuni, per esempio: affermare che un insieme finito di nodi è collegato come un albero, o come un DAG, o un elenco è ordinato ...

Esiste un repository / ricettario di codifiche comuni per problemi comuni con soluzioni ottimizzate?


1. Questa domanda sembra molto utile, ma anche potenzialmente sovradimensionata. Penso che potrebbe essere una domanda migliore se la focalizzi su un singolo dominio (sì, questo potrebbe comportare più domande, una per dominio - ma assicurati di fare qualche ricerca prima di chiederci e mostrarci cosa hai fatto).
DW

2. Inoltre, quali ricerche hai fatto? Hai guardato front-end SAT, come STP, Alloy e Minion? Hai visto cs.stackexchange.com/q/12087/755 , cs.stackexchange.com/q/13188/755 , cs.stackexchange.com/a/6522/755 , cs.stackexchange.com/a/12153/ 755 ? alle domande taggate sat-solvers o soddisfacibilità ?
DW

Sì, la domanda potrebbe essere un po 'ampia. @DW grazie per i collegamenti alcuni di essi sono direttamente rilevanti. Avrei dovuto menzionare che non sono interessato a risolvere un problema particolare, né a metodi generali per codifiche più efficienti; l'espressione "buone pratiche" che ho usato è probabilmente fuorviante, lo modificherò. Sono interessato a un ricettario =)
Bordaigorl,

Per quanto riguarda il dominio, direi la teoria dei (iper) grafi, ma probabilmente è ancora molto ampia ...
Bordaigorl,

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

Risposte:


9

Ho letto un documento di indagine qualche anno fa che sembra pertinente, " Tecniche di codifica SAT di successo " di Magnus Björk.

Astratto:

Questo articolo identifica le buone pratiche per le codifiche SAT analizzando le interviste con un numero di noti esperti SAT. Lo scopo è sia determinare la fiducia nelle diverse strategie di codifica analizzando se vi sia consenso tra gli esperti o meno, sia diffondere conoscenze nascoste agli utenti SAT.

Vi è consenso sul fatto che le tecniche di codifica di solito hanno un impatto drammatico sull'efficienza del solutore SAT, che spesso ci vuole molto lavoro per trovare una buona codifica e che le dimensioni di una codifica siano solo molto vagamente legate alla durezza di trovare una soluzione . Gli argomenti in cui gli intervistati non sono d'accordo includono la possibilità di includere l'aritmetica nei problemi di SAT e se formulare problemi come clausole o circuiti.

L'articolo descrive una serie di strategie utili in diverse situazioni, ad esempio modi diversi di rappresentare i numeri e come utilizzare l'incrementalità.


4

È sempre una buona idea controllare prima il Manuale di soddisfazione [1] (suppongo che non sia disponibile gratuitamente, mi dispiace). Qui, il capitolo 2 è intitolato "Codifiche CNF". Per lo meno, il libro fornisce riferimenti letterari sullo stato dell'arte al momento della stesura e puoi espandere la tua ricerca attraverso di essi.

Inoltre, qui e qui ci sono due recenti diapositive sulla pre-elaborazione SAT. Le diapositive offrono una breve panoramica delle tecniche di preelaborazione e ulteriori riferimenti. L'idea è che invece di provare a modellare "manualmente" il problema in modo efficiente, basta modellarlo nel modo più semplice, premere go e un software offre una codifica efficiente.


[1] Biere, Armin, Marijn Heule e Hans van Maaren, eds. Manuale di soddisfacibilità. Vol. 185. IOS Press, 2009.


3

non esattamente una risposta diretta, ma un altro aspetto sempre più strettamente correlato: parte di questo è coperto da un'area di ricerca relativamente nuova nota come SMT, Soddisfacente Modulo Teorie . l'idea di base è quella di combinare codifiche problematiche (ad es. aritmetica intera, grafici, ecc.) nel solutore SAT ma anche utilizzare / sfruttare la conoscenza aggiuntiva che deriva da questo accoppiamento per costruire algoritmi di soluzione più avanzati. ecco un sondaggio. come sottolineato, possono essere molto più efficienti della combinazione di un meccanismo di codifica ad-hoc con solutori SAT standard.

  • Teorie del modulo di soddisfazione: un aperitivo / Leonardo de Moura e Nikolaj Bjørner

    Soddisfacibilità Modulo Theories (SMT) riguarda la verifica della soddisfacibilità delle formule logiche rispetto a una o più teorie. Il problema si basa su una combinazione di alcune delle aree più fondamentali dell'informatica. Combina il problema della soddisfacibilità booleana con domini, come quelli studiati nell'ottimizzazione convessa e nella manipolazione a termine di sistemi simbolici. Si basa anche sui problemi più prolifici dell'ultimo secolo della logica simbolica: il problema decisionale, la completezza e l'incompletezza delle teorie logiche e infine la teoria della complessità. Il problema di combinare in modo modulare algoritmi per scopi speciali per ciascun dominio è profondo e intrigante come trovare nuovi algoritmi che funzionano particolarmente bene nel contesto di una combinazione. SMT ha anche un ruolo molto utile nell'ingegneria del software. Software moderno, l'analisi hardware e gli strumenti basati su modelli sono sistemi software sempre più complessi e sfaccettati. Tuttavia, al loro interno c'è sempre un componente che usa la logica simbolica per descrivere stati e trasformazioni tra di loro. Un solutore SMT ben calibrato che tiene conto delle scoperte all'avanguardia di solito scala gli ordini di grandezza oltre i solutori personalizzati ad-hoc.


Questo è un ottimo punto. Ma anche quando si utilizza un solutore SMT, esiste una parte della ricerca basata esclusivamente su SAT che può trarre vantaggio da "ricette" di successo ...
Bordaigorl,

non è del tutto esatto dire che esiste una "parte puramente SAT della ricerca", perché (come dichiarato / mia comprensione) utilizza nella sua euristica la speciale struttura conosciuta / costruita delle istanze generate che un solutore "vaniglia" non vorrebbe "riconoscere". in altre parole (cioè la combinazione ) non è "riducibile / separabile" per le parti costituenti (cioè encoder più solutore) o semplicemente un altro sistema di codifica standardizzato.
vzn

Vedo. Ne leggerò di più grazie!
Bordaigorl,

sicuro. anche la programmazione del set di risposte è in qualche modo simile.
vzn
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.