Problema de Optimización

Cálculo de un mínimo priorizando la experimentación y la visualización. Usamos el lenguaje de programación Logo y LogoFE.

Deseamos construir una ventana rectangular que tenga una luz de 1 metro cuadrado, en una pared de tres metros de largo por 2.20 metros de alto, y queremos gastar el mínimo posible en la madera del marco. ¿Qué dimensiones de daremos a éste?

Empecemos con estos pequeños procedimiento para calcular el perímetro y el área de un rectángulo:

para per :b :h
devuelve :b + :b + :h + :h
fin

para area :b :h
devuelve :b * :h / 2
fin

Experimentemos con diferentes bases y alturas. Con una base de 1 metro y una altura de 2 metros. El perímetro es 6 y el área de la ventana es efectivamente 1m2.

muestra per 1 2
6
muestra area 1 2
1

Reduciendo la longitud de la altura a 1 metro. El perímetro se reduce, pero ahora la ventana ya no tiene 1 metro cuadrado de luz, solamente 0.5 m2.

muestra per 1 1
4
muestra area 1 1
0.5

¿Para una altura fija de 1.1 metros, cuánto debe tener la base, para que el área sea de 1m2?

muestra area 1 1.1
0.55

muestra area 2 1.1
1.1

muestra area 1.8 1.1
0.99

muestra area 1.9 1.1
1.045

Podemos usar resuelve. Buscamos un valor entre 0 y 3, ya que 3 es el largo de la pared.

muestra resuelve [invoca [1 - area ? 1.1]] [0 3]
1.81818181818182

muestra area 1.81818181818182 1.1
1

Podemos poner este código en un procedimiento que nos diga qué base debe tener una ventana de 1m2 de área, para un altura dada:

para base :h
devuelve resuelve [invoca [1 - area ? :h]] [0 3]
fin
muestra base 2
1

muestra base 1
2

muestra base 1.1
1.81818181818182

¿Cuál es el perímetro de la ventana de 1m2 de área cuando su altura es de 1.1 metros?

muestra per (base 1.1) 1.1
5.83636363636364

¿Cuál es el perímetro de la ventana de 1m2 de área cuando su altura es de 2 metros?

muestra per (base 2) 2
6

Creemos un procedimiento que dándole una altura nos calcule el perímetro de nuestra ventana:

para per.h :h
devuelve per (base :h) :h
fin

¿Cómo va variando el perímetro de la ventana de 1m2 de área para diferentes posibles valores de altura?

borrapantalla graflineas [] recorrido [per.h ?] dominio [1 2.2 100]

Imagen: altura vs perimetro

Con la gráfica podemos ubicar con cierta precisión el valor de altura para un perímetro mínimo. Podemos hacer acercamientos:

borrapantalla graflineas [] recorrido [per.h ?] dominio [1.3 1.5 100]

Imagen: altura vs perimetro a 1

borrapantalla graflineas [[Xmod: [fix: 5]] [Ymod: [fix: 5]]] ~
 recorrido [per.h ?] dominio [1.40 1.42 100]

Imagen: altura vs perimetro a 2

Pero, si recordamos un poco de cálculo sabremos que la derivada en el mínimo es 0. Grafiquemos la curva derivada de nuestra curva de altura versus perímetro:

borrapantalla graflineas [[Ymax: 2]] ~
 recorrido [deriva "per.h lista 1 ?] dominio [1 2.2 100]

Imagen: derivada

Nuevamente podemos probar valores para la altura y tratar de encontrar aquel que nos dé un valor de derivada igual a 0:

muestra deriva "per.h [1 1.3]
-0.366872658552708
muestra deriva "per.h [1 1.5]
0.222217283936743
muestra deriva "per.h [1 1.4]
-0.0408228342564598

muestra deriva "per.h [1 1.412]
-0.0062819194749153
muestra deriva "per.h [1 1.416]
0.00503703212348938

Pero también podemos usar resuelve:

muestra resuelve [deriva "per.h lista 1] [1 2.2]
1.41421577208004

haz "altura resuelve [deriva "per.h lista 1] [1 2.2]

¿Cuál es el perímetro mínimo encontrado con esta altura?

muestra per.h :altura
5.65685424949929

Resulta que el perímetro mínimo se logra con una ventana cuadrada:

muestra base :altura
1.4142113526696

1. Licencia

Este es un documento libre.

Autor: Daniel Ajoy

Licencia Creative Commons
Esta obra está bajo una Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported.

2. Preguntas, Dudas, Comentarios, Peticiones

Síguenos en Facebook

3. Enlaces

Lenguaje de Programación Logo

Resolviendo un problema de maximización usando Logo

Área máxima de triángulo rectángulo


Generado con PureJoy. Creación: 11:49 - Dec 15, 2017. Última Modificación: 17:12 - Apr 02, 2023