R Markdown

# SDP MAQUINAS ------------------------------------------------------------

epocas<-1:3

estados <- c('E','B','P','M')

desiciones <- c("Reemplazar", "No reemplazar")

ganancias_sem <-c(100,80,50,10)
names(ganancias_sem) <- c('E','B','P','M')


retornos<-function(i,a){
  
  if(a=='No reemplazar'){
    ret <- ganancias_sem[i]
  }else if(a=='Reemplazar' & i!='E'){
    ret <- 100-200
  }else{
    ret<--100000000
  }
  return(ret)
}

retornos('M','No reemplazar')
##  M 
## 10
retornos('M','Reemplazar')
## [1] -100
# Inicializar matrices
probs <- list()
for(n in epocas){
  probs[[n]] <- list()
  for(a in desiciones){
    
    if(a=='No reemplazar'){
      tabla <- c(0.7,0.3,0,0,
                 0,0.7,0.3,0,
                 0,0,0.6,0.4,
                 0,0,0,1)
    }else{
      tabla <- c(0.0,0.0,0,0,
                 0.7,0.3,0,0,
                 0.7,0.3,0,0,
                 0.7,0.3,0,0)
    }
    
    
    probs[[n]][[a]] <- matrix(tabla,byrow = TRUE, nrow = length(estados), ncol = length(estados),
                              dimnames = list(estados,estados))
  }
}

probs
## [[1]]
## [[1]]$Reemplazar
##     E   B P M
## E 0.0 0.0 0 0
## B 0.7 0.3 0 0
## P 0.7 0.3 0 0
## M 0.7 0.3 0 0
## 
## [[1]]$`No reemplazar`
##     E   B   P   M
## E 0.7 0.3 0.0 0.0
## B 0.0 0.7 0.3 0.0
## P 0.0 0.0 0.6 0.4
## M 0.0 0.0 0.0 1.0
## 
## 
## [[2]]
## [[2]]$Reemplazar
##     E   B P M
## E 0.0 0.0 0 0
## B 0.7 0.3 0 0
## P 0.7 0.3 0 0
## M 0.7 0.3 0 0
## 
## [[2]]$`No reemplazar`
##     E   B   P   M
## E 0.7 0.3 0.0 0.0
## B 0.0 0.7 0.3 0.0
## P 0.0 0.0 0.6 0.4
## M 0.0 0.0 0.0 1.0
## 
## 
## [[3]]
## [[3]]$Reemplazar
##     E   B P M
## E 0.0 0.0 0 0
## B 0.7 0.3 0 0
## P 0.7 0.3 0 0
## M 0.7 0.3 0 0
## 
## [[3]]$`No reemplazar`
##     E   B   P   M
## E 0.7 0.3 0.0 0.0
## B 0.0 0.7 0.3 0.0
## P 0.0 0.0 0.6 0.4
## M 0.0 0.0 0.0 1.0
# Matriz con los valores de las ecuaciones de Bellman
f_rec <- matrix(0,nrow = length(estados),ncol = length(epocas))
dimnames(f_rec) <- list(estados, epocas)
                            
# Matriz de decisiones óptimas
mat_dec <- matrix(0,nrow = length(estados), ncol = length(epocas))
dimnames(mat_dec) <- list(estados, epocas) 

# Óptimo en última epoca
for(i in estados){
  
  maximo <- -10000000
  for(a in desiciones){
    valor <- retornos(i,a)
    
    if(valor >= maximo){
      f_rec[i,length(epocas)] <- valor
      mat_dec[i,length(epocas)] <- a
      maximo <- valor
    }
  }
}

# Recursión
for(e in (length(epocas)-1):1){
  for(i in estados){

    maximo <- -100000
    for(a in desiciones){
      valor <- retornos(i, a)
      
      for(j in estados){
        valor <- valor + probs[[e]][[a]][i,j]*f_rec[j,e+1]
      }
      
      if(valor >= maximo){
        f_rec[i,e] <- valor
        mat_dec[i,e] <- a
        maximo <- valor
      }
    }
    
  }
}

f_rec
##       1   2   3
## E 281.1 194 100
## B 210.9 151  80
## P 108.4  84  50
## M  81.1  20  10
mat_dec
##   1               2               3              
## E "No reemplazar" "No reemplazar" "No reemplazar"
## B "No reemplazar" "No reemplazar" "No reemplazar"
## P "No reemplazar" "No reemplazar" "No reemplazar"
## M "Reemplazar"    "No reemplazar" "No reemplazar"
# Mapa de calor -----------------------------------------------------------
library(colorspace)
library(reshape2)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.1.3
library(plotly)
## 
## 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
decisionesOptimasLista <- melt(mat_dec)
colnames(decisionesOptimasLista) <- c("Estado", "Época", "Decisión")
decisionesOptimasLista$Dec <- ifelse(decisionesOptimasLista$Decisión == "Reemplazar", 1, 0)
decisionesOptimasLista$Dec <- as.factor(decisionesOptimasLista$Dec)

fig <- plot_ly(colors = colorRamp(c("blue", "yellow", "red")),
               colorbar = list(title = "Decisión"),
               z = decisionesOptimasLista$Dec, type = "heatmap", 
               x = decisionesOptimasLista$Época, y = decisionesOptimasLista$Estado)
fig <- fig %>% layout(title = "",
                      xaxis = list(title = 'Época'),
                      yaxis = list(title = 'Estado'))
fig