28 if (matrix !=
nullptr)
36 if (from >= nbOfStates || to >= nbOfStates || action >= nbOfStates)
37 throw std::runtime_error(
"invalid value for matrix parameters");
38 return getArray()[from*nbOfStates*nbOfActions + action*nbOfStates + to];
43 if (stateAndAction >= nbOfStates*nbOfActions || to >= nbOfStates)
44 throw std::runtime_error(
"invalid value for matrix parameters");
45 return getArray()[stateAndAction * nbOfStates + to];
51 if (from >= nbOfStates || to >= nbOfStates || action >= nbOfActions)
52 throw std::runtime_error(
"invalid value for matrix parameters");
53 getArray()[from*nbOfStates*nbOfActions + action*nbOfStates + to] = proba;
61 for (
action_t j = 0; j < nbOfActions; j++)
63 std::vector<double> vector = gen->drawDistribution(nbOfStates);
64 for (
state_t k = 0; k < nbOfStates; k++)
66 set(
i, k, j, vector[k]);
75 if (matrix ==
nullptr)
77 stream <<
"(Transition matrix was not created)\n";
80 stream <<
"Transition Matrix:\n";
83 stream <<
"From state " <<
i <<
"\n";
84 for (
action_t j = 0; j < nbOfActions; j++)
86 stream <<
" With action " << j <<
": ";
87 for (
state_t k = 0; k < nbOfStates; k++)
89 stream << std::fixed << std::setfill(
' ') << getArray()[i*nbOfActions*nbOfStates + j*nbOfStates + k] <<
" ";
99 double *TransitionMatrix::getArray()
101 if (matrix ==
nullptr)
103 matrix =
new double[nbOfStates*nbOfStates*nbOfActions];
void print(std::ostream &stream)
void set(state_t from, state_t to, action_t action, double proba)
TransitionMatrix(int nbOfStates, int nbOfActions)
double get(state_t from, state_t to, action_t action)
void initializeRandomly(std::shared_ptr< Utils::RandomGenerator > gen)