Encontrar un conjunto de soluciones máximamente diferentes usando programación lineal u otra técnica de optimización


8

Tradicionalmente, la programación lineal se utiliza para encontrar la solución óptima para un conjunto de restricciones, variables y un objetivo (todos descritos como relaciones lineales). A veces, cuando el objetivo es paralelo a una restricción, hay infinitas o muchas soluciones óptimas igualmente buenas. No estoy preguntando sobre este último caso.

Estoy más interesado en encontrar muchas soluciones que están en la región factible generada por mi conjunto de restricciones. Pero me gustaría que las soluciones que encuentro estén 'dispersas' alrededor de la región factible en el sentido de que están muy lejos una de la otra. ¿Existe una manera conocida de, sin ejecutar un solucionador varias veces, generar múltiples soluciones y utilizar la función objetivo para garantizar que las soluciones se separen?

Por ejemplo, cualquier programa lineal con decisiones a y by restricciones w <= a <= x e y <= b <= z puede 'duplicarse' para encontrar dos soluciones. Nuestro nuevo programa lineal tiene variables a1, a2, b1 y b2 y las restricciones w <= a1 <= x y w <= a2 <= x y similares para b1, b2. Sin embargo, cuando se trata de formar una función objetivo, nos encontramos con problemas, ya que no podemos usar otras normas que no sean la norma L1 sin descartar la linealidad y ni siquiera podemos usar la norma L1 porque no es posible (hasta donde yo sé ) para codificar valores absolutos.

¿Quizás debería considerar la optimización convexa o la programación semidefinida o algo así?

¿Existe una forma conocida de generar un conjunto de soluciones para un programa lineal y utilizando un objetivo que imponga la "distancia" entre las soluciones?


1
Calcule el cubo más pequeño que rodea su región factible (si no tiene límites, elija alguna parte delimitada), coloque una hipergrid con la resolución deseada y descarte todos los puntos que no cumplan las restricciones. ¿Eso funcionaría para ti?
Raphael

Eso podría funcionar para mí, aunque no está claro para mí cómo calcularía el hipercubo, y creo que la región factible que estoy investigando no es muy trivial: espero que se tengan que descartar muchos puntos. Mi aplicación particular tiene decenas de miles de variables / decisiones y cientos de restricciones.
Ross

Una solución factible básica está en un vértice del politopo. ¿No puede mirar las normales de las caras del incidente para calcular una dirección "a través" del politopo y seguirla hasta el límite de la región factible? Eso debería darle soluciones razonablemente diferentes, pero probablemente no las más diferentes.
adrianN

No uses un cubo. Use un elipsoide (específicamente, un pequeño elipsoide que contiene el politopo, que se puede encontrar mediante el método elipsoide). De esa manera, tiene la garantía de encontrar un número razonable de puntos en la región.
Peter Shor

Respuestas:


2

Una heurística, utilizando programación lineal.

Un enfoque podría ser elegir una función objetivo aleatoria y maximizarla. Luego repita, con un conjunto diferente de funciones objetivas cada vez.

En otras palabras, suponga que las incógnitas son , y tiene algunas restricciones . En cada iteración, elige al azar, luego busca una solución que maximice sujeto a las restricciones .x1,x2,,xnCc1,c2,,cnRc1x1++cnxnC

Esperaría que esta heurística a menudo encuentre un conjunto de soluciones algo dispersas, no necesariamente dispersas al máximo (lo más lejos posible una de la otra), pero probablemente tampoco demasiado cerca una de la otra.

Maximizar la distancia promedio de L2 por pares, usando programación cuadrática

Alternativamente, use la programación cuadrática. Para simplificar, veamos el problema de encontrar dos soluciones. Suponga que desea dos soluciones que estén tan separadas entre sí como sea posible, bajo la norma (distancia euclidiana). Entonces esto puede formularse como un problema de programación cuadrática .x,yL2

Básicamente, desea maximizar la distancia al cuadrado entre e , sujeto al requisito de que tanto como deben Satisfacer las limitaciones. Este es el problema de maximizar una función objetivo cuadrática, con restricciones lineales, es decir, programación cuadrática.d(x,y)2=(x1y1)2++(xnyn)2xyxy

Si desea puntos que están dispersos al máximo, esto también es posible. Digamos que los puntos son . Entonces podrías maximizar la función objetivokx1,,xkRn

i<jd(xi,xj)2,

es decir, la función

i<j(xixj)2.

Esta es una función cuadrática, y tiene restricciones lineales en cada uno de los puntos , por lo que esta es una instancia de programación cuadrática. Encuentra puntos que están dispersos al máximo en el sentido de que la distancia promedio por pares se maximiza.Cxi

También puede formular una variante codiciosa de este algoritmo, donde ya tiene soluciones, y desea encontrar una solución que satisfaga todas las desigualdades lineales y también maximice la distancia promedio de L2 a las otras soluciones. Eso también puede formularse como un problema de programación cuadrática.kk+1k

La programación cuadrática es más difícil que la programación lineal, pero hay solucionadores que resolverán los problemas de programación cuadrática por usted.

Maximizando la distancia mínima de L2 por pares, usando QCQP

Finalmente, supongamos que desea que sus puntos se dispersen en el sentido de que desea maximizar la distancia mínima por pares. En otras palabras, supongamos que desea encontrar el umbral más grande posible, de modo que sea posible encontrar puntos que satisfagan las restricciones lineales, y de manera que cada par de puntos esté a una distancia uno del otro: para todo . Entonces esto puede formularse como un programa de optimización cuadrática con restricciones cuadráticas, es decir, QCQP . QCQP es aún más difícil, pero también hay soluciones disponibles para QCQP que también puedes probar.ktkx1,,xkRntd(xi,xj)ti<j


1

Encontré un enfoque para generar valores absolutos.

Supongamos que tenemos las variables , , y y un montón de restricciones. Nuestras funciones objetivas se parecen a: maximizar; La idea es que queremos maximizar la norma L1 de estas dos soluciones (según la pregunta original).a1a2b1b2|a1a2|+|b1b2|

Podemos introducir "variables de holgura" abs_a y abs_b y las restricciones:

absa+a1a20

absaa1+a20

y de manera similar para y . Estas restricciones obligan a a ser como máximo la diferencia entre y , y posiblemente menos. En otras palabras, no puede ser mayor que la diferencia máxima entre y .b1b2absaa1a2absaa1a2

Entonces lo que queda es reemplazar la función objetivo: maximizar .absa+absb


En realidad, estas codificaciones solo funcionan para minimizar los valores absolutos. Ahí no resuelve mi problema. Más información aquí: lpsolve.sourceforge.net/5.5/absolute.htm
Ross
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.