public TTTModule() : base("/ttt") { QAgent <string, int> agentX = new QAgent <string, int>(); agentX.RequestActionsForState = SpaceIndexes; QAgent <string, int> agentO = new QAgent <string, int>(); agentO.RequestActionsForState = SpaceIndexes; Post("/predict", o => { var name = this.Request.Query["name"].ToString(); var reader = new StreamReader(Request.Body); var state = reader.ReadToEnd(); if (File.Exists($"agent{name}.json")) { agentX.Deserialize(File.ReadAllText($"agent{name}.json")); } return(agentX.GetAction(state).ToString()); }); Post("/learn", o => { var name = this.Request.Query["name"].ToString(); if (File.Exists($"agent{name}.json")) { agentX.Deserialize(File.ReadAllText($"agent{name}.json")); } agentX.UpdateState(this.Request.Form["prevState"].ToString(), int.Parse(this.Request.Form["action"].ToString()), int.Parse(this.Request.Form["reward"].ToString()), this.Request.Form["newState"].ToString()); File.WriteAllText($"agent{name}.json", agentX.Serialize()); return("OK"); }); }
public LabyrinthModule() : base("/labyrinth") { QAgent <int, string> agent = new QAgent <int, string>(); agent.RequestActionsForState = i => { var res = new List <string>() { "up", "down", "left", "right" }; int y = i / 10; int x = i - y * 10; if (x == 0) { res.Remove("left"); } if (x == 4) { res.Remove("right"); } if (y == 4) { res.Remove("down"); } if (y == 0) { res.Remove("up"); } return(res); }; Post("/predict", o => { var name = this.Request.Query["name"].ToString(); var reader = new StreamReader(Request.Body); var state = reader.ReadToEnd(); if (File.Exists($"agent{name}.json")) { agent.Deserialize(File.ReadAllText($"agent{name}.json")); } return(agent.GetAction(int.Parse(state)).ToString()); }); Post("/learn", o => { var name = this.Request.Query["name"].ToString(); if (File.Exists($"agent{name}.json")) { agent.Deserialize(File.ReadAllText($"agent{name}.json")); } agent.UpdateState(int.Parse(this.Request.Form["prevState"].ToString()), this.Request.Form["action"].ToString(), int.Parse(this.Request.Form["reward"].ToString()), int.Parse(this.Request.Form["newState"].ToString())); File.WriteAllText($"agent{name}.json", agent.Serialize()); return("OK"); }); Post("/overlay", o => { var name = this.Request.Query["name"].ToString(); if (File.Exists($"agent{name}.json")) { agent.Deserialize(File.ReadAllText($"agent{name}.json")); } double[][] res = new double[5][]; for (int y = 0; y < 5; y++) { res[y] = new double[5]; for (int x = 0; x < 5; x++) { var state = y * 10 + x; res[y][x] = agent.GetStateMaxScore(state); } } return(JsonConvert.SerializeObject(res)); }); }