Resolviendo Programación Lineal con Gran M y Dos Fases
Un proyecto de software para optimizar la toma de decisiones
Iteraciones manuales que consumen mucho tiempo.
Un simple error de cálculo invalida toda la solución.
La lentitud manual retrasa decisiones críticas de negocio.
Z, Restricciones
Gran M / Dos Fases
Resultados y Pasos
Construcción del tableau inicial con variables artificiales
Iteraciones Simplex: Selección de pivote y operaciones fila
(Dos Fases) Transición Fase 1 → Fase 2
Extracción de valores óptimos y generación de reportes
La base de todo. Navega por los vértices de la región factible.
Se añaden para iniciar la solución en problemas con ≥ o =.
Penaliza las variables A en la función objetivo.
Primero elimina las A, luego optimiza.
Función Objetivo Original
Max Z = 3x₁ + 2x₂
Función Objetivo Penalizada
Max Z = 3x₁ + 2x₂ - M A₁ - M A₂
El valor gigante de M fuerza a las variables artificiales (A) a ser cero en la solución óptima. Si no lo hacen, ¡el problema es infactible!
Min W = A₁ + A₂ + ...
El único objetivo es hacer que todas las variables artificiales sean cero.
Max Z = 3x₁ + 2x₂
Con la base "limpia" de la Fase 1, se resuelve el problema original.
Encontrar la solución óptima.
> Ingrese datos del problema...
> Seleccione Método: Gran M
> Seleccione Objetivo: Maximizar
La lógica y los datos
SimplexBase.java
GranM.java
DosFases.java
El cerebro que conecta todo
HelloController.java
La interfaz de usuario
hello-view.fxml
WindowSolucion.java
Detecta variables artificiales en base con valor > 0
Identifica cuando no existe fila pivote válida
Uso de épsilon (1e-10) para evitar errores de punto flotante
Caso de Maximización
✅Caso de Minimización
✅Problema Infactible
✅Solución no Acotada
✅Problema: Maximizar Z = 3x₁ + 5x₂
Restricciones:
x₁ ≤ 4
2x₂ ≤ 12
3x₁ + 2x₂ ≤ 18
Solución Óptima:
x₁ = 2.00, x₂ = 6.00, Z = 36.00
Resultados consistentes con soluciones académicas y comerciales
¡Gracias por su atención!