Trovare una serie di soluzioni estremamente diverse usando la programmazione lineare o altre tecniche di ottimizzazione


8

Tradizionalmente, la programmazione lineare viene utilizzata per trovare l'unica soluzione ottimale a un insieme di vincoli, variabili e un obiettivo (tutti descritti come relazioni lineari). A volte, quando l'obiettivo è parallelo a un vincolo, ci sono infinite o ottime soluzioni ugualmente valide. Non sto chiedendo di quest'ultimo caso.

Sono più interessato a trovare molte soluzioni che si trovano nella regione fattibile generata dal mio insieme di vincoli. Ma vorrei che le soluzioni che trovo fossero "sparse" nella regione possibile, nel senso che sono al massimo distanti tra loro. Esiste un modo noto per, senza eseguire più volte un solutore, generare più soluzioni e utilizzare la funzione obiettivo per imporre che le soluzioni debbano essere separate?

Ad esempio, qualsiasi programma lineare con decisioni a e b e vincoli w <= a <= xey <= b <= z può essere "duplicato" per trovare due soluzioni. Il nostro nuovo programma lineare ha variabili a1, a2, b1 e b2 e i vincoli w <= a1 <= xe w <= a2 <= x e simili per b1, b2. Tuttavia, quando si tratta di formare una funzione oggettiva ci troviamo in difficoltà poiché non possiamo usare norme diverse dalla norma L1 senza scartare la linearità e non possiamo nemmeno usare la norma L1 perché non è possibile (per quanto ne so ) per codificare valori assoluti.

Forse dovrei esaminare l'ottimizzazione convessa o la programmazione semidefinita o qualcosa del genere?

Esiste un modo noto per generare una serie di soluzioni per un programma lineare e l'utilizzo di un obiettivo che impone la "distanza" tra le soluzioni?


1
Calcola il cubo più piccolo che circonda la tua regione praticabile (se non ha limiti, scegli una parte limitata), posiziona un'ipergriglia con la risoluzione desiderata su di essa e scarta tutti i punti che non soddisfano le restrizioni. questo funzionerebbe per te?
Raffaello

Ciò potrebbe funzionare per me, anche se non mi è chiaro come farei per calcolare l'ipercubo, e penso che la regione fattibile che sto indagando sia altamente non banale - mi aspetto che molti punti debbano essere scartati. La mia particolare applicazione ha decine di migliaia di variabili / decisioni e centinaia di vincoli.
Ross,

Una soluzione fattibile di base è in un vertice del politopo. Non puoi guardare le normali delle facce degli incidenti per calcolare una direzione "attraverso" il politopo e seguirla fino al limite della regione possibile? Questo dovrebbe darti soluzioni ragionevolmente diverse, ma probabilmente non le più diverse.
adrianN,

Non usare un cubo. Utilizzare un ellissoide (in particolare, un piccolo ellissoide contenente il politipo, che può essere trovato con il metodo ellissoide). In questo modo, sei sicuro di trovare un numero ragionevole di punti nella regione.
Peter Shor,

Risposte:


2

Un euristico, usando la programmazione lineare

Un approccio potrebbe essere quello di scegliere una funzione obiettivo casuale e massimizzarla. Quindi ripetere, con una serie diversa di funzioni oggettive ogni volta.

In altre parole, supponiamo che lo siano le incognite x1,x2,,xne hai alcuni vincoli C. In ogni iterazione che sceglic1,c2,,cnR in modo casuale, quindi cerca una soluzione che massimizzi c1X1++cnXn soggetto ai vincoli C.

Mi aspetterei che questa euristica possa spesso trovare una serie di soluzioni un po 'sparse, non necessariamente sparse al massimo (al massimo le une dalle altre), ma probabilmente neanche troppo vicine tra loro.

Massimizzare la distanza media L2 a coppie, usando la programmazione quadratica

In alternativa, utilizzare la programmazione quadratica. Per semplicità, esaminiamo il problema di trovare due soluzioni. Supponiamo che tu voglia due soluzioniX,y che sono il più lontano possibile l'uno dall'altro, sotto il L2norma (distanza euclidea). Quindi questo può essere formulato come un problema di programmazione quadratica .

Fondamentalmente, vuoi massimizzare la distanza al quadrato d(X,y)2=(X1-y1)2++(Xn-yn)2 fra X e y, subordinatamente al requisito che entrambi X e ydeve soddisfare i vincoli. Questo è il problema di massimizzare una funzione quadratica dell'obiettivo, con vincoli lineari - cioè la programmazione quadratica.

Se vuoi Kpunti che sono al massimo dispersi, anche questo è possibile. Di 'che sono i puntiX1,...,XKRn. Quindi potresti massimizzare la funzione obiettivo

Σio<jd(Xio,Xj)2,

cioè, la funzione

Σio<jΣ(Xio-Xj)2.

Questa è una funzione quadratica e hai vincoli lineari C su ciascuno dei punti Xio, quindi questa è un'istanza di programmazione quadratica. Ti trova punti che sono sparsi al massimo nel senso che la distanza media a coppie è massimizzata.

Puoi anche formulare una variante golosa di questo algoritmo, dove hai già K soluzioni e vuoi trovare a K+1la soluzione che soddisfa tutte le disuguaglianze lineari e massimizza anche la distanza media L2 da essa all'altra Ksoluzioni. Anche questo può essere formulato come un problema di programmazione quadratica.

La programmazione quadratica è più difficile della programmazione lineare, ma esistono solutori che risolveranno i problemi di programmazione quadratica per te.

Massimizzare la distanza minima L2 a coppie, usando QCQP

Infine, supponiamo che tu voglia il tuo Kpunti da spargere nel senso che si desidera massimizzare la distanza minima a coppie. In altre parole, supponiamo che tu voglia trovare la soglia più grande possibilet tale che è possibile trovare K punti X1,...,XKRn che ciascuno soddisfi i vincoli lineari e tale che ogni coppia di punti sia a distanza t distanti l'uno dall'altro: d(Xio,Xj)t per tutti io<j. Quindi questo può essere formulato come un programma di ottimizzazione quadratica con vincoli quadratici, cioè QCQP . QCQP è ancora più difficile, ma ci sono solutori pronti all'uso per QCQP che potresti provare anche tu.


1

Ho trovato un approccio per generare valori assoluti.

Supponiamo di avere le variabili un'1, un'2, B1 e B2e un sacco di vincoli. Le nostre funzioni oggettive assomigliano a: massimizzare|un'1-un'2|+|B1-B2|; essendo l'idea che vogliamo massimizzare la norma L1 di queste due soluzioni (secondo la domanda originale).

Possiamo introdurre "variabili lente" abs_a e abs_b e i vincoli:

un'BSun'+un'1-un'20

un'BSun'-un'1+un'20

e allo stesso modo per B1 e B2. Questi vincoli forzanoun'BSun' essere al massimo la differenza tra un'1 e un'2e forse meno. In altre paroleun'BSun' non può essere maggiore della differenza massima tra un'1 e un'2.

Quindi ciò che resta è sostituire la funzione obiettivo: massimizzare un'BSun'+un'BSB.


In realtà, queste codifiche funzionano solo per ridurre al minimo i valori assoluti. Qui non risolve il mio problema. Maggiori informazioni qui: lpsolve.sourceforge.net/5.5/absolute.htm
Ross
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.