Esprimere operazioni logiche booleane nella programmazione lineare intera zero (ILP)


58

Ho un programma lineare intero (ILP) con alcune variabili che intendono rappresentare valori booleani. Gli sono vincolati ad essere numeri interi e contenere 0 o 1 ( ).x i 0 x i1xixi0xi1

Voglio esprimere operazioni booleane su queste variabili con valore 0/1, usando vincoli lineari. Come posso fare questo?

Più specificamente, voglio impostare (AND booleano), (OR booleano) e (booleano NOT). Sto usando l'ovvia interpretazione di 0/1 come valori booleani: 0 = false, 1 = true. Come posso scrivere i vincoli ILP per assicurarmi che gli siano correlati agli come desiderato?y 2 = x 1x 2 y 3 = ¬ x 1 y i x iy1=x1x2y2=x1x2y3=¬x1yixi

(Questo potrebbe essere visto come chiedere una riduzione da CircuitSAT a ILP o chiedere un modo per esprimere SAT come ILP, ma qui voglio vedere un modo esplicito per codificare le operazioni logiche mostrate sopra.)

Risposte:


66

AND logico: utilizzare i vincoli lineari , , , , dove è vincolato ad un numero intero. Questo rafforza la relazione desiderata. (Abbastanza pulito da poterlo fare solo con disuguaglianze lineari , eh?)y1x1+x21y1x1y1x20y11y1

OR logico: utilizzare i vincoli lineari , , , , dove è vincolato ad un numero intero.y2x1+x2y2x1y2x20y21y2

Logico NOT: utilizzare .y3=1x1

Implicazione logica: per esprimere (cioè ), possiamo adattare la costruzione per OR logico. In particolare, utilizzare i vincoli lineari , , , , dove è vincolato ad un numero intero.y4=(x1x2)y4=¬x1x2y41x1+x2y41x1y4x20y41y4

Implicazione logica forzata: per esprimere che deve contenere, utilizzare semplicemente il vincolo lineare (supponendo che e siano già vincolati a valori booleani).x1x2x1x2x1x2

XOR: per esprimere (l'esclusivo o di e ), utilizzare le disuguaglianze lineari , , , , , dove è vincolato ad essere un numero intero.y5=x1x2x1x2y5x1+x2y5x1x2y5x2x1y52x1x20y51y5


E, come bonus, un'altra tecnica che spesso aiuta nella formulazione di problemi che contengono una miscela di zero-uno (variabili booleane) e variabili intere:

Trasmetti a booleano (versione 1): supponi di avere una variabile intera e che desideri definire modo che se e se . Se sai anche che , puoi usare le disuguaglianze lineari , , ; tuttavia, questo funziona solo se si conosce un limite superiore e inferiore di . Oppure, se sai che (ovvero ) per alcune costanti , quindi puoi utilizzare il metodo descritto quixyy=1x0y=0x=00xU0y1yxxUyx|x|UUxUU. Questo è applicabile solo se si conosce un limite superiore su.|x|

Cast to boolean (versione 2): consideriamo lo stesso obiettivo, ma ora non conosciamo un limite superiore su . Tuttavia, supponiamo di sapere che . Ecco come potresti essere in grado di esprimere quel vincolo in un sistema lineare. Innanzitutto, introdurre una nuova variabile intera . Aggiungi disuguaglianze , , . Quindi, scegli la funzione obiettivo in modo da ridurre a icona . Funziona solo se non avevi già una funzione obiettiva. Se hai variabili intere non negative e vuoi lanciarle tutte su booleani, in modo che sexx0t0y1yxt=xytnx1,,xnyi=1xi1 e se , allora puoi introdurre variabili con disuguaglianze , , e definire la funzione obiettivo per ridurre al minimo . Ancora una volta, questo funziona solo per nient'altro ha bisogno di definire una funzione obiettiva (se, a parte il cast in booleano, stavi pianificando di controllare solo la fattibilità dell'ILP risultante, non cercare di minimizzare / massimizzare alcune funzioni delle variabili).yi=0xi=0nt1,,tn0yi1yixiti=xiyit1++tn


Per alcuni eccellenti problemi di pratica ed esempi funzionanti, raccomando di formulare programmi lineari interi: una galleria di ladri .


quale risolutore di programmazione lineare può risolvere questo? perché in formato * .lp o * .mps un lato del vincolo deve essere un numero intero fisso e non una variabile.
boxi,

4
@boxi, non so nulla del formato * .lp o * .mps, ma ogni risolutore di programmazione lineare intero dovrebbe essere in grado di risolverlo. Nota che se hai qualcosa come , questo equivale a , che potrebbe essere nel formato desiderato. xyyx0
DW

-ho controllato di nuovo. lp_solve può risolverlo, ma ad esempio qsopt non può. non so perché. ma grazie <3
boxi

@boxi, ho appena controllato la GUI dell'app QSopt online e potrebbe gestire questo tipo di vincoli una volta modificato in , quindi non sono sicuro di cosa stia succedendo. (Ho usato il formato * .lp.) Sarei sorpreso se qualsiasi risolutore di ILP non fosse in grado di gestire questi sistemi. Se hai ulteriori domande su QSopt, dovresti probabilmente portarle nei forum di supporto di QSopt. xyxy0
DW

1
@Pramod, buona cattura! Grazie per aver individuato quell'errore. Hai assolutamente ragione. Ho fatto una nuova domanda su come modellare quel caso e aggiornerò questa risposta quando avremo una risposta a quella.
DW

19

La relazione logica AND può essere modellata in un vincolo di intervallo anziché in tre vincoli (come nell'altra soluzione). Quindi, anziché i tre vincoli può essere scritto usando il vincolo a intervallo singolo Allo stesso modo, per OR logico:

y1x1+x21,y1x1,y1x2,
0x1+x22y11.
02y1x1x21.

Per NOT, tale miglioramento non è disponibile.

In generale per ( -way AND) il vincolo sarà: Allo stesso modo per OR: y=x1x2xnn

0xinyn1.
0nyxin1.

Un approccio molto simile è in questo documento: ncbi.nlm.nih.gov/pmc/articles/PMC1865583
Abdelmonem Mahmoud Amer

3

Ho trovato una soluzione più breve per XOR y = x1⊕x2 (xey sono binari 0, 1)

solo una riga: x1 + x2 - 2 * z = y (z è un numero intero)


Per esprimere l'uguaglianza nell'ILP, sono necessarie due disuguaglianze. Inoltre, per evitare la soluzione , sono necessarie altre due disuguaglianze, . Quindi questa risposta ha quattro disuguaglianze e una variabile extra rispetto a sei disuguaglianze nella risposta di DW. 0 y 1x1=1,x2=0,z=200,y=1990y1
JiK

Per esprimere un'uguaglianza nell'ILP è necessaria solo un'equazione, questo è vero sia nella teoria LP che in software come Gurobi o CPLEX. @jk, immagino che intendi "esprimere" a "ha bisogno di due disuguaglianze".b
schermo bianco
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.