MultiAgentDecisionProcess  Release 0.2.1
TOIFactoredRewardDecPOMDPDiscrete.cpp
Go to the documentation of this file.
1 
29 
30 using namespace std;
31 
32 #define DEBUG_TOIFactoredRewardDecPOMDPDiscrete 0
33 
36  string name, string descr, string pf) :
37  TOIDecPOMDPDiscrete(name, descr, pf)
38 {
39  _m_initialized = false;
40 }
41 
44 {
45  throw(E("TOIFactoredRewardDecPOMDPDiscrete: copy ctor not yet implemented"));
46 }
47 
49 {
50  for(unsigned int i=0;i!=_m_p_rModels.size();++i)
51  delete(_m_p_rModels[i]);
52 }
53 
54 //Copy assignment operator
56 TOIFactoredRewardDecPOMDPDiscrete::operator=
58 {
59  if (this == &o) return *this; // Gracefully handle self assignment
60  // Put the normal assignment duties here...
61 
62  throw(E("TOIFactoredRewardDecPOMDPDiscrete: assignment not yet implemented"));
63 
64  return *this;
65 }
66 
68 {
69  if(b == false)
70  {
71  _m_initialized = false;
72  return(true);
73  }
74 
76  {
77  if( b == true )
78  {
79  if (_m_p_rModels.size()!=GetNrAgents())
80  throw E("TOIFactoredRewardDecPOMDPDiscrete::SetInitialized(true) : no reward models specified yet!");
81 
82  for(unsigned int i=0;i!=GetNrAgents();++i)
83  if (_m_p_rModels[i] == 0)
84  throw E("TOIFactoredRewardDecPOMDPDiscrete::SetInitialized(true) : no reward model specified yet! ( _m_p_rModels[i] == 0 )");
85 
86  //\todo TODO: do we need to check the reward model? any further?
87  }
88  _m_initialized = b;
89  return(true);
90  }
91  else
92  return(false);
93 }
94 
96 {
97  double reward=0;
98  vector<Index> indSIs=JointToIndividualStateIndices(sI),
100 
101  for(unsigned int i=0;i!=GetNrAgents();++i)
102  reward+=GetIndividualReward(indSIs[i],indAIs[i],i);
103 
104  reward+=_m_p_rModel->Get(indSIs,indAIs);
105 // reward+=_m_p_rModel->Get(sI,jaI);
106 
107 #if DEBUG_TOIFactoredRewardDecPOMDPDiscrete
108  cout << "GetReward(" << sI << "," << jaI << ") = " << reward << endl;
109 #endif
110  return(reward);
111 }
112 
113 double
114 TOIFactoredRewardDecPOMDPDiscrete::GetReward(const std::vector<Index> &sIs,
115  const std::vector<Index> &aIs) const
116 {
117  double reward=0;
118 
119  for(unsigned int i=0;i!=GetNrAgents();++i)
120  reward+=GetIndividualReward(sIs[i],aIs[i],i);
121 
122  reward+=_m_p_rModel->Get(sIs,aIs);
123 
124 #if DEBUG_TOIFactoredRewardDecPOMDPDiscrete
125  cout << "GetReward(" << sI << "," << jaI << ") = " << reward << endl;
126 #endif
127 
128  return(reward);
129 }
130 
133  Index agentID)
134 {
135  if(_m_p_rModels.size()<=agentID)
136  _m_p_rModels.resize(agentID+1);
137 
138  _m_p_rModels[agentID]=rewardModel;
139 }
140 
142 GetIndividualReward(Index indSI, Index indAI, Index agentID) const
143 {
144  double reward=_m_p_rModels[agentID]->Get(indSI,indAI);
145 #if DEBUG_TOIFactoredRewardDecPOMDPDiscrete
146  cout << "GetIndividualReward[" << agentID << "](" << indSI << "," << indAI
147  << ") = " << reward << endl;
148 #endif
149  return(reward);
150 }
151 
153 {
154  stringstream ss;
156 
157  if(_m_initialized)
158  {
159  ss << "Reward models: " << endl;
160  for(unsigned int i=0;i!=GetNrAgents();++i)
161  {
162  ss << "Individual rewards for agent " << i << endl;
163  ss << _m_p_rModels[i]->SoftPrint();
164  }
165  }
166  else
167  throw E("TOIFactoredRewardDecPOMDPDiscrete components (reward model) not initialized");
168 
169  return(ss.str());
170 }