aGrUM 3.2.0
a C++ library for (probabilistic) graphical models
abstractSimulator.cpp
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2026 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-2026 *
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//======================================================================
53
54#ifdef GUM_NO_INLINE
56#endif // GUM_NO_INLINE
57
58//======================================================================
59
60namespace gum {
61
62 // ===========================================================================
63 // Constructors, Destructors.
64 // ===========================================================================
65
66 /*
67 * Default constructor.
68 */
70 GUM_CONSTRUCTOR(AbstractSimulator);
71 ;
72 }
73
74 /*
75 * Default destructor.
76 */
81
82 // ===========================================================================
83 //
84 // ===========================================================================
85
87 bool hre = true;
88 while (hre) {
90 hre = hasReachEnd();
91 }
92 }
93
95 Instantiation retState;
96 for (auto varIter = this->beginVariables(); varIter != this->endVariables(); ++varIter) {
97 retState.add(**varIter);
98 retState.chgVal(**varIter, randomValue((*varIter)->domainSize()));
99 }
100 return retState;
101 }
102
105 if (endState_.empty()) return false;
106
107 for (auto varIter = endState_.variablesSequence().beginSafe();
108 varIter != endState_.variablesSequence().endSafe();
109 ++varIter)
110 if (endState_.val(**varIter) != currentState_.val(**varIter)) return false;
111 return true;
112 }
113
114
115} // End of namespace gum
Class for simulating a discrete time stochastic process.
AbstractSimulator()
Default constructor.
virtual SequenceIteratorSafe< const DiscreteVariable * > endVariables()=0
Iteration over the variables of the simulated probleme.
virtual Instantiation randomState_()
Choses a random state as the first test for a run.
Instantiation currentState_
Tha state in which the system currently is.
virtual SequenceIteratorSafe< const DiscreteVariable * > beginVariables()=0
Iteration over the variables of the simulated probleme.
virtual ~AbstractSimulator()
Default destructor.
virtual bool hasReachEnd()
Tests if end state has been reached.
void setInitialStateRandomly()
Sets the intial statefrom which we begun the simulation.
Class for assigning/browsing values to tuples of discrete variables.
const Sequence< const DiscreteVariable * > & variablesSequence() const final
Returns the sequence of DiscreteVariable of this instantiation.
Instantiation & chgVal(const DiscreteVariable &v, Idx newval)
Assign newval to variable v in the Instantiation.
void add(const DiscreteVariable &v) final
Adds a new variable in the Instantiation.
bool empty() const final
Returns true if the instantiation is empty.
Idx val(Idx i) const
Returns the current value of the variable at position i.
GUM_SHARED_PUBLIC Idx randomValue(const Size max=2)
Returns a random Idx between 0 and max-1 included.
gum is the global namespace for all aGrUM entities
Definition agrum.h:46