Paula Cazali

Modelacion y Simulacion 1

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()

LS0tDQp0aXRsZTogIkRpbGVtYSBkZWwgdmVuZGVkb3IgZGUgcGVyaW9kaWNvIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMgUGF1bGEgQ2F6YWxpDQojIyMgTW9kZWxhY2lvbiB5IFNpbXVsYWNpb24gMQ0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpgYGANCg0KDQpIYXkgdHJlcyB0aXBvcyBkZSBkaWFzIGRlIG5vdGljaWEsICRFeGNlbGVudGUkLCAkQnVlbm8kIHkgJE1hbG8kLCBjb24gcHJvYmFiaWxpZGFkZXMgZGUgJDAuMzUkLCAkMC40NSQgeSAkMC4yMCQgcmVzcGVjdGl2YW1lbnRlLg0KDQpgYGB7cn0NCnNhbXBsZV9kYXlzIDwtIHNhbXBsZShjKDEsMiwzKSwgc2l6ZSA9IDIwLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IGMoMC4zNSwwLjQ1LDAuMjApKQ0Kc2FtcGxlX2RheXMNCmBgYA0KDQpMYSBzaWd1aWVudGUgZnVuY2lvbiwgZGVwZW5kaWVuZG8gZWwgZGlhIChFeGNlbGVudGUsIGJ1ZW5vIG8gbWFsbykgZGV2dWVsdmUgZWwgdmVjdG9yIGRlIHByb2JhYmlsaWRhZGVzIGEgdXNhciBwYXJhIG9idGVuZXIgbGEgZGVtYW5kYToNCmBgYHtyfQ0KZ2V0UHJvYkRheSA8LSBmdW5jdGlvbihkaWEpew0KICBpZihkaWEgPT0gMSl7DQogICAgcHJvYl9kaWEgPC0gYygwLjAzLDAuMDUsMC4xNSwwLjIwLDAuMzUsMC4xNSwwLjA3KQ0KICB9ZWxzZSBpZihkaWEgPT0gMil7DQogICAgcHJvYl9kaWEgPC0gYygwLjEwLDAuMTgsMC40MCwwLjIwLDAuMDgsMC4wNCwwKQ0KICB9ZWxzZXsNCiAgICBwcm9iX2RpYSA8LSBjKDAuNDQsMC4yMiwwLjE2LDAuMTIsMC4wNiwwLDApDQogIH0NCiAgcmV0dXJuKHByb2JfZGlhKQ0KfQ0KYGBgDQoNClBydWViYSBkZSBsYSBmdW5jaW9uIGBnZXRQcm9iRGF5KClgOg0KYGBge3J9DQpnZXRQcm9iRGF5KHNhbXBsZV9kYXlzWzFdKQ0KYGBgDQoNCkZ1bmNpb24gcXVlIG9idGllbmUgbGEgdXRpbGlkYWQ6DQpgYGB7cn0NCnV0aWxpdHkgPC0gZnVuY3Rpb24oZGVtYW5kYSx2ZW5kaWRvKXsNCiAgaW5ncmVzb192ZW50YSA8LSB2ZW5kaWRvICogNTANCiAgY29zdG9fcGVyaW9kaWNvIDwtIGRlbWFuZGEgKiAzMw0KICBleGNlc28gPC0gMA0KICByZWNpY2xhamUgPC0gMA0KICBpZihkZW1hbmRhIDwgdmVuZGlkbyl7DQogICAgZXhjZXNvIDwtICh2ZW5kaWRvIC0gZGVtYW5kYSkgKiA1MA0KICAgIHJlY2ljbGFqZSA8LSAwDQogIH1lbHNlIGlmIChkZW1hbmRhID4gdmVuZGlkbyl7DQogICAgZXhjZXNvIDwtIDANCiAgICByZWNpY2xhamUgPC0gKGRlbWFuZGEgLSB2ZW5kaWRvKSAqIDUNCiAgfWVsc2V7DQogICBleGNlc28gPC0gMA0KICAgcmVjaWNsYWplIDwtIDANCiAgfQ0KICBnYW5hbmNpYSA8LSBpbmdyZXNvX3ZlbnRhIC0gY29zdG9fcGVyaW9kaWNvIC0gZXhjZXNvICsgcmVjaWNsYWplDQogIHJldHVybihnYW5hbmNpYSkNCn0NCmBgYA0KDQpgYGB7cn0NCnJlc3VsdGFkb3MgPC0gZGF0YS5mcmFtZShkZW1hbmRhID0gYygpLCB2ZW5kaWRvID0gYygpLCBnYW5hbmNpYSA9IGMoKSkNCmZvcihkYXkgaW4gc2FtcGxlX2RheXMpew0KICBkZW1hbmRhIDwtIHNhbXBsZShjKDQwLDUwLDYwLDcwLDgwLDkwLDEwMCksIHNpemUgPSAxLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IGdldFByb2JEYXkoZGF5KSkNCiAgdmVuZGlkbyA8LSBzYW1wbGUoYyg0MCw1MCw2MCw3MCw4MCw5MCwxMDApLCBzaXplID0gMSwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBnZXRQcm9iRGF5KGRheSkpDQogIGdhbmFuY2lhIDwtIHV0aWxpdHkoZGVtYW5kYSwgdmVuZGlkbykNCiAgYXV4X2RmIDwtIGRhdGEuZnJhbWUoZGVtYW5kYSA9IGRlbWFuZGEsIHZlbmRpZG8gPSB2ZW5kaWRvLCBnYW5hbmNpYSA9IGdhbmFuY2lhKQ0KICAjcHJpbnQoZ2FuYW5jaWEpDQogICNyYmluZChyZXN1bHRhZG9zLCBkZW1hbmRhID0gZGVtYW5kYSwgdmVuZGlkbyA9IHZlbmRpZG8sIGdhbmFuY2lhID0gZ2FuYW5jaWEpDQogIHJlc3VsdGFkb3MgPC0gcmJpbmQocmVzdWx0YWRvcywgYXV4X2RmKQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KcmVzdWx0YWRvcw0KYGBgDQoNCkdyYWZpY2FuZG8gZWwgcmVzdWx0YWRvIHVzYW5kbyB1biBzYW1wbGUgZGUgMjAgZGlhcy4NCmBgYHtyfQ0KcmVzdWx0YWRvcyAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gZGVtYW5kYSwgeSA9IGdhbmFuY2lhKSkgKyANCiAgZ2VvbV9wb2ludCgpDQpgYGANCg0KQWhvcmEgc2UgaGFyw6FuIG3DoXMgaXRlcmFjaW9uZXM6DQpgYGB7cn0NCnJlc3VsdGFkb3MyIDwtIGRhdGEuZnJhbWUoZGVtYW5kYSA9IGMoKSwgdmVuZGlkbyA9IGMoKSwgZ2FuYW5jaWEgPSBjKCkpDQpzYW1wbGVfZGF5c19jIDwtIHNhbXBsZShjKDEsMiwzKSwgc2l6ZSA9IDEwMDAwLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IGMoMC4zNSwwLjQ1LDAuMjApKQ0KZm9yKGRheSBpbiBzYW1wbGVfZGF5c19jKXsNCiAgZGVtYW5kYSA8LSBzYW1wbGUoYyg0MCw1MCw2MCw3MCw4MCw5MCwxMDApLCBzaXplID0gMSwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBnZXRQcm9iRGF5KGRheSkpDQogIHZlbmRpZG8gPC0gc2FtcGxlKGMoMzA6MTIwKSwgc2l6ZSA9IDEsIHJlcGxhY2UgPSBUUlVFKQ0KICBnYW5hbmNpYSA8LSB1dGlsaXR5KGRlbWFuZGEsIHZlbmRpZG8pDQogIGF1eF9kZiA8LSBkYXRhLmZyYW1lKGRlbWFuZGEgPSBkZW1hbmRhLCB2ZW5kaWRvID0gdmVuZGlkbywgZ2FuYW5jaWEgPSBnYW5hbmNpYSkNCiAgcmVzdWx0YWRvczIgPC0gcmJpbmQocmVzdWx0YWRvczIsIGF1eF9kZikNCn0NCmBgYA0KDQpgYGB7cn0NCnJlc3VsdGFkb3MyICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBkZW1hbmRhLCB5ID0gZ2FuYW5jaWEpKSArIA0KICBnZW9tX2JveHBsb3QoKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQo=