La programación lineal (LP) es útil para la optimización de recursos, siempre que las restricciones y la función objetivo sean lineales o puedan linealizarse (también, ayuda si existen soluciones factibles y especialmente si existen soluciones óptimas, pero la unicidad no es un impedimento para nada – los lazos se rompen fácilmente por algoritmos específicos). LP solo puede resolver problemas convexos (directamente).
Aplicación 1: Recursos mixtos.
Digamos que tiene varios tipos de recursos, pero no puede extraer libremente ninguna cantidad de un recurso, ya que vienen en paquetes. Por ejemplo, debe consumir una cierta cantidad de carbohidratos , proteínas , grasas y vitaminas todos los días, pero solo se le permite comer barras de granola , cecina , chocolate , palomitas de maíz y ositos de goma . Mientras optimiza las limitaciones nutricionales al comer algunas cantidades de cada alimento, también desea optimizar el costo total en $.
Si usted come [math] x [/ math] barras de granola, [math] y [/ math] trozos de cecina de res, [math] z [/ math] barras de chocolate, etc., entonces la cantidad de carbohidratos se puede expresar como una función lineal de [matemáticas] x, y, z, \ ldots [/ matemáticas] Lo mismo para las proteínas. Entonces, las restricciones son desigualdades lineales.
- ¿Cuál es tu matriz favorita y por qué?
- ¿Cuáles son algunas aplicaciones comunes del teorema de Perron-Frobenius?
- ¿Por qué los cálculos vectoriales en la CPU son más rápidos que los escalares?
- ¿Cuál es la intuición detrás del pseudo inverso de una matriz?
- ¿Cuál es una explicación intuitiva de la relación entre el determinante de una matriz y el producto cruzado de vectores?
La función objetivo es lineal: multiplique [matemática] x [/ matemática] por el costo de una barra de granola y agregue a [matemática] y [/ matemática] multiplicada por el costo de una pieza de cecina, luego agregue… Entonces, en En la práctica, puede escribir la matriz de restricciones (los coeficientes en las restricciones) y el vector de objetivos (los coeficientes de la función objetivo) en una hoja de cálculo en Excel e invocar la programación lineal para encontrar una solución. O puede conectar algún software de código abierto como GLPK a su motor de juego o al back-end de un sitio web.
Aplicación 2. Problemas de ubicación.
Si está construyendo una nueva estación de bomberos, debe estar cerca de las ciudades de las que es responsable. Supongamos que desea minimizar la suma de las distancias de Manhattan (rectilíneas) por pares eligiendo cuidadosamente la ubicación [math] (x, y) [/ math]. Hay una solución directa simple para este problema de optimización (¿lo ve?), Pero construyamos un programa lineal para ilustrar la técnica, que luego puede generalizarse. La distancia de [math] (x, y) [/ math] a [math] (x_A, y_A) [/ math] está modelada por variables intermedias [math] d_ {xA}, d_ {yA}, d_A [/ math ] que luego alentaremos a que sea lo más pequeño posible, sujeto a
[matemáticas] d_ {xA} \ geq x-x_A [/ matemáticas] y [matemáticas] d_ {xA} \ geq x_A-x [/ matemáticas],
[matemáticas] d_ {yA} \ geq y-y_A [/ matemáticas] y [matemáticas] d_ {yA} \ geq y_A-y [/ matemáticas],
[matemáticas] d \ geq d_ {xA} + d_ {yA} [/ matemáticas]
Aquí [math] d_ {xA} [/ math] espera representar [math] | x-x_A | [/ math], [math] d_ {yA} [/ math] espera representar [math] | y-y_A | [/ math] y [math] d_A [/ math] espera representar [math] d_ {xA} + d_ {yA} [/ math], es decir, la distancia de Manhattan entre [math] (x, y) [/ matemáticas] y [matemáticas] (x_A, y_A) [/ matemáticas].
Entonces, ¿cómo alentamos a esas tres variables a ser lo más pequeñas posible? – Incluimos [math] d_A [/ math] como un agregado en la función objetivo que se minimiza: [math] d_A + d_B + d_C + \ ldots [/ math]. Puede agregar algunos pesos, si la distancia a A es más importante que la distancia a B. La minimización “empuja” hacia abajo cada una de esas variables, y eso a su vez empuja hacia abajo las variables de nivel inferior [matemáticas] d_ {xA} , d_ {yA}, d_ {xB}, d_ {yB}, \ ldots [/ math].
Ahora, trate de optimizar la ubicación de dos estaciones de bomberos responsables de tres ciudades diferentes cada una, mientras limita la distancia entre las estaciones de bomberos por alguna constante. Además de eso, fomente que esa distancia sea más pequeña si es posible sin mover las estaciones de bomberos más lejos de sus ciudades. Una vez que se familiarice con esto, se vuelve fácil manejar un gran número de variables, restricciones e incluso preferencias suaves.
Cuando llega a tamaños muy grandes, los solucionadores de LP “enlatados” comienzan a ahogarse, y querrá buscar solucionadores de LP especializados para el tipo de instancias que está construyendo. Hay algunas matemáticas muy interesantes que permiten resolver ciertos programas lineales prácticos al aprovechar los solucionadores rápidos de flujo mínimo y costo máximo.