SAT, CP, SMT, (gran parte) di ASP affrontano tutti lo stesso insieme di problemi di ottimizzazione combinatoria. Tuttavia, vengono a questi problemi da diverse angolazioni e con diverse cassette degli attrezzi. Queste differenze sono in gran parte nel modo in cui ciascun approccio struttura le informazioni sull'esplorazione dello spazio di ricerca. La mia analogia di lavoro è che SAT è il codice macchina, mentre gli altri sono linguaggi di livello superiore.
X1∨ x2¯¯¯¯¯∨ x3{ ( x1, 0 ) , ( x2, 1 ) , ( x3, 0 ) }X1X3X2X1∨x2¯¯¯¯¯∨x3∨x4X1∨ x2¯¯¯¯¯∨ x3∨ x4¯¯¯¯¯∨ x5
Viene mantenuta un'approssimazione della struttura della clausola per restringere il set di soluzioni e per aiutare a determinare se questo set è vuoto. Durante la ricerca alcuni incarichi parziali potrebbero non essere contenuti in alcuna soluzione (anche se soddisfano individualmente ciascuno dei vincoli nell'istanza). Questi sono conosciuti come nogoods , un termine introdotto da ("Mr GNU") Stallman e Sussmanx ≤ 5x = 5. Quindi non esiste una singola struttura generale della clausola, ma una associata a ciascuna scelta di rappresentazione, a seconda di ciò che rappresentano i singoli (letterali) della struttura della clausola.
La programmazione dei vincoli (CP) era tradizionalmente una disciplina di intelligenza artificiale, con particolare attenzione alla programmazione, all'orario e ai problemi combinatori, e quindi ha un ruolo centrale per le variabili che possono assumere più di due soli valori (ma di solito solo finitamente molti). CP ha sottolineato la ricerca efficiente e, motivato dalle applicazioni tradizionali, ha dato un ruolo centrale al all-different
vincolo (iniettività), ma ha anche sviluppato propagatori efficienti per molti altri tipi di vincoli. Le definizioni formali di CP esistono da almeno le reti di vincoli di Montanari del 1974, con i precursori che risalgono anche prima. Questo peso della storia potrebbe aver contribuito a ritardare il CP rispetto ad altri approcci nelle prestazioni allo scoperto nell'ultimo decennio. CP mantiene classicamente un'approssimazione del complemento della struttura della clausola, tramite un insieme di domini attivi per le variabili. Lo scopo è quello di eliminare i valori dai domini attivi, esplorando la struttura della clausola cercando di assegnare valori candidati alle variabili e backtracking quando necessario.
Le teorie sul modulo di soddisfazione (SMT) sono emerse dalla comunità di verifica. Ogni teoria in un risolutore SMT forma una rappresentazione implicita di potenzialmente infinite clausole SAT. Le teorie utilizzate con SMT e i vincoli utilizzati nel CP riflettono le loro diverse applicazioni storiche. La maggior parte delle teorie che SMT considera hanno a che fare con array indicizzati in numeri interi, campi reali chiusi, ordini lineari e simili; questi derivano dall'analisi statica dei programmi (nella verifica assistita da calcolatore) o durante la formalizzazione di prove matematiche (nel ragionamento automatizzato). Al contrario, nell'orario e nella pianificazione il vincolo di iniettività è centrale, e sebbene il linguaggio SMTLIB standard abbia avuto un vincolo di iniettività sin dal suo inizio nel 2003 (tramite ildistinct
simbolo ), fino al 2010 i solutori SMT sono stati implementatidistinct
tramite un algoritmo ingenuo. A quel punto la tecnica di abbinamento del propagatore CP standard per è all-different
stata trasferita, con grande effetto se applicata a grandi elenchi di variabili; vedi Un risolutore di vincoli Alldifferent in SMT di Banković e Marić, SMT 2010. Inoltre, la maggior parte dei propagatori di CP sono progettati per problemi con domini finiti, mentre le teorie SMT standard si occupano di domini infiniti (numeri interi e reals più recenti) pronti all'uso. SMT utilizza un'istanza SAT come approssimazione della struttura della clausola, estraendo le clausole nogood dalle teorie appropriate. Una bella panoramica è la Teoria del Modulo di Soddisfazione: Introduzione e Applicazioni
di De Moura e Bjørner, doi: 10.1145 / 1995376.1995394.
La programmazione del set di risposte (ASP) è nata dalla programmazione logica. A causa della sua attenzione alla risoluzione del problema più generale della ricerca di un modello stabile, e anche perché consente la quantificazione universale oltre che esistenziale, ASP per molti anni non è stato competitivo con CP o SMT.
Formalmente, SAT è CSP su domini booleani, ma il focus su SAT sull'apprendimento delle clausole, una buona euristica per il rilevamento dei conflitti e modi rapidi per tornare indietro sono abbastanza diversi dal tradizionale focus CSP sui propagatori, stabilendo coerenza ed euristica per l'ordinamento variabile. SAT è di solito estremamente efficiente, ma per molti problemi è necessario un grande sforzo per esprimere prima il problema come istanza SAT. L'uso di un paradigma di livello superiore come CP può consentire un'espressione più naturale del problema, quindi l'istanza CP può essere tradotta in SAT a mano o uno strumento può occuparsi della traduzione. Una bella panoramica dei principi fondamentali di SAT è Sui moderni risolutori della soddisfazione dell'apprendimento delle clausole di Pipatsrisawat e Darwiche, doi: 10.1007 / s10817-009-9156-3 .
Passiamo ora dalle generalità ai dettagli di oggi.
Nell'ultimo decennio alcune persone in CP hanno iniziato a concentrarsi sulla generazione di clausole pigre (LCG). Questo è essenzialmente un modo per riunire i propagatori CP usando tecniche più flessibili simili a quelle delle SMT piuttosto che l'astrazione piuttosto rigida dei domini attivi. Ciò è utile perché esiste una lunga storia di propagatori di CP pubblicati per rappresentare e risolvere efficacemente molti tipi di problemi. (Naturalmente, un effetto simile si otterrebbe con uno sforzo concertato per implementare nuove teorie per i risolutori di SMT.) LCG ha prestazioni spesso competitive con SMT e per alcuni problemi potrebbe essere superiore. Una rapida panoramica è il documento CPAIOR 2010 di Stuckey Lazy Clause Generation: combinare la potenza della risoluzione SAT e CP (e MIP?) , Doi: 10.1007 / 978-3-642-13520-0_3. Vale anche la pena leggere il position paper di Garcia de la Banda, Stuckey, Van Hentenryck e Wallace, che dipinge una visione incentrata sul CP di The Future of Optimization Technology , doi: 10.1007 / s10601-013-9149-z .
Per quanto ne so, gran parte dell'attenzione della recente ricerca SMT sembra essersi spostata verso applicazioni in metodi formali e matematica formalizzata. Un esempio è la ricostruzione delle prove trovate dai risolutori SMT all'interno di sistemi di prova come Isabelle / HOL, costruendo tattiche Isabelle / HOL per riflettere le regole di inferenza nelle tracce di prove SMT; vedi Ricostruzione rapida delle prove in stile LCF per Z3 di Böhmer e Weber a ITP 2010.
I migliori solutori ASP sono stati sviluppati negli ultimi anni per diventare competitivi con solutori solo CP, SMT e SAT. Ho solo vagamente familiarità con i dettagli dell'implementazione che hanno permesso ai risolutori come clasp
essere competitivi, quindi non posso davvero confrontarli con SMT e CP, ma Clasp pubblicizza esplicitamente la sua attenzione sull'apprendimento dei nogood.
Attraversare i confini tradizionali tra questi formalismi è la traduzione da rappresentazioni di problemi più astratti in formalismi di livello inferiore implementabili in modo efficiente. Molti dei migliori risolutori di ASP e CP ora traducono esplicitamente il loro input in un'istanza SAT, che viene quindi risolta utilizzando un solutore SAT standard. In CP, l' assistente alla modellazione dei vincoli di Savile Row utilizza tecniche di progettazione del compilatore per tradurre i problemi espressi nel linguaggio di medio livello Essence in un formalismo di livello inferiore, adatto per l'input ai solutori di CP come Minion o MiniZinc . Originariamente Savile Row ha lavorato con una rappresentazione CP come formalismo di basso livello, ma ha introdotto SAT come obiettivo nella versione 1.6.2. Inoltre, l' Essenza linguistica di livello ancora superioreora può essere automaticamente tradotto in Essence 'dallo strumento Conjure . Allo stesso tempo, i solutori di basso livello solo SAT come Lingeling continuano ad essere perfezionati ogni anno, più recentemente alternando fasi di apprendimento e elaborazione delle clausole; guarda la breve panoramica Novità delle competizioni SAT e ASP di Heule e Schaub nell'AAAI 2015.
L'analogia con la storia dei linguaggi di programmazione sembra quindi appropriata. SAT sta diventando una sorta di "codice macchina", indirizzato a un modello di basso livello di esplorazione delle clausole nella struttura delle clausole. I paradigmi astratti stanno diventando più simili ai linguaggi informatici di livello superiore, con le loro metodologie e applicazioni distinte sono bravi ad affrontare. Infine, la raccolta sempre più densa di collegamenti tra questi diversi livelli sta iniziando a somigliare all'ecosistema di ottimizzazione del compilatore.