Quando utilizzare Soddisfazione per vincoli vs SAT?


18

Se ho un problema difficile, un approccio standard è quello di esprimerlo come istanza SAT e provare a eseguire un solutore SAT su di esso. Un altro approccio standard è quello di esprimerlo come un problema di soddisfazione dei vincoli e provare a utilizzare un risolutore CSP. I due si sentono in qualche modo vagamente simili in quali tipi di problemi possono essere naturalmente espressi nel loro formato di input.

Esistono linee guida o regole empiriche su come riconoscere, per un dato problema, quale approccio ha maggiori probabilità di produrre buoni risultati? C'è qualche consiglio che qualcuno può offrire su quali tipi di problemi possono essere gestiti meglio dai solutori SAT che dai solutori CSP o viceversa?

(Ovviamente, ci sono alcuni problemi facili che possono essere risolti da entrambi gli approcci. Ci sono anche alcuni problemi difficili che non possono essere risolti utilmente da entrambi gli approcci. Mettiamoli da parte. Il caso in cui l'orientamento è più utile sono i problemi in cui l'uno o l'altro SAT i solutori hanno prestazioni migliori rispetto ai solutori CSP o dove i solutori CSP hanno prestazioni migliori rispetto ai solutori SAT. Come faccio a riconoscere quando un solutore SAT è probabile che si adatti meglio di un solutore CSP, o quando è probabile che un solutore CSP sia più adatto di un solutore SAT - cioè quale approccio provare per primo?)


1
Si noti che un problema non può essere troppo difficile se si desidera ridurre a SAT.
Raffaello

1
O perché concentrarsi solo su SAT / CSP, che ne dici di SMT?
Juho,

L'uso di uno strumento di risoluzione dei vincoli ha il vantaggio di poter facilmente provare alcune ottimizzazioni (ad es. Tecniche di rottura della simmetria) su istanze non troppo difficili (e verificare l'efficacia di tali ottimizzazioni). Inoltre, molti di essi possono generare un file CNF standard come output intermedio.
Vor,

Ottimo punto, @Juho! Vale anche la pena considerare SMT: sentiti libero di confrontare tutti e tre (SAT, CSP, SMT), se hai qualche idea al riguardo.
DW

Ho avuto la stessa domanda, grazie per avermelo chiesto.
xxx ---

Risposte:


8

Penso che questa sia un'ottima domanda. Potresti anche chiedere: quando usare un risolutore SMT? Ho la sensazione che potrebbe essere difficile da determinare prima di modellare il problema e effettivamente eseguire i risolutori CSP / SAT / SMT e scoprirlo. È risaputo che anche solutori diversi funzionano in modo molto diverso negli stessi casi! La mia intuizione deriva anche dal fatto che esistono potenzialmente molti modi per modellare un problema. Inoltre, ci sono molti modi di fare ricerca e inferenza, a seconda del tipo di vincoli utilizzati (se il formalismo in questione consente tipi diversi).

8×89+9+9=2732×32 Puzzle di Sudoku, i solutori di SAT sarebbero più veloci dei solutori di CSP.

Formalismi diversi sono in grado di acquisire informazioni specifiche sul dominio e sfruttarle meglio e in modi diversi. Per un po 'di più su questo, vedi la risposta e i commenti qui .

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.