Como todo el mundo ha dicho, la programación lineal es una forma de resolver problemas de optimización, cuyos términos son lineales.
Podría ayudar a entender qué tipos de problemas de PL de resolver
Un ejemplo en el que he usado la programación lineal es la construcción de un horario de restaurante.En un restaurante que tienen conjuntos de habilidades:
- cocineros
- Servidores
- Lavavajillas
- Hosts
- Lavaplatos
- Administrador etc
Y usted tiene empleados, cada uno con uno o más conjuntos de habilidades. Cada empleado también tiene una disponibilidad específica. Por ejemplo, Bob no puede trabajar los domingos por la mañana porque es pastor de una iglesia local. Los empleados también tienen un costo asociado. Bob podría costar $ 10.50/hora mientras que Suzy es de $ 5.15/hora. Finalmente, los empleados pueden tener un mínimo de horas garantizadas. Como Bob ha sido empleado durante 15 años, el jefe dice que siempre obtendrá al menos 35 horas.
El restaurante en sí tiene demandas. Por ejemplo, tiene 3 turnos: mañana, tarde y noche, y cada uno de estos turnos tiene un conjunto de requisitos de personal: necesitamos 1 cocinero, 1 servidor, 1 gerente por la mañana, 3 cocineros, 2 servidores, 2 anfitriones, 2 gerentes en la tarde, y 4 cocineros, 4 servidores, 3 anfitriones, 2 gerentes, 2 bussers en la noche. Cada turno tendrá una duración, y usted puede calcular el costo de cada turno multiplicando la duración por el salario por hora del empleado.
Finalmente tenemos leyes estatales y federales, y algunas reglas básicas de "negocios": Ningún empleado puede trabajar más de 8 horas sin entrar en horas extras. Ningún empleado puede programarse para menos de 2 horas (porque sería una molestia hacer un viaje de 30 minutos por un turno de 2 horas), los empleados no pueden trabajar dos turnos superpuestos, etc.
Ahora que se cumplen todos estos requisitos, brinde un cronograma que cumple con todos los requisitos y produce el menor costo de mano de obra.
Este es un ejemplo de un problema de optimización de programación lineal.
Un programa lineal típicamente consiste en:
Una función objetivo, las variables, los límites variables y restricciones.
Como queremos minimizar el costo, nuestra función objetivo va a involucrar los cambios que los empleados trabajan y los costos asociados (duración del turno * salario).
Las variables en este caso son los cambios que cada empleado puede realizar.
Los límites en estas variables son enteros entre 0 y 1, porque o bien un empleado está trabajando en el turno (1), o bien el empleado no está trabajando en el turno (0). Esto, dicho sea de paso, es un programa especial, llamado Binary Integer Program o BIP, porque todas las variables son enteros (sin valores fraccionarios) y todos los valores son 0 o 1.
Las restricciones son igualdad/restricciones de desigualdad basadas en los requisitos anteriores.
Por ejemplo, si Bob y Suzy pueden trabajar como cocineros por la mañana, entonces Bob_Morning_Cook1_Shift + Suzy_Morning_Cook1_Shift = 1
, con Bob_Morning_Cook_Shift = {0,1}
y Suzy_Morning_Cook_Shift = {0,1}
debido a los límites mencionados anteriormente. Estas tres piezas de información especifican que, como máximo, solo un empleado puede ser asignado como el primer cocinero de la mañana.
Una vez que haya definido todas las restricciones que modelan su problema, puede comenzar a resolver el problema.Si se puede encontrar una solución (y dependiendo de las limitaciones el problema puede no ser factible), le dará las asignaciones de empleados que producen el menor costo de mano de obra semanal.
En pocas palabras, se trata de volver a escribir su problema como un conjunto de ecuaciones lineales, y luego resolver esas ecuaciones. – FrustratedWithFormsDesigner
¿De qué "otro método" podría estar hablando? –
Buena pregunta, me olvidé de esto (desde Calc comenzamos a llamarlo "optimización" en lugar de programación lineal) –