Skip to content

Commit 5bc48d4

Browse files
authored
Add files via upload
1 parent 252d2f2 commit 5bc48d4

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
---
2+
title: Convex Optimization II
3+
tags: [math]
4+
style: fill
5+
color: none
6+
description: Solving a real LP basic problem
7+
---
8+
9+
# Introducción
10+
11+
A veces los problemas que de ejemplo en optimización convexa ya parten de una formulación matemática y luego esta se fuerza a encajar en una aplicación. Pero esa forma solo la reconoce alguien que ya ha pasado por el entrenamiento de saber cómo funciona la optimización convexa.
12+
13+
Aquí vamos a tratar de hacerlo al revés, como es debido, formulando un caso de uso del día a día y luego entendiendo cómo podemos "castearlo" como un problema de optimización convexa.
14+
15+
Concretamente, este post lo dedicaremos a la programación lineal (LP), uno de los más sencillos tipos de optimización convexa donde tanto la función objetivo como las restricciones son combinaciones lineales de las variables de decisión.
16+
17+
En la vida real las personas se enfrentan a situaciones donde tienen que tomar decisiones complejas con recursos limitados y objetivos claros (como ganar más, gastar menos, entregar más rápido...), pero no están pensando en “sistemas de desigualdades lineales” o “funciones objetivo”.
18+
19+
# Pongamos un ejemplo
20+
21+
Imaginemos un **restaurante** pequeño que ofrece cuatro platos principales en su menú:
22+
23+
- Pasta al pesto (P1)
24+
- Pollo al curry (P2)
25+
- Hamburguesa clásica (P3)
26+
- Pescado con patatas (P4)
27+
28+
Cada uno de estos platos requiere cierta cantidad de ingredientes (como pasta, carne, verduras, pan, etc.), pero también requieren tiempo de cocina. Y resulta que el restaurante tiene recursos limitados cada día: solo cierta cantidad de ingredientes y solo cierto número de horas de trabajo del chef.
29+
30+
¿Cuál es el objetivo del dueño? Quiere saber cuántos de cada plato debería preparar al día para maximizar las ganancias, usando los recursos que tiene y sin sobrepasarlos.
31+
32+
¿Qué datos conoce el dueño?
33+
34+
El precio al que se vende cada plato:
35+
36+
- P1 deja 6 € de ganancia
37+
- P2 deja 4 €
38+
- P3 deja 7 €
39+
- P4 deja 5 €
40+
41+
El restaurante dispone, por día, de:
42+
43+
- 40 kg de ingredientes generales
44+
- 30 frascos de salsa especial
45+
- 10 horas de cocina
46+
47+
El uso de recursos por plato es algo así:
48+
| Plato | Ingredientes (kg) | Tiempo cocina (h) | Salsa especial (unid.) |
49+
|-------|--------------------|--------------------|----------------------|
50+
| P1 | 0.3 | 0.75 | 0 |
51+
| P2 | 0.6 | 0.5 | 2 |
52+
| P3 | 0.75 | 0.25 | 1 |
53+
| P4 | 0.5 | 1 | 1 |
54+
55+
¿Cuál es el problema? El dueño del restaurante no puede cocinar platos ilimitados, porque se queda sin tiempo, sin salsa o sin ingredientes (recursos). Entonces se pregunta: “¿Cuál es la combinación óptima de platos que debo preparar al día para ganar lo máximo posible, sin pasarme de los ingredientes ni del tiempo de cocina?” (obviamente, independiente de lo que quiera la genta [aquí se ofrece lo que está preparado...]).
56+
57+
Esta es la intuición del problema. No hay ecuaciones todavía, pero ya se empieza a ver la naturaleza del dilema: asignar recursos limitados para maximizar una ganancia.
58+
59+
# Resolución
60+
61+
Ahora podemos formular el problema como una optimización lineal (y por tanto convexa):
62+
63+
Nuestras variables (de decisión) son:
64+
65+
- x1: número de platos P1 (pasta)
66+
- x2: número de platos P2 (pollo)
67+
- x3: número de platos P3 (hamburguesa)
68+
- x4: número de platos P4 (tacos)
69+
70+
Función objetivo (ganancia total a maximizar, considerando ganancias unitarias por producto):
71+
72+
$$
73+
max Z = 6x_1 + 4x_2 + 7x_3 + 5x_4
74+
$$
75+
76+
Las restricciones, especificadas por los recursos, son:
77+
78+
Ingredientes:
79+
80+
$$
81+
3x1+4x2+5x3+2x4≤40
82+
$$
83+
84+
Tiempo de cocina:
85+
86+
$$
87+
2x1+1x2+3x3+2x4≤20
88+
$$
89+
90+
Salsa especial:
91+
92+
$$
93+
0x1+1x2+1x3+1x4≤30
94+
$$
95+
96+
Además, queremos hacer, como mínimo, 2 P1, 4 P2, 5 P3 y 3 P4 (porque sí; e.g. en base a lo que solemos vender normalmente):
97+
98+
$$
99+
x1​≥2
100+
$$
101+
102+
$$
103+
x2≥4
104+
$$
105+
106+
$$
107+
x3≥6
108+
$$
109+
110+
$$
111+
x4≥3
112+
$$
113+
114+
No podemos "anticocinar" platos:
115+
116+
$$
117+
x1,x2,x3,x4≥0
118+
$$
119+
120+
El código, usando la librería de optimización en Python Pyomo, está disponible [aquí](https://github.com/agarnung/computerVisionMiscellaneous/tree/main/2025-06-14-convex-optimization-II).
121+
122+
La combinación de platos óptima que nos da el mayor beneficio es (tras optimizar):
123+
124+
```txt
125+
Resultado de optimización:
126+
P1: 2 platos
127+
P2: 4 platos
128+
P3: 14 platos
129+
P4: 3 platos
130+
Ganancia total: 141.00 €
131+
```
132+
133+
Si el lector no confía en las propiedades de la optimización convexa o en el sover utilizado, en el script también se comprueba que la solución encontrada es óptima verificando con búsqueda exhaustiva que la ganancia encontrada es la máxima que respeta las restricciones:
134+
135+
```txt
136+
Mejor combinación encontrada por búsqueda exhaustiva: {'P1': 2, 'P2': 4, 'P3': 14, 'P4': 3}
137+
Ganancia máxima encontrada: 141.00 €
138+
La solución del solver es óptima.
139+
```
140+
141+
# Referencias
142+
143+
- Chong, E. K. P., & Zak, S. H. (2001). Introduction to Optimization (2nd ed.). Wiley-Interscience Series in Discrete Mathematics and Optimization. John Wiley & Sons, Inc. pág. 257.
144+
145+
- Bangerth, W. (2017). Examples of optimization problems [Lecture slides]. Departamento de Matemáticas, Colorado State University. https://www.math.colostate.edu/~bangerth/teaching/2017-spring-561/optimization-slides.pdf

0 commit comments

Comments
 (0)