MultiAgentDecisionProcess  Release 0.2.1
TransitionObservationIndependentMADPDiscrete.h
Go to the documentation of this file.
1 
28 /* Only include this header file once. */
29 #ifndef _TRANSITIONOBSERVATIONINDEPENDENTMADPDISCRETE_H_
30 #define _TRANSITIONOBSERVATIONINDEPENDENTMADPDISCRETE_H_ 1
31 
32 /* the include directives */
33 #include "Globals.h"
39 #include <map>
41 
58 {
59 private:
63  bool _m_sparse;
64 
67 
68  //cache this here (set by SetInitialized)
69  size_t _m_nr_agents;
70 
77  std::vector<MultiAgentDecisionProcessDiscrete*> _m_individualMADPDs;
78 
80  std::vector<JointActionDiscrete*> _m_jointActionVec;
81  std::map<Index, JointActionDiscrete*> *_m_jointActionMap;
82 
83  std::vector<std::vector<Index> > _m_jointToIndActionCache;
84 
87 
90  std::vector<size_t> _m_nrIndivStates;
91 
94  std::vector< std::vector<Index> > _m_indivStateIndices;
95  std::map< Index, std::vector<Index> > *_m_indivStateIndicesMap;
96 
97  std::vector<State*> _m_jointStates;
98  std::map<std::vector<Index>, State*> *_m_jointStatesMap;
99 
101 
103  //std::vector<double> _m_initialStateDistribution;
107 
108  std::vector<size_t> _m_nrIndivActions;
109 
110  std::vector<size_t> _m_nrIndivObs;
111 
112  std::vector<std::vector<ObservationDiscrete> > _m_indivObs;
113  std::vector<JointObservationDiscrete*> _m_jointObs;
114  std::map<Index, JointObservationDiscrete*> *_m_jointObsMap;
115 
117 
118  std::vector<std::vector<Index> > _m_jointToIndObsCache;
119 
121 
123 
124 // initialization functions
125 
129  void CreateJointActions();
130  /* Recursively creates the joint actions (_m_jointActionVec)
131  * using _m_actionVecs (which need to be initialized before calling
132  * this function...) */
133  size_t CreateJointActionsRecursively( Index curAgentI,
134  JointActionDiscrete& ja, Index jaI);
135 
139  void CreateJointStates();
140 
142 
143  void CreateISD();
144 
146  Index curAgentI, JointObservationDiscrete& jo, Index joI);
147 
148  std::vector<Index> JointToIndividualActionIndicesNoCache(Index jaI) const;
149 
150  std::vector<Index> JointToIndividualObservationIndicesNoCache(Index joI)
151  const;
152 
153 protected:
154  //data manipulation (set) functions:
158  virtual bool SetInitialized(bool b);
159 
160  bool GetSparse() const { return(_m_sparse); }
161 
162 public:
163  //\todo remove - temporary function...
164  bool Initialize()
165  {return(SetInitialized(true));}
166 
167  // Constructor, destructor and copy assignment.
168  // Default constructor.
170  std::string name="received unspec. by TransitionObservationIndependentMADPDiscrete",
171  std::string descr="received unspec.by TransitionObservationIndependentMADPDiscrete",
172  std::string pf="received unspec. by TransitionObservationIndependentMADPDiscrete");
173  // Copy assignment constructor.
176 
179 
180 // pre-initialization functions, functions that are used to construct the models
181 // etc.
183  void SetNrAgents(size_t n);
185  void AddAgent(std::string name="unspec.");
187  void SetNrStates(Index agentI, size_t nr);
189  void AddState(Index agentI, std::string name);
191  void SetNrActions(Index agentI, size_t nr);
194  void AddAction(Index agentI, std::string name);
196  void SetNrObservations(Index agentI, size_t nr);
199  void AddObservation(Index agentI, std::string name);
200 #if 0 // will be computed from individual ISDs
201 
202  void SetUniformISD();
203 #endif
204 
205  void SetISD(const std::vector<double> &v);
206 
207  //get (data) functions:
211  const
212  {return _m_individualMADPDs[agentI];}
214  size_t GetNrJointActions() const;
215 
218 
219  size_t GetNrJointStates() const;
220 
221 //some shortcut functions
222 
224  size_t GetNrActions(Index agentI) const
225  {return GetIndividualMADPD(agentI)->GetNrActions(0);}
227  size_t GetNrStates(Index agI) const
228  {return _m_individualMADPDs[agI]->GetNrStates();}
229 
231  size_t GetNrObservations(Index agentI) const
232  {return GetIndividualMADPD(agentI)->GetNrObservations(0);}
233 
234 //joint <-> individual action conversion
235 
238  Index IndividualToJointActionIndices(const std::vector<Index>&
239  indivActionIndices) const;
240 // /**Returns the joint action index that corresponds to the array of
241 // * specified individual action indices.*/
242 // Index IndividualToJointActionIndices(Index* IndexArray) const
243 // {return IndexTools::IndividualToJointIndicesArray(IndexArray,
244 // _m_nrActions);}
247  const std::vector<Index>& JointToIndividualActionIndices(Index jaI) const {
248  return(_m_jointToIndActionCache.at(jaI)); }
252 
255  const std::vector<Index>& JointToIndividualStateIndices(Index jointSI) const;
256 
258  Index IndividualToJointStateIndices(const std::vector<Index>&
259  indivStateIndices) const;
260 
262  Index IndividualToJointObservationIndices(const std::vector<Index>&
263  indivObsIndices) const;
265  const std::vector<Index>& JointToIndividualObservationIndices(Index joI)
266  const
267  { return(_m_jointToIndObsCache.at(joI)); }
268 
270  std::string SoftPrintActionSets() const;
272  void PrintActionSets() const
273  {std::cout << SoftPrintActionSets();}
275  std::string SoftPrintJointActionSet() const;
277  void PrintJointActionSet() const
278  {std::cout << SoftPrintJointActionSet();}
281  std::string SoftPrint() const;
284  void Print() const
285  {std::cout << SoftPrint();}
286  std::string SoftPrintState(Index sI) const;
287 
288  void SetSparse(bool sparse);
289 
290  // stuff to implement MultiAgentDecisionProcessDiscreteInterface
291 
295  double GetTransitionProbability(Index sI, Index jaI, Index
296  sucSI) const;
297  double GetTransitionProbability(const std::vector<Index> &sIs,
298  const std::vector<Index> &aIs,
299  const std::vector<Index> &sucSIs) const;
300 
305  double GetObservationProbability(Index jaI, Index sucSI,
306  Index joI) const;
307  double GetObservationProbability(const std::vector<Index> &aIs,
308  const std::vector<Index> &sucSIs,
309  const std::vector<Index> &oIs) const;
310 
314  Index SampleSuccessorState(Index sI, Index jaI) const;
315  std::vector<Index> SampleSuccessorState(const std::vector<Index> &sIs,
316  const std::vector<Index> &aIs)
317  const;
318 
321  Index SampleJointObservation(Index jaI, Index sucI) const;
322  std::vector<Index> SampleJointObservation(const std::vector<Index> &aIs,
323  const std::vector<Index> &sucIs)
324  const;
325 
328  Index SampleInitialState(void) const;
329  std::vector<Index> SampleInitialStates(void) const;
330 
332  size_t GetNrStates() const
333  { return(GetNrJointStates()); }
334 
336  const State* GetState(Index i) const;
337  const State* GetState(const std::vector<Index> &sIs) const;
338 
342  { return(_m_initialStateDistribution->at(sI)); }
343 
345  //std::vector<double> GetISD() const;
346  virtual const StateDistributionVector* GetISD() const;
347 
349  const std::vector<size_t>& GetNrActions() const
350  { return(_m_nrIndivActions); }
351 
353  const Action* GetAction(Index agentI, Index a) const
354  { return(GetIndividualMADPD(agentI)->GetAction(0,a)); }
355 
358  { return(GetJointActionDiscrete(i)); }
359 
361  Index IndividualToJointActionIndices(Index* IndexArray) const;
362 
365  const std::vector<size_t>& GetNrObservations() const
366  { return(_m_nrIndivObs); }
367 
369  size_t GetNrJointObservations() const;
370 
372  const Observation* GetObservation(Index agentI, Index o) const
373  { return(GetIndividualMADPD(agentI)->GetObservation(0,o)); }
374 
377 
378  TGet* GetTGet() const;
379  OGet* GetOGet() const;
380 
382  { return(_m_p_tModel); }
383 
385  { return(_m_p_oModel); }
386 
389 
390 };
391 
392 #endif /* !_TRANSITIONOBSERVATIONINDEPENDENTMADPDISCRETE_H_ */
393 
394 
395 // Local Variables: ***
396 // mode:c++ ***
397 // End: ***