Camilo Merino
Base abierta de ingeniería
Optimización

Unidad 9 · Simplex: dos fases, gran M y casos especiales

Descargar PDFVerificadores

Qué vas a poder hacer. Arrancar el simplex cuando el origen no es factible, agregando variables artificiales a las restricciones \(\ge\) e \(=\); sacarlas de la base con el método de la gran M o con el de dos fases; y reconocer en la tabla, sin dibujar nada, cuándo un problema es degenerado, tiene óptimos múltiples, es no acotado o no tiene solución.

Lo que necesitas antes. La unidad 8: forma estándar, base y solución básica factible, costo reducido, prueba de la razón mínima y pivoteo en la tabla. De la unidad 2 basta con saber que el simplex camina de vértice en vértice.

Tiempo. Unas 5 horas: 2 de lectura con el ejemplo y 3 de práctica.


1. El problema: no hay base para partir

El simplex de la unidad 8 parte del origen. Con restricciones \(\le\) y lados derechos no negativos, las holguras forman una matriz identidad y la primera base sale gratis: \(s_i = b_i\). Con una restricción \(\ge\) o una \(=\) eso deja de funcionar.

El arreglo es agregar, en cada una de esas filas, una variable artificial \(a_i \ge 0\) con coeficiente \(+1\). Las artificiales completan la identidad y la base inicial vuelve a ser obvia: \(a_i = b_i\). El precio es que una artificial no significa nada: si queda positiva, la restricción original no se cumple. Todo el trabajo de esta unidad es sacarlas de la base (dejarlas en cero) antes de buscar el óptimo.

Restricción Se agrega Coeficiente Básica al partir
\(\le\) holgura \(s_i\) \(+1\) \(s_i = b_i\)
\(\ge\) exceso \(e_i\) y artificial \(a_i\) \(-1\) y \(+1\) \(a_i = b_i\)
\(=\) artificial \(a_i\) \(+1\) \(a_i = b_i\)

Antes de todo, cada lado derecho tiene que ser \(b_i \ge 0\). Si una fila trae \(b_i < 0\), se multiplica por \(-1\) y la desigualdad se da vuelta (\(\le\) pasa a \(\ge\)).

La tabla de esta unidad

Es la misma del curso. La fila 0 lleva los costos reducidos y, en el lado derecho (LD), \(-z\):

\[\bar c_j = c_j - c_B^\top B^{-1} A_j \qquad\qquad \text{LD de la fila 0} = -c_B^\top B^{-1} b = -z\]

Las variables básicas siempre tienen \(\bar c_j = 0\). Esa es la prueba más rápida de que la fila 0 está bien calculada.


2. Método de la gran M

La idea es cobrarle a cada artificial un costo tan alto que el simplex prefiera cualquier otra cosa antes que dejarla positiva. Con un número \(M\) «más grande que cualquier dato del problema»:

\[\max\; z = c^\top x - M \sum_i a_i \qquad\qquad \min\; z = c^\top x + M \sum_i a_i\]

En un máximo la artificial resta; en un mínimo suma. En los dos casos empeora el objetivo.

Los costos reducidos quedan de la forma \(p + qM\). Se comparan primero por el coeficiente de \(M\) y solo si empatan por el número suelto: \(4 - 3M\) es más negativo que \(7 - 2M\), aunque \(4 < 7\) no tenga nada que ver. En la tabla inicial de un mínimo, la columna \(j\) queda con

\[\bar c_j = c_j - M \sum_{i \,\in\, \text{filas con artificial}} a_{ij}\]

porque las artificiales son básicas con costo \(M\). Ese es el paso que más se olvida: si en la fila 0 se copia el \(M\) del objetivo bajo cada artificial, las básicas quedan con \(\bar c \neq 0\) y todo lo que sigue sale mal.

Cómo termina.

Cuándo no conviene. En un computador \(M\) tiene que ser un número concreto. Si es demasiado chico, el simplex prefiere pagar la multa y entrega una «solución» con artificiales positivas (ejercicio 9.9); si es demasiado grande, mezcla cifras de tamaños muy distintos y los redondeos se comen los datos reales. Por eso los programas usan dos fases.


3. Método de las dos fases

Separa las dos preguntas: primero ¿hay algún vértice factible? y después ¿cuál es el mejor?

Fase 1. Con las mismas restricciones (artificiales incluidas) se resuelve

\[\min\; w = \sum_i a_i\]

Como todas las artificiales son no negativas, \(w \ge 0\) siempre. Hay dos salidas:

La fila 0 de la fase 1 parte, en las columnas no artificiales, con

\[\bar c_j = -\sum_{i \,\in\, \text{filas con artificial}} a_{ij} \qquad\qquad \text{LD} = -\sum_{i \,\in\, \text{filas con artificial}} b_i = -w\]

Fase 2. Se borran las columnas artificiales, se vuelve al objetivo original y se recalcula la fila 0 con \(\bar c_j = c_j - c_B^\top B^{-1}A_j\) usando las básicas que dejó la fase 1. Desde ahí, el simplex de siempre.

Por qué las dos fases y la gran M pasan por las mismas bases. Mientras quede una artificial positiva, el término en \(M\) manda en la gran M y la elección es la misma que en la fase 1 (que solo mira las artificiales). Cuando las artificiales salen, el término en \(M\) desaparece de las columnas que importan y queda el objetivo original, igual que en la fase 2. Con las mismas reglas de empate, el camino coincide. El ejemplo lo muestra.


4. Ejemplo resuelto · el sustrato de una tienda de jardinería

Una tienda de jardinería de Los Ángeles vende sacos de sustrato de 60 litros. Los arma mezclando tierra de hoja ($180 el litro) y compost ($310 el litro). Cada litro de tierra aporta 1 g de nitrógeno y cada litro de compost, 4 g; un saco necesita al menos 150 g. Más de 40 litros de compost por saco quema las raíces. ¿Qué mezcla cuesta menos?

En palabras. Se decide cuántos litros de cada insumo lleva un saco. Se busca el menor costo. Lo limitan el volumen del saco (exacto), el nitrógeno mínimo y el tope de compost.

Algebraico. \(x_1\) litros de tierra, \(x_2\) litros de compost.

\[\min\; z = 180x_1 + 310x_2\] \[\text{s.a.}\quad x_1 + x_2 = 60 \qquad x_1 + 4x_2 \ge 150 \qquad x_2 \le 40 \qquad x_1, x_2 \ge 0\]

En OPL (modelos/u09_sustrato.mod):

/*********************************************
 * Unidad 9 · Ejemplo · sustrato de un vivero
 * Mezcla de tierra de hoja y compost al menor costo, por saco de 60 litros.
 * Tiene una restricción =, una >= y una <=: a mano necesita dos artificiales.
 *********************************************/
{string} Insumos = {"tierra", "compost"};
float costo[Insumos]     = [180, 310];     // CLP por litro
float nitrogeno[Insumos] = [1, 4];         // gramos de nitrógeno por litro
float volumen = 60;                        // litros por saco
float nitrogenoMin = 150;                  // gramos de nitrógeno por saco
float compostMax = 40;                     // litros de compost como máximo

dvar float+ x[Insumos];                    // litros de cada insumo en el saco

minimize sum(i in Insumos) costo[i] * x[i];

subject to {
  ctVolumen:   sum(i in Insumos) x[i] == volumen;
  ctNitrogeno: sum(i in Insumos) nitrogeno[i] * x[i] >= nitrogenoMin;
  ctCompost:   x["compost"] <= compostMax;
}

execute {
  writeln("x_tierra = ", x["tierra"]);
  writeln("x_compost = ", x["compost"]);
  writeln("dual_volumen = ", ctVolumen.dual);
  writeln("dual_nitrogeno = ", ctNitrogeno.dual);
  writeln("dual_compost = ", ctCompost.dual);
}

Paso 1 · Forma estándar. La \(=\) recibe una artificial; la \(\ge\), un exceso y una artificial; la \(\le\), una holgura:

\[x_1 + x_2 + a_1 = 60 \qquad x_1 + 4x_2 - e_2 + a_2 = 150 \qquad x_2 + s_3 = 40\]

La base inicial es \(\{a_1, a_2, s_3\}\) con valores 60, 150 y 40.

Paso 2 · Gran M. El objetivo es \(\min\; 180x_1 + 310x_2 + Ma_1 + Ma_2\). Las dos artificiales son básicas con costo \(M\), así que \(\bar c_{x_1} = 180 - M(1+1) = 180 - 2M\) y \(\bar c_{x_2} = 310 - M(1+4) = 310 - 5M\). Es un mínimo: entra el más negativo, que es el de mayor coeficiente negativo en \(M\).

Tabla 0.

Base \(x_{1}\) \(x_{2}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) 180 − 2M 310 − 5M M 0 0 0 −210M
\(a_{1}\) 1 1 0 0 1 0 60
\(a_{2}\) 1 4 −1 0 0 1 150
\(s_{3}\) 0 1 0 1 0 0 40

Entra \(x_{2}\). Razones: \(a_{1}\) 60 · \(a_{2}\) 37,5 · \(s_{3}\) 40. Sale \(a_{2}\).

Tabla 1.

Base \(x_{1}\) \(x_{2}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) 102,5 − 0,75M 0 77,5 − 0,25M 0 0 −77,5 + 1,25M −11.625 − 22,5M
\(a_{1}\) 0,75 0 0,25 0 1 −0,25 22,5
\(x_{2}\) 0,25 1 −0,25 0 0 0,25 37,5
\(s_{3}\) −0,25 0 0,25 1 0 −0,25 2,5

Entra \(x_{1}\). Razones: \(a_{1}\) 30 · \(x_{2}\) 150 · \(s_{3}\) —. Sale \(a_{1}\).

Tabla 2.

Base \(x_{1}\) \(x_{2}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) 0 0 130/3 0 −410/3 + M −130/3 + M −14.700
\(x_{1}\) 1 0 1/3 0 4/3 −1/3 30
\(x_{2}\) 0 1 −1/3 0 −1/3 1/3 30
\(s_{3}\) 0 0 1/3 1 1/3 −1/3 10

Óptima: ningún costo reducido mejora.

Paso 3 · Dos fases. La fase 1 minimiza \(w = a_1 + a_2\). Su fila 0 parte con \(-(1+1) = -2\) para \(x_1\), \(-(1+4) = -5\) para \(x_2\), \(+1\) para \(e_2\) y \(-w = -210\).

Tabla 0 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) −2 −5 1 0 0 0 −210
\(a_{1}\) 1 1 0 0 1 0 60
\(a_{2}\) 1 4 −1 0 0 1 150
\(s_{3}\) 0 1 0 1 0 0 40

Entra \(x_{2}\). Razones: \(a_{1}\) 60 · \(a_{2}\) 37,5 · \(s_{3}\) 40. Sale \(a_{2}\).

Tabla 1 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) −0,75 0 −0,25 0 0 1,25 −22,5
\(a_{1}\) 0,75 0 0,25 0 1 −0,25 22,5
\(x_{2}\) 0,25 1 −0,25 0 0 0,25 37,5
\(s_{3}\) −0,25 0 0,25 1 0 −0,25 2,5

Entra \(x_{1}\). Razones: \(a_{1}\) 30 · \(x_{2}\) 150 · \(s_{3}\) —. Sale \(a_{1}\).

Tabla 2 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) 0 0 0 0 1 1 0
\(x_{1}\) 1 0 1/3 0 4/3 −1/3 30
\(x_{2}\) 0 1 −1/3 0 −1/3 1/3 30
\(s_{3}\) 0 0 1/3 1 1/3 −1/3 10

Óptima: ningún costo reducido mejora.

Tabla 3 · fase 2.

Base \(x_{1}\) \(x_{2}\) \(e_{2}\) \(s_{3}\) LD
\(\bar c\) 0 0 130/3 0 −14.700
\(x_{1}\) 1 0 1/3 0 30
\(x_{2}\) 0 1 −1/3 0 30
\(s_{3}\) 0 0 1/3 1 10

Óptima: ningún costo reducido mejora.

La fase 1 termina con \(w^* = 0\) y ninguna artificial en la base. Al recalcular la fila 0 con los costos 180 y 310, la tabla ya cumple \(\bar c_j \ge 0\): la fase 2 no necesita iterar.

Paso 4 · Comparar. La gran M pasó por las bases \(\{a_1, a_2, s_3\}\), \(\{a_1, x_2, s_3\}\) y \(\{x_1, x_2, s_3\}\); las dos fases, por las mismas. Mira la segunda tabla de cada método: en la gran M, el coeficiente de \(M\) de cada columna es la fila 0 de la fase 1 (\(-0{,}75\) y \(-0{,}25\)) y el número suelto es el costo reducido del objetivo original. La gran M hace las dos fases al mismo tiempo.

Cómo se lee.


5. Casos especiales: cómo se ven en la tabla

Caso Cómo se ve en la tabla Qué significa Qué se hace
Degeneración una básica vale 0, o hubo empate en la razón mínima el vértice tiene más restricciones activas de las necesarias se sigue; el pivote puede no mejorar \(z\)
Óptimos múltiples tabla óptima con una no básica de \(\bar c_j = 0\) el objetivo es paralelo a una cara de la región se pivotea esa columna para obtener otro vértice óptimo
No acotado la columna que entra no tiene ningún \(\alpha_{ie} > 0\) se puede mejorar \(z\) sin límite se detiene; falta una restricción en el modelo
Infactible fase 1 con \(w^* > 0\), o gran M con una artificial positiva al final no existe ningún punto que cumpla todo se detiene; hay que revisar qué restricciones chocan

Por qué cada lectura funciona.

Cuándo no aplica. Un \(\bar c_j = 0\) en una no básica de una tabla degenerada puede no llevar a un punto distinto: si la razón mínima de esa columna es 0, el pivote cambia la base pero no el punto. Antes de afirmar «hay infinitas soluciones» hay que hacer el pivote y mirar si el punto cambió.


6. Errores típicos

Error Cómo evitarlo
Olvidar la artificial en una restricción \(=\) Toda \(=\) y toda \(\ge\) llevan una artificial; las \(\le\) no
Usar el exceso como básica de partida Su coeficiente es \(-1\): partiría con valor \(-b_i\)
Copiar \(M\) en la fila 0 bajo las artificiales sin «limpiar» Calcula \(\bar c_j = c_j - c_B^\top B^{-1}A_j\); las básicas tienen que quedar en 0
Poner \(+M\) en un máximo o \(-M\) en un mínimo La artificial siempre empeora el objetivo: resta en un máximo, suma en un mínimo
Comparar \(p + qM\) por el número suelto Manda el coeficiente de \(M\); el número solo desempata
Empezar la fase 2 con la fila 0 de la fase 1 Se recalcula con el objetivo original y las básicas que dejó la fase 1
Declarar infactible porque quedó una artificial básica Solo es infactible si \(w^* > 0\); una artificial básica en 0 se saca pivoteando
Ver óptimos múltiples en el \(\bar c = 0\) de una básica Las básicas siempre tienen \(\bar c = 0\); la señal es una no básica con \(\bar c = 0\)
Buscar el no acotado en la columna del LD Se mira la columna de la variable que entra: ningún coeficiente positivo

7. Práctica

Diez ejercicios: 9.1 a 9.4 básicos, 9.5 a 9.8 intermedios, 9.9 y 9.10 de desafío. Usa la convención de tabla de la sección 1 (empates: columna de más a la izquierda, fila de más arriba) para que tus tablas coincidan con las pautas.

9.1 · Preparar la partida (básico). Para \(\min\; z = 4x_1 + 7x_2 + 3x_3\) s.a. \(2x_1 + x_2 + x_3 \ge 12\), \(x_1 + 3x_2 = 15\), \(x_1 + x_2 + 2x_3 \le 20\), \(x \ge 0\): (a) escribe la forma estándar con holguras, excesos y artificiales; (b) di cuál es la base inicial; (c) escribe la fila 0 inicial de la fase 1 y la de la gran M; (d) resuelve con un programa y di el óptimo.

9.2 · Óptimos múltiples (básico). Resuelve con simplex \(\max\; z = 5x_1 + 10x_2\) s.a. \(x_1 + 2x_2 \le 16\), \(3x_1 + 2x_2 \le 24\), \(x \ge 0\). ¿Cómo sabes, en la tabla final, que hay más de un óptimo? Encuentra el otro vértice óptimo y escribe todas las soluciones óptimas.

9.3 · No acotado (básico). Resuelve con simplex \(\max\; z = 2x_1 + 3x_2\) s.a. \(x_1 - x_2 \le 4\), \(-2x_1 + x_2 \le 2\), \(x \ge 0\). ¿En qué tabla y en qué columna se ve que el problema es no acotado? Escribe la dirección por la que \(z\) crece sin límite.

9.4 · Infactible (básico). Aplica la fase 1 a \(\max\; z = 3x_1 + 2x_2\) s.a. \(x_1 + x_2 \le 5\), \(2x_1 + 3x_2 \ge 18\), \(x \ge 0\). ¿Qué dice \(w^*\)? Explica en una frase por qué no hay solución.

9.5 · Gran M completa (intermedio). Una viña mezcla dos fertilizantes. Cada kilo del primero cuesta 6 (miles de pesos) y aporta 2 unidades de nitrógeno y 1 de potasio; cada kilo del segundo cuesta 4 y aporta 1 de nitrógeno y 2 de potasio. Por hectárea se necesitan al menos 10 de nitrógeno y 11 de potasio, y la máquina esparce como máximo 9 kilos. Plantea el modelo y resuélvelo con la gran M, tabla por tabla. Interpreta el resultado.

9.6 · Dos fases completo (intermedio). Resuelve con dos fases \(\max\; z = 5x_1 + 4x_2 + 2x_3\) s.a. \(x_1 + x_2 + x_3 = 10\), \(2x_1 + x_2 \le 14\), \(x_3 \ge 2\), \(x \ge 0\). ¿Cuántas iteraciones tomó cada fase? ¿Quedó alguna restricción con holgura?

9.7 · Degeneración (intermedio). Resuelve con simplex \(\max\; z = 3x_1 + 2x_2\) s.a. \(x_1 + x_2 \le 6\), \(x_1 \le 4\), \(2x_1 + x_2 \le 8\), \(x \ge 0\). Marca la tabla degenerada y el pivote en que \(z\) no cambia. ¿En qué punto del plano estaba el simplex durante ese pivote?

9.8 · Cuatro tablas, cuatro diagnósticos (intermedio). Cada tabla sale de un problema distinto (A, B y C son máximos; D es la tabla final de la fase 1 de un mínimo). Para cada una di si es óptima, si hay que seguir (y quién entra y quién sale), si hay óptimos múltiples, si el problema es no acotado o si es infactible.

Tabla A

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) LD
\(\bar c\) 0 1 −2 0 −20
\(x_{1}\) 1 0,5 0,5 0 5
\(s_{2}\) 0 0,5 −0,5 1 2

Tabla B

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) LD
\(\bar c\) 0 0 −2 0 −16
\(x_{2}\) 0,5 1 0,5 0 4
\(s_{2}\) 1 0 0 1 5

Tabla C

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) LD
\(\bar c\) 3 0 0 −2 −2
\(s_{1}\) 0 0 1 1 4
\(x_{2}\) −1 1 0 1 1

Tabla D

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(e_{2}\) \(a_{2}\) LD
\(\bar c\) 1 0 2 1 0 −2
\(x_{2}\) 1 1 1 0 0 4
\(a_{2}\) −1 0 −2 −1 1 2

9.9 · ¿Qué tan grande es «grande»? (desafío). Repite el ejercicio 9.5 con números en lugar de \(M\): primero con \(M = 2\) y después con \(M = 5\). ¿Qué entrega el simplex en cada caso y cuál de las dos respuestas sirve? Explica qué valor mínimo tiene que tener \(M\) para este problema. Pista: compara lo que cuesta cubrir una unidad de nitrógeno con la artificial y con los fertilizantes.

9.10 · Dos pedidos que no caben (desafío). Estampa Sur (sección 9) recibe, además del pedido de 780 polerones, el de un club que quiere al menos 1.280 poleras básicas en la misma semana. Aplica la fase 1 con las dos artificiales. ¿Qué dice \(w^*\)? ¿Cuántos segundos de estampado faltan para cumplir los dos pedidos, y por qué esa cifra no es \(w^*\)? Si el taller consigue esos segundos, ¿qué plan le queda y cuánto margen deja?


8. Pautas

9.1. (a) \(2x_1 + x_2 + x_3 - e_1 + a_1 = 12\) · \(x_1 + 3x_2 + a_2 = 15\) · \(x_1 + x_2 + 2x_3 + s_3 = 20\). (b) Base inicial \(\{a_1, a_2, s_3\}\) con valores 12, 15 y 20. (c) Fase 1, columnas \(x_1, x_2, x_3, e_1\): −3, −4, −1 y 1; las básicas en 0; LD = −27. Gran M: 4 − 3M, 7 − 4M, 3 − M y M; LD = −27M. (d) \(x = (4{,}2;\ 3{,}6;\ 0)\) con \(z = 42\). La artificial de la \(=\) es obligatoria aunque la fila «parezca» fácil: sin ella no hay identidad.

9.2.

Tabla 0.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) LD
\(\bar c\) 5 10 0 0 0
\(s_{1}\) 1 2 1 0 16
\(s_{2}\) 3 2 0 1 24

Entra \(x_{2}\). Razones: \(s_{1}\) 8 · \(s_{2}\) 12. Sale \(s_{1}\).

Tabla 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) LD
\(\bar c\) 0 0 −5 0 −80
\(x_{2}\) 0,5 1 0,5 0 8
\(s_{2}\) 2 0 −1 1 8

Óptima: ningún costo reducido mejora.

En la tabla final \(x_1\) es no básica y tiene \(\bar c = 0\): hay óptimos múltiples. Si entra \(x_1\) (sale \(s_2\), razón 4):

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) LD
\(\bar c\) 0 0 −5 0 −80
\(x_{2}\) 0 1 0,75 −0,25 6
\(x_{1}\) 1 0 −0,5 0,5 4

Los vértices óptimos son \((0, 8)\) y \((4, 6)\), los dos con \(z = 80\). Todas las soluciones óptimas son \((x_1, x_2) = \lambda(0, 8) + (1-\lambda)(4, 6)\) con \(0 \le \lambda \le 1\). El objetivo es paralelo a la primera restricción (\(5/10 = 1/2\)): por eso toda esa arista es óptima.

9.3.

Tabla 0.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) LD
\(\bar c\) 2 3 0 0 0
\(s_{1}\) 1 −1 1 0 4
\(s_{2}\) −2 1 0 1 2

Entra \(x_{2}\). Razones: \(s_{1}\) — · \(s_{2}\) 2. Sale \(s_{2}\).

Tabla 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) LD
\(\bar c\) 8 0 0 −3 −6
\(s_{1}\) −1 0 1 1 6
\(x_{2}\) −2 1 0 1 2

Entra \(x_{1}\); ninguna fila tiene coeficiente positivo en su columna: no acotado.

En la segunda tabla entra \(x_1\) (\(\bar c = 8\)) y su columna es \((-1, -2)\): ninguna razón. Con \(x_1 = t\) y \(s_2 = 0\), las básicas son \(s_1 = 6 + t\) y \(x_2 = 2 + 2t\), y \(z = 6 + 8t\). Crece sin límite. En un modelo real esto avisa que falta una restricción (una demanda máxima, una capacidad).

9.4.

Tabla 0 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(e_{2}\) \(a_{2}\) LD
\(\bar c\) −2 −3 0 1 0 −18
\(s_{1}\) 1 1 1 0 0 5
\(a_{2}\) 2 3 0 −1 1 18

Entra \(x_{2}\). Razones: \(s_{1}\) 5 · \(a_{2}\) 6. Sale \(s_{1}\).

Tabla 1 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(e_{2}\) \(a_{2}\) LD
\(\bar c\) 1 0 3 1 0 −3
\(x_{2}\) 1 1 1 0 0 5
\(a_{2}\) −1 0 −3 −1 1 3

Óptima: ningún costo reducido mejora.

\(w^* = 3 > 0\): infactible. Con \(x_1 + x_2 \le 5\), lo más que puede valer \(2x_1 + 3x_2\) es 15 (todo en \(x_2\)), y se piden 18. Faltan 3 unidades, que es justo lo que quedó en \(a_2\).

9.5. \(\min\; z = 6x_1 + 4x_2\) s.a. \(2x_1 + x_2 \ge 10\), \(x_1 + 2x_2 \ge 11\), \(x_1 + x_2 \le 9\), \(x \ge 0\).

Tabla 0.

Base \(x_{1}\) \(x_{2}\) \(e_{1}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) 6 − 3M 4 − 3M M M 0 0 0 −21M
\(a_{1}\) 2 1 −1 0 0 1 0 10
\(a_{2}\) 1 2 0 −1 0 0 1 11
\(s_{3}\) 1 1 0 0 1 0 0 9

Entra \(x_{2}\). Razones: \(a_{1}\) 10 · \(a_{2}\) 5,5 · \(s_{3}\) 9. Sale \(a_{2}\).

Tabla 1.

Base \(x_{1}\) \(x_{2}\) \(e_{1}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) 4 − 1,5M 0 M 2 − 0,5M 0 0 −2 + 1,5M −22 − 4,5M
\(a_{1}\) 1,5 0 −1 0,5 0 1 −0,5 4,5
\(x_{2}\) 0,5 1 0 −0,5 0 0 0,5 5,5
\(s_{3}\) 0,5 0 0 0,5 1 0 −0,5 3,5

Entra \(x_{1}\). Razones: \(a_{1}\) 3 · \(x_{2}\) 11 · \(s_{3}\) 7. Sale \(a_{1}\).

Tabla 2.

Base \(x_{1}\) \(x_{2}\) \(e_{1}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) 0 0 8/3 2/3 0 −8/3 + M −2/3 + M −34
\(x_{1}\) 1 0 −2/3 1/3 0 2/3 −1/3 3
\(x_{2}\) 0 1 1/3 −2/3 0 −1/3 2/3 4
\(s_{3}\) 0 0 1/3 1/3 1 −1/3 −1/3 2

Óptima: ningún costo reducido mejora.

Óptimo: 3 kg del primero y 4 del segundo, con costo 34 (miles de pesos) por hectárea. Las dos exigencias quedan justas y la máquina esparce 7 de sus 9 kilos (\(s_3 = 2\)). Las artificiales terminan con \(\bar c = M - 8/3\) y \(M - 2/3\): positivos para cualquier \(M\) grande, como debe ser.

9.6.

Tabla 0 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(x_{3}\) \(s_{2}\) \(e_{3}\) \(a_{1}\) \(a_{3}\) LD
\(\bar c\) −1 −1 −2 0 1 0 0 −12
\(a_{1}\) 1 1 1 0 0 1 0 10
\(s_{2}\) 2 1 0 1 0 0 0 14
\(a_{3}\) 0 0 1 0 −1 0 1 2

Entra \(x_{3}\). Razones: \(a_{1}\) 10 · \(s_{2}\) — · \(a_{3}\) 2. Sale \(a_{3}\).

Tabla 1 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(x_{3}\) \(s_{2}\) \(e_{3}\) \(a_{1}\) \(a_{3}\) LD
\(\bar c\) −1 −1 0 0 −1 0 2 −8
\(a_{1}\) 1 1 0 0 1 1 −1 8
\(s_{2}\) 2 1 0 1 0 0 0 14
\(x_{3}\) 0 0 1 0 −1 0 1 2

Entra \(x_{1}\). Razones: \(a_{1}\) 8 · \(s_{2}\) 7 · \(x_{3}\) —. Sale \(s_{2}\).

Tabla 2 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(x_{3}\) \(s_{2}\) \(e_{3}\) \(a_{1}\) \(a_{3}\) LD
\(\bar c\) 0 −0,5 0 0,5 −1 0 2 −1
\(a_{1}\) 0 0,5 0 −0,5 1 1 −1 1
\(x_{1}\) 1 0,5 0 0,5 0 0 0 7
\(x_{3}\) 0 0 1 0 −1 0 1 2

Entra \(e_{3}\). Razones: \(a_{1}\) 1 · \(x_{1}\) — · \(x_{3}\) —. Sale \(a_{1}\).

Tabla 3 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(x_{3}\) \(s_{2}\) \(e_{3}\) \(a_{1}\) \(a_{3}\) LD
\(\bar c\) 0 0 0 0 0 1 1 0
\(e_{3}\) 0 0,5 0 −0,5 1 1 −1 1
\(x_{1}\) 1 0,5 0 0,5 0 0 0 7
\(x_{3}\) 0 0,5 1 −0,5 0 1 0 3

Óptima: ningún costo reducido mejora.

Tabla 4 · fase 2.

Base \(x_{1}\) \(x_{2}\) \(x_{3}\) \(s_{2}\) \(e_{3}\) LD
\(\bar c\) 0 0,5 0 −1,5 0 −41
\(e_{3}\) 0 0,5 0 −0,5 1 1
\(x_{1}\) 1 0,5 0 0,5 0 7
\(x_{3}\) 0 0,5 1 −0,5 0 3

Entra \(x_{2}\). Razones: \(e_{3}\) 2 · \(x_{1}\) 14 · \(x_{3}\) 6. Sale \(e_{3}\).

Tabla 5 · fase 2.

Base \(x_{1}\) \(x_{2}\) \(x_{3}\) \(s_{2}\) \(e_{3}\) LD
\(\bar c\) 0 0 0 −1 −1 −42
\(x_{2}\) 0 1 0 −1 2 2
\(x_{1}\) 1 0 0 1 −1 6
\(x_{3}\) 0 0 1 0 −1 2

Óptima: ningún costo reducido mejora.

La fase 1 tomó 3 iteraciones y la fase 2, una. Óptimo \(x = (6, 2, 2)\) con \(z = 42\). La capacidad \(2x_1 + x_2 \le 14\) queda justa (\(s_2 = 0\)) y \(x_3\) queda en su mínimo de 2 (\(e_3 = 0\)): ninguna restricción tiene holgura. Fíjate que la fase 1 dejó \(e_3 = 1\) en la base y la fase 2 lo sacó.

9.7.

Tabla 0.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) LD
\(\bar c\) 3 2 0 0 0 0
\(s_{1}\) 1 1 1 0 0 6
\(s_{2}\) 1 0 0 1 0 4
\(s_{3}\) 2 1 0 0 1 8

Entra \(x_{1}\). Razones: \(s_{1}\) 6 · \(s_{2}\) 4 · \(s_{3}\) 4. Sale \(s_{2}\) (empate: sale la fila de más arriba).

Tabla 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) LD
\(\bar c\) 0 2 0 −3 0 −12
\(s_{1}\) 0 1 1 −1 0 2
\(x_{1}\) 1 0 0 1 0 4
\(s_{3}\) 0 1 0 −2 1 0

Entra \(x_{2}\). Razones: \(s_{1}\) 2 · \(x_{1}\) — · \(s_{3}\) 0. Sale \(s_{3}\).

Tabla 2.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) LD
\(\bar c\) 0 0 0 1 −2 −12
\(s_{1}\) 0 0 1 1 −1 2
\(x_{1}\) 1 0 0 1 0 4
\(x_{2}\) 0 1 0 −2 1 0

Entra \(s_{2}\). Razones: \(s_{1}\) 2 · \(x_{1}\) 4 · \(x_{2}\) —. Sale \(s_{1}\).

Tabla 3.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) LD
\(\bar c\) 0 0 −1 0 −1 −14
\(s_{2}\) 0 0 1 1 −1 2
\(x_{1}\) 1 0 −1 0 1 2
\(x_{2}\) 0 1 2 0 −1 4

Óptima: ningún costo reducido mejora.

En la primera tabla hay empate en la razón mínima (\(s_2\) y \(s_3\), las dos con 4). Sale \(s_2\) y la segunda tabla queda degenerada: \(s_3 = 0\) en la base. En el siguiente pivote entra \(x_2\) con razón 0: cambia la base pero \(z\) sigue en 12 y el punto sigue siendo \((4, 0)\). Recién el tercer pivote avanza a \((2, 4)\) con \(z = 14\). En \((4, 0)\) se cruzan tres rectas (\(x_1 = 4\), \(2x_1 + x_2 = 8\) y \(x_2 = 0\)) cuando dos bastan para fijar un vértice: eso es la degeneración vista en el plano.

9.8. A: no es óptima; \(x_2\) tiene \(\bar c = 1 > 0\), entra \(x_2\) y sale \(s_2\) (razones 10 y 4). B: óptima, con \(x_1\) no básica y \(\bar c = 0\): óptimos múltiples (si entra \(x_1\), sale \(s_2\) y se llega a otro vértice con \(z = 16\)). C: entra \(x_1\) (\(\bar c = 3\)) y su columna es \((0, -1)\), sin coeficientes positivos: no acotado. D: la fase 1 terminó (todos los \(\bar c \ge 0\)) con \(w^* = 2\) y \(a_2 = 2\) en la base: infactible. Ese problema pedía \(x_1 + 2x_2 \ge 10\) con \(x_1 + x_2 \le 4\), y lo más que alcanza \(x_1 + 2x_2\) es 8.

9.9. Con \(M = 2\) el simplex se detiene en esta tabla:

Base \(x_{1}\) \(x_{2}\) \(e_{1}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) 1 0 2 1 0 0 1 −31
\(a_{1}\) 1,5 0 −1 0,5 0 1 −0,5 4,5
\(x_{2}\) 0,5 1 0 −0,5 0 0 0,5 5,5
\(s_{3}\) 0,5 0 0 0,5 1 0 −0,5 3,5

Todos los \(\bar c \ge 0\), así que el método la declara óptima: \(x = (0;\ 5{,}5)\) con \(a_1 = 4{,}5\). Es falsa: la exigencia de nitrógeno no se cumple. Con \(M = 5\):

Base \(x_{1}\) \(x_{2}\) \(e_{1}\) \(e_{2}\) \(s_{3}\) \(a_{1}\) \(a_{2}\) LD
\(\bar c\) 0 0 8/3 2/3 0 7/3 13/3 −34
\(x_{1}\) 1 0 −2/3 1/3 0 2/3 −1/3 3
\(x_{2}\) 0 1 1/3 −2/3 0 −1/3 2/3 4
\(s_{3}\) 0 0 1/3 1/3 1 −1/3 −1/3 2

Ahora sí: \(x = (3, 4)\) con \(z = 34\), las artificiales en cero. Cubrir una unidad de nitrógeno con los fertilizantes, en el óptimo, cuesta \(8/3\) (el precio dual de esa restricción; unidad 10) y cubrirla con la artificial cuesta \(M\). Si \(M < 8/3\), al simplex le conviene «pagar la multa» en vez de comprar fertilizante. Cualquier \(M > 8/3\) da la respuesta correcta en este problema. La gran M simbólica evita la pregunta porque \(M\) le gana a cualquier número.

9.10. La fase 1, con artificiales en las dos filas de compromiso:

Tabla 0 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) \(e_{4}\) \(e_{5}\) \(a_{4}\) \(a_{5}\) LD
\(\bar c\) −1 −1 0 0 0 1 1 0 0 −2.060
\(s_{1}\) 30 90 1 0 0 0 0 0 0 108.000
\(s_{2}\) 20 50 0 1 0 0 0 0 0 64.800
\(s_{3}\) 0 1 0 0 1 0 0 0 0 830
\(a_{4}\) 0 1 0 0 0 −1 0 1 0 780
\(a_{5}\) 1 0 0 0 0 0 −1 0 1 1.280

Entra \(x_{1}\). Razones: \(s_{1}\) 3.600 · \(s_{2}\) 3.240 · \(s_{3}\) — · \(a_{4}\) — · \(a_{5}\) 1.280. Sale \(a_{5}\).

Tabla 1 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) \(e_{4}\) \(e_{5}\) \(a_{4}\) \(a_{5}\) LD
\(\bar c\) 0 −1 0 0 0 1 0 0 1 −780
\(s_{1}\) 0 90 1 0 0 0 30 0 −30 69.600
\(s_{2}\) 0 50 0 1 0 0 20 0 −20 39.200
\(s_{3}\) 0 1 0 0 1 0 0 0 0 830
\(a_{4}\) 0 1 0 0 0 −1 0 1 0 780
\(x_{1}\) 1 0 0 0 0 0 −1 0 1 1.280

Entra \(x_{2}\). Razones: \(s_{1}\) 2.320/3 · \(s_{2}\) 784 · \(s_{3}\) 830 · \(a_{4}\) 780 · \(x_{1}\) —. Sale \(s_{1}\).

Tabla 2 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) \(e_{4}\) \(e_{5}\) \(a_{4}\) \(a_{5}\) LD
\(\bar c\) 0 0 1/90 0 0 1 1/3 0 2/3 −20/3
\(x_{2}\) 0 1 1/90 0 0 0 1/3 0 −1/3 2.320/3
\(s_{2}\) 0 0 −5/9 1 0 0 10/3 0 −10/3 1.600/3
\(s_{3}\) 0 0 −1/90 0 1 0 −1/3 0 1/3 170/3
\(a_{4}\) 0 0 −1/90 0 0 −1 −1/3 1 1/3 20/3
\(x_{1}\) 1 0 0 0 0 0 −1 0 1 1.280

Óptima: ningún costo reducido mejora.

\(w^* = 20/3 > 0\): los dos pedidos no caben. Para cumplirlos se necesitan \(30 \cdot 1{.}280 + 90 \cdot 780 = 108{.}600\) segundos de estampado y hay 108.000: faltan 600 segundos (10 minutos). \(w^*\) no mide segundos sino unidades de artificial: la fase 1 deja de cumplir donde le sale más barato en unidades, y un polerón «ocupa» 90 segundos contra los 30 de una polera; por eso le faltan \(600/90 = 20/3\) polerones y no \(600/30 = 20\) poleras. Con 10 minutos más de estampado el único plan factible es exactamente 1.280 poleras y 780 polerones (el planchado usa 64.600 de sus 64.800 segundos), con un margen de $4.839.600. Si no hay esos minutos, el taller tiene que renegociar uno de los dos pedidos.


9. Caso integrador · Estampa Sur firma un pedido

Este caso sigue a Estampa Sur por todo el ramo. Acá se usa la versión de dos productos de la unidad 2, que la unidad 8 resolvió con simplex: 30 horas de estampado (108.000 segundos), 18 de planchado (64.800 segundos) y a lo más 830 polerones. Sin pedidos firmados, el óptimo es 1.440 poleras básicas y 720 polerones, con $4.824.000 de margen.

Un colegio de Chillán firma un pedido de 780 polerones para la semana. Ahora el modelo tiene una restricción \(\ge\) y el origen deja de ser factible.

En palabras. Se decide cuántas poleras básicas y cuántos polerones producir. Se busca el mayor margen. Lo limitan las horas de estampado y de planchado, la demanda máxima de polerones y el pedido firmado.

Algebraico. \(x_1\) poleras básicas, \(x_2\) polerones.

\[\max\; z = 1{.}380x_1 + 3{.}940x_2\] \[\text{s.a.}\quad 30x_1 + 90x_2 \le 108{.}000 \qquad 20x_1 + 50x_2 \le 64{.}800 \qquad x_2 \le 830 \qquad x_2 \ge 780 \qquad x \ge 0\]

En OPL (modelos/u09_compromiso.mod):

/*********************************************
 * Unidad 9 · Caso integrador · Estampa Sur con un compromiso mínimo
 * Versión de dos productos de la unidad 2 (30 h de estampado, 18 h de planchado,
 * demanda máxima de 830 polerones) más un pedido firmado de al menos 780 polerones.
 *********************************************/
{string} Prendas = {"poleras", "polerones"};
float margen[Prendas] = [1380, 3940];      // CLP por unidad
float est[Prendas]    = [30, 90];          // segundos de estampado por unidad
float pla[Prendas]    = [20, 50];          // segundos de planchado por unidad
float capEst = 30 * 3600;                  // segundos de estampado en la semana
float capPla = 18 * 3600;                  // segundos de planchado en la semana
float demPolerones = 830;                  // demanda máxima de polerones
float compromiso = 780;                    // polerones ya comprometidos

dvar float+ x[Prendas];

maximize sum(p in Prendas) margen[p] * x[p];

subject to {
  ctEstampado:  sum(p in Prendas) est[p] * x[p] <= capEst;
  ctPlanchado:  sum(p in Prendas) pla[p] * x[p] <= capPla;
  ctDemanda:    x["polerones"] <= demPolerones;
  ctCompromiso: x["polerones"] >= compromiso;
}

execute {
  writeln("x_poleras = ", x["poleras"]);
  writeln("x_polerones = ", x["polerones"]);
  writeln("dual_estampado = ", ctEstampado.dual);
  writeln("dual_planchado = ", ctPlanchado.dual);
  writeln("dual_demanda = ", ctDemanda.dual);
  writeln("dual_compromiso = ", ctCompromiso.dual);
}

Forma estándar. Holguras \(s_1, s_2, s_3\) y, en el pedido, exceso \(e_4\) y artificial \(a_4\): \(x_2 - e_4 + a_4 = 780\).

Dos fases, tabla por tabla.

Tabla 0 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) \(e_{4}\) \(a_{4}\) LD
\(\bar c\) 0 −1 0 0 0 1 0 −780
\(s_{1}\) 30 90 1 0 0 0 0 108.000
\(s_{2}\) 20 50 0 1 0 0 0 64.800
\(s_{3}\) 0 1 0 0 1 0 0 830
\(a_{4}\) 0 1 0 0 0 −1 1 780

Entra \(x_{2}\). Razones: \(s_{1}\) 1.200 · \(s_{2}\) 1.296 · \(s_{3}\) 830 · \(a_{4}\) 780. Sale \(a_{4}\).

Tabla 1 · fase 1.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) \(e_{4}\) \(a_{4}\) LD
\(\bar c\) 0 0 0 0 0 0 1 0
\(s_{1}\) 30 0 1 0 0 90 −90 37.800
\(s_{2}\) 20 0 0 1 0 50 −50 25.800
\(s_{3}\) 0 0 0 0 1 1 −1 50
\(x_{2}\) 0 1 0 0 0 −1 1 780

Óptima: ningún costo reducido mejora.

Tabla 2 · fase 2.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) \(e_{4}\) LD
\(\bar c\) 1.380 0 0 0 0 3.940 −3.073.200
\(s_{1}\) 30 0 1 0 0 90 37.800
\(s_{2}\) 20 0 0 1 0 50 25.800
\(s_{3}\) 0 0 0 0 1 1 50
\(x_{2}\) 0 1 0 0 0 −1 780

Entra \(e_{4}\). Razones: \(s_{1}\) 420 · \(s_{2}\) 516 · \(s_{3}\) 50 · \(x_{2}\) —. Sale \(s_{3}\).

Tabla 3 · fase 2.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) \(e_{4}\) LD
\(\bar c\) 1.380 0 0 0 −3.940 0 −3.270.200
\(s_{1}\) 30 0 1 0 −90 0 33.300
\(s_{2}\) 20 0 0 1 −50 0 23.300
\(e_{4}\) 0 0 0 0 1 1 50
\(x_{2}\) 0 1 0 0 1 0 830

Entra \(x_{1}\). Razones: \(s_{1}\) 1.110 · \(s_{2}\) 1.165 · \(e_{4}\) — · \(x_{2}\) —. Sale \(s_{1}\).

Tabla 4 · fase 2.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) \(e_{4}\) LD
\(\bar c\) 0 0 −46 0 200 0 −4.802.000
\(x_{1}\) 1 0 1/30 0 −3 0 1.110
\(s_{2}\) 0 0 −2/3 1 10 0 1.100
\(e_{4}\) 0 0 0 0 1 1 50
\(x_{2}\) 0 1 0 0 1 0 830

Entra \(s_{3}\). Razones: \(x_{1}\) — · \(s_{2}\) 110 · \(e_{4}\) 50 · \(x_{2}\) 830. Sale \(e_{4}\).

Tabla 5 · fase 2.

Base \(x_{1}\) \(x_{2}\) \(s_{1}\) \(s_{2}\) \(s_{3}\) \(e_{4}\) LD
\(\bar c\) 0 0 −46 0 0 −200 −4.812.000
\(x_{1}\) 1 0 1/30 0 0 3 1.260
\(s_{2}\) 0 0 −2/3 1 0 −10 600
\(s_{3}\) 0 0 0 0 1 1 50
\(x_{2}\) 0 1 0 0 0 −1 780

Óptima: ningún costo reducido mejora.

Región factible con el pedido firmado y el camino del simplex

La fase 1 necesita un solo pivote: sube \(x_2\) a 780 y la artificial sale. En la fase 2 el simplex primero hace entrar \(e_4\) (el polerón deja el mayor margen por unidad) y sube hasta el tope de 830; después mete poleras hasta llenar el estampado, en \((1{.}110, 830)\); y al final descubre que conviene bajar polerones hasta el mínimo firmado, porque cada polerón ocupa el estampado de tres poleras (\(3 \cdot 1{.}380 = 4{.}140 > 3{.}940\)). La figura muestra ese camino por los vértices de la franja.

Lectura de la tabla final.

Decisión. El pedido conviene si el colegio paga, en total, al menos $12.000 por sobre el margen normal de esos polerones (unos $200 extra por cada uno de los 60 que el taller no habría hecho). Si el colegio no acepta un sobreprecio, igual puede convenir por la relación comercial, pero ahora se sabe cuánto cuesta.

Lo que pasa a la unidad 10. Los precios 46 y \(-200\) son la solución del dual de este problema (ejercicio 10.10), y la tabla final de la versión sin pedido trae los precios de 32,67 y 20 pesos por segundo que la unidad 10 interpreta como el valor de cada recurso.


10. Para seguir

En los libros del ramo.

Abierto y gratis.

Con el tutor. La carpeta tutor/ trae el contexto de este ramo. Pégalo al inicio de la conversación con cualquier IA y pídele, por ejemplo: «Dame un problema de mínimo con una restricción \(=\) y una \(\ge\), y corrígeme la fase 1 tabla por tabla».