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.
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.
Cada hectárea de trigo requiere 2 horas de trabajo.
Cada hectárea de maíz requiere 3 horas de trabajo.
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.
Definimos las siguientes variables:
\(x_1\): Hectáreas de trigo a sembrar.
\(x_2\): Hectáreas de maíz a sembrar.
El objetivo es maximizar las ganancias:
[
Z = 30x_1 + 40x_2
\]
Las restricciones son las siguientes:
\(2x_1 + 3x_2 \leq 800\) (Restricción de horas de trabajo).
\(x_1 + x_2 \leq 480\) (Restricción de tierra disponible).
\(x_1, x_2 \geq 0\) (No podemos sembrar áreas negativas).
Para resolver el problema gráficamente, trazamos las restricciones en el plano y buscamos la región factible.
# 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