Panadería San Antonio es una empresa ubicada en Morales, Izabal y posee muchos problemas sobre el manejo de inventario ya que no poseen el método adecuado para calcular cuánta producción se debe de hacer para cada día de la semana. Es por esto que se simuló en el programa RStudio la demanda incierta que poseen según una distribución normal para encontrar la cantidad de producción necesaria para maximizar las ganancias de tres productos diferentes que se estudiaron y así poder ayudar a solucionar este problema.
Keywords: simulación, inventario y producción.
En Morales, Izabal se ubica la Panadería San Antonio que se dedica a la producción y distribución de todo tipo de pan en el departamento. En la clase de Investigación de Operaciones II se vio el tema de Simulación de un inventario y actualmente la panadería posee el problema de que solamente una persona sabe la cantidad necesaria de productos que debe de pedirse para lograr satisfacer la gran demanda que poseen. Es por esta razón que surge la idea de poder hacer uso de la plataforma de programación RStudio y los conceptos de Simulación de un inventario (Dilema del vendedor de periódicos) para ayudar a la panadería a conocer la cantidad de producción de cada producto que maximiza sus ganancias. Es importante decir que el proyecto se basó en datos históricos brindados por la empresa para poder llevar a cabo la simulación. Adicionalmente, se hizo un ajuste de los datos y un análisis utilizando el Programa Arena para verificar que la distribución que se iba a utilizar fuera distribución normal. El objetivo principal de este proyecto es brindarle a Panadería San Antonio una herramienta útil para poder determinar la cantidad de producción que necesitan para cada producto dependiendo de la demanda incierta que poseen. Para este proyecto se utilizaron los datos sobre la demanda que se ha tenido durante los doce meses y medio del año, se requería el precio de venta y el costo de venta. Adicional a estos datos, se necesitaban los datos por exceso de producción y el costo por dejar de vender. El paper se divide en ciertas partes importantes que son el marco teórico en donde se explica el modelo que se utilizó en la programación. La metodología en donde se explica cómo se llevó a cabo el estudio de las distribuciones de la demanda de cada producto. La descripción de la simulación en donde se habla de cómo se realizó la simulación y los datos más importantes. La simulación en donde se muestra el código,una breve explicación de cada línea del código y los resultados obtenidos mostrados en gráficas. Las gráficas adicionales que servirán para mostrar un poco sobre los datos históricos utilizados y por último las conclusiones.
Simulación de un inventario
Capítulo no. 16 del libro Métodos Cuantitativos para los negocios, sección 16.2
Para la resolución de este problema se requirió hacer uso del tema Simulaciones de un inventario para poder establecer una política de inventario de un producto cuya demanda es incierta. Para poder llevar a cabo un problema de este tipo es necesario tener los datos sobre el precio de venta de cada producto, el costo de venta y la utilidad de la empresa por cada producto que es básicamente al precio de venta restarle el costo de venta. En este caso la demanda se toma diariamente ya que cada día la panadería trata de producir lo necesario para cubrir la demanda. Con los datos históricos que brindó la panadería se pudo calcular la media de unidades de pan que se demandan y su desviación estándar. Adicional, se tuvo que comprobar la distribución de probabilidad de los datos y así corroborar que los datos están distribuidos normalmente como se muestra en la figura siguiente.
Para lograr resolver este problema se poseen tres casos diferentes, que pueden ser cuando:
En este caso, si la demanda es menor que la producción se carga un ingreso en el inventario por cada unidad que se produjo extra a la demanda, este dato quedará en el código como positivo ya que la panadería cuando la producción es más grande que la demanda, el excedente se lo venden a otra panadería a un precio menor para producir migas de pan. Adicional a este ingreso, se le resta el costo de venta total (costo de venta por cantidad) a la venta (precio de venta por cantidad). Para este caso, la función sería:
\[ Ganancias = Ingresos - Costo de venta + Ingresos por exceso de producción \]
Siendo,
\[ Ingresos = (precio de venta)(Demanda) \]
\[ Costo de venta = (Costo de venta)(Producción) \]
\[ Ingresos por exceso de producción = (Producción - demanda)(Precio de venta 2) \]
En este caso, si la demanda es mayor que la producción las unidades se agotan y se incurre en un costo por incumplimiento. A la función se le agrega un costo por cada unidad que se deja de vender. Adicional a este costo por incumplimiento, se le resta el costo de venta total (costo de venta por cantidad) a la venta (precio de venta por cantidad).
\[ Ganancias = Ingresos - Costo de venta - Costo por incumplimiento \]
Siendo,
\[ Ingresos = (precio de venta)(Producción) \]
\[ Costo de venta = (Costo de venta)(Producción) \]
\[ Costo por incumplimiento = (Demanda - Producción)(Costo por incumplimiento) \]
En este caso, si la demanda es igual a la producción solamente se poseen los datos del precio de venta por cantidad menos el costo de venta por cantidad.
\[ Ganancias = Ingresos - Costo de venta \]
Siendo,
\[ Ingresos = (precio de venta)(Producción) \]
\[ Costo de venta = (Costo de venta)(Producción) \]
Con estos cálculos se logrará establecer la cantidad de producción que se necesitará de cada tipo de pan para lograr maximizar las ganancias.
A continuación, se presenta el diagrama de flujo que cualquier problema sobre simulaciones de inventario podría tener:
Anteriormente, se explicaron las funciones básicas que se utilizarán para la simulación. Pero antes de realizar la simulación fue necesario tener los datos históricos de la panadería sobre la demanda que se ha tenido durante once meses y medio de este año, con el fin de poder calcular la media de la demanda y su desviación estándar para hacer uso de estos datos para la simulación. A continuación, se presentarán algunos datos importantes sobre la demanda de los tres productos que se utilizaron en este proyecto:
#se selecciona la carpeta con la que se va a trabajar
setwd("C:/Users/MariaLourdes/Desktop/PROYECTO FINAL IO")
Pan reventado de Q1.00
Reventado <- read.csv("C:/Users/MariaLourdes/Desktop/PROYECTO FINAL IO/reventado.csv")
head(Reventado)
## Dias Demanda
## 1 Viernes 942
## 2 Sábado 817
## 3 Domingo 1233
## 4 Lunes 1099
## 5 Martes 920
## 6 Miércoles 680
Se logró calcular la demanda promedio que poseen los datos y su desviación estándar dando como resultado:
Dato | Resultado |
---|---|
Media | 940 |
Desviación estándar | 122 |
Y comprobando que tuvieran los datos una distribución normal, se utilizó el programa Arena. En la figura siguiente es la obtenida por el programa:
Brindando los datos siguientes:
Datos de Arena
Distribution Summary
Distribution: Normal
Expression: NORM(941, 48.9) Square Error: 0.001731
Pan Pirujo de Q0.50
Pirujo <- read.csv("C:/Users/MariaLourdes/Desktop/PROYECTO FINAL IO/pirujo.csv")
head(Pirujo)
## Días Demanda
## 1 Viernes 1361
## 2 Sábado 1256
## 3 Domingo 1179
## 4 Lunes 1347
## 5 Martes 726
## 6 Miércoles 1257
Se logró calcular la demanda promedio que poseen los datos y su desviación estándar dando como resultado:
Dato | Resultado |
---|---|
Media | 1260 |
Desviación estándar | 251 |
Y comprobando que tuvieran los datos una distribución normal, se utilizó el programa Arena. En la figura siguiente es la obtenida por el programa:
Brindando los datos siguientes:
Datos de Arena
Distribution Summary
Distribution: Normal
Expression: NORM(1.25e+003, 255) Square Error: 0.001971
Pan Conchita de Q0.50
Conchita <- read.csv("C:/Users/MariaLourdes/Desktop/PROYECTO FINAL IO/conchita.csv")
head(Conchita)
## Días Demanda
## 1 Viernes 1336
## 2 Sábado 1610
## 3 Domingo 1042
## 4 Lunes 2187
## 5 Martes 2180
## 6 Miércoles 1967
Se logró calcular la demanda promedio que poseen los datos y su desviación estándar dando como resultado:
Dato | Resultado |
---|---|
Media | 1728 |
Desviación estándar | 345 |
Y comprobando que tuvieran los datos una distribución normal, se utilizó el programa Arena. En la figura siguiente es la obtenida por el programa:
Brindando los datos siguientes:
Datos de Arena
Distribution Summary
Distribution: Normal
Expression: NORM(1.75e+003, 364) Square Error: 0.003132
Teniendo la distribución de cada set de datos comprobada, se puede realizar la simulación de inventario.
La simulación se hizo de la forma más práctica y que se pudiera entender. Para cada producto se hizo un código que genera de forma aleatoria una cantidad de demanda utilizando los datos de la demanda promedio y la desviación estándar que en la sección anterior se calcularon. Adicionalmente, se necesitaban los datos sobre el precio de venta, costo de venta, costo por incumplimiento y el precio de venta de cada producto para poderse llevar a cabo la parte de la simulación en donde la demanda puede entrar en tres casos diferentes que son:
Tabla sobre los datos requeridos anteriormente:
Dato | Reventado | Pirujo | Conchita |
---|---|---|---|
Precio de venta | Q1.00 | Q0.50 | Q0.50 |
Costo de venta | Q0.65 | Q0.33 | Q0.33 |
Costo por incumplimiento | Q0.35 | Q0.17 | Q0.17 |
Precio de venta por exceso de producción | Q0.10 | Q0.05 | Q0.07 |
Se hace uso de las funciones explicadas en el marco teórico del paper y lo demás se explicará mientras se va desarrollando la simulación. Es importante mencionar que la demanda se calculó de forma aleatoria 1000 veces para lograr obtener un promedio de ganancia dependiendo de cada caso y adicionalmente se calcularon 1000 veces las ganancias para poder hacer otro promedio más específico e ir haciendo un cambio en la cantidad de oferta para poder observar qué cantidad es la que maximiza la ganancia total. Y la función Ganancia juega un papel muy importante en esta simulación ya que nos permitirá determinar la cantidad de producción necesaria para maximizar las ganancias. El primer dato de entrada que recibe la función es la cantidad de unidades que se está ofertando para cada uno de los productos que es el dato controlado que uno puede tener en la simulación. El segundo dato que recibe la función es la demanda, el cual se escoge al azar utilizando una función llamada “rnorm()” que genera un número aleatorio que sigue una distribución normal con cierta desviación estándar y una media específica.
Para poder explicar la simulación de este proyecto se necesita dejar claro que se hizo un código independiente para cada producto. Se comenzará explicando el código una vez ya que para todos los productos es el mismo código y solamente cambian los datos del precio de venta, el costo de venta, costo por incumplimiento y el precio de venta por exceso de producción.
Código para el pan Reventado
###Pan Reventado###
#Esta función sirve para que los datos aleatorios sean los mismos si otra persona quiere utilizar el mismo código
set.seed(100)
#precio de venta Q1.00
pventa<- c(1)
#costo de venta (65% del precio de venta) Q0.65
cventa<-c(0.65)
#costo por excedentes de produccion Q0.10
cexc<-c(0.10)
#son datos obtenidos con los datos históricos
#promedio y desviacion estandar para la demanda
promedio<-c(940)
desviacion<-c(122)
#se nombra a la función y se le coloca la producción como parámetro de entrada.
reventado<- function(produccion=1000){
#round es para que no salgan números con decimales
demanda<-round(rnorm(1,940,122))
#aqui comienzan las restricciones
if(demanda>produccion){
#se asume que se va a tener un costo por dejar de ventas (demanda mayor que la oferta) y será el precio de venta menos el costo de venta, o sea, la ganancia que podría tener la panadería si se cubriera la demanda.
ganancia<- produccion*pventa-produccion*cventa-(pventa-cventa)*(demanda-produccion)
}
#se asumen que si producen más de lo que demandan, se puede revender el día siguiente a Q0.10 a una panadería para hacer miga de pan.
else if(demanda<produccion){
ganancia<-pventa*demanda-cventa*produccion+(produccion-demanda)*cexc
#el caso más sencillo
}
else if(demanda==produccion){
ganancia<-pventa*demanda-cventa*demanda
}
respuesta<-c(demanda,ganancia)
return(respuesta)
}
###para que la funcion nos brinde los datos
#Siendo el primer número la demanda y el segundo es la ganancia generada
reventado()
## [1] 879.0 241.1
Los resultados de la simulación servirán para poder observar y tomar decisiones sobre la cantidad que optimiza las ganancias de la panadería.
Comenzaré mostrando los resultados del Pan Reventado:
Resultados de pan reventado
##Esta función servirá para hacerlo 1000 veces
ganancias <- function (veces=1000, produccion=1500) {
repeticion<-replicate(veces,reventado(produccion))
repeticion2<-sapply(repeticion[2,] , as.numeric) #fila, columna
return(mean(repeticion2))
}
##esta función servirá para graficar e identificar el valor de la producción necesaria para maximizar las gananciasy se fueron probando cantidades en donde se pudiera ver la ganancia máxima.
maxpro1<-ganancias(1000,800)
maxpro2<-ganancias(1000,900)
maxpro3<-ganancias(1000,1000)
maxpro4<-ganancias(1000,1200)
ganancias1<-c(maxpro1,maxpro2,maxpro3,maxpro4)
oferta1<-c(800,900,1000,1200)
plot(oferta1,ganancias1,main = "Producción máxima del pan reventado",xlab = "Producción",ylab = "Ganancias")
Código para el pan Pirujo
###Pan pirujo###
set.seed(100)
#precio de venta
pventa<- c(0.50)
#costo de venta (65% del precio de venta)
cventa<-c(0.33)
#costo por excedentes de produccion
cexc<-c(0.05)
#promedio y desviacion estandar para la demanda
promedio<-c(1260)
desviacion<-c(251)
pirujo<- function(produccion=1000){
demanda<-round(rnorm(1,1260,251))
#aqui comienzan las restricciones
if(demanda>produccion){
#se asume que se va a tener un costo por dejar de ventas (demanda mayor que la oferta) y sera el precio de venta menos el costo de venta, o sea, la ganancia que podria tener la panaderia si se cubriera la demanda.
ganancia<- produccion*pventa-produccion*cventa-(pventa-cventa)*(demanda-produccion)
}
#se asumen que si producen mas lo pueden revender el dia siguiente a Q0.10 a una panaderia que hace migas de pan.
else if(demanda<produccion){
ganancia<-pventa*demanda-cventa*produccion+(produccion-demanda)*cexc
}
else if(demanda==produccion){
ganancia<-pventa*demanda-cventa*demanda
}
respuesta<-c(demanda,ganancia)
return(respuesta)
}
pirujo()
## [1] 1134.00 147.22
Los resultados de la simulación servirán para poder observar y tomar decisiones sobre la cantidad que optimiza las ganancias de la panadería.
A continuación seguiré mostrando los resultados del Pan Pirujo:
Resultados de pan pirujo
##Esta funcion servira para hacerlo 1000 veces
ganancias <- function (veces=1000, produccion=1500) {
repeticion<-replicate(veces,pirujo(produccion))
repeticion2<-sapply(repeticion[2,] , as.numeric) #fila, columna
return(mean(repeticion2))
}
##esta funcion servira para graficar e identificar el valor de la produccion necesaria para maximizar las ganancias.
maxpro1<-ganancias(1000,1000)
maxpro2<-ganancias(1000,1100)
maxpro3<-ganancias(1000,1200)
maxpro4<-ganancias(1000,1300)
maxpro5<-ganancias(1000,1400)
maxpro6<-ganancias(1000,1500)
ganancias2<-c(maxpro1,maxpro2,maxpro3,maxpro4,maxpro5,maxpro6)
oferta2<-c(1000,1100,1200,1300,1400,1500)
plot(oferta2,ganancias2,main = "Producción máxima del pan pirujo",xlab = "Producción",ylab = "Ganancias")
Código para el pan Conchita
###Pan conchita###
set.seed(100)
#precio de venta
pventa<- c(0.50)
#costo de venta (65% del precio de venta)
cventa<-c(0.33)
#costo por excedentes de produccion
cexc<-c(0.07)
#promedio y desviacion estandar para la demanda
promedio<-c(1728)
desviacion<-c(345)
conchita<- function(produccion=1000){
demanda<-round(rnorm(1,1728,345))
#aqui comienzan las restricciones
if(demanda>produccion){
#se asume que se va a tener un costo por dejar de ventas (demanda mayor que la oferta) y sera el precio de venta menos el costo de venta, o sea, la ganancia que podria tener la panaderia si se cubriera la demanda.
ganancia<- produccion*pventa-produccion*cventa-(pventa-cventa)*(demanda-produccion)
}
#se asumen que si producen mas lo pueden revender el dia siguiente a Q0.10 a una panaderia que hace migas de pan.
else if(demanda<produccion){
ganancia<-pventa*demanda-cventa*produccion+(produccion-demanda)*cexc
}
else if(demanda==produccion){
ganancia<-pventa*demanda-cventa*demanda
}
respuesta<-c(demanda,ganancia)
return(respuesta)
}
conchita()
## [1] 1555.00 75.65
Los resultados de la simulación servirán para poder observar y tomar decisiones sobre la cantidad que optimiza las ganancias de la panadería.
A continuación seguiré mostrando los resultados del Pan Conchita:
Resultados de pan conchita
##Esta funcion servira para hacerlo 1000 veces
ganancias <- function (veces=1000, produccion=1500) {
repeticion<-replicate(veces,conchita(produccion))
repeticion2<-sapply(repeticion[2,] , as.numeric) #fila, columna
return(mean(repeticion2))
}
##esta funcion servira para graficar e identificar el valor de la produccion necesaria para maximizar las ganancias.
maxpro1<-ganancias(1000,1500)
maxpro2<-ganancias(1000,1600)
maxpro3<-ganancias(1000,1700)
maxpro4<-ganancias(1000,1800)
maxpro5<-ganancias(1000,1900)
maxpro6<-ganancias(1000,2000)
ganancias3<-c(maxpro1,maxpro2,maxpro3,maxpro4,maxpro5,maxpro6)
oferta3<-c(1500,1600,1700,1800,1900,2000)
plot(oferta3,ganancias3,main = "Producción máxima del pan conchita",xlab = "Producción",ylab = "Ganancias")
pirujito <- read.csv("C:/Users/MariaLourdes/Desktop/PROYECTO FINAL IO/pirujito.csv")
reven <- read.csv("C:/Users/MariaLourdes/Desktop/PROYECTO FINAL IO/reven.csv")
concha <- read.csv("C:/Users/MariaLourdes/Desktop/PROYECTO FINAL IO/concha.csv")
Gráficas
En esta sección se hará uso de los diagramas de caja o Boxplots para poder observar la información importante de la data histórica.
El diagrama de caja es un gráfico utilizado para representar una variable cuantitativa (variable numérica). El gráfico es una herramienta que permite visualizar, a través de los cuartiles, cómo es la distribución, su grado de asimetría, los valores extremos, la posición de la mediana, etc. Se compone de:
Los diagramas de caja son muy útiles para comparar una variable en diferentes grupos.
#Gráfica para analizar la data histórica de la demanda del pan reventado
plot(reven$Días,reven$Demanda,main="Boxplot Pan Reventado")
#Gráfica para analizar la data histórica de la demanda del pan pirujo
plot(pirujito$Días,pirujito$Demanda,main="Boxplot Pan Pirujito")
#Gráfica para analizar la data histórica de la demanda del pan conchita
plot(concha$Días,concha$Demanda,main="Boxplot Pan Conchita")
Para dar la conclusión del proyecto, adjuntaré las siguientes gráficas:
En donde se puede observar cuál es la cantidad de producción necesaria para maximizar las ganancias de la empresa. Como anteriormente se dijo, la panadería no posee un método específico para establecer cuantas unidades de cada producto se deben de producir para poder cubrir la demanda incierta que poseen. Es por esa razón que los resultados obtenidos con este método de simulaciones se podría aplicar a la cantidad tan grande de productos para que tengan conocimiento de la cantidad de unidades de producción maximizan sus ganancias. Para los tres productos que se estudiaron en el proyecto las cantidades aproximadas que maximizan las ganancias son las siguientes:
Producto | Cantidad de producción que maximiza las ganancias |
---|---|
Reventado | 900 |
Pirujo | 1300 |
Conchita | 1800 |
Y se puede observar que en los diagramas de caja estas cantidades de producción están arriba de la media más alta de todos los días de la demanda, es decir, con esta cantidad se logran maximizar las ganancias y cubrir la demanda tan incierta que se posee. Se le recomendaría a la panadería realizan un análisis de datos sobre todos sus productos en base a la data histórica para tener el conocimiento de la producción que les permite a ellos incrementar sus ganancias ya que hoy en día están perdiendo mucho dinero porque no existe ningún método exacto que les diga o permita establecer la cantidad de productos que tienen que estar disponibles en la panadería. Adicionalmente, se les recomienda hacer uso de la tecnología para poder predecir de cierta manera la demanda que poseen y hacer uso de herramientas tan útiles como lo son RStudio o algún programa que registre todos los datos de cada día para que automáticamente vaya actualizando y brindando pronósticos sobre la demanda que se va a tener.