Tema 3 - Programación no lineal: Sin restricciones

Introducción y repaso


ℹ️
Estos problemas son problemas clásicos de optimización de funciones de grado 2 o superior.
💡
Cuando la función de optimización tiene una sola variable, se dice que es unidimensional
Si el problema tiene dos variables, intentaremos poner una en función de la otra
🔀
Podemos convertir un problema de máximización a minimización y viceversa aplicando la siguiente expresión
min(f)=max(f)min(f) = -max(-f)
🔖
Notación y expresiones
  • Punto estacionario → Punto de pendiente 00 (el valor de la primero derivada en ese punto es cero)
    • ff^* → Vector de los puntos estacionarios de la función ff
  • Maximizador/minimizador → Valor de xx para el cual la primera derivada es cero
  • Min / Max local o global → Valor de f(x)f(x) para el cual la primera derivada es cero
    • Local → Es un punto de pendiente cero, pero no es el más alto/bajo de los puntos estacionarios de la función
    • Global → Es un punto de pendiente cero, y es el más alto/bajo de los puntos estacionarios de la función
🧮
Conceptos de matemáticas
  • f(x)f'(x) → Valor de la pendiente de la función en el punto xx
  • f(x)f''(x) → Valor de la curvatura de la función en el punto xx, se usa también para saber si un punto estacionario es un máximo o mínimo

Métodos de optimización no lineal


🧮
Ejemplos de simplificación a una variable
📝
Ejemplo 12 - Cercado de un recinto

Método analítico

ℹ️
Este método es el método básico que consiste en analizar la pendiente de la función con la derivada
1️⃣
Hacer la derivada de la función
f(x)f'(x)
2️⃣
Igualar la derivada a 00 para hallar los puntos candidatos a máximos o mínimos
f(x)=0x1=m,x2=n,x3=tf'(x) = 0\\ x_1 = m, x_2 = n, x_3= t
3️⃣
Analizar si el punto candidato es un máximo o un mínimo
  • Opción 1: Observar la pendiente de los puntos a la izq y dch del punto candidato para determinar si el un máximo o mínimo. Si la pendiente del punto a la izq y el de a la dch es + y - respectivamente, es un maximo, si es al reves, es un mínimo. Si la pendiente es del mismo signo, no es ni un máximo ni un mínimo
    • f(m0.00001)=+k1, f(m+0.00001)=k2f'(m-0.00001) = +k_1,\ f'(m+0.00001) = -k_2
      Hacer lo mismo para los puntos nn y tt
      💡
      Si el resto de puntos candidatos están separados, podemos cojer un número próximo al candidato sin necesidad de ser tan preciso
  • Opción 2: Calcular la 2º derivada y sustituir el punto candidato en esta. Si el resultado es + será un mínimo, si el resultado es - será un máximo
    • f(m)=k1f''(m) = -k_1
      Hacer lo mismo para los puntos nn y tt
      4️⃣
      De los puntos candidatos, que sean máximo o mínimos, dependiendo de lo que estemos buscando, los sustituiremos en la función original para hallar el que maxímiza o minimiza el resultado de esta
      max{f(m),f(t)}max\{f(m), f(t)\}
      Suponiendo que como nn será un mínimo no hace falta cancularlo
      💡
      Si esta derivada da 00, repetir con la ff'''

Método de Newton

💡
El método de Newton es útil para cuando el método analítico es imposible o muy dificil
ℹ️
El método de Newton es un método iterativo que intenta dibujar una parábola que se aproxima mucha a la función para un púnto concreto.
💡
El método de newton se hace para una función la cual es posible calcular su segunda derivada
💡
Pasos para resolver un ONL por el método de Newton
2️⃣
Datos
  • ϵ\epsilon → Margen de error
  • x0x_0 → Valor de xx inicial
1️⃣
Seleccionamos un punto inicial x0x_0 y una tolerancia ϵ>0\epsilon >0
2️⃣
Iteramos mientras que f(xk)>ϵ|f'(x_k)|>\epsilon
Columnas de tabla de iteraciones
  • kkNúmero de Iteración
  • xkx_k → Valor de xx resultante de la operación de la siguiente función, siendo xkx_k el valor de la fila de arriba para esa columna. Siendo xk+1x_{k+1} el valor de la fila actual
    • xk+1=xkf(xk)f(xk)x_{k+1} = x_k - \frac{f'(x_k)}{f''(x_k)}
  • f(xk)f'(x_k) → Valor de xx en la primera derivada
  • f(xk)f''(x_k) → Valor de xx en la segunda derivada
kk
xkx_k
f(xk)f'(x_k)
f(xk)f''(x_k)
0
Dato de valor inicial
Sustituimos xkx_k de esta fila en la primera derivada
Sustituimos xkx_k de esta fila en la segunda derivada
1
Aplicamos la fórmula de xk+1x_{k+1} con el valor de arriba
Sustituimos xkx_k de esta fila en la primera derivada
Sustituimos xkx_k de esta fila en la segunda derivada
2
Aplicamos la fórmula de xk+1x_{k+1} con el valor de arriba
Sustituimos xkx_k de esta fila en la primera derivada. Comprobamos si debemos seguir iterando
Sustituimos xkx_k de esta fila en la segunda derivada
3️⃣
Conclusiones
Cuando paremos de iterar, tendremos que hayar los maximizadores o minimizadores, y los máximos y mínimos.
💡
Realmente solo hace falta calculas los mínimos en los problemas de minimización, e igual para los máximos
Para saber si es maximizador o minimizador y si xx^* será máximo o mínimo
  • Si f(x)<0f''(x^*) < 0 entonces xx^* es un maximizador
  • Si f(x)>0f''(x^*) > 0 entonces xx^* es un minimizador
Hallar el min/maximizador
El último valor de la tabla de la columna xkx_k
xxkx^* \rightarrow x_k
Hallar el mínimo/máximo
Sustituimos xx^* en la función original
f(x)=mf(x^*) = m
💡
Este método nos sirve también para problemas de maximización

Vector gradiente y Matriz hessiana

💡
Los conceptos de esta sección sirven para analizar la funciones multidimensionales, osea que tienen varias variables: f(x1, x2)f(x_1,\ x_2)
🔖
Conceptos
  • Gradiente → El equivalente a la pendiente para las funciones de más de una variable
  • x\overline x → Vector de valores para sustituir en la función multidimensional
  • Punto de silla → Punto en el cual una variable es un máximizador y la otra es minimizador
ℹ️
Para calcular el gradiente de un punto, podemos aplicar la siguiente fórmula
f(x)=(fx1, fx2)\nabla f(x) = \bigg(\frac{\partial f}{\partial x_1},\ \frac{\partial f}{\partial x_2}\bigg)^\top
Explicación del vector f\nabla f
  • El primer elemento (f1)(\nabla f_1) es la derivada de ff respecto de x1x_1
  • El segundo elemento (f2)(\nabla f_2) es la derivada de ff respecto de x2x_2
🔚
El valor del gradiente se halla sustituyendo los valores de x\overline x en la función ff: f(x)f(\overline x)
ℹ️
Matriz hessiana
La matriz hessiana es el siguiente paso después de calcular f\nabla f . Es el equivalente a calcular la segunda derivada.
H(x)=(2f2x12fx1x22fx1x22f2x2)H(x) = \begin{pmatrix} \frac{\partial^2 f}{\partial^2 x_1} && \frac{\partial^2 f}{\partial x_1 \partial x_2} \\ \frac{\partial^2 f}{\partial x_1 \partial x_2} && \frac{\partial^2 f}{\partial^2 x_2} \end{pmatrix}
Explicación de la matriz
Derivada, de f1\nabla f_1 respecto de la variable x1x_1
Derivada, de f2\nabla f_2 respecto de la variable x1x_1
Derivada, de f1\nabla f_1 respecto de la variable x2x_2
Derivada, de f2\nabla f_2 respecto de la variable x2x_2
💡
La matriz hessiana es una matriz simétrica
🔚
El valor de la matriz hessiana se halla sustituyendo los valores de x\overline x en la función hh: h(x)h(\overline x)
🗃️
Definitud de la matriz hessiana
ℹ️
Cuando decimos todos los determinantes de HH, nos referimos a los determinantes de de las submatrices de HH hasta HH en orden creciente desde H11H_{11} siendo este el primer determinante
Ejemplo
Dada una matriz de orden nn siendo en este ejemplo n=3n=3, tendremos que calcular determinantes
notion image
  • H1H_{1} = det(1)=1det(1) = 1
  • H2=det(H22)=1524=3H_2 = det(H_{22}) = 1·5-2·4 = -3
  • H3=det(H)=0H_3 = det(H) = 0
Para cuando la matriz es diagonal (analizamos la diagonal principal)
Para que HH sea definida positiva
Todos los elementos de la diagonal principal son mayores que cero
Para que HH sea semidefinida positiva
Todos los elementos de la diagonal principal son mayores o iguales que cero
Para que HH sea definida negativa
Todos los elementos de la diagonal principal son menores que cero
Para que HH sea semidefinida negativa
Todos los elementos de la diagonal principal son menores o iguales que cero
Para que HH sea indefinida
Resto de casos:
  • El signo empieza en positivo y hay algún elemento negativo
Para cuando la matriz es simétrica y no diagonal (analizamos los determinantes)
Para que HH sea definida positiva
Todos los determinantes son mayores que cero
Para que HH sea semidefinida positiva
El signo de todos los determinantes de HH es positivo, pero al menos uno es cero (que no sea el primero)
Para que HH sea definida negativa
El signo del primer determinante es negativo y el resto alternados en signo
Para que HH sea semidefinida negativa
El signo del primer determinante es negativo y el resto alternados en signo o cero
Para que HH sea indefinida
Si el primer determinante es cero
📝
Ejemplo 16 - Matriz Hessiana

Hallar los puntos óptimos (minimizadores y máximizadores)

🥇
Condiciones de optimalidad de primer orden
🔚 Hallar los puntos estacionarios: f(x)=0\nabla f(x)=0
Dado un vector gradiente f(x)=(f(x1), f(x2))\nabla f(\overline x) = (f'(x_1),\ f'(x_2)) entonces para hallar los puntos estacionarios resolveremos el sistema:
{f(x1)=0f(x2)=0\begin{cases} f'(x_1) = 0 \\ f'(x_2) = 0 \end{cases}
Los puntos estacionarios serán la combinación de soluciones para x1x_1 con x2x_2
Ejemplo
Dado un gradiente cuyos elementos son
{4x12(x13)=06(x25)=0\begin{cases} 4x_1^2(x_1-3) = 0 \\ 6(x_2-5) = 0 \end{cases}
  • Las soluciones de x1x_1 son: x1=0x_1=0 y x1=3x_1=3
  • Las soluciones de x2x_2 son: x2=5x_2 = 5
 
Por lo que los puntos estacionarios son
  • x=(0,5)\overline x = (0, 5)
  • x=(3,5)\overline x = (3,5)
🥈
Condiciones de optimalidad de segundo orden
🔚 Verificar si los puntos hallados anteriormente son estacionarios
Sustituiremos en HH los puntos estacionarios hallados (x)(\overline x)
  • H(x)>0H(\overline x) > 0 → Es un mínimo local
  • H(x)<0H(\overline x) < 0 → Es un máximo local
  • H(x)H(\overline x) indefinida → Es un punto de silla
📖
Se dice que si el punto xx^* pertenenciente a una matriz hessiana…
  • Si dicha matriz es semidefinida, entonces se entiende que cumple la Condición Necesaria de Optimalidad de segundo Orden (CNO2)
  • Si dicha matriz es definida, entonces se entiende que cumple la Condición Suficiente de Optimalidad de segundo Orden (CSO2)
  • Si dicha matriz es infefinida, entonces la función representa un Punto de silla

Métodos de optimización multidimensional


Método del gradiente

📖
Método del gradiente
💡
Mejoraremos el punto xkx^k siendo que
  • La dirección de máximo descenso (problemas de minimización)
    • dk=f(xk)d^k = -\nabla f(x^k)
  • La dirección de mínimo descenso (problemas de maximización)
    • dk=+f(xk)d^k = +\nabla f(x^k)

Pasos del método del gradiente

0️⃣
Seleccionamos los valores iniciales
Seleccionamos la solución inicial, osea el valor de x(k=0)=solx^{(k=0)} = sol. Observamos que se utiliza el exponenete 00 para denotar la solución inicial, este exponente se corresponde con el valor inicial de el índice de solución kk, y siendo solsol dicho valor inicial.
Seleccionamos el índice de solución kk, osea el valor que iremos incrementando en cada iteración
Seleccionamos la toreancia, osea el valor umbral ϵ>m\epsilon > m, siendo mm dicho umbal
1️⃣
Calculamos el gradiente
Calculamos el vector gradiente de la función f(x(k))\nabla f(x^{(k)}), para la solución actual. La solución actual es f(x(k))f(x^{(k)}) siendo kk el valor del índice de solución de la iteración actual
2️⃣
Comprobamos proximidad a un punto estacionario
Si el valor absoluto de f(x(k))\nabla f(x^{(k)}) es menor que el umbral deninfido para la tolerancia, entonces el punto x(k)x^{(k)} está suficientemente cerca de un punto estacionario. Esto se calcula con el producto escalar (raiz de la suma de cuadrados, osea, como hacer pitágoras)
3️⃣
Elegimos la dirección del gradiente (valor de xx para el siguiente índice de solución)
Si la función objetivos es de maximización
dk=f(x(k))d^k = \nabla f(x^{(k)})
Si la función objetivos es de minimización
dk=f(x(k))d^k = -\nabla f(x^{(k)})
4️⃣
Expresión para calcular el siguiente punto
El siguiente punto se debe calcular con respecto al punto actual más el valor de la dirección (d0)(d^0) multiplicado por una incognita
5️⃣
Calcular el nuevo punto
Ahora sustituiremos el nuevo punto en la función inicial f(x)f(x) el punto xk+1x^{k+1}. Esta operación no dará como resultado una función unidimensional la cual ahora podremos calcular f(xk+1)=0f(x^{k+1}) = 0
 
Despejaremos λ\lambda de la expresión anterior y nos dará su valor. Ahora, calcularemos el nuevo punto sustituyendo el valor de lamda en la expresión hallada en el paso anterior(paso 4️⃣) → xk+1(λ)x^{k+1}(\lambda)
 
El resultado será el nuevo punto
6️⃣
Incrementar el índice de solución
Ahora, incrementaremos el valor del índice de solución, kk, ahora k=k+1k=k+1
 
Volvemos al paso uno tras incrementar kk

Método de Newton (multidimensional)

🚧
Sin hacer
notion image