Programación lineal con restricciones matriciales.


10

Tengo un problema de optimización que se parece al siguiente

minJ,Bij|Jij|s.t.MJ+BY=X

Aquí, mis variables son matrices J y B , pero todo el problema sigue siendo un programa lineal; Las variables restantes son fijas.

Cuando intento ingresar a este programa en mis herramientas de programación lineal favoritas, me encuentro con algunos problemas. Es decir, si escribo esto en forma de programa lineal "estándar", las matrices de parámetros M e Y terminan repitiéndose una tonelada de veces (una vez para cada columna de X ).

¿Existe un algoritmo y / o paquete que pueda manejar las optimizaciones del formulario anterior? En este momento me estoy quedando sin memoria porque M e Y tienen que ser copiadas muchas veces.


¿Es B una matriz de parámetros, o quieres decir Y ? ¿Cuáles son las formas de las diversas matrices?
Geoffrey Irving

[¡Hola Geoffrey!] J y B son variables, el resto son parámetros. B tiene relativamente pocas columnas, pero todas las dimensiones restantes son bastante grandes (nada es cuadrado).
Justin Solomon

[¡Hola!] Debes editar la publicación para no decir dos veces que B es un parámetro.
Geoffrey Irving

1
Curiosamente, pero probablemente inútilmente, la versión de este problema con lugar dese puede resolver con un par de SVD. | J i j |Jij2|Jij|
Geoffrey Irving

1
@ Geoffrey, eso no es una coincidencia :-)
Justin Solomon

Respuestas:


12

Visión general

Es posible que desee probar una variante del Método de Multiplicadores de Direcciones Alternas (ADMM), que se ha encontrado que converge sorprendentemente rápido para problemas de tipo lazo. La estrategia es formular el problema con un Lagrangian aumentado y luego hacer un ascenso gradual en el problema dual. Es especialmente bueno para este problema regularizado particular porque la parte no lisa de cada iteración del método tiene una solución exacta que simplemente puede evaluar elemento por elemento, mientras que la parte lisa implica resolver un sistema lineal.l 1l1l1

En este post nosotros

  • derivar una formulación general de ADMM para una generalización de su problema,
  • deriva los subproblemas para cada iteración ADMM y los especializa a su situación, y luego
  • investigar el sistema lineal resultante que necesita ser resuelto cada iteración, y desarrollar un solucionador rápido (o preacondicionador) basado en precomputen las descomposiciones de valores propios (o aproximaciones de bajo rango de los mismos) para y .Y Y TMTMYYT
  • resumir con algunas observaciones finales

La mayoría de las grandes ideas aquí están cubiertas en el siguiente excelente artículo de revisión,

Boyd, Stephen y col. "Optimización distribuida y aprendizaje estadístico a través del método de dirección alterna de multiplicadores". Foundations and Trends® en Machine Learning 3.1 (2011): 1-122. http://www.stanford.edu/~boyd/papers/pdf/admm_distr_stats.pdf

Antes de entrar en detalles, quiero señalar que esta es una respuesta de método / algoritmo, no una respuesta práctica de código existente; si desea utilizar este método, necesitaría implementar su propia implementación.

Formulación ADMM

En general, suponga que desea resolver

minxi|xi|s.t.Ax=b.

El problema en la publicación original cae en esta categoría después de la vectorización adecuada. (esto es solo en principio, veremos que la vectorización no necesita realizarse en la práctica)

En su lugar, podría resolver el problema equivalente, que tiene Lagrangian L(x,z,λ,γ)=

minX,zyoEl |XyoEl |+α2El |El |X-zEl |El |2+β2El |El |UNAz-siEl |El |2S tUNAz=siYX=z,
L(X,z,λ,γ)=yoEl |XyoEl |+α2El |El |X-zEl |El |2+β2El |El |UNAz-siEl |El |2+λT(UNAz-si)+γT(X-z)=yoEl |XyoEl |+α2El |El |X-z+1αγEl |El |2+β2El |El |UNAz-si+1βλEl |El |2+α2El |El |1αγEl |El |2+β2El |El |1βλEl |El |2.

El método de dirección alterna de multiplicadores resuelve el problema dual, través del ascenso de gradiente en las variables duales, excepto con proyecciones alternativas inexactas en los subproblemas duales. Es decir, uno realiza la iteración x k + 1

maxλ,γminX,zL(X,z,λ,γ),
xk+1=argminxL(x,zk,λk,γk)zk+1=argminzL(xk+1,z,λk,γk)γk+1=γk+α(xk+1zk+1)λk+1=λk+β(Azk+1b).

Bajo ciertas condiciones leves en los parámetros y (explicados en el documento de Boyd y Parikh vinculado anteriormente), el método ADMM convergerá a la solución verdadera. La tasa de convergencia es lineal, ya que es en el núcleo un método de ascenso de gradiente. A menudo se puede acelerar para que sea superlineal 1) cambiando los parámetros y medida que avanza según la heurística, o 2) usando la aceleración de Nesterov. Para obtener notas sobre cómo cambiar los parámetros de penalización, consulte el documento de la encuesta de Boyd, y para usar la aceleración de Nesterov con ADMM, consulte el siguiente documento,β α βαβαβ

Goldstein, Tom, Brendan O'Donoghue y Simon Setzer. "Métodos rápidos de optimización de dirección alterna". Informe CAM (2012): 12-35. ftp://ftp.math.ucla.edu/pub/camreport/cam12-35.pdf

Sin embargo, incluso si la tasa de convergencia general es solo lineal, para problemas de se ha observado que el método encuentra el patrón de dispersión muy rápidamente y luego converge más lentamente en los valores exactos. Como encontrar el patrón de dispersión es la parte más difícil, ¡esto es muy fortuito! Las razones exactas por las cuales parecen ser un área de investigación actual. Todos ven que el patrón de dispersión converge rápidamente, pero nadie parece saber exactamente por qué sucede. Hace un tiempo le pregunté a Boyd y Parikh sobre esto por correo electrónico y Parikh pensó que podría explicarse interpretando el método en un contexto de sistemas de control. Otra explicación heurística del fenómeno se encuentra en el apéndice del siguiente artículo,l1

Goldstein, Tom y Stanley Osher. "El método de Bregman dividido para problemas regularizados por L1". SIAM Journal on Imaging Sciences 2.2 (2009): 323-343. ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf

Por supuesto, ahora la dificultad radica en resolver los subproblemas de actualización y para su situación específica. Como el lagrangiano es cuadrático en , el subproblema de actualización simplemente requiere resolver un sistema lineal. El subproblema parece más difícil ya que no es diferenciable, ¡pero resulta que hay una fórmula exacta para la solución que se puede aplicar elemento por elemento! Ahora discutimos estos subproblemas con más detalle y los especificamos para el problema en la publicación original.z z z xXzzzX

Configuración para el subproblema de actualización (sistema lineal)z

Para la actualización , tenemos a r g m i n z L ( x k , z , λ k , γ k ) = a r g m i n z αz

arsolmetroyonortezL(Xk,z,λk,γk)=unarsolmetroyonortezα2El |El |X-z+1αγEl |El |2+β2El |El |UNAz-si+1βλEl |El |2.

Esto se especializa en su problema,

unarsolmetroyonorteZJ,Zsiα2El |El |Jk+1-ZJ+1αΓJEl |El |Fro2+α2El |El |sik+1-Zsi+1αΓsiEl |El |Fro2+β2El |El |METROZJ+ZsiY-X+1αΛEl |El |Fro2,

donde denota la norma Frobenius (elementwise ). Este es un problema de minimización cuadrática, donde las condiciones de optimización de primer orden se pueden encontrar tomando derivadas parciales del objetivo con respecto a y y a cero. Esto es, l 2 Z J Z B 0El |El |El |El |Frol2ZJZsi

0=α2(Jk+1ZJ+1αΓJ)+β2MT(MZJ+ZBYX+1βΛ),0=α2(Bk+1ZB+1αΓB)+β2(MZJ+ZBYX+1βΛ)YT.

Como se señaló en los comentarios del póster original Justin Solomon, este sistema para es simétrico, por lo que el gradiente conjugado es un método ideal sin matriz. Una sección posterior analiza este sistema y cómo resolverlo / precondicionarlo con mayor detalle.ZJ,ZB

Resolución de subproblema de actualización (solución de umbral analítico)x

Ahora pasamos al subproblema , a r g m i n x L ( x , z k , λ k , γ k ) = a r g m i n x i | x i | + αx

argminxL(x,zk,λk,γk)=argminxi|xi|+α2||xzk+1αγk||2

Lo primero que hay que ver es que la suma se puede dividir elemento por elemento,

i|xi|+α2||xzk+1αγk||2=i|xi|+α2i(xizik+1αγik)2,

Entonces podemos resolver el problema de optimización elemento por elemento en paralelo, produciendo

xik+1=argminxi|xi|+α2(xizik+1αγik)2.

La forma general de esta ecuación es,

mins|s|+α2(st)2.

La función de valor absoluto está tratando de tirar del punto óptimo hacia , mientras que el término cuadrático está tratando de tirar del punto óptimo hacia . la verdadera solución, por lo tanto, se encuentra en algún lugar del segmento entre los dos, con un aumento de tiende a tirar del punto óptimo hacia , y una disminución de tira del punto óptimo hacia .s = t [ 0 , t ) α t α 0s=0s=t[0,t)αtα0

Esta es una función convexa pero no es diferenciable en cero. La condición para un punto de minimización es que la subderivada del objetivo en ese punto contiene cero. El término cuadrático tiene derivada , y la función de valor absoluto tiene derivada para , subderivada con valor establecido como el intervalo cuando , y derivada para . Por lo tanto, obtenemos el subderivado para la función objetivo general, - 1 s < 0 [ - 1 , 1 ] s = 0 1 s > 0 s ( | s | + αα(st)1s<0[1,1]s=01s>0

s(|s|+α2(st)2)={1+α(st)s>0[1,1]+αt,s=0,1+α(st),s<0.

De esto vemos que el subderivativo del objetivo en contiene si y solo si , en cuyo caso es el minimizador. Por otro lado, si no es el minimizador, entonces podemos establecer la derivada de un solo valor igual a cero y resolver el minimizador. Al hacer esto, 0 | t | 1s=00 s=0s=0argmins| s| +α|t|1αs=0s=0

unarsolmetroyonortesEl |sEl |+α2(s-t)2={t-1α,t>1α,0 0,El |tEl |1α,t+1α,t<-1α

Especializando este resultado nuevamente en el problema real que estamos tratando de resolver en la pregunta original donde rinde, La actualización para es simplemente J k + 1 i j ={ Z k i j - 1t=Zyojk-1αΓyojk

Jyojk+1={Zyojk-1αΓyojk-1α,Zyojk-1αΓyojk>1α,0 0,El |Zyojk-1αΓyojkEl |1α,Zyojk-1αΓyojk+1α,Zyojk-1αΓyojk<-1α.
si
sik+1=Zsi-1αΓsi,

como lo señaló el póster original Justin Solomon en los comentarios. En general, hacer la actualización para solo requiere recorrer las entradas de sus matrices y evaluar las fórmulas anteriores para cada entrada.J,si

Complemento Schur para el sistemaZJ,Zsi

El paso más costoso de la iteración es resolver el sistema,

0 0=-α2(Jk+1-ZJ+1αΓJ)+β2METROT(METROZJ+ZsiY-X+1βΛ),0 0=-α2(sik+1-Zsi+1αΓsi)+β2(METROZJ+ZsiY-X+1βΛ)YT.

Para ese fin, vale la pena construir un buen solucionador / preacondicionador para este sistema. En esta sección lo hacemos vectorizando , formando un complemento Schur , haciendo algunas manipulaciones de productos Krnoecker y luego desvectorizando. El sistema de complemento Schur resultante es una ecuación de Sylvester ligeramente modificada .

En lo que sigue, las siguientes identidades sobre la vectorización y los productos de Kronecker son absolutamente clave:

  • vmiC(UNAsiC)=(CTUNA)vmiC(si),
  • (UNAsi)(Cre)=UNACsire ,
  • (UNAsi)-1=UNA-1si-1 , y
  • (UNAsi)T=UNATsiT .

Estas identidades se mantienen siempre que el tamaño de la matriz y la invertibilidad sean tales que cada lado de la ecuación sea una expresión válida.

La forma vectorizada del sistema es,

(αyo+β[yoMETROTMETRO(YMETRO)TYMETROYYTyo])[vmiC(ZJ)vmiC(Zsi)]=[vmiC(αJ+βMETROTX+ΓJ-METROTΛ)vmiC(αsi+βXYT+Γsi-ΛYT)],

o,

[yo(αyo+βMETROTMETRO)β(YMETRO)TβYMETRO(αyo+βYYT)yo][vmiC(ZJ)vmiC(Zsi)]=[vmiC(F)vmiC(sol)],

donde y son notación condensada para el lado derecho. Ahora realizamos el complemento de eliminación gaussiana en bloque / Schur para eliminar el bloque inferior izquierdo de la matriz, en el proceso de condensación de los productos Kronecker. Esto es, Fsol

[yo(αyo+βMETROTMETRO)β(YMETRO)T0 0(αyo+βYYT)yo-β2YYTMETRO(αyo+βMETROTMETRO)-1METROT]...[vmiC(ZJ)vmiC(Zsi)]=[vmiC(F)vmiC(sol)-βYMETRO(αyo+βMETROTMETRO)-1vmiC(F)].

Desvectorizando, las dos ecuaciones que tenemos que resolver en secuencia son,

  1. Zsi(αyo+βYYT)-(βMETRO(αyo+βMETROTMETRO)-1METROT)Zsi(βYYT)...=sol-βMETRO(αyo+βMETROTMETRO)-1FYT
  2. (αyo+βMETROTMETRO)ZJ=F-βMETROTZsiY.

Solución del sistema de complemento de Schur cuando son cuadrados, rango altoY,METRO

En esta sección resolvemos el sistema de complemento Schur para (ecuación 1. anterior) mediante el uso de SVD completos precalculados de las matrices y aplicando una versión modificada del algoritmo de Bartels-Stewart para el Sylvester ecuación. El algoritmo se modifica ligeramente de la versión estándar para tener en cuenta el adicional en el segundo término, lo que hace que no sea la ecuación de Sylvester. Una vez que se encuentra través de la primera ecuación, se puede encontrar fácilmente a partir de la segunda ecuación. La segunda ecuación es trivial para resolver mediante cualquier método que desee.ZsiYYT,METROMETROT,METROTMETROβYYTZsiZJ

Este método requiere un costo inicial para calcular previamente dos SVD completos antes de que comience el proceso ADMM, pero luego se aplica rápidamente en las iteraciones ADMM reales. Dado que el método trata con SVD completos de las matrices de restricción, es apropiado cuando están cerca de un cuadrado y un rango alto. También es posible un método más complicado que utiliza SVD de bajo rango, pero se presenta en una sección posterior.

El método se desarrolla de la siguiente manera. Deje denotan precalculadas completos descomposiciones de valor singular, y condensar el lado derecho para ser . Entonces la primera ecuación se convierte en Multiplicación por los factores ortogonales para limpiar la izquierda y la derecha y establecer una nueva temporal desconocida , esto se convierte en

QreQT=YYT,WΣWT=METROMETROT,VTVT=METROTMETRO
H
ZsiQ(αyo+re)QT-WβΣ(αyo+Σ)-1ΣWTZsiQreQT=H.
UNA=WTZsiQ
UNA(αyo+re)-βΣ(αyo+Σ)-1ΣUNAre=WHQT.

Ahora podemos encontrar resolviendo el sistema diagonal , UNA

((αyo+re)yo+reβΣ(αyo+Σ)-1Σ)vmiC(UNA)=vmiC(WHQT).

Habiendo encontrado , calculamos , y conociendo resolvemos la segunda ecuación anterior para , que es trivial ya que ya tenemos la descomposición del valor propio para .UNAZsi=WUNAQTZsiZJMETROTMETRO

El costo inicial es calcular dos descomposiciones de valores propios definidos simétricos positivos de e , y luego el costo por iteración para una solución completa está dominado por un puñado de multiplicaciones de matriz-matriz, que es del mismo orden de magnitud como hacer 1 subiteración CG. Si las descomposiciones iniciales de valores propios son demasiado costosas, entonces se pueden calcular de manera inexacta, por ejemplo, finalizando la iteración de Lanczos temprano y manteniendo los vectores propios más grandes. Entonces, el método puede usarse como un buen preacondicionador para CG en lugar de un solucionador directo.METROTMETROYYT

Método de solución cuando son muy rectangulares o tienen una aproximación de rango bajoMETRO,Y

Ahora dirigimos nuestra atención a resolver o preacondicionar el cuando a) las matrices de entrada son muy rectangulares, lo que significa que tienen muchas más filas que columnas o viceversa, o b) tienen una aproximación de rango bajo. La siguiente derivación implica el uso extensivo de la fórmula de Woodbury, el complemento de Schur y otras manipulaciones similares.ZJ,ZsiMETRO,Y

Comenzamos con nuestro sistema de complemento Schur,

(αyo+βYYT)yo-β2YYTMETRO(αyo+βMETROTMETRO)-1METROT.

Algunas manipulaciones transforman este sistema en una forma más simétrica,

(αyo+βyoMETROMETROT+βYYTyo)vmiC(Zsi)=(yo(yo+βαMETROMETROT))vmiC(H).

Ahora traemos las aproximaciones de bajo rango. Deje que sean las SVD reducidas o las aproximaciones de rango bajo de y ( es un marcador de posición y no es usado). Al sustituirlos en nuestro sistema, se obtiene la siguiente matriz inversa que deseamos aplicar,

Qre1/ /2Q2T=YWΣ1/ /2VT=METRO
YMETROQ2
(αyo+βyoWΣWT+βYYTyo)-1.

Dado que la matriz con la que invertimos es una actualización de bajo rango de la identidad, la estrategia lógica es tratar de usar la fórmula de Woodbury,

(UNA+UCUT)-1=UNA-1-UNA-1U(C-1+UTUNA-1U)-1UTUNA-1.

Sin embargo, se necesita algo de cuidado ya que las piezas de bajo rango e no son ortogonales. Por lo tanto, para aplicar la fórmula de Woodbury, recopilamos ambas actualizaciones de bajo rango en una sola gran actualización. Doint así y aplicando la fórmula de Woodbury produce, yoWYyo

(1αyo+β[yoWQyo][yoΣreY][yoΣTQTyo])-1=αyo-βα2[yoWQyo][yo(Σ-1+βαyo)βαQWTβαQTW(re-1+βαyo)Y]-1[yoΣTQTyo].

El inverso del núcleo puede calcularse mediante la fórmula inversa en bloque de 2x2,

[UNAsisiTC]-1=[(UNA-siC-1siT)-1-UNA-1si(C-siTUNA-1si)-1-C-1siT(UNA-siC-1siT)-1(C-siTUNA-1si)-1].

Esta publicación ya es lo suficientemente larga, así que ahorraré los largos detalles del cálculo, pero el resultado final es que al conectar las submatrices necesarias en el inverso en bloque y multiplicar todo a través se obtiene la siguiente forma explícita para el inverso general,

(αyo+βyoMETROMETROT+βYYTyo)-1=1αyo-βα2(t11+s11+t12+s12+t21+s21+t22+s22),

donde

t11=αβyoWl-1WTs11=(QWl-1)re11(QTl-1WT)t12=-αβQh-1QTWl-1WTs12=-(Qh-1Wl-1)re22(h-1QTWT)t21=t12s21=-(Qh-1W)re22(h-1QTl-1WT)t22=αβQh-1QTyos22=(Qh-1W)re22(h-1QTWT)re11=αβ(hyo-yol-1)-1re22=αβ(yol-h-1yo)-1l=αβΣ-1+yoh=αβre-1+yo.

De esta forma, podemos aplicar el inverso y encontrar término por término a través de 8 emparedados de multiplicación de matriz izquierda y derecha. La fórmula general para aplicar la suma de los productos de Kronecker es, Zsi

((UNA1si1)+(UNA2si2)+...)vmiC(C)=vmiC(si1TCUNA1+si2TCUNA2+...).

Tenga en cuenta que todas las inversas explícitas con las que terminamos son diagonales, por lo que no hay nada que "resolver".

Código de solucionador lineal

Implementé los dos solucionadores en Matlab. El parece funcionar bien. El código solucionador está aquí.zJ,Zsi

https://github.com/NickAlger/MeshADMM/blob/master/zkronsolve.m

Un script de prueba para verificar que los solucionadores funcionan está aquí. También muestra, por ejemplo, cómo llamar al código del solucionador.

https://github.com/NickAlger/MeshADMM/blob/master/test_zkronsolve.m

Observaciones finales

Los métodos de tipo ADMM son adecuados para problemas como este, pero necesitaría implementar su propia implementación. La estructura general del método es bastante simple, por lo que la implementación no es demasiado difícil en algo como MATLAB.

La pieza que falta en esta publicación que debería especificarse para definir completamente el método para su problema es una elección de parámetros de penalización . Afortunadamente, el método generalmente es bastante robusto siempre que los valores de los parámetros no estén locos. El documento de Boyd y Parikh tiene una sección sobre los parámetros de penalización al igual que las referencias allí, pero simplemente experimentaría con los parámetros hasta que obtenga tasas de convergencia razonables.α,β

Las presentadas son altamente efectivas si las matrices de restricción son a) densas, cuadradas y de alto rango, o b) tienen una buena aproximación de bajo rango. Otra solucionador útil que podría ser un tema de trabajo futuro sería un programa de solución optimizada para el siguiente caso - la matriz de restricciones es escasa y squareish y alto rango, pero no existe una buena preacondicionador para . Este sería el caso si, por ejemplo, es un laplaciano discretizado.ZJ,ZsiMETROαyo+METROMETROTMETRO


¡Implementando esto ahora! Para verificar, la solución de matriz para y debe ser simétrica / positiva definida ya que proviene de mínimos cuadrados, ¿verdad? Esto parece ser empíricamente cierto :-). Entonces, ¿es CG una mejor opción que GMRES? ZsiZJ
Justin Solomon

Además, ¿creo que la actualización para B es incorrecta? Estoy trabajando en esto con más detalle, pero recordar B no aparece en mi función de energía (no término), por lo que no estoy seguro de que solo debería tomar valores en ¿Estoy pensando en esto mal? ¡Gracias! El |siEl |±(1-1/ /α).
Justin Solomon

1
[errr más bien, ]si=Zsi-Γsi/ /α
Justin Solomon

3
¡Asombroso! Después de poner mis propias fórmulas para y (probablemente cercano / equivalente a lo que publicaste pero algo no funcionaba), esto está superando por mucho el método IRLS. ¡Gracias! Jsi
Justin Solomon

1
Una gran noticia. Es agradable ver cuándo las contribuciones aquí conducen a resultados reales.
Michael Grant

5

Probablemente desee utilizar un método sin matriz para la programación lineal. No conozco ningún método específicamente orientado a la programación lineal, pero existen métodos de punto interior sin matriz para programas cuadráticos y para programas no lineales generales. El caso del programa cuadrático corresponde exactamente a su problema, donde los coeficientes de forma cuadrática son todos ceros. (También puede adaptar los métodos que utilizan soluciones lineales exactas a la estructura de su problema, pero ese tipo de implementación a medida puede no valer la pena, y es menos práctico que usar un método sin matriz).

No conozco ningún paquete de optimización comercial que implemente variantes sin matriz de métodos de puntos interiores. Se supone que IPOPT implementa un método de punto interior sin matriz para la programación no lineal, pero no he podido rastrear las llamadas API que le permiten usarlo.

Además de CVX, probablemente podría usar GAMS o AMPL para ingresar la matriz una vez y configurar sus restricciones en el lenguaje de modelado para usar esa matriz. Sin embargo, los métodos utilizados por los backends de solucionador para CVX, GAMS y AMPL no utilizan solucionadores sin matriz; todo requerirá la matriz de coeficientes completa para el programa lineal en forma estándar, que será enorme (será un producto de matrices de Kronecker). Lo que probablemente sucederá es que ingrese su programa lineal en el formulario anterior utilizando el lenguaje de modelado, y luego el lenguaje de modelado traducirá los datos a un formulario que puedan utilizar los solucionadores de back-end. Este formulario requerirá enormes matrices, y sospecho que se encontrará con el mismo tipo de errores (a menos que se ejecute en una máquina con suficiente memoria).


¡Parece que probé todas las cosas correctas! Inicialmente experimenté con CVX y falló, así que cambié a IPOPT. Pero IPOPT estaba teniendo el mismo problema. No sabía que tenía una opción sin matriz, así que veré si puedo resolverlo.
Justin Solomon

No estoy seguro de si GAMS / AMPL ayudará a mi problema. Me complace codificar el problema de cualquier forma que ayude al solucionador a hacer lo correcto, pero como usted dice detrás de escena, tomar un producto Kronecker no va a funcionar.
Justin Solomon

4

minimizaryojWyojJyoj2sujeto aMETROJ+siY=X
W

W(0 0)J(0 0)

Wyoj(k+1)=El |max{Jyoj(k),ϵ}El |-1
ϵ

También podría considerar un método de primer orden suavizado. TFOCS, del cual soy coautor, podría manejar esto usando su solucionador "cónico dual suavizado" (SCD), pero no será tan fácil de usar.

Si desea probar un método de punto interior sin matriz, lea el trabajo de Jacek Gondzio.

EDITAR: hmm, podría ser el caso de que IRLS no pueda usar el SVD para calcular soluciones. Si es así, recurriría a una de las otras opciones.


1
Wyoj

METRO

1
w

2

X

Otra posibilidad: use un solucionador que permita que sus matrices de restricción se almacenen como matrices dispersas. Esto aún requerirá mucha más memoria de la que debería necesitar, pero mucho menos que si los almacenara como matrices densas. En CVX, si lo usa kron, obtiene una matriz dispersa, por lo que sería trivial intentar esto.


Si Python sería más conveniente que MATLAB por alguna razón, entonces también hay cvxpy, aunque no está tan pulido como cvx.
k20

Mi sospecha es que este enfoque funcionará superficialmente y luego fallará después de que el lenguaje de modelado CVX transforme los datos de entrada en una forma utilizable por sus solucionadores de fondo (que resolverán programas lineales, programas cuadráticos, programas de cono de segundo orden, programas semidefinidos y programas geométricos). Explico por qué en mi respuesta. El backend de Gurobi es el mejor solucionador de LP de su clase (entre otros tipos), por lo que usar CVX con ese algoritmo es probablemente lo mejor que puede hacer en términos de implementación, salvo llamar a CVX desde una API de lenguaje compilado.
Geoff Oxberry

1
METROJ+siY-XJ,Y

Sí, estoy experimentando exactamente el problema que menciona Geoff. De hecho, usé CVX para mi conjetura inicial. También intenté llamar a Gurobi directamente, pero la única forma en que puedo pensar en hacerlo es haciendo el mismo problema de desenrollado.
Justin Solomon

1
Creo que tendrías que rodar el tuyo
Johan Löfberg
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.