Vigesimosegunda clase

El 5 de mayo de 2015 se empezó con la explicación de la metodología de la superficie de respuesta. Se explicó el método de pasos sucesivos por máximo gradiente y los diseños de primer orden, de segundo orden y de composición central. Se explicó desde el punto de vista gráfico cómo se podía ver el máximo o mínimo con dos factores. Para más factores se recomienda utilizar Matlab para optimizar la forma cuadrática.

En la segunda parte se ha trabajado en MatLab, en la práctica de optimización de vigas de hormigón armado con algoritmos genéticos. Se ha repasado la estructura de los datos que definen una viga, y se ha resuelto la generación de una población inicial, como ordenarla, y como seleccionar las soluciones para hacer los cruces.

Trucos para representar gráficas de superficie en MATLAB

Las gráficas de superficie resultan de interés en nuestra asignatura por distintos motivos. Por ejemplo, para representar la Superficie de Respuesta en un Diseño de Experimentos, o bien cuando estamos representando la predicción de un fenómeno a través de unas redes neuronales. Sea cual sea el motivo, dejo a continuación algunas pautas para que esta tarea sea sencilla.

Sea, por ejemplo, la parametrización de un algoritmo de Simulated Annealing donde hemos realizado experimentos con distintas longitudes de cadenas de Markov (columnas) y distintos coeficientes de enfriamiento (filas). En la tabla se encuentran los resultados medios en coste encontrados tras realizar 9 ensayos en cada caso.

20000 30000 40000 50000
0,95 2652 2645 2637 2634
0,96 2650 2644 2637 2635
0,97 2648 2644 2637 2636
0,98 2647 2642 2637 2636
0,99 2647 2641 2637 2637

 

Para poder representar dichos puntos, necesitamos definir dos vectores fila: x será, por ejemplo, el vector fila de los coeficientes de enfriamiento, e y será el vector fila de las longitudes de cadena de Markov.

>> x=[0.95 0.96 0.97 0.98 0.99]

x =

0.9500 0.9600 0.9700 0.9800 0.9900

>> y=[20000 30000 40000 50000]

y =

20000 30000 40000 50000

>> z=[2652 2645 2637 2634

2650 2644 2637 2635
2648 2644 2637 2636
2647 2642 2637 2636
2647 2641 2637 2637]

z =

2652 2645 2637 2634
2650 2644 2637 2635
2648 2644 2637 2636
2647 2642 2637 2636
2647 2641 2637 2637

 Sin embargo, la matriz z tiene que trasponerse, de forma que en filas vengan los datos de y:

>> z=z’

z =

2652 2650 2648 2647 2647
2645 2644 2644 2642 2641
2637 2637 2637 2637 2637
2634 2635 2636 2636 2637

Ahora  ya podemos dibujar la superficie, con varias opciones:

>> mesh (x,y,z)

Superficie mesh

 >> surf(x,y,z)

 

Superficie surf

>> contour (x,y,z)

Superficie contour

 >> surfc (x,y,z)

Superficie surfc

 >> pcolor (x,y,z)

Superficie pcolor

 

 

Programación lineal con Matlab

Los problemas de programación lineal consisten en optimizar una ecuación lineal que está sujeta a una serie de restricciones conformadas por desigualdades lineales. Para resolverlos el toolbox de Matlab posee la función linprog, la cual posee tres algoritmos para su solución, el método de larga escala, el método simplex y el de Active Set.

La sintaxis para llamar esta función es la siguiente:

x = linprog (f ,A, b, Aeq, beq, lb, ub, x0, options)

Donde:

f: es el vector de coeficientes de la función objetivo, organizado según las variables (Matlab intentará minimizar siempre, por tanto multiplicaremos por -1 si queremos maximizar)

A, b: corresponden a las restricciones de desigualdad, siendo el primero la matriz y el segundo el vector del lado derecho del sistema de inecuaciones Ax<=b.

Aeq, beq: tienen el mismo tratamiento que A y b, respectivamente, teniendo en cuenta que los nuevos corresponden a un sistema de ecuaciones, en tanto que los antiguos constituían uno de inecuaciones.

lb, ub: son, respectivamente, los límites inferior y superior de la región donde se espera que se encuentre el punto óptimo.

x0: es el punto inicial para la iteración. Según el algoritmo usado, es posible, o no, omitir este último.

Ejercicio 1:

Un taller confecciona faldas, blusas, vestidos y abrigos para los que utiliza 2 horas, 3 horas y media, 4 horas y media y 5 horas de máquina de coser y 1, 2, 1 y 10 horas de cosido a mano para cada prenda, respectivamente. Si se dispone de 3000 horas de máquina y 2000 horas para coser a mano, y sabiendo que los beneficios obtenidos por unidad son de 6, 10, 13 y 30 u.m,  respectivamente, calcular el número de prendas de cada tipo que deben confeccionarse para obtener el máximo beneficio.

El planteamiento para el primer problema es:

Maximizar: 6×1 + 10×2 + 13×3 + 30×4
Sujeto a: 2×1 + 3,5×2 + 4,5×3 + 5×4 = 3000
x1 + 2×2 + x3 + 10×4 = 2000
x1, x2, x3, x4 ≥ 0

Para definir todas las variables del primer problema, en Matlab, se debe escribir:
>> f = [-6 -10 -13 -30];
>> A = -eye(4); % matriz identidad de tamaño 4×4
>> b = [0 0 0 0];
>> Aeq = [2 3.5 4.5 5 ; 1 2 1 10];
>> beq = [3000 2000];

Finalmente, se usa la sintaxis respectiva con las variables del primer problema, cargadas previamente, para obtener lo siguiente:

>> [x,fval] = linprog(f,A,b,Aeq,beq,lb,ub,x0)
Optimization Terminated.

x =
0.0000
0.0000
500.0000
150.0000
fval =
-1.1000e+004

Ejercicio 2:

Una empresa que se dedica a la producción de frascos de perfume, de agua de colonia y de champú utiliza tres factores productivos F1, F2 y F3 disponiendo de 240, 460 y 430 unidades, respectivamente. Las cantidades de dichos factores utilizados en la producción de un frasco por cada producto se detallan en la siguiente tabla:

Cuadro
La formulación el segundo problema es:Sabiendo que el precio unitario de venta del perfume es de 5 unidades monetarias, el del agua de colonia de 2 y el del champú de 3, y que se vende todo lo que se produce, calcular el beneficio máximo y el número de frascos de cada tipo que debe producir la empresa para obtenerlo.

Maximizar: 5×1 + 2×2 + 3×3
Sujeto a: F1 ≤ 240
F2 ≤ 460
F3 ≤ 430

La asignación de los valores de las variables, correspondientes al segundo problema, se realiza de la siguiente manera:

>> f = [-5 -2 -3];
>> A = [1 2 1 ; 2 0 3 ; 0 4 1];
>> b = [240 460 430];
>> x0 = [0 0 0];

>> [x,fval] = linprog(f,A,b,[],[],[0 0 0])
Optimization Terminated.
x =
230.0000
5.0000
0.0000
fval =
-1.1600e+003

 Referencia:

Cabezas, I.; Páez, J.D. (2010). Matlab. Toolbox de optimización. Aplicaciones en ciencias económicas. Unidad de Informática y Comunicaciones. Facultad de Ciencias Económicas. Universidad Nacional de Colombia, Bogotá D.C. (enlace).

 

Cuarta clase

CodificaciónLa clase de hoy la hemos empezado revisando el esquema general del planteamiento de la optimización de las estructuras de hormigón. El profesor Víctor Yepes ha dedicado la primera parte de la clase a avanzar conceptos que se profundizarán en lecciones posteriores como: función objetivo, variables, parámetros, optimización combinatoria, módulo de comprobación de las restricciones, etc. También se han expuesto, de forma muy somera, un par de ejemplos (un muro y una viga biapoyada) de cómo se podría codificar en variables estar estructuras.

En la segunda parte de la clase, Julián Alcalá ha repasado las comprobaciones de una viga de hormigón, que será el ejemplo que se desarrollará completamente en Matlab para optimizar mediante algoritmos genéticos. Los alumnos deben preparar un script de comprobación a partir de los archivos que les hemos entregado. La tarea para la semana que viene será introducir todas las comprobaciones y traer un script que funcione completamente.

Os paso, para repasar la clase, una forma sencilla de optimizar a través de este Polimedia. Espero que os guste.

Segunda clase

La clase del martes  3 de febrero de 2015 la impartió Julián Alcalá. La clase consistió en una pequeña introducción al Matlab para familiarizar a los alumnos con este entorno de trabajo, manejo de ventanas, etc. Se hicieron operaciones básicas con matrices y se introdujo la creación y manipulación de scripts.

La segunda parte de la clase consistió en una introducción al SAP2000, donde se introdujo la geometría y materiales para el cálculo de un marco de hormigón.