R Markdown Complementaria 5

library(markovchain)
## Package:  markovchain
## Version:  0.8.6
## Date:     2021-05-17
## BugReport: https://github.com/spedygiorgio/markovchain/issues
funcionShiny<-function(lambda){

  #Crear espacio de estados
  estados<-0:22
  
  #Crear lambda
  lam=lambda
  
  #Crear matrices de transicion para cada politica
  
  matP1<-matrix(0,nrow = length(estados),ncol=length(estados),dimnames = list(estados,estados))
  matP2<-matrix(0,nrow = length(estados),ncol=length(estados),dimnames = list(estados,estados))
  
  for (i in estados) {
    for( j in estados){
     
      #Politica 1
      #demanda menor a inventario y pedi
      if(i<=10 & j>0){
        matP1[i+1,j+1]<-dpois(x = 12+i-j,lambda = lam)
      }
      
      #Demanda es mayor al inventario y pedi
      if(i<=10 & j==0){
        matP1[i+1,j+1]<-1-ppois(12+i-1,lambda = lam)
      }
      
      #Demanda menor al inventario y no pedi
      if(i>10 & j>0){
        matP1[i+1,j+1]<-dpois(x=i-j,lambda = lam)
      }
      
      #Demanda maayor al inventario y no pedi
      if(i>10 & j==0){
        matP1[i+1,j+1]<-1-ppois(i-1,lambda = lam)
      }
       
      #Politica 2
      #La demanda es menor al inventario
      if(j>0){
        matP2[i+1,j+1]<-dpois(22-j, lambda = lam)
      }
      
      #Demanda es mayor al inventario de 22
      if(j==0){
        matP2[i+1,j+1]<-1-ppois(22-1,lambda = lam)
      }
      
    }
  }
  
  #Crear cadenas de markov
  
  cadenaP1<-new(Class="markovchain",states=as.character(estados),transitionMatrix=matP1)
  cadenaP2<-new(Class="markovchain", states=as.character(estados),transitionMatrix=matP2)
  
  #Crear ve costos logisticos para proximos 10 semanas
  
  semanas<- 1:10 #Semanas
  costosP1<-rep(0,10)
  costosP2<-rep(0,10)
  
  #Costos
  cOrdenar<-38000
  cMantener<-6200
  
  #Estado inicial
  alpha<-rep(0,length(estados))
  names(alpha)<-estados
  alpha["0"]<-1
  
  
  for (t in semanas) {
    #Politica 1
    probaT1<-alpha*(cadenaP1^t) #Proba de transitorio
    
    costoMantener1<-(probaT1%*%estados)*cMantener
    costoOrdenar1<-sum(probaT1[1:11])*cOrdenar
    costosP1[t]<-costoMantener1+costoOrdenar1
    
    #Politica 2
    probaT2<-alpha*(cadenaP2^t)
    
    costoMantener2<-(probaT2%*%estados)*cMantener
    costoOrdenar2<-sum(probaT2[1:22])*cOrdenar
    
    costosP2[t]<-costoMantener2+costoOrdenar2
    
  }
  
  data<-data.frame(semanas,costosP1,costosP2)
  
  return(data)
}

funcionShiny(lambda = 13)
##    semanas costosP1 costosP2
## 1        1 43988.70 93895.17
## 2        2 47431.59 93895.17
## 3        3 49488.99 93895.17
## 4        4 50619.06 93895.17
## 5        5 51209.68 93895.17
## 6        6 51512.28 93895.17
## 7        7 51666.12 93895.17
## 8        8 51744.11 93895.17
## 9        9 51783.59 93895.17
## 10      10 51803.58 93895.17
library(shiny)
library(plotly)
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
#source("Complementaria 5.R")

# Definir interfaz de la aplicacion
ui <- fluidPage(
  
  #Poner titulo de la aplicacion
  titlePanel(title = "Aplicacion Politicas de Inventario"),
  
  #Poner estructura de la aplicacion
  sidebarLayout(
    
    #Crear barra lateral para poner inputs
    sidebarPanel(
      sliderInput(inputId="tasaDemanda",label="Tasa demanda semanal (cajas/sem)",min=0,max = 35,value = 12)
    ),
    
    #Crear panel principal para poner la grafica outputs
    mainPanel(
      plotlyOutput(outputId = "Grafica")
      
    )
  )
)



# Definir logica de la aplicacion
server <- function(input, output) {
  
  #Definir que va en la grafica
  output$Grafica<-renderPlotly({
    
    info<-funcionShiny(input$tasaDemanda)
    
    plot_ly(data=info, x=~semanas, y=~costosP1, name = "Politica Actual",
            type = "scatter", mode="line")%>%
      add_trace(y=~costosP2,name="Politica Nueva",mode="line")%>%
      layout(title="Costo logistico por politica", 
             xaxis=list(title="Semana"),
             yaxis=list(title="Costo Logistico"))
  })
  
}

# Run the application 
#shinyApp(ui = ui, server = server)