Problema di fattibilità di programmazione lineare con rigidi vincoli di positività


15

Esiste un sistema di vincoli lineari . Vorrei trovare un vettore strettamente positivo che soddisfi questi vincoli. Ciò significa che è richiesto per ogni componente di . Come posso usare un solutore LP per trovare un vettore così strettamente positivo (o confermare che non esiste )? Non posso semplicemente introdurre un altro sistema di vincoli , perché l'uguaglianza deve essere sempre consentita in un LP, ma posso usare il solutore LP più volte, con funzioni oggettive modificabili. Penso che dovrei usare il metodo variabile variabile, ma non so come.Axbx>0xi>0xixxx i > 0xxi>0

Risposte:


15

Puoi aggirare il problema di scegliere un piccolo diventando un po 'più ambizioso: prova a trovare tale cheϵ>0xAxb e che la voce più piccola in x sia il più grande possibile.

y=[xϵ]Rn+1
xRn
maxy[00 1]ys.t.[A 0]yband0[10010101011]y.

Questa è una riformulazione del seguente problema:

maxϵs.tAxbandxϵ1.


ben fatto, questo equivale a un trucco un coautore e che ho appena usato in un recente articolo, e decisamente superiore all'approccio che ho suggerito.
Aron Ahmadia,

Concordato. Ben fatto, signore.
Geoff Oxberry,

Il problema riformulato può avere un obiettivo illimitato nei casi in cui la risposta al problema originale è banale. Ad esempio, se il sistema di vincoli è solo . Va bene purché si verifichi fattibile, ottimale o illimitato nello stato di ritorno del proprio solutore lp, o si rilevi esplicitamente . ϵx1ϵ
David Nehme,

@DavidNehme: è possibile aggiungere il vincolo per ottenere un obiettivo limitato. yn+11
Arnold Neumaier,

5

Per un problema di fattibilità LP, non userei simplex standard. Gli algoritmi simplex primari standard (o doppi) visiteranno solo i vertici dell'insieme realizzabile dei problemi primari (o doppi).

Lascia che l'insieme fattibile del problema che vuoi effettivamente risolvere sia , e supponi invece che dovresti risolvere il problema ( F ε ):F={x:Axb,x>0}Fε

minx0s.t.Axbxε1.

Il approssimativo più vicino al problema che si desidera risolvere è , che ammette un numero leggermente maggiore di punti. Il problema è che il limite dell'ortante positivo (ovvero l'insieme B = { x : x0 , i : x i = 0 } potrebbe costituire parte del limite dell'insieme fattibile di F 0 . piace escludere quei punti. Un modo per farlo è quello di suggerire Aron, che è impostare εF0B={x:x0,i:xi=0}F0εa qualche piccolo valore positivo, quindi utilizzare qualsiasi algoritmo LP standard. Questa strategia è valida e probabilmente funzionerà in un'ampia varietà di situazioni. Tuttavia, fallirà se è impossibile. Sappiamo che F 0F F ε per tutto ε > 0 (per abusare della notazione e fare riferimento a un insieme fattibile dal suo problema corrispondente), ed è possibile che anche se scegli piccoli valori positivi di ε , il solutore LP indicherà che il tuo LP non è fattibile.FεF0FFεε>0ε

Per un risolutore LP, userei qualsiasi algoritmo punto interno per dischi che inizia con un punto fattibile e soggiorni fattibili, che è un altro modo per escludere punti . Non è necessario fornire un punto fattibile a questi algoritmi; i solutori standard lo faranno per te. Metodi come il ridimensionamento affine, la riduzione potenziale e i metodi di barriera creano LP ausiliari che troveranno soluzioni fattibili e le iterate per questi algoritmi attraversano l'interno della regione fattibile. Hai solo bisogno di individuare un punto nella tua regione fattibile, quindi finché i problemi ausiliari usati dai solutori LP individuano un punto fattibile per il tuo problema, e quel punto fattibile è strettamente positivo, dovresti andare bene. Se la risoluzione di F ε fallisce per piccoli valori positivi di εBFεε, potresti comunque essere in grado di utilizzare questi metodi per individuare un punto fattibile strettamente positivo all'interno di .F0

Non usare simplex, però, perché esplorerà solo i vertici di , che è esattamente quello che vuoi evitare di fare.Fε


4

I problemi di fattibilità sono un gioco leggermente più complicato dei problemi lineari generali, che hai notato. Se stai risolvendo approssimativamente (usando una rappresentazione in virgola mobile del sistema di equazioni e vincoli), è legittimo richiedere , dove ϵ ha un valore numerico molto piccolo, abbastanza grande da assicurare che x i effettivamente vive in + , ma abbastanza piccolo da non prendere in considerazione una soluzione al limite.xi>=ϵϵxi+

Potrebbe essere necessario regolare e la soluzione sarà qualificata per "entro un fattore ϵ ", ma ciò è sufficiente per molte situazioni.ϵϵ


2

La risposta data dall'eismail deve essere letta attentamente, per quanto riguarda l'lp

max(x1+x2)

st

x1+x21

x1,x20

Ha soluzioni e ( 0 , 1 ) e altre (degenerate). La generalità della domanda implica che anche questi casi devono essere trattati.(1,0)(0,1)

Dato che sei in grado di scegliere la tua funzione oggettiva, potresti provare a modificarla in modo iterativo. Ad esempio, iniziare con tutti i coefficienti per tutte le variabili uguali a una, verificare se si ottiene una soluzione appropriata. Se una variabile è zero, aumenta il suo coefficiente e ricomincia ...

Anche se non posso dare una prova matematica che funzioni (o una procedura ben definita su come modificare la funzione obiettivo). Spero che questo possa essere d'aiuto :)


Tuttavia, se si dispone di un gran numero di soluzioni degenerate, come gestirle numericamente? Praticamente nessun risolutore numerico emetterà un avvertimento (o peggio) sulla risoluzione di questo problema?
Aeismail,

No, non lo faranno; restituiranno solo la prima soluzione ottimale riscontrata. Il modo in cui continueresti a generare soluzioni è quello di aggiungere piani di taglio (o altri vincoli) che escludano soluzioni ottimali calcolate in precedenza. In questo caso, l'aggiunta di tali piani di taglio consentirebbe di restituire un'approssimazione discreta dell'insieme infinito di soluzioni ottimali.
Geoff Oxberry,

Lo vedrei come una strana decisione di programmazione; perché non vorresti dire all'utente che la funzione obiettivo stava facendo qualcosa di strano nelle vicinanze della soluzione segnalata? Per un risolutore non lineare, ho potuto vedere che c'è un problema nel capire cosa sta succedendo; ma non dovrebbe essere più facile da dire con un sistema lineare?
Aeismail,

Dovrei pensare a come si potrebbe rilevare la degenerazione costruendo effettivamente i problemi, ma in genere gli utenti vogliono una soluzione ottimale, quindi le informazioni più importanti per un LP sono restituire se la soluzione è ottimale, fattibile (ma non ottimale), impossibile o illimitato. (Questi stati sono, in effetti, ciò che un risolutore come CPLEX vorrebbe restituire.) La degenerazione è principalmente una questione teorica; l'unico motivo per cui sarebbe discusso in un contesto numerico è o nella progettazione di algoritmi o nella pratica, notare che la degenerazione rallenta in genere un risolutore.
Geoff Oxberry,
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.