Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            QAgent <int, int> agent = new QAgent <int, int>();

            int secretNumber = 5;

            //for each state we can add 1 and subtract 1
            agent.RequestActionsForState = (int state) => new List <int>()
            {
                -1, 1
            };


            for (int i = 0; i < 10; i++)
            {
                int guessedNumber = 0;
                Console.WriteLine("--------------------------");
                do
                {
                    //flag if game is finished
                    bool finish    = false;
                    int  prevstate = guessedNumber;
                    var  action    = agent.GetAction(guessedNumber);
                    var  reward    = -0.1;


                    //execute action
                    guessedNumber += action;
                    Console.WriteLine(guessedNumber);



                    //specify the rule that guessed number cant be less than 0
                    if (guessedNumber < 0)
                    {
                        reward = -1;
                        finish = true;
                    }

                    //rule for victory
                    if (guessedNumber == secretNumber)
                    {
                        reward = 1;
                        finish = true;
                    }

                    //learn what would happen after action is executed
                    agent.UpdateState(prevstate, action, reward, guessedNumber);

                    //finish the game
                    if (finish)
                    {
                        break;
                    }
                } while (true);
            }

            Console.ReadLine();
        }
Ejemplo n.º 2
0
        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");
            });
        }
Ejemplo n.º 3
0
        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));
            });
        }