Taller 1: Unidad 1

Introducción a la Investigación Operativa

INSTRUCCIONES: Realice las siguientes actividades y entregue la resolución en un archivo Rmarkdown compilado en un HMTL (puede utilizar el mismo formato del material de lectura).

Sección 1. Repaso de resolución de algebra matricial

Ejercicio 1.1.

Una compañía de partes automotrices fabrica distribuidores, bujías y magnetos en dos plantas, I y II. La matriz X representa la producción de las dos plantas para el minorista X y la matriz Y representa la producción de las dos plantas para el minorista Y. Escriba una matriz que represente la producción total alcanzada en las dos plantas para ambos minoristas, donde:

\[ X= \begin{pmatrix} 30 & 50\\ 800 & 720\\ 25 & 30 \end{pmatrix} \]

\[ Y= \begin{pmatrix} 15 & 25\\ 960 & 800\\ 10 & 5 \end{pmatrix} \]


# Matriz X (filas: BUJ, SPG, MAG; columnas: I, II)
X <- matrix(c(30, 50, 800, 720, 25, 30),3,2)
X
##      [,1] [,2]
## [1,]   30  720
## [2,]   50   25
## [3,]  800   30
# Matriz Y (filas: BUJ, SPG, MAG; columnas: I, II)
Y <- matrix(c(15, 25, 960, 800, 10, 5),3,2)
Y
##      [,1] [,2]
## [1,]   15  800
## [2,]   25   10
## [3,]  960    5
# Producción total (ambos minoristas)
T <- X + Y
T
##      [,1] [,2]
## [1,]   45 1520
## [2,]   75   35
## [3,] 1760   35
#Etiquetas
rownames(T) <- c("BUJ", "SPG", "MAG")
colnames(T) <- c("Planta I", "Planta II")
T
##     Planta I Planta II
## BUJ       45      1520
## SPG       75        35
## MAG     1760        35

Ejercicio 1.2.

Una tienda de mascotas tiene 6 gatitos, 10 perritos y 7 loros en exhibición. Si el valor de un gatito es de $55, el de cada perrito de $150 y el de cada loro de $35, por medio de la multiplicación de matrices encuentre el valor total del inventario de la tienda de mascotas.


#Inventario
# Cantidades en exhibición
Q <- matrix(c(6, 10, 7),1,3)
colnames(Q) <- c("Gatitos", "Perritos", "Loros")
rownames(Q) <- "Cantidad"
Q
##          Gatitos Perritos Loros
## Cantidad       6       10     7
# Precios unitarios
P <- matrix(c(55, 150, 35),3,1)
rownames(P) <- c("Gatitos", "Perritos", "Loros")
colnames(P) <- "Precio_unitario"
P
##          Precio_unitario
## Gatitos               55
## Perritos             150
## Loros                 35
# Valor total del inventario (multiplicación matricial)
V <- Q %*% P
rownames(V) <- "Valor_total"
colnames(V) <- "USD"
V
##              USD
## Valor_total 2075

Ejercicio 1.3.

Para los siguientes sistemas de ecuaciones de dos variables, resuelva los mismos mediante operaciones de fila, matriz inversa y realice su representación gráfica.

\[ \begin{cases} 2x + 3y = 0 \\ 5x - 7y = 0 \end{cases} \] \[ \begin{cases} 2x - 5y = 0 \\ 8x - 20y = 0 \end{cases} \]

# SISTEMAS DE ECUACIONES LINEALES

# SISTEMA 15
# 2x + 3y = 0
# 5x - 7y = 0

# Resolucion por operaciones de fila
F1 <- c(2, 3, 0)
F2 <- c(5, -7, 0)

M <- rbind(F1, F2)
M
##    [,1] [,2] [,3]
## F1    2    3    0
## F2    5   -7    0
# F2 = F2 - (5/2)F1
M[2,] <- M[2,] - (5/2)*M[1,]
M
##    [,1]  [,2] [,3]
## F1    2   3.0    0
## F2    0 -14.5    0
# F2 = (-2/29)F2
M[2,] <- (-2/29)*M[2,]
M
##    [,1] [,2] [,3]
## F1    2    3    0
## F2    0    1    0
# F1 = F1 - 3F2
M[1,] <- M[1,] - 3*M[2,]
M
##    [,1] [,2] [,3]
## F1    2    0    0
## F2    0    1    0
M[,3]   # solucion del sistema
## F1 F2 
##  0  0
# Resolucion por matriz inversa
e1 <- c(2, 3)
e2 <- c(5, -7)

A <- rbind(e1, e2)
A
##    [,1] [,2]
## e1    2    3
## e2    5   -7
b <- c(0, 0)

det(A)
## [1] -29
solve(A, b)
## [1] 0 0
####Resolucion grafica - Sistema 15
x <- seq(-10, 10, length = 200)

y1 <- -(2/3) * x
y2 <- (5/7) * x

plot(x, y1, type = "l", lwd = 3,
     xlab = "x", ylab = "y",
     main = "Sistema 15",
     ylim = c(-5,5), xlim = c(-10,10))

lines(x, y2, lwd = 3, lty = 2)

abline(h = 0, v = 0, col = "gray")

legend("topleft",
       legend = c("2x + 3y = 0", "5x - 7y = 0"),
       lwd = 3,
       lty = c(1,2))

# SISTEMA 16
# 2x - 5y = 0
# 8x - 20y = 0


# Resolucion por operaciones de fila
F1 <- c(2, -5, 0)
F2 <- c(8, -20, 0)

M <- rbind(F1, F2)
M
##    [,1] [,2] [,3]
## F1    2   -5    0
## F2    8  -20    0
# F2 = F2 - 4F1
M[2,] <- M[2,] - 4*M[1,]
M
##    [,1] [,2] [,3]
## F1    2   -5    0
## F2    0    0    0
M[,3]   # infinitas soluciones
## F1 F2 
##  0  0
###### Resolucion por matriz inversa
e1 <- c(2, -5)
e2 <- c(8, -20)

A <- rbind(e1, e2)
A
##    [,1] [,2]
## e1    2   -5
## e2    8  -20
b <- c(0, 0)

det(A)   # determinante = 0
## [1] 0
##### Resolucion grafica - Sistema 16
x <- seq(-10, 10, length = 200)

y1 <- (2/5) * x
y2 <- (2/5) * x

plot(x, y1, type = "l", lwd = 3,
     xlab = "x", ylab = "y",
     main = "Sistema 16",
     ylim = c(-5,5), xlim = c(-10,10))

lines(x, y2, lwd = 3, lty = 2)

abline(h = 0, v = 0, col = "gray")

legend("topleft",
       legend = c("2x - 5y = 0", "8x - 20y = 0"),
       lwd = 3,
       lty = c(1,2))

Conclusiones de la Sección 1

Sección 2. Construcción de modelos de Programación Lineal

2.1. Formulación de restricciones

Para el modelo de Reddy Mikks, defina las siguientes restricciones y expréselas con un lado izquierdo lineal y un lado derecho constante:


Modelo base (Reddy Mikks):
Sea \(x_1\) = toneladas/día de pintura para exteriores y \(x_2\) = toneladas/día de pintura para interiores.


(a) La demanda diaria de pintura para interiores supera la de pintura para exteriores por al menos una tonelada: \[ x_2 \ge x_1 + 1 \quad \Longleftrightarrow \quad -x_1 + x_2 \ge 1 \]

(b) El consumo diario de materia prima \(M_2\) (toneladas) es a lo mucho 6 y por lo menos 3: \[ \begin{aligned} x_1 + 2x_2 &\le 6,\\ x_1 + 2x_2 &\ge 3 \end{aligned} \]

(c) La demanda de pintura para interiores no puede ser menor que la demanda de pintura para exteriores: \[ x_2 \ge x_1 \quad \Longleftrightarrow \quad -x_1 + x_2 \ge 0 \]

(d) La cantidad mínima de pintura que debe producirse tanto para interiores como para exteriores es de 3 toneladas: \[ \begin{aligned} x_1 &\ge 3,\\ x_2 &\ge 3 \end{aligned} \]

(e) La proporción de pintura para interiores respecto de la producción total no debe exceder de \(0.5\): \[ \frac{x_2}{x_1+x_2} \le 0.5 \quad \Longleftrightarrow \quad x_2 \le x_1 \quad \Longleftrightarrow \quad x_2 - x_1 \le 0 \]

2.2. Evaluación de soluciones propuestas

Determine la mejor solución factible entre las siguientes soluciones (factibles y no factibles) del Modelo de Reddy Mikks:

\[ \max\; z = 5x_1 + 4x_2 \]

\[ \text{s.a. }\; \begin{aligned} (1)\;& 6x_1 + 4x_2 \le 24,\\ (2)\;& x_1 + 2x_2 \le 6,\\ (3)\;& -x_1 + x_2 \le 1,\\ (4)\;& x_2 \le 2,\\ (5)\;& x_1 \ge 0,\; x_2 \ge 0. \end{aligned} \]

Evaluamos cada propuesta sustituyendo en las restricciones y calculando \(z\).


(a) \((x_1,x_2)=(1,4)\)

\[ \begin{aligned} (1)&:\; 6(1)+4(4)=6+16=22 \le 24\quad \\ (2)&:\; 1+2(4)=1+8=9 \le 6\quad \\ (3)&:\; -1+4=3 \le 1\quad \\ (4)&:\; 4 \le 2\quad \\ (5)&:\; 1\ge 0,\;4\ge 0\quad \end{aligned} \]

Conclusión: No factible (viola (2), (3) y (4)).


(b) \((x_1,x_2)=(2,2)\)

\[ \begin{aligned} (1)&:\; 6(2)+4(2)=12+8=20 \le 24\quad \\ (2)&:\; 2+2(2)=2+4=6 \le 6\quad \\ (3)&:\; -2+2=0 \le 1\quad \\ (4)&:\; 2 \le 2\quad \\ (5)&:\; 2\ge 0,\;2\ge 0\quad \end{aligned} \]

\[ z = 5(2) + 4(2) = 10 + 8 = 18 \]

Conclusión: Factible, con \(z=18\).


(c) \((x_1,x_2)=(3,1.5)\)

\[ \begin{aligned} (1)&:\; 6(3)+4(1.5)=18+6=24 \le 24\quad \\ (2)&:\; 3+2(1.5)=3+3=6 \le 6\quad \\ (3)&:\; -3+1.5=-1.5 \le 1\quad \\ (4)&:\; 1.5 \le 2\quad \\ (5)&:\; 3\ge 0,\;1.5\ge 0\quad \end{aligned} \]

\[ z = 5(3) + 4(1.5) = 15 + 6 = 21 \]

Conclusión: Factible, con \(z=21\).


(d) \((x_1,x_2)=(2,1)\)

\[ \begin{aligned} (1)&:\; 6(2)+4(1)=12+4=16 \le 24\quad \\ (2)&:\; 2+2(1)=2+2=4 \le 6\quad \\ (3)&:\; -2+1=-1 \le 1\quad \\ (4)&:\; 1 \le 2\quad \\ (5)&:\; 2\ge 0,\;1\ge 0\quad \end{aligned} \]

\[ z = 5(2) + 4(1) = 10 + 4 = 14 \]

Conclusión: Factible, con \(z=14\).


(e) \((x_1,x_2)=(2,-1)\)

\[ x_2=-1 < 0 \quad \Rightarrow \quad \text{no cumple (5)} \]

Conclusión: No factible ( no negatividad).


Mejor solución factible (entre las propuestas):

Comparando los valores objetivo de las soluciones factibles:

\[ z_{(b)}=18,\qquad z_{(c)}=21,\qquad z_{(d)}=14 \]


2.3. Cantidades no usadas

Para la solución factible \((x_1,x_2)=(2,2)\) del modelo de Reddy Mikks, determine las cantidades no usadas de las materias primas \(M_1\) y \(M_2\)


Disponibilidades diarias:

\[ M_1: 24 \text{ toneladas}, \qquad M_2: 6 \text{ toneladas}. \]

Consumos (según las restricciones del modelo):

\[ \text{Uso de } M_1 = 6x_1 + 4x_2, \qquad \text{Uso de } M_2 = x_1 + 2x_2. \]

Sustituyendo \((x_1,x_2)=(2,2)\):

\[ \text{Uso de } M_1 = 6(2)+4(2)=12+8=20 \]

\[ \text{No usado de } M_1 = 24-20 = \boxed{4} \]

\[ \text{Uso de } M_2 = 2+2(2)=2+4=6 \]

\[ \text{No usado de } M_2 = 6-6 = \boxed{0} \]

Conclusiones de la Sección 2

  • El modelo de Reddy Mikks permitió representar un problema real de producción mediante restricciones lineales.

  • La correcta formulación de las restricciones es fundamental para identificar la región factible.

  • No todas las soluciones propuestas cumplen simultáneamente las restricciones del modelo.

  • La mejor solución factible evaluada fue \((x_1, x_2) = (3, 1.5)\), con \(z = 21\).

  • El análisis de holguras mostró el uso eficiente de los recursos disponibles.

Sección 3. Para los siguientes ejercicios, formule el problema en forma estándar

Ejercicio 3.1

$$ La empresa Whitt Window tiene sólo tres empleados que hacen dos tipos de ventanas a mano: con marco de madera y con marco de aluminio. La ganancia es de $180 por cada ventana con marco de madera y de $90 por cada una con marco de aluminio. Doug hace marcos de madera y puede terminar 6 al día. Linda hace 4 marcos de aluminio por día. Bob forma y corta el vidrio y puede hacer 48 pies cuadrados de vidrio por día. Cada ventana con marco de madera emplea 6 pies cuadrados de vidrio y cada una de aluminio, 8 pies cuadrados.

La compañía desea determinar cuántas ventanas de cada tipo debe producir al día para maximizar la ganancia total. $$

library(lpSolve)

# Función objetivo
ganancia <- c(180, 90)

# Restricciones
restricciones <- matrix(
  c(1, 0,
    0, 1,
    6, 8),
  nrow = 3,
  byrow = TRUE
)

rhs <- c(6, 4, 48)
direcciones <- c("<=", "<=", "<=")

# Resolver el modelo
resultado <- lp(
  direction = "max",
  objective.in = ganancia,
  const.mat = restricciones,
  const.dir = direcciones,
  const.rhs = rhs
)

# Resultados
resultado$solution
## [1] 6.0 1.5
resultado$objval
## [1] 1215

Ejercicio 3.2

La compañía de seguros Primo está en proceso de introducir dos nuevas líneas de productos:
seguro de riesgo especial e hipotecas.

La ganancia esperada es de $5 por el seguro de riesgo especial y de $2 por unidad de hipoteca.

La administración desea establecer las cuotas de venta de las nuevas líneas para maximizar la ganancia total esperada.
Los requerimientos de trabajo son los siguientes:

Requerimientos de horas de trabajo

Departamento Riesgo especial Hipoteca Horas disponibles
Suscripciones 3 2 2400
Administración 0 1 800
Reclamaciones 2 0 1200

Resolución del problema de programación lineal

library(lpSolve)

# Función objetivo
# x1: seguros de riesgo especial
# x2: hipotecas
obj <- c(5, 2)

# Matriz de restricciones
mat <- matrix(
  c(3, 2,   # Suscripciones
    0, 1,   # Administración
    2, 0),  # Reclamaciones
  nrow = 3,
  byrow = TRUE
)

# Tipo de restricciones
dir <- c("<=", "<=", "<=")

# Lado derecho
rhs <- c(2400, 800, 1200)

# Resolver el modelo
sol <- lp(
  direction = "max",
  objective.in = obj,
  const.mat = mat,
  const.dir = dir,
  const.rhs = rhs
)

# Tabla de resultados
resultado <- data.frame(
  Variable = c("Seguro de riesgo especial", "Hipoteca"),
  Valor_Optimo = sol$solution
)

resultado
##                    Variable Valor_Optimo
## 1 Seguro de riesgo especial          600
## 2                  Hipoteca          300
# Ganancia máxima
sol$objval
## [1] 3600
# Interpretación automática
cat(
  "La empresa debe vender",
  sol$solution[1], "seguros de riesgo especial y",
  sol$solution[2], "hipotecas para obtener una ganancia máxima de $",
  sol$objval
)
## La empresa debe vender 600 seguros de riesgo especial y 300 hipotecas para obtener una ganancia máxima de $ 3600

Conclusiones de la Sección 2

  • La formulación en forma estándar permite convertir las restricciones en igualdades mediante variables de holgura.

  • La función objetivo define claramente la ganancia total a maximizar en ambos problemas.

  • Las restricciones representan de manera adecuada las limitaciones reales de recursos disponibles.

  • La programación lineal facilita la toma de decisiones óptimas en problemas de producción.

Sección 4

Ejercicio 4.1

Utilice el método gráfico para resolver el siguiente problema de programación lineal.

Formulación del problema

Minimizar: \[ [ Z = 15x_1 + 20x_2 ] \] Sujeto a: \[ \begin{aligned} x_1 + 2x_2 &\ge 10 \\ 2x_1 - 3x_2 &\le 6 \\ x_1 + x_2 &\ge 6 \\ x_1 &\ge 0,\quad x_2 \ge 0 \end{aligned} \]

Solución gráfica

La región factible se obtiene a partir de la intersección de las restricciones.
El punto óptimo es: \[ (x_1, x_2) = (2, 4) \]

Valor óptimo

\[ Z_{\min} = 15(2) + 20(4) = 110 \]

# Método gráfico - Ejercicio D.I 3.4-5

# Definir rango
x1 <- seq(0, 10, length.out = 400)

# Restricciones
r1 <- (10 - x1) / 2        # x1 + 2x2 = 10
r2 <- (2*x1 - 6) / 3      # 2x1 - 3x2 = 6
r3 <- 6 - x1              # x1 + x2 = 6

# Gráfica
plot(x1, r1, type = "l", ylim = c(0, 6),
     xlab = expression(x[1]), ylab = expression(x[2]),
     main = "Ejercicio 4.1")
lines(x1, r2)
lines(x1, r3)

# Región factible (aproximada)
polygon(c(2, 4, 6), c(4, 2, 0), col = rgb(0.7, 0.7, 0.7, 0.5))

# Punto óptimo
points(2, 4, pch = 19)
text(2, 4, "(2,4)", pos = 4)

# Valor óptimo
Z_min <- 15*2 + 20*4
Z_min
## [1] 110

Ejercicio 4.2

Utilice el método gráfico para resolver el siguiente problema.

Formulación del problema

Minimizar: \[ Z = 3x_1 + 2x_2 \]

Sujeto a: \[ \begin{aligned} x_1 + 2x_2 &\le 12 \\ 2x_1 + 3x_2 &= 12 \\ 2x_1 + x_2 &\ge 8 \\ x_1 &\ge 0,\quad x_2 \ge 0 \end{aligned} \]

Solución gráfica

La región factible queda determinada por la igualdad y las restricciones dadas.
El punto óptimo es: \[ (x_1, x_2) = (3, 2) \]

Valor óptimo

\[ Z_{\min} = 3(3) + 2(2) = 13 \]

Ejercicio 4.2 — Método gráfico


``` r
# Método gráfico - Ejercicio 4.2

x1 <- seq(0, 10, length.out = 400)

# Restricciones
r1 <- (12 - x1) / 2       # x1 + 2x2 = 12
r2 <- (12 - 2*x1) / 3     # 2x1 + 3x2 = 12
r3 <- 8 - 2*x1            # 2x1 + x2 = 8

# Gráfica
plot(x1, r1, type = "l", ylim = c(0, 6),
     xlab = expression(x[1]), ylab = expression(x[2]),
     main = "Ejercicio 4.2")
lines(x1, r2)
lines(x1, r3)

# Región factible
polygon(c(3, 4, 2), c(2, 0, 4), col = rgb(0.7, 0.7, 0.7, 0.5))

# Punto óptimo
points(3, 2, pch = 19)
text(3, 2, "(3,2)", pos = 4)

# Valor óptimo
Z_min <- 3*3 + 2*2
Z_min
## [1] 13

Ejercicio 4.3

Considere el siguiente modelo de programación lineal.

Formulación del problema

Minimizar: \[ Z = 40x_1 + 50x_2 \]

Sujeto a: \[ \begin{aligned} 2x_1 + 3x_2 &\ge 30 \\ x_1 + x_2 &\ge 12 \\ 2x_1 + x_2 &\ge 20 \\ x_1 &\ge 0,\quad x_2 \ge 0 \end{aligned} \]

Solución gráfica

La región factible está definida por restricciones de tipo mayor o igual.
El punto óptimo es: \[ (x_1, x_2) = (6, 6) \]

Valor óptimo

\[ Z_{\min} = 40(6) + 50(6) = 540 \]

Ejercicio 4.3 — Método gráfico


``` r
# Método gráfico - Ejercicio 4.3

x1 <- seq(0, 15, length.out = 400)

# Restricciones
r1 <- (30 - 2*x1) / 3     # 2x1 + 3x2 = 30
r2 <- 12 - x1             # x1 + x2 = 12
r3 <- 20 - 2*x1           # 2x1 + x2 = 20

# Gráfica
plot(x1, r1, type = "l", ylim = c(0, 10),
     xlab = expression(x[1]), ylab = expression(x[2]),
     main = "Ejercicio 4.3")
lines(x1, r2)
lines(x1, r3)

# Región factible
polygon(c(6, 10, 12), c(6, 0, 0), col = rgb(0.7, 0.7, 0.7, 0.5))

# Punto óptimo
points(6, 6, pch = 19)
text(6, 6, "(6,6)", pos = 4)

# Valor óptimo
Z_min <- 40*6 + 50*6
Z_min
## [1] 540

Sección 5

Ejercicio 5.1

La empresa Whitt Window tiene sólo tres empleados que hacen dos tipos de ventanas a mano: con marco de madera y con marco de aluminio. La ganancia es de $180 por cada ventana con marco de madera y de $90 por cada una con marco de aluminio. Doug hace marcos de madera y puede terminar 6 al día. Linda hace 4 marcos de aluminio por día. Bob forma y corta el vidrio y puede hacer 48 pies cuadrados de vidrio por día. Cada ventana con marco de madera emplea 6 pies cuadrados de vidrio y cada una de aluminio, 8 pies cuadrados.

La compañía desea determinar cuántas ventanas de cada tipo debe producir al día para maximizar la ganancia total.

Formulación del modelo

Sean: - \(x_1\): ventanas con marco de madera producidas por día
- \(x_2\): ventanas con marco de aluminio producidas por día

Función objetivo

\[ \max Z = 180x_1 + 90x_2 \]

Restricciones

\[ \begin{aligned} x_1 &\le 6 \\ x_2 &\le 4 \\ 6x_1 + 8x_2 &\le 48 \\ x_1 &\ge 0,\quad x_2 \ge 0 \end{aligned} \]

Resolución mediante el método gráfico

# Método gráfico - Ejercicio 5.1

# Rango de valores
x1 <- seq(0, 8, length.out = 400)

# Restricciones
r1 <- rep(4, length(x1))          # x2 = 4
r2 <- (48 - 6*x1) / 8              # 6x1 + 8x2 = 48

# Gráfica
plot(x1, r2, type = "l", ylim = c(0, 6),
     xlab = expression(x[1]), ylab = expression(x[2]),
     main = "Método gráfico - Ejercicio 5.1")
lines(x1, r1)
abline(v = 6)

# Región factible
polygon(c(0, 6, 6, 4, 0),
        c(0, 0, 1.5, 4, 4),
        col = rgb(0.7, 0.7, 0.7, 0.5))

# Punto óptimo
points(6, 1.5, pch = 19)
text(6, 1.5, "(6, 1.5)", pos = 4)

# Ganancia máxima
Z_max <- 180*6 + 90*1.5
Z_max
## [1] 1215

Ejercicio 5.2

La carne con papas es el plato favorito de Ralph Edmund. Por eso decidió hacer una dieta continua de sólo estos dos alimentos (más algunos líquidos y suplementos de vitaminas) en todas sus comidas.

Ralph sabe que ésa no es la dieta más sana y quiere asegurarse de que toma las cantidades adecuadas de los dos alimentos para satisfacer los requerimientos nutricionales. Él ha obtenido la información nutricional y de costo que se muestra en el siguiente cuadro.

Ralph quiere determinar el número de porciones diarias (pueden ser fraccionales) de res y papas que cumplirían con estos requerimientos a un costo mínimo.

  1. Formule un modelo de programación lineal.
  2. Use el método gráfico para resolver el modelo.
  3. Utilice una computadora para resolver este modelo por el método simplex.

Tabla: Información nutricional y costos por porción

Ingrediente Res Papas Req. diario (g)
Carbohidratos 5 15 \(\geq 50\)
Proteínas 20 5 \(\geq 40\)
Grasa 15 2 \(\leq 60\)
Costo por porción ($) 4 2

Ejercicio 5.2 – Dieta de Ralph Edmund

Ralph Edmund consume únicamente res y papas en su dieta diaria.
Desea cumplir ciertos requerimientos nutricionales diarios al menor costo posible.
Las porciones pueden ser fraccionales.

Información nutricional y costos por porción

  • Carbohidratos: res 5 g, papas 15 g (mínimo 50 g)
  • Proteínas: res 20 g, papas 5 g (mínimo 40 g)
  • Grasa: res 15 g, papas 2 g (máximo 60 g)
  • Costo por porción: res $4, papas $2

a) Formulación del modelo de programación lineal

Sean: - \(x_1\): porciones diarias de res
- \(x_2\): porciones diarias de papas

Función objetivo

\[ \min Z = 4x_1 + 2x_2 \]

Restricciones

\[ \begin{aligned} 5x_1 + 15x_2 &\ge 50 \quad \text{(Carbohidratos)} \\ 20x_1 + 5x_2 &\ge 40 \quad \text{(Proteínas)} \\ 15x_1 + 2x_2 &\le 60 \quad \text{(Grasa)} \\ x_1 &\ge 0,\quad x_2 \ge 0 \end{aligned} \]


b) Resolución mediante el método gráfico

# Método gráfico - Ejercicio 5.2

# Definir rango
x1 <- seq(0, 6, length.out = 400)

# Restricciones despejadas
r1 <- (50 - 5*x1)/15      # Carbohidratos
r2 <- (40 - 20*x1)/5     # Proteínas
r3 <- (60 - 15*x1)/2     # Grasa

# Graficar
plot(x1, r1, type="l", lwd=2, ylim=c(0,5),
     xlab=expression(x[1]), ylab=expression(x[2]),
     main="Método gráfico - Ejercicio 5.2")

lines(x1, r2, lwd=2)
lines(x1, r3, lwd=2)

# Región factible (aproximada)
polygon(
  c(0, 1.27, 2.91, 0),
  c(3.33, 2.91, 0, 0),
  col = rgb(0, 0, 1, 0.2)
)

# Punto óptimo
points(1.2727, 2.9091, pch=19, col="red", cex=1.5)
text(1.2727, 2.9091, "(1.27 , 2.91)", pos=4)

legend("topright",
       legend=c("Carbohidratos", "Proteínas", "Grasa", "Región factible", "Óptimo"),
       lwd=c(2,2,2,NA,NA),
       pch=c(NA,NA,NA,15,19),
       col=c("black","black","black",
             rgb(0,0,1,0.4),"red"))

c) Resolución mediante el método simplex

# =========================================================
# Ejercicio 5.2 - Resolución por el método Simplex
# =========================================================

library(lpSolve)
library(knitr)

# ---------------------------------------------------------
# Definición del modelo
# ---------------------------------------------------------

# Función objetivo (minimizar costo)
# x1 = porciones de res
# x2 = porciones de papas
costo <- c(4, 2)

# Matriz de restricciones
A <- matrix(c(
  5,  15,   # Carbohidratos
  20, 5,    # Proteínas
  15, 2     # Grasa
), nrow = 3, byrow = TRUE)

# Sentido de las restricciones
dir <- c(">=", ">=", "<=")

# Lado derecho
b <- c(50, 40, 60)

# ---------------------------------------------------------
# Resolución por simplex
# ---------------------------------------------------------
resultado <- lp(
  direction = "min",
  objective.in = costo,
  const.mat = A,
  const.dir = dir,
  const.rhs = b
)

# ---------------------------------------------------------
# Presentación de resultados
# ---------------------------------------------------------

solucion <- data.frame(
  Variable = c("Porciones de res", "Porciones de papas"),
  Valor = round(resultado$solution, 4)
)

costo_total <- data.frame(
  Concepto = "Costo mínimo diario ($)",
  Valor = round(resultado$objval, 4)
)

# Mostrar resultados
kable(solucion, caption = "Solución óptima del modelo")
Solución óptima del modelo
Variable Valor
Porciones de res 1.2727
Porciones de papas 2.9091
kable(costo_total, caption = "Costo mínimo diario")
Costo mínimo diario
Concepto Valor
Costo mínimo diario ($) 10.9091

Conclusión

Mediante el modelo de programación lineal y su resolución por el método gráfico y el método simplex, se determinó que la dieta óptima para Ralph consiste en consumir aproximadamente 1.27 porciones de res y 2.91 porciones de papas por día. Esta combinación satisface todos los requerimientos nutricionales establecidos con el menor costo posible, el cual es de aproximadamente $10.91 diarios. El uso del método simplex confirma y valida la solución obtenida gráficamente, demostrando la eficiencia de la programación lineal para la toma de decisiones de minimización de costos.