コード例 #1
0
 public Action getAction(GameState state)
 {
     var availActions = state.GetActionSet();
     var flipCoin = _rand.NextDouble();
     if (flipCoin < epsilon)
     {
         var selected = _rand.Next(availActions.Count());
         return availActions.ToList()[selected];
     }
     else
     {
         return computeActionFromQValues(state);
     }
 }
コード例 #2
0
        public Action getAction(GameState state)
        {
            var availActions = state.GetActionSet();
            var flipCoin     = _rand.NextDouble();

            if (flipCoin < epsilon)
            {
                var selected = _rand.Next(availActions.Count());
                return(availActions.ToList()[selected]);
            }
            else
            {
                return(computeActionFromQValues(state));
            }
        }
コード例 #3
0
        public Action computeActionFromQValues(GameState state)
        {
            Action action = Action.NONE;
            var value = Double.MinValue;

            var availActions = state.GetActionSet();
            foreach (var a in availActions)
            {
                var v = _stateQValueMap[Tuple.Create(state, a)];
                if (v > value)
                {
                    action = a;
                    value = v;
                }
            }

            return action;
        }
コード例 #4
0
        public Action computeActionFromQValues(GameState state)
        {
            Action action = Action.NONE;
            var    value  = Double.MinValue;

            var availActions = state.GetActionSet();

            foreach (var a in availActions)
            {
                var v = _stateQValueMap[Tuple.Create(state, a)];
                if (v > value)
                {
                    action = a;
                    value  = v;
                }
            }

            return(action);
        }
コード例 #5
0
        private void resetModel()
        {
            _agent = new QLearningAgent();

            trackBarAlpha.Value = 2;
            trackBarGamma.Value = 8;
            trackBarEpsilon.Value = 1;

            _agent.alpha = 0.2;
            _agent.gamma = 0.8;
            _agent.epsilon = 0.05;

            // regiser state-qvalue
            foreach (var userHp in Enumerable.Range(0, _maxUserHp + 1))
            {
                foreach (var userPos in Enumerable.Range(0, _maxUserPos + 1))
                {
                    foreach (var towerHp in Enumerable.Range(0, _maxTowerHp + 1))
                    {
                        var state = new GameState(userHp, userPos, towerHp);
                        var compactState = new CompactGameState(userHp, userPos, towerHp);

                        foreach (var action in state.GetActionSet())
                        {
                            if (checkBoxCompact.Checked)
                                _agent.registerStateQValue(compactState, action, 0);
                            else
                                _agent.registerStateQValue(state, action, 0);
                        }
                    }
                }
            }
        }