Reformular un modelo para dejarlo lineal y correcto: condiciones lógicas con binarias, big-M y costos fijos, min-max y valor absoluto, producto binaria×continua (McCormick) y cómo auditar un modelo. Arquetipos I2-A y E-A.
Con variables binarias xi∈{0,1} (representan decisiones sí/no) se codifican reglas lógicas del enunciado como desigualdades lineales. Estos cuatro patrones cubren casi todo lo que piden en la I1.
"No puedo elegir j sin elegir también h". Si xj=1 obliga xh=1:
Dos opciones incompatibles, no pueden coexistir:
Dos decisiones van juntas: o ambas o ninguna:
Para usar cualquiera de las opciones m∈M debo primero activar xj:
Para chequear una restricción lógica, prueba los casos de las binarias: pon xj=0 y xj=1 y confirma que la desigualdad permite exactamente lo que dice el enunciado. Si algún caso permitido queda prohibido (o al revés), la restricción está mal.
El truco big-M conecta una variable continua z≥0 con una binaria y: "solo puedo producir/enviar z>0 si abrí la instalación (y=1)". Con M una cota superior de z:
Si y=0⇒z≤0⇒z=0 (nada permitido). Si y=1⇒z≤M (la cota queda floja y z es libre hasta M).
El big-M permite cobrar un costo fijo f por "abrir" (independiente de cuánto produzcas) más un costo variable c por unidad. La binaria y paga el fijo, la continua z paga lo variable:
El caso simétrico maxmin usa z≤ cada término. Y una restricción max{A,B}≤K equivale simplemente a A≤K y B≤K.
Una restricción ∣a⊤x∣≤b se desdobla en dos desigualdades lineales (el valor absoluto acota por ambos lados):
Pasar de maximizar a minimizar exige negar el objetivo completo: maxf(x)≡min(−f(x)). Las funciones estrictamente crecientes (como exp, ln) se pueden quitar del objetivo sin cambiar el argmax: optimizar exp(g(x)) equivale a optimizar g(x).
"Pasar a mínimo" no es escribir 'mín' delante de la misma expresión: hay que negar el término que depende de x. maxx con 0≤x≤K da x∗=K; pero minx da x∗=0 (¡el punto opuesto!). Lo correcto es min(−x), que sí da x∗=K.
El producto de una binaria y∈{0,1} por una continua acotada z∈[0,U] es no lineal (bilineal), pero se linealiza exactamente introduciendo una variable nueva w=yz y cuatro desigualdades:
Verifica los casos: si y=0, las cotas fuerzan w=0; si y=1, fuerzan w=z. Luego sustituyes w donde aparecía yz (en la FO o en restricciones), sin tocar las cotas originales de z.
Si el enunciado impone Kmin≤z≤Kmax sin condicionarla a y, es INCORRECTO reescribir esa cota como Kminy≤z≤Kmaxy: eso fuerza z=0 cuando y=0, lo cual reinterpreta el modelo, no lo linealiza. La forma fiel es introducir w=yz con McCormick y dejar la cota de z intacta.
Un arquetipo recurrente de la I2 y el examen te entrega un modelo (a veces "hecho por una IA") y pide detectar y corregir errores, o extenderlo con una nueva condición. Es puntaje casi regalado si tienes una checklist mental.
Cuando extiendas un modelo con una condición nueva, no reescribas todo: agrega solo la(s) restricción(es) que faltan y, si hace falta, una variable nueva. Deja claro qué agregaste. Corregir es más rápido que modelar de cero — por eso este arquetipo conviene priorizarlo.