Gracias por Compartir!
También me estaba faltando agregar la condición A + B + C + D = 1
Es esa restricción le que da sentido a la definición que se hace para las variables de decisión, que son fracciones (en volumen) del total de la aleación final.
Dejo los resultados obtenidos en python y el script adjunto.
IO_Ej_Guia_2.1:
MINIMIZE
2*XA + 2.5*XB + 1.5*XC + 2*XD + 0.0
SUBJECT TO
restriccion_Densidad_MAX: 6500 XA + 5800 XB + 6200 XC + 5900 XD <= 6050
restriccion_Densidad_MIN: 6500 XA + 5800 XB + 6200 XC + 5900 XD >= 5950
restriccion_Carbono_MAX: 0.2 XA + 0.35 XB + 0.15 XC + 0.11 XD <= 0.3
restriccion_Carbono_MIN: 0.2 XA + 0.35 XB + 0.15 XC + 0.11 XD >= 0.1
restriccion_Fosforo_MAX: 0.05 XA + 0.015 XB + 0.065 XC + 0.1 XD <= 0.055
restriccion_Fosforo_MIN: 0.05 XA + 0.015 XB + 0.065 XC + 0.1 XD >= 0.045
restriccion_Suma_de_fracciones: XA + XB + XC + XD = 1
----------------------------------------------------------------------
Valor Optimo del Funcional:
objective: 1.8448276049999999
XA: 0.0
XB: 0.28448276
XC: 0.59482759
XD: 0.12068966
restriccion_Densidad_MAX: 5.999999962114089e-05
restriccion_Densidad_MIN: 100.00005999999962
restriccion_Carbono_MAX: -0.09793103290000002
restriccion_Carbono_MIN: 0.10206896709999999
restriccion_Fosforo_MAX: 7.499999996052331e-10
restriccion_Fosforo_MIN: 0.010000000749999995
restriccion_Suma_de_fracciones: 9.999999911469715e-09