34 #define DEBUG_CTM 0 //Create Trans Model
35 #define DEBUG_COM 0 //Create Obs Model
46 size_t nrAgents,
size_t nrHouses,
size_t nrFLs,
47 double costOfMove,
bool forcePositionRepres)
50 SoftPrintBriefDescription(nrAgents, nrHouses, nrFLs),
51 SoftPrintDescription(nrAgents, nrHouses, nrFLs),
52 SoftPrintBriefDescription(nrAgents, nrHouses, nrFLs)
54 ,_m_nrAgents(nrAgents)
55 ,_m_nrHouses(nrHouses)
56 ,_m_nrFireLevels(nrFLs)
62 double S = pow((
double)nrFLs, (
double)nrHouses);
67 if(costOfMove > 0.0 || forcePositionRepres)
69 cout <<
"Including position"<<endl;
78 size_t nrPos = nrHouses+1;
81 vector< size_t > nrPos_vec = vector<size_t>(nrAgents, nrPos);
83 _m_nrPerStateFeatureVec.insert(
84 _m_nrPerStateFeatureVec.end(),
89 cout <<
"_m_nrPerStateFeatureVec=" <<
92 for(vector<size_t>::const_iterator it = _m_nrPerStateFeatureVec.begin();
93 it < _m_nrPerStateFeatureVec.end();
97 vector<double> isd(nrS, 0.0);
98 double nrStartStates = pow((
double)nrFLs, (
double)nrHouses);
99 double ssprob = 1.0 / nrStartStates;
101 for(
Index sI = 0; sI < nrS; sI++)
107 for(t1 = 0; t1 < nrHouses; t1++)
108 ss <<
"f" << s_vec.at(t1);
109 bool isStartState =
true;
112 Index hI = s_vec.at(t1);
119 isStartState =
false;
136 cout <<
"Not including positions" << endl;
143 cout <<
"_m_nrPerStateFeatureVec=" <<
148 cout <<
"nrStates="<<nrS<<endl;
149 for(
Index sI = 0; sI < nrS; sI++)
168 if(
DEBUG_CJA) cout <<
">>>Creating joint actions and set..."<<endl;
171 if(
DEBUG_CA) cout <<
"testNRJA="<<testNRJA<<endl;
178 if(
DEBUG_CO) cout <<
"testNRJO="<<testNRJO<<endl;
183 if(
DEBUG_PFF) cout <<
">>>Adding Transition model..."<<endl;
188 if(
DEBUG_PFF) cout <<
">>>Adding Observation model..."<<endl;
196 if(
DEBUG_PFF) cout <<
"Model created..."<<endl;
220 size_t nrAgents,
size_t nrHouses,
size_t nrFLs)
223 ss <<
"FireFighting_" << nrAgents <<
230 size_t nrHouses,
size_t nrFLs)
233 ss <<
"The regular (non-factored) FireFighting problem with" << nrAgents <<
234 " Agents, " << nrHouses <<
" houses and "
235 << nrFLs <<
" fire levels for each house";
247 for(
Index actionI=0; actionI < nrActionsThisAgent; actionI++)
251 ss <<
"go" << actionI;
252 string name = ss.str();
254 ss <<
"Action " << actionI <<
" of agent " << agentIndex
255 <<
": go to and fight fire at house "<<actionI;
256 string descr = ss.str();
269 size_t nrObservationsThisAgent = 2;
272 for(
Index obsI=0; obsI < nrObservationsThisAgent; obsI++)
277 case(
FLAMES): whatObs =
"Flames__";
279 case(
NOFLAMES): whatObs =
"NoFlames";
285 string name = ss.str();
287 ss <<
"Observation " << obsI <<
" of agent " << agentIndex <<
": " << whatObs;
288 string descr = ss.str();
318 cout <<
"Transitions from s1="<<s1<<endl;
344 vector< Index > s1_vec_stripped(&s1_vec[0],
350 cout <<
"Trans from s="
356 <<
" Prob=" << p << endl;
361 vector< Index >& full_s2 = s2_vec;
362 full_s2.insert(full_s2.end(), ja_vec.begin(), ja_vec.end());
372 const std::vector< Index>& s1,
373 const std::vector< Index>& ja,
374 const std::vector< Index>& s2
378 for(
Index hI=0; hI < s1.size(); hI++)
380 Index curLevel = s1.at(hI);
381 Index nextLevel = s2.at(hI);
382 Index nrAgentsAtLocation = 0;
383 for(
Index aI=0; aI < ja.size(); aI++)
385 nrAgentsAtLocation++;
387 cout <<
"hI="<<hI<<
" #agents="<<nrAgentsAtLocation <<
" ";
392 Index sameLevel = curLevel;
394 Index lowerLevel = (curLevel==0) ? 0 : (curLevel-1);
396 switch(nrAgentsAtLocation)
406 if(neighborIsBurning)
408 if(nextLevel == sameLevel)
410 if(nextLevel == higherLevel)
413 else if (curLevel == 0)
422 if(nextLevel == sameLevel)
424 if(nextLevel == higherLevel)
432 if(neighborIsBurning)
434 if(nextLevel == sameLevel)
436 if(nextLevel == lowerLevel)
439 else if (curLevel == 0)
448 if(nextLevel == sameLevel)
450 if(nextLevel == lowerLevel)
467 cout <<
"p=" << p <<
", p2=" << p2;
471 cout <<
", new p=" << p <<
" - ";
476 cout <<
"returning p=" << p << endl;
504 vector< Index > jo_vec =
513 const std::vector< Index>& ja,
514 const std::vector< Index>& s1,
515 const std::vector< Index>& jo
519 for(
Index agI=0; agI < ja.size(); agI++)
521 double p_o_thisAgent = 0.0;
537 double pFlames = 0.0;
549 double pNoFlames = 1.0-pFlames;
554 p_o_thisAgent = pFlames;
557 p_o_thisAgent = pNoFlames;
560 p_jo *= p_o_thisAgent;
585 r -= (
double) fl_vec.at(hI);