The main function is defined in Experiment.py, where our method is written in train_ulo() and other methods are called through train().
There are several algorithms we compare and we list the parameters the user must specify to call these algorithms:

1. OracleQ-lat (tabular oracleq directly see the latent states)
args.alg = "oracleq"
args.tabular = True
args.ulo = "none"

2. QLearning-lat (tabular qlearning directly see the latent states)
args.alg = "qlearning"
args.tabular = True
args.ulo = "none"

3. OracleQ-obs (tabular oracleq only see observations)
args.alg = "oracleq"
args.tabular = False
args.ulo = "none"

4. QLearning-obs (tabular qlearning only see observations)
args.alg = "qlearning"
args.tabular = False
args.ulo = "none"

5. PCID (decoding method proposed in Du. et al 2019)
args.alg = "pcid"
args.tabular = False
args.ulo = "none"

6. Our method (unsupervised learning oracle + oracleq as tabular RL)
args.alg = "oracleq"
args.tabular = False
args.ulo = "kmeans" (or "dbscan", "gmm")

More parameters are defined in Experiment.py parse_args().