07 Optimizacion en Matlab
07 Optimizacion en Matlab
07 Optimizacion en Matlab
7. Optimización en Matlab.
Para comprobar la fiabilidad del algoritmo se ha realizado una optimización a través de la biblioteca
de funciones estándar de Matlab. Esta biblioteca contiene, entre otras, una función, denominada
fmincon, que nos permite minimizar sistemas con una función objetivo de tipo lineal o no lineal,
sujeta a unas restricciones que también pueden ser lineales o no lineales.
Tomando el sistema que resulta tras la aplicación de las funciones de integridad:
max ∑ c ij f x ij
i , j ∈ A
{ }
1 if j ∈T
s.t. X j , N − X N , j = 0 if j ∉T , j≠e , ∀ j ∈N
−∣T∣1 if j=e
x ij 0 ; ∀ i , j ∈ A
x ij⋅x ji =0 ; ∀ i , j∈ A
El proceso a través del cual se obtienen las restricciones que servirán para llamar a la función
fmincon de Matlab es ampliamente detallado en el Anexo A ().
Es un problema en el que la función objetivo es claramente no lineal, debido a la función de
integridad introducida, mientras que las restricciones son ecuaciones (lineales y no lineales) e
inecuaciones (lineales).
Matlab, puede utilizar para la resolución de problemas de optimización, algoritmos de dos clases:
• MediumScale Algorithms.
• LargeScale Algorithms.
Los algoritmos del tipo LargeScale son más potentes, es decir, obtienen mejores resultados que los
algoritmos del tipo MediumScale. Sin embargo, el problema no está soportado por algoritmos
LargeScale, debido fundamentalmente a la complejidad de las restricciones.
La única función que Matlab proporciona para resolver este tipo de problemas, fmincon, devuelve
en este problema resultados no excesivamente buenos pero que demuestran que el sistema anterior
busca una solución aproximada a la solución del problema original.
Los detalles específicos relativos a la optimización en Matlab se señalan en el Anexo A ().
A continuación, se extraen las principales conclusiones del mismo.
En el seguimiento de la resolución del problema se ha comprobado como tanto los
parámetros necesarios para la llamada a la función fmincon son correctos, tanto la introducción de la
función objetivo, a través de fun_objetivo, como de las restricciones, las lineales a través de Aeq y
beq, y las no lineales a través de nlincon.m.
Se ha demostrado que el número de restricciones y de variables es correcta. Que tanto la
1
Optimización en Matlab.
solución inicial, proporcionada por el algoritmo de Kruskal, es admisible, así como la solución final
después de la optimización.
La fiabilidad de los gradientes calculados se ha hecho activando la opción 'DerivateCheck'
y comprobando que la desviación de los gradientes calculados analíticamente de los calculados
numéricamente es prácticamente despreciable en el caso de la función objetivo y nulo en el caso del
gradiente de las funciones no lineales.
Se ha comprobado la limitación de fmincon al aplicar LargeScale Algorithms ya que
existen restricciones tanto del tipo x ij 0 ; ∀ i , j∈ A , del tipo “ecuaciones lineales” y ,
además, no lineales.
Por ello, Matlab utiliza un método del tipo MediumScale Algorithm, lo que limita la
calidad de la solución. De hecho, Matlab se conforma con la primera solución que proporciona el
algoritmo de Kruskal, itera una única vez, y concluye poniendo exitflag a 1, con lo cual, el problema
ha convergido.
Todo esto lleva a la conclusión de que la biblioteca de funciones que incluye Matlab no
proporciona un mecanismo eficaz para resolver este problema en particular. Para no despreciar el
potencial que Matlab ofrece, esta sección concluye en que si hubiera una función de biblioteca en
Matlab que implementase métodos de resolución más eficaces para este tipo de problemas el
resultado hubiese sido mucho mejor.
Sin embargo, en nuestro caso no es así. De hecho, existen funciones de biblioteca para
Matlab pero que no están hechas por Matlab, y estas bibliotecas third-party proporcionan
herramientas allí donde los desarrolladores de Matlab no han llegado.
Así, como ejemplo de estas soluciones está TOMLAB®, que cuenta con una amplia
biblioteca de optimización en la que se encuentran funciones para resolver problemas de
optimización más complejos de los que abarca fmincon. Sin embargo, TOMLAB® es una solución
comercial y su licencia no es asequible.
Es necesario remarcar, que cuando la complejidad del problema aumenta, Matlab tiene que
manejar una cantidad de valores realmente alta. Pensemos que el problema tiene N nodos
terminales, y M variables. Por un lado, tenemos una matriz Aeq que tiene N filas y M columnas, y
por el otro nlincon que tiene que calcular un vector de dimensiones M/2x1 y su gradiente, que tiene
dimensiones Mx(M/2).
Para el problema steinb1.txt, las dimensiones son asequibles, pero para problemas como
steinc1.txt, steinc10 y steinc17 nos encontramos con 143, 427 y 500 restricciones lineales,
respectivamente. A esto hay que sumar 260, 891 y 3463 restricciones no lineales.
Si se piensa en que la función objetivo no es trivial y que el número de restricciones es
elevado se comprende porqué fmincon da un error de overflow de memoria, después de un tiempo
de ejecución bastante alto.
Por todo ello, el resultado obtenido por fmincon en esta optimización se toma como
demostración de que el problema converge hacia una solución admisible y lo suficientemente
cercana a la solución real como se puede apreciar a continuación:
Problema Origen fval exitflag CosteSolucion CosteOptimo Error(%)
##############################################################################
Función de Integridad Nº2
steinb1.txt 4 -212.391049 1 41 41 0
2
Optimización en Matlab.
steinb2.txt 2 -248.029154 1 58 58 0
steinb3.txt 1 -177.658457 1 62 62 0
steinb4.txt 16 -880.625024 1 63 59 6,7
steinb5.txt 3 -781.378816 1 63 56 12,5
steinb6.txt 1 -846.791991 1 124 116 6,8
steinb7.txt 5 -427.332440 1 75 74 1,3
steinb8.txt 1 -409.656110 1 79 75 5,3
steinb9.txt 1 -255.257538 1 75 75 0
steinb10.txt 2 -1336.60912 1 88 71 23
steinb11.txt 10 -1294.34950 1 95 86 10,5