library(dplyr)
library(ggplot2)
Hay tres tipos de dias de noticia, \(Excelente\), \(Bueno\) y \(Malo\), con probabilidades de \(0.35\), \(0.45\) y \(0.20\) respectivamente.
sample_days <- sample(c(1,2,3), size = 20, replace = TRUE, prob = c(0.35,0.45,0.20))
sample_days
[1] 3 3 2 2 2 1 1 1 2 2 1 2 1 2 3 2 2 2 2 3
La siguiente funcion, dependiendo el dia (Excelente, bueno o malo) devuelve el vector de probabilidades a usar para obtener la demanda:
getProbDay <- function(dia){
if(dia == 1){
prob_dia <- c(0.03,0.05,0.15,0.20,0.35,0.15,0.07)
}else if(dia == 2){
prob_dia <- c(0.10,0.18,0.40,0.20,0.08,0.04,0)
}else{
prob_dia <- c(0.44,0.22,0.16,0.12,0.06,0,0)
}
return(prob_dia)
}
Prueba de la funcion getProbDay()
:
getProbDay(sample_days[1])
[1] 0.44 0.22 0.16 0.12 0.06 0.00 0.00
Funcion que obtiene la utilidad:
utility <- function(demanda,vendido){
ingreso_venta <- vendido * 50
costo_periodico <- demanda * 33
exceso <- 0
reciclaje <- 0
if(demanda < vendido){
exceso <- (vendido - demanda) * 50
reciclaje <- 0
}else if (demanda > vendido){
exceso <- 0
reciclaje <- (demanda - vendido) * 5
}else{
exceso <- 0
reciclaje <- 0
}
ganancia <- ingreso_venta - costo_periodico - exceso + reciclaje
return(ganancia)
}
resultados <- data.frame(demanda = c(), vendido = c(), ganancia = c())
for(day in sample_days){
demanda <- sample(c(40,50,60,70,80,90,100), size = 1, replace = TRUE, prob = getProbDay(day))
vendido <- sample(c(40,50,60,70,80,90,100), size = 1, replace = TRUE, prob = getProbDay(day))
ganancia <- utility(demanda, vendido)
aux_df <- data.frame(demanda = demanda, vendido = vendido, ganancia = ganancia)
#print(ganancia)
#rbind(resultados, demanda = demanda, vendido = vendido, ganancia = ganancia)
resultados <- rbind(resultados, aux_df)
}
resultados
Graficando el resultado usando un sample de 20 dias.
resultados %>%
ggplot(aes(x = demanda, y = ganancia)) +
geom_point()
Ahora se harán más iteraciones:
resultados2 <- data.frame(demanda = c(), vendido = c(), ganancia = c())
sample_days_c <- sample(c(1,2,3), size = 10000, replace = TRUE, prob = c(0.35,0.45,0.20))
for(day in sample_days_c){
demanda <- sample(c(40,50,60,70,80,90,100), size = 1, replace = TRUE, prob = getProbDay(day))
vendido <- sample(c(30:120), size = 1, replace = TRUE)
ganancia <- utility(demanda, vendido)
aux_df <- data.frame(demanda = demanda, vendido = vendido, ganancia = ganancia)
resultados2 <- rbind(resultados2, aux_df)
}
resultados2 %>%
ggplot(aes(x = demanda, y = ganancia)) +
geom_boxplot()