4 votos

Cómo resolver un problema de optimización cuadrática con dos variables

Me gustaría resolver el problema de regresión de vectores soporte.

La fórmula para la optimización es la siguiente:

$$a_1^*, a_2^* = \max\sum_ {i=1}^{n} (a_{1i}-a_{2i})y_{i} - eta \sum_ {i=1}^{n}(a_{1i}+a_{2i}) - 1/2 \sum_ {j=1}^{n} \sum_ {i=1}^{n}(a_{1j}-a_{2j})(a_{1i}-a_{2i}) $$

con $ $ siendo el producto punto de $x_i$

y las restricciones: $0\leq a_{1j}, a_{2j}\leq C$ y $\sum_{i=1}^{n}(a_{1i}+a_{2i})=0$

¿Cómo puedo resolver este problema utilizando un solucionador de programación cuadrática? Yo utilizaría cvxopt.solvers.qp por esto. Pero el solucionador exige el siguiente formulario como entrada.

$x^* = \min$ $1/2x^TPx+q^Tx$ sujeto a $Gx \leq h$ y $Ax=b$

¿Hay alguna forma de reformular la fórmula, que depende de dos vectores variables en lugar de uno, de esa forma?

Gracias de antemano.

3voto

Mark L. Stone Puntos 290

Si utiliza CVXOPT directamente, creo que tendrá que concatenar todas sus variables en un único vector y, a continuación, escribir la función objetivo y las restricciones en términos de elementos de ese vector.

Sin embargo, su uso debería ser más sencillo y menos propenso a errores CVXPY que es una interfaz de modelado de optimización de nivel superior a CVXOPT. CVXPY le permitirá declarar tantas variables escalares, vectoriales o matriciales como desee (presumiblemente, vectoriales para su problema de Programación Cuadrática) e introducir el problema de optimización de una forma matemática bastante natural, en términos de las variables declaradas. CVXPY hará el trabajo sucio para transformar lo que ha introducido en una forma adecuada para el solucionador. Los solucionadores CVXOPT se encuentran entre las muchas opciones de solucionadores dentro de CVXPY.

0 votos

Gracias. No sabía que CVXPY permite un formulario de entrada más flexible. Lo he probado y funciona bien.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X