Izquierda Indice Derecha

Optimización numérica con restricciones

El paquete cobyla de Maxima permite calcular numéricamente valores mínimos para una función objetivo F(X) sujeta a restricciones sobre X con desigualdades de la forma g(X) > = 0, donde X es una lista de variables. El paquete ha de ser cargado de forma explícita en la sesión

load(fmin_cobyla)$

a menos que esté declarado entre los que pueden ser cargados automáticamente por Maxima cuando se requiere su uso. Véase al respecto lo señalado a propósito del paquete draw

Existe una variante que funciona como fmin_cobyla, salvo por el hecho de que utiliza aritmética de precisión arbitraria (bigfloat) y que el valor por defecto de rhoend es 10^(fpprec/2). Los correspondientes comandos son:

  1. load(fmin_cobyla)$
    Las restricciones no son obligatorias. El ejemplo que sigue sirve de ilustración
    f(x,y):= (x^2-y)^2 + (1+x)^2; fmin_cobyla(f(x,y), [x, y], [1,1], iprint=1);
    Los resultados obtenidos indican que, que en términos aproximados, la función alcanza en el punto (-1,1) su mínimo de valor 0.
    En este caso es posible calcular en mínimo de la función de forma exacta al ser una función no negativa que se anula en (0,0), lo cual también puede corroborarse con técnicas del cálculo diferencial.
  2. En este ejemplo se calcula el valor mínimo de la función F(x,y)=xy sobre el círculo unidad en el plano: x^2+y^2 <= 1.
    Obviamente, el m&eiacute;nimo absoluto existe, al ser el dominio compacto y la función continua. También es posible en este ejemplo encontrar el mínimo de forma exacta, aplicando el cálculo diferencial de varias variables a la determinación de extremos de funciones. El lector iniciado en tales herramientas podrá hacer los cálculos pertinentes, con ayuda de Maxima, si así lo desea.
    fmin_cobyla(x*y, [x, y], [1,1], constraints=[x^2+y^2<=1], iprint=1);
  3. En modelos de mercados financieros con un número finito de activos cuyo precio en tiempo t=0 es conocido así como los posibles precios aleatorios de los mismos en tiempo t=1, con un número finito de escenarios, una oportunidad de arbitraje consiste en la existencia de una cartera de activos cuyo precio en t=0 sea menor o igual que cero, pero que su valor en t=1 en cualquiera de los posibles escenarios es siempre mayor o igual que cero, y además en alguno de ellos es estrictamente positivo. Un mercado con oportunidades de arbitraje no es financieramente viable.
    A continuación nos planteamos analizar si existen oportunidades de arbitraje en el mercado que definen las siguientes matrices de valor para cuatro activos en t=0 y t=1
    Mt0: transpose(matrix([1, 2, 3, 1])); Mt1: matrix([2,0.2,0.5,1],[0.1,2,0.1,1],[5,0.1,1.5,4],[3.5,0.6,2,1.5]);
  4. cartera: matrix([H1,H2,H3,H4]); CV0 : cartera.Mt0; CV1 : cartera.Mt1;
  5. fmin_cobyla(CV0,[H1,H2,H3,H4], [1,1,1,1], constraints=[CV1[1,1]>=0, CV1[1,2]>=0, CV1[1,3]>=0, CV1[1,4]>=0, CV1[1,1]^2+ CV1[1,2]^2+ CV1[1,3]^2+ CV1[1,4]^2=1 ], iprint=1 );
    De acuerdo con esos resultados, en t=1 la cartera determinada por Maxia tiene un valor casi 1 si ocurre el escenario 3, y en los demás escenarios su valor nunca es negativo. Siendo además el coste de la misma en t=0 inferior a 0.

 


Ap_Optimizacion.wxmx

 

Izquierda Indice Derecha