Scheduler
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
epsilonGreedy.cpp
Go to the documentation of this file.
1 
10 #include "epsilonGreedy.h"
11 
12 #include <iostream>
13 
14 using namespace Mdp;
15 
16 EpsilonGreedy::EpsilonGreedy(double e, double eDecaySpeed, long long unsigned int eTimeout)
17  : epsilon(e)
18  , epsilonDecaySpeed(eDecaySpeed)
19  , epsilonTimeout(eTimeout)
20 {
21 }
22 
23 
24 std::vector<double> EpsilonGreedy::generatePolicy(const std::vector<double>& actionValues, action_t bestAction)
25 {
26  static size_t nbActions = actionValues.size();
27  static std::vector<double> policy(nbActions);
28  static const size_t nbActionsMinusOne = nbActions - 1;
29  const double bestActionProba = 1.0 - epsilon;
30  const double otherActionProba = epsilon / (double) nbActionsMinusOne;
31  for (action_t i = 0; i < nbActions; i++)
32  {
33  policy[i] = ((i == bestAction) ? bestActionProba : otherActionProba);
34  }
35  updateEpsilon();
36  return policy;
37 }
38 
40 {
41  static long long unsigned int counter = 0;
43  if (epsilonTimeout && (counter ++> epsilonTimeout))//if epsilonTimeOut is set to 0, there's no timeout
44  {
45  epsilon = 0.0;
46  epsilonTimeout = 0; //this improves performance somewhat
47  }
48 }
49 
50 
long long unsigned int epsilonTimeout
Definition: epsilonGreedy.h:25
size_t action_t
Definition: action_impl.h:18
Definition: action.h:18
virtual std::vector< double > generatePolicy(const std::vector< double > &, action_t bestAction) override
EpsilonGreedy(double epsilon, double epsilonDecaySpeed, long long unsigned int epsilonTimeout)