MultiAgentDecisionProcess  Release 0.2.1
ParserTOIDecPOMDPDiscrete.cpp
Go to the documentation of this file.
1 
29 #include "ParserDecPOMDPDiscrete.h"
30 #include <fstream>
31 
32 using namespace std;
33 
36  *problem) :
37  _m_problem(problem)
38 {
39 }
40 
42 {
43  ParseBase();
44 
45  for(Index i=0;i!=_m_problem->GetNrAgents();++i)
46  ParseAgent(i);
47 
48  ParseRewards();
49 
51 }
52 
53 
55 {
56  vector<size_t> nrStates(_m_problem->GetNrAgents(),0),
57  nrActions(_m_problem->GetNrAgents(),0);
58  for(Index i=0;i!=_m_problem->GetNrAgents();++i)
59  {
60  nrStates[i]=_m_problem->GetIndividualMADPD(i)->GetNrStates();
62  }
63  ParseRewards(_m_problem->GetNrAgents(),nrStates,nrActions);
64 }
65 
67 {
68  const int bufsize=65536;
69  char buffer[bufsize];
70 
71  unsigned int nrAgents;
72  double gamma;
73 
74  string filename=_m_problem->GetProblemFile() + ".base";
75  ifstream fp(filename.c_str());
76  if(!fp)
77  {
78  cerr << "ParserTOIDecPOMDPDiscrete::ParseBase: failed to "
79  << "open file " << filename << endl;
80  abort();
81  }
82 
83  int line=0;
84  while(!fp.getline(buffer,bufsize).eof())
85  {
86  istringstream is(buffer);
87  switch(line)
88  {
89  case 0:
90  is >> nrAgents;
91  break;
92  case 1:
93  is >> gamma;
94  break;
95  }
96  line++;
97  }
98 
99  _m_problem->SetNrAgents(nrAgents);
100  _m_problem->SetDiscount(gamma);
101 }
102 
104 {
107 
108  DecPOMDPDiscrete *decpomdp;
109  decpomdp=new DecPOMDPDiscrete("", "", madp->GetProblemFile());
110  decpomdp->SetSparse(madp->GetSparse());
111 
112  ParserDecPOMDPDiscrete parser(decpomdp);
113  parser.Parse();
114 
115  if(decpomdp->GetNrAgents()!=1)
116  throw(E("ParserTOIDecPOMDPDiscrete::ParseAgent individual models can only be defined for a single agent"));
117 
118  StoreDecPOMDP(decpomdp,id);
119 }
120 
122  Index id)
123 {
126  decpomdp->ExtractMADPDiscrete(madp);
127  _m_problem->SetIndividualDecPOMDPD(decpomdp,id);
128 }
129 
134  const vector<size_t> &nrStates,
135  const vector<size_t> &nrActions)
136 {
137  const int bufsize=65536;
138  char buffer[bufsize];
139 
140  vector<unsigned int> states, actions;
141  unsigned int state,action;
142  double reward;
143 
144  string filename=_m_problem->GetProblemFile() + ".rewards";
145  ifstream fp(filename.c_str());
146  if(!fp)
147  {
148  cerr << "ParserTOIDecPOMDPDiscrete::ParseRewards: failed to "
149  << "open file " << filename << endl;
150  }
151 
153 
154  while(!fp.getline(buffer,bufsize).eof())
155  {
156  istringstream is(buffer);
157  states.clear();
158  actions.clear();
159  for(unsigned int i=0;i!=nrAgents;++i)
160  {
161  is >> state;
162  states.push_back(state);
163  }
164  for(unsigned int i=0;i!=nrAgents;++i)
165  {
166  is >> action;
167  actions.push_back(action);
168  }
169  is >> reward;
170 
171  _m_problem->
172  SetReward(states, actions, reward);
173  }
174 }