This section will show you how to set up RL models using MDPtoolbox in R:
- Install and load the required package:
Install.packages("MDPtoolbox") library(MDPtoolbox)
- Define the transition probabilities for action. Here, each row denotes from state and each column denotes to state. As we have 16 states, the transition probability matrix of each action shall be a 16 x 16 matrix, with each row adding upto 1:
up<- matrix(c(1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.7 , 0.2 , 0 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0.05 , 0 , 0 , 0.15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.7 , 0.3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0.7 , 0.1 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0.7 , 0.15 , 0.1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0.7 , 0.15 , 0.05 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.7 , 0.2 , 0 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0.85 , 0.05 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.7 , 0.2 , 0.05 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0.7 , 0.2 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0.9 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0.9 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0 , 0 , 0.7 , 0.2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0.8 , 0.15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0.2 ), nrow=16, ncol=16, byrow=TRUE) left<- matrix(c(1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0.9 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.9 , 0.05 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0.9 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0 , 0.1 , 0.05 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0.05 , 0.1 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0.05 , 0.1 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0.8 , 0 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0 , 0.1 , 0.05 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0.05 , 0.1 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0.1 , 0.1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0 , 0.2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0 , 0.2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0.05 , 0.1 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0.05 , 0.1 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0.05 , 0.15), nrow=16, ncol=16, byrow=TRUE) down<- matrix(c(0.1 , 0.8 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0.9 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0.8 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0.9 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0.15 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.2 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.2 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0.9 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0.1 , 0.8 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.2 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0.8 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0.9 , 0 , 0 , 0 , 0.05 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.2 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0.15 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.2 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1), nrow=16, ncol=16, byrow=TRUE) right<- matrix(c(0.2 , 0.1 , 0 , 0 , 0.7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0.1 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.2 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0.9 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.2 , 0.1 , 0 , 0 , 0.7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.9 , 0.1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.05 , 0.1 , 0 , 0 , 0 , 0.85 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0.2 , 0 , 0 , 0 , 0.7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.2 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0.9 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.1 , 0 , 0 , 0 , 0.9 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.2 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1), nrow=16, ncol=16, byrow=TRUE)
- Define a list of transition probability matrices:
TPMs <- list(up=up, left=left, down=down, right=right)
- Define a reward matrix of dimensions: 16 (number of states) x 4 (number of actions):
Rewards<- matrix(c(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, 100, 100, 100, -1, -1, -1, -1), nrow=16, ncol=4, byrow=TRUE)
- Test whether the defined TPMs and Rewards satisfy a well-defined MDP. If it returns an empty string, then the MDP is valid:
mdp_check(TPMs, Rewards)