/// <summary> /// Creates a new Q-learner /// </summary> /// <param name="qValueTable">The Q-value table</param> /// <param name="selectionPolicy">The selection policy</param> /// <param name="alpha">The learning rate</param> /// <param name="gamma">The discount factor</param> /// <param name="random">The random generator</param> public QLearning(QValueTable <TState> qValueTable, IActionSelectionPolicy selectionPolicy, double alpha, double gamma, Random random) { if (alpha < 0) { throw new ArgumentException("Expected alpha to be >= 0.", "alpha"); } if (gamma < 0) { throw new ArgumentException("Expected gamma to be >= 0.", "gamma"); } this.qValueTable = qValueTable; this.selectionPolicy = selectionPolicy; this.alpha = alpha; this.gamma = gamma; this.random = random; }
/// <summary> /// Creates a new Q-learner using the given selection policy /// </summary> /// <param name="numActions">The number of actions</param> /// <param name="selectionPolicy">The selection policy</param> /// <param name="alpha">The learning rate</param> /// <param name="gamma">The discount factor</param> /// <param name="random">The random generator</param> public static QLearning <TState> New(int numActions, IActionSelectionPolicy selectionPolicy, double alpha, double gamma, Random random) { return(new QLearning <TState>(new QValueTable <TState>(numActions), selectionPolicy, alpha, gamma, random)); }