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)