aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
fmdpSimulator.cpp
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2025 by *
5 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
6 * - Christophe GONZALES(_at_AMU) *
7 * *
8 * The aGrUM/pyAgrum library is free software; you can redistribute it *
9 * and/or modify it under the terms of either : *
10 * *
11 * - the GNU Lesser General Public License as published by *
12 * the Free Software Foundation, either version 3 of the License, *
13 * or (at your option) any later version, *
14 * - the MIT license (MIT), *
15 * - or both in dual license, as here. *
16 * *
17 * (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18 * *
19 * This aGrUM/pyAgrum library is distributed in the hope that it will be *
20 * useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26 * OTHER DEALINGS IN THE SOFTWARE. *
27 * *
28 * See LICENCES for more details. *
29 * *
30 * SPDX-FileCopyrightText: Copyright 2005-2025 *
31 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
32 * - Christophe GONZALES(_at_AMU) *
33 * SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34 * *
35 * Contact : info_at_agrum_dot_org *
36 * homepage : http://agrum.gitlab.io *
37 * gitlab : https://gitlab.com/agrumery/agrum *
38 * *
39 ****************************************************************************/
40
41
50// =====================================================================
51#include <cstdlib>
52//======================================================================
54//======================================================================
57
58//======================================================================
59
60namespace gum {
61
62 // ===========================================================================
63 // Constructors, Destructors.
64 // ===========================================================================
65
66 /*
67 * Default constructor.
68 */
70 AbstractSimulator(), _fmdp_(const_cast< FMDP< double >* >(fmdp)), _loaded_(false) {
71 GUM_CONSTRUCTOR(FMDPSimulator);
72 }
73
74 FMDPSimulator::FMDPSimulator(const std::string& ressource) : AbstractSimulator(), _loaded_(true) {
75 GUM_CONSTRUCTOR(FMDPSimulator);
76
77 _fmdp_ = new FMDP< double >(true);
78 FMDPDatReader< double > reader(_fmdp_, ressource);
79 reader.trace(false);
80 reader.proceed();
81 }
82
83 /*
84 * Default destructor.
85 */
87 GUM_DESTRUCTOR(FMDPSimulator);
88 if (_loaded_) delete _fmdp_;
89 }
90
91 // ===========================================================================
92 //
93 // ===========================================================================
94
95 void FMDPSimulator::perform(Idx actionId) {
96 Instantiation newState;
97 for (auto varIter = this->beginVariables(); varIter != this->endVariables(); ++varIter) {
98 newState.add(**varIter);
100 transit.add(*(this->primeVar(*varIter)));
101
102 double proba = randomProba();
103 double cdd = 0.0;
104 for (transit.setFirstOut(currentState_); !transit.end(); transit.incOut(currentState_)) {
105 cdd += this->transitionProbability_(*varIter, transit, actionId);
106 if (proba <= cdd) {
107 newState.chgVal(**varIter, transit.val(*(this->primeVar(*varIter))));
108 break;
109 }
110 }
111 }
112 currentState_ = newState;
113 }
114
115
116} // End of namespace gum
AbstractSimulator()
Default constructor.
Instantiation currentState_
Tha state in which the system currently is.
Definition of templatized reader of FMDPDat files for Factored Markov Decision Processes.
bool trace() const
accessor to trace function (just write the number of parser line)
Size proceed()
parse.
SequenceIteratorSafe< const DiscreteVariable * > endVariables()
Iteration over the variables of the simulated probleme.
FMDPSimulator(const FMDP< double > *fmdp)
Default constructor.
SequenceIteratorSafe< const DiscreteVariable * > beginVariables()
Iteration over the variables of the simulated probleme.
FMDP< double > * _fmdp_
The Factored Markov Decision Process that describes how the system evolves.
void perform(Idx)
Sets the intial statefrom which we begun the simulation.
virtual double transitionProbability_(const DiscreteVariable *var, const Instantiation &transit, Idx actionId)
~FMDPSimulator()
Default destructor.
const DiscreteVariable * primeVar(const DiscreteVariable *mainVar)
Iteration over the variables of the simulated probleme.
const bool _loaded_
Just to know if it should be deleted in the end.
Class for assigning/browsing values to tuples of discrete variables.
Instantiation & chgVal(const DiscreteVariable &v, Idx newval)
Assign newval to variable v in the Instantiation.
bool end() const
Returns true if the Instantiation reached the end.
void incOut(const Instantiation &i)
Operator increment for the variables not in i.
void add(const DiscreteVariable &v) final
Adds a new variable in the Instantiation.
Idx val(Idx i) const
Returns the current value of the variable at position i.
void setFirstOut(const Instantiation &i)
Assign the first values in the Instantiation for the variables not in i.
Definition of templatized reader of dat files for Factored Markov Decision Process.
Class for simulating a markov decision process.
Size Idx
Type for indexes.
Definition types.h:79
double randomProba()
Returns a random double between 0 and 1 included (i.e.
gum is the global namespace for all aGrUM entities
Definition agrum.h:46
Contains useful methods for random stuff.