title: “Optimización Lineal para Siembra de Usos de Tierra”

author: “Leonardo Gamez”

date: “12 de Septiembre de 2024”

output: html_document


## Introducción

Este informe presenta un modelo de optimización lineal aplicado a la planificación de la siembra de cultivos en una finca, con el objetivo de maximizar las ganancias. Se abordan dos métodos para resolver el modelo: el método gráfico y el método simplex.

Contexto

Un agricultor tiene 480 hectáreas de tierra disponibles para sembrar dos tipos de cultivos: trigo y maíz. La producción de trigo genera una ganancia de 30€ por hectárea, mientras que la producción de maíz genera 40€ por hectárea. Sin embargo, existen restricciones de disponibilidad de mano de obra, ya que solo hay 800 horas de trabajo disponibles.

El objetivo es determinar cuántas hectáreas de trigo y maíz deben sembrarse para maximizar las ganancias, respetando las restricciones de terreno y trabajo.

Formulación del Problema

Variables de decisión

Definimos las siguientes variables:

  • \(x_1\): Hectáreas de trigo a sembrar.

  • \(x_2\): Hectáreas de maíz a sembrar.

Función objetivo

El objetivo es maximizar las ganancias:

[

Z = 30x_1 + 40x_2

\]

Restricciones

Las restricciones son las siguientes:

  1. \(2x_1 + 3x_2 \leq 800\) (Restricción de horas de trabajo).

  2. \(x_1 + x_2 \leq 480\) (Restricción de tierra disponible).

  3. \(x_1, x_2 \geq 0\) (No podemos sembrar áreas negativas).

Solución por el Método Gráfico

Para resolver el problema gráficamente, trazamos las restricciones en el plano y buscamos la región factible.

Gráfico de las Restricciones

# Cargar librerías

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
# Definir las ecuaciones de las restricciones

x1 <- seq(0, 480, length.out = 100)

restriccion1 <- (800 - 2 * x1) / 3

restriccion2 <- 480 - x1
 
# Crear el gráfico

plot(x1, restriccion1, type = "l", col = "red", ylim = c(0, 300),

     xlab = "Hectáreas de trigo (x1)", ylab = "Hectáreas de maíz (x2)",

     main = "Región factible - Método Gráfico")

lines(x1, restriccion2, col = "blue")

abline(h = 0, v = 0)
 
# Añadir la leyenda

legend("topright", legend = c("2x1 + 3x2 ≤ 800", "x1 + x2 ≤ 480"), 

       col = c("red", "blue"), lty = 1)
 
# Sombrear la región factible manualmente

polygon(c(0, 240, 480, 0), c(0, 160, 0, 0), col = rgb(0, 0, 1, 0.2), border = NA)

# Puntos de intersección

punto1 <- c(0, 0)  # Intersección en el origen

punto2 <- c(240, 160)  # Intersección entre las dos restricciones

punto3 <- c(480, 0)  # Restricción de tierra disponible con el eje x
 
# Evaluar la función objetivo Z = 30x1 + 40x2

Z_punto1 <- 30 * punto1[1] + 40 * punto1[2]

Z_punto2 <- 30 * punto2[1] + 40 * punto2[2]

Z_punto3 <- 30 * punto3[1] + 40 * punto3[2]
 
# Mostrar los resultados

data.frame(Punto = c("punto1", "punto2", "punto3"),

           X1 = c(punto1[1], punto2[1], punto3[1]),

           X2 = c(punto1[2], punto2[2], punto3[2]),

           Z = c(Z_punto1, Z_punto2, Z_punto3))
##    Punto  X1  X2     Z
## 1 punto1   0   0     0
## 2 punto2 240 160 13600
## 3 punto3 480   0 14400
# Instalar y cargar lpSolve

# install.packages("lpSolve")

library(lpSolve)
 
# Coeficientes de la función objetivo

objetivo <- c(30, 40)
 
# Matriz de restricciones

restricciones <- matrix(c(2, 3, 1, 1), nrow = 2, byrow = TRUE)
 
# Lados derechos de las restricciones

rhs <- c(800, 480)
 
# Dirección de las restricciones

direcciones <- c("<=", "<=")
 
# Resolver el problema

resultado <- lp("max", objetivo, restricciones, direcciones, rhs, compute.sens=TRUE)
 
# Mostrar el resultado

resultado$solution  # Valores óptimos de x1 y x2
## [1] 400   0
resultado$objval    # Valor máximo de la función objetivo
## [1] 12000