aGrUM  0.21.0
a C++ library for (probabilistic) graphical models
factorySimulator.cpp
Go to the documentation of this file.
1 /**
2  *
3  * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@AMU)
4  * info_at_agrum_dot_org
5  *
6  * This library is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this library. If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 
22 ///**
23 // * @file
24 // * @brief Sources of
25 // *
26 // * @author Pierre-Henri WUILLEMIN(@LIP6) and Jean-Christophe MAGNAN and
27 // Christophe GONZALES(@AMU)
28 // *
29 // */
30 //// =====================================================================
31 //#include <random>
32 //#include <cstdlib>
33 ////======================================================================
34 //#include <agrum/FMDP/simulation/factorySimulator.h>
35 ////======================================================================
36 
37 // namespace gum {
38 
39 // FactorySimulator::FactorySimulator():AbstractSimulator(){
40 // GUM_CONSTRUCTOR(FactorySimulator);
41 
42 // //
43 // *****************************************************************************************
44 // // Défintion des variables du problème
45 
46 // // Position FactorySimulator
47 // _xPos_ = new LabelizedVariable("xPos", "Position horizontale du
48 // FactorySimulator");
49 // _yPos_ = new LabelizedVariable("yPos", "Position verticale du
50 // FactorySimulator");
51 // _xPos_->eraseLabels();
52 // _yPos_->eraseLabels();
53 // for( Idx pos = 0; pos < 5; pos++){
54 // std::stringstream ss;
55 // ss << pos;
56 // _xPos_->addLabel(ss.str());
57 // _yPos_->addLabel(ss.str());
58 // }
59 
60 // // Position et destination passager
61 // _passengerPos_ = new LabelizedVariable("PassengerPos", "Position du
62 // Passager", 5);
63 // _passengerDest_ = new LabelizedVariable("PassengerDest", "Destination du
64 // Passager", 4);
65 // _passengerPos_->changeLabel(HOME, "Home");
66 // _passengerDest_->changeLabel(HOME, "Home");
67 // _passengerPos_->changeLabel(WORK, "Work");
68 // _passengerDest_->changeLabel(WORK, "Work");
69 // _passengerPos_->changeLabel(THEATER, "Theater");
70 // _passengerDest_->changeLabel(THEATER, "Theater");
71 // _passengerPos_->changeLabel(CLUB, "Club");
72 // _passengerDest_->changeLabel(CLUB, "Club");
73 // _passengerPos_->changeLabel(Factory, "Factory");
74 
75 //// _fuelLevel_ = new LabelizedVariable("FuelLevel", "Niveau du réservoir",
76 /// 14);
77 
78 // // Ajout à séquence
79 // _FactoryVars_.insert( _xPos_);
80 // _FactoryVars_.insert( _yPos_);
81 // _FactoryVars_.insert( _passengerPos_);
82 // _FactoryVars_.insert( _passengerDest_);
83 //// _FactoryVars_.insert( _fuelLevel_);
84 
85 // // Prime version creation
86 // for( SequenceIteratorSafe<const DiscreteVariable*> varIter =
87 // this->beginVariables(); varIter != this->endVariables(); ++varIter){
88 // DiscreteVariable* primeVar = (*varIter)->clone();
89 // primeVar->setName((*varIter)->name() + "'");
90 // _primeMap_.insert((*varIter), primeVar);
91 // }
92 
93 // //
94 // *****************************************************************************************
95 
96 // //
97 // *****************************************************************************************
98 // // Défintion des actions du problème
99 // _FactoryActions_.insert(GoNorth);
100 // _actionMap_.insert(GoNorth, new std::string ("Go North"));
101 // _FactoryActions_.insert(GoEast);
102 // _actionMap_.insert(GoEast, new std::string ("Go East"));
103 // _FactoryActions_.insert(GoSouth);
104 // _actionMap_.insert(GoSouth, new std::string ("Go South"));
105 // _FactoryActions_.insert(GoWest);
106 // _actionMap_.insert(GoWest, new std::string ("Go West"));
107 // _FactoryActions_.insert(PickUp);
108 // _actionMap_.insert(PickUp, new std::string ("Pick Up"));
109 // _FactoryActions_.insert(PutDown);
110 // _actionMap_.insert(PutDown, new std::string ("Put Down"));
111 //// _FactoryActions_.insert(FillUp);
112 //// _actionMap_.insert(FillUp, new std::string ("FillUp"));
113 // }
114 
115 // FactorySimulator::~FactorySimulator(){
116 // GUM_DESTRUCTOR(FactorySimulator);
117 
118 // for( BijectionIteratorSafe<const DiscreteVariable*, const
119 // DiscreteVariable*> varIter = _primeMap_.beginSafe();
120 // varIter != _primeMap_.endSafe(); ++varIter ){
121 // delete varIter.first();
122 // delete varIter.second();
123 // }
124 
125 // }
126 
127 
128 // //
129 // ==================================================================================================================
130 // // Reward according to the situation
131 // //
132 // ==================================================================================================================
133 // Instantiation FactorySimulator::randomState_(){
134 // Instantiation randy = AbstractSimulator::randomState_();
135 //// Idx curFuelLevel = randy.valFromPtr( _fuelLevel_);
136 //// while(curFuelLevel > 12 || curFuelLevel < 5)
137 //// curFuelLevel = (Idx)(((double)std::rand( ) / (double)RAND_MAX) * 7.0)
138 ///+ 5;
139 //// randy.chgVal( _fuelLevel_, curFuelLevel);
140 
141 // FactorySimulationLandmark passPos = (FactorySimulationLandmark)
142 // randy.valFromPtr( _passengerPos_);
143 // FactorySimulationLandmark passDest = (FactorySimulationLandmark)
144 // randy.valFromPtr( _passengerDest_);
145 // while( passPos == passDest || passPos == Factory )
146 // passPos = (FactorySimulationLandmark) (((double)std::rand( ) /
147 // (double)RAND_MAX) * 3.0);
148 // randy.chgVal( _passengerPos_, passPos);
149 
150 // return randy;
151 // }
152 
153 
154 // //
155 // ==================================================================================================================
156 // // Reward according to the situation
157 // //
158 // ==================================================================================================================
159 // bool FactorySimulator::hasReachEnd(){
160 // if( currentState_.valFromPtr( _passengerPos_) ==
161 // currentState_.valFromPtr( _passengerDest_) )
162 // return true;
163 
164 //// if( currentState_.valFromPtr( _fuelLevel_) == 0 )
165 //// return true;
166 
167 // return false;
168 // }
169 
170 
171 // //
172 // ==================================================================================================================
173 // // Reward according to the situation
174 // //
175 // ==================================================================================================================
176 // double FactorySimulator::reward(){
177 // if( currentState_.valFromPtr( _passengerPos_) ==
178 // currentState_.valFromPtr( _passengerDest_) ) {
179 // return 20.0;
180 // }
181 
182 // if( _lastAction_ == PickUp ){
183 // if( currentState_.valFromPtr( _passengerPos_) != Factory )
184 // return -10.0;
185 // else
186 // return 10.0;
187 // }
188 
189 // if( _lastAction_ == PutDown )
190 // return -10.0;
191 
192 //// if( currentState_.valFromPtr( _fuelLevel_) == 0 )
193 //// return -10.0;
194 
195 // return 0.0;//-1.0;
196 // }
197 
198 // //
199 // ==================================================================================================================
200 // // Reward according to the situation
201 // //
202 // ==================================================================================================================
203 // void FactorySimulator::perform(Idx actionId){
204 
205 // _lastAction_ = (FactorySimulationAction) actionId;
206 
207 //// Idx curFuelLevel = currentState_.valFromPtr( _fuelLevel_);
208 //// if( curFuelLevel > 0 )
209 //// currentState_.chgVal( _fuelLevel_, --curFuelLevel);
210 
211 // switch(actionId){
212 // case GoNorth : return _goNorth_( );
213 // case GoEast : return _goEast_( );
214 // case GoSouth : return _goSouth_( );
215 // case GoWest : return _goWest_( );
216 // case PickUp : return _pickUp_( );
217 // case PutDown : return _putDown_( );
218 // case FillUp : return _fillUp_( );
219 // }
220 // }
221 
222 
223 // //
224 // ==================================================================================================================
225 // // Transition if you go North
226 // //
227 // ==================================================================================================================
228 // void FactorySimulator:: _goNorth_(){
229 // Idx curPos = this->currentState_.valFromPtr( _yPos_);
230 // if( curPos < 4 )
231 // currentState_.chgVal( _yPos_, ++curPos);
232 // }
233 
234 
235 // //
236 // ==================================================================================================================
237 // // Transition if you go east
238 // //
239 // ==================================================================================================================
240 // void FactorySimulator:: _goEast_(){
241 // Idx xCurPos = this->currentState_.valFromPtr( _xPos_);
242 // Idx yCurPos = this->currentState_.valFromPtr( _yPos_);
243 
244 // if(xCurPos == 4)
245 // return;
246 // if(xCurPos == 0 || xCurPos == 2)
247 // if(yCurPos == 0 || yCurPos == 1)
248 // return;
249 // if(xCurPos == 1)
250 // if(yCurPos == 3 || yCurPos == 4)
251 // return;
252 
253 // currentState_.chgVal( _xPos_, ++xCurPos);
254 // }
255 
256 
257 // //
258 // ==================================================================================================================
259 // // Transition if you go south
260 // //
261 // ==================================================================================================================
262 // void FactorySimulator:: _goSouth_(){
263 // Idx curPos = this->currentState_.valFromPtr( _yPos_);
264 // if( curPos > 0 )
265 // currentState_.chgVal( _yPos_, --curPos);
266 // }
267 
268 
269 // //
270 // ==================================================================================================================
271 // // Transition if you go west
272 // //
273 // ==================================================================================================================
274 // void FactorySimulator:: _goWest_(){
275 // Idx xCurPos = this->currentState_.valFromPtr( _xPos_);
276 // Idx yCurPos = this->currentState_.valFromPtr( _yPos_);
277 
278 // if(xCurPos == 0)
279 // return;
280 // if(xCurPos == 1 || xCurPos == 3)
281 // if(yCurPos == 0 || yCurPos == 1)
282 // return;
283 // if(xCurPos == 2)
284 // if(yCurPos == 3 || yCurPos == 4)
285 // return;
286 
287 // currentState_.chgVal( _xPos_, --xCurPos);
288 // }
289 
290 
291 // //
292 // ==================================================================================================================
293 // // Transition if you go pick up sb
294 // //
295 // ==================================================================================================================
296 // void FactorySimulator:: _pickUp_(){
297 // FactorySimulationLandmarkX xCurPos = (FactorySimulationLandmarkX)
298 // this->currentState_.valFromPtr( _xPos_);
299 // FactorySimulationLandmarkY yCurPos = (FactorySimulationLandmarkY)
300 // this->currentState_.valFromPtr( _yPos_);
301 // FactorySimulationLandmark passPos = (FactorySimulationLandmark)
302 // this->currentState_.valFromPtr( _passengerPos_);
303 // switch(passPos){
304 // case HOME : {
305 // if( xCurPos == HOMEX && yCurPos == HOMEY )
306 // currentState_.chgVal( _passengerPos_, Factory);
307 // return;
308 // }
309 // case WORK : {
310 // if( xCurPos == WORKX && yCurPos == WORKY )
311 // currentState_.chgVal( _passengerPos_, Factory);
312 // return;
313 // }
314 // case THEATER : {
315 // if( xCurPos == THEATERX && yCurPos == THEATERY )
316 // currentState_.chgVal( _passengerPos_, Factory);
317 // return;
318 // }
319 // case CLUB : {
320 // if( xCurPos == CLUBX && yCurPos == CLUBY )
321 // currentState_.chgVal( _passengerPos_, Factory);
322 // return;
323 // }
324 // case Factory : return;
325 // }
326 // }
327 
328 
329 // //
330 // ==================================================================================================================
331 // // Transition if you go put down sb
332 // //
333 // ==================================================================================================================
334 // void FactorySimulator:: _putDown_(){
335 // FactorySimulationLandmarkX xCurPos = (FactorySimulationLandmarkX)
336 // this->currentState_.valFromPtr( _xPos_);
337 // FactorySimulationLandmarkY yCurPos = (FactorySimulationLandmarkY)
338 // this->currentState_.valFromPtr( _yPos_);
339 // FactorySimulationLandmark passPos = (FactorySimulationLandmark)
340 // this->currentState_.valFromPtr( _passengerPos_);
341 // FactorySimulationLandmark passDest = (FactorySimulationLandmark)
342 // this->currentState_.valFromPtr( _passengerDest_);
343 // if(passPos == Factory ){
344 // switch(passDest){
345 // case HOME : {
346 // if( xCurPos == HOMEX && yCurPos == HOMEY )
347 // currentState_.chgVal( _passengerPos_, HOME);
348 // return;
349 // }
350 // case WORK : {
351 // if( xCurPos == WORKX && yCurPos == WORKY )
352 // currentState_.chgVal( _passengerPos_, WORK);
353 // return;
354 // }
355 // case THEATER : {
356 // if( xCurPos == THEATERX && yCurPos == THEATERY )
357 // currentState_.chgVal( _passengerPos_, THEATER);
358 // return;
359 // }
360 // case CLUB : {
361 // if( xCurPos == CLUBX && yCurPos == CLUBY )
362 // currentState_.chgVal( _passengerPos_, CLUB);
363 // return;
364 // }
365 // case Factory : return;
366 // }
367 
368 // }
369 // }
370 
371 
372 // //
373 // ==================================================================================================================
374 // // Transition if you go reffill
375 // //
376 // ==================================================================================================================
377 // void FactorySimulator:: _fillUp_(){
378 // FactorySimulationLandmarkX xCurPos = (FactorySimulationLandmarkX)
379 // this->currentState_.valFromPtr( _xPos_);
380 // FactorySimulationLandmarkY yCurPos = (FactorySimulationLandmarkY)
381 // this->currentState_.valFromPtr( _yPos_);
382 
383 // if( xCurPos == STATIONX && yCurPos == STATIONY )
384 // currentState_.chgVal( _fuelLevel_, 13);
385 // }
386 //} // End of namespace gum