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); } }
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)); } }
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; }
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); }
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); } } } } }