MultiAgentDecisionProcess  Release 0.2.1
directories.cpp
Go to the documentation of this file.
1 
28 #include "directories.h"
29 #include <wordexp.h>
30 #include <sys/types.h>
31 #include <sys/stat.h>
32 #include <unistd.h>
33 #include "PlanningUnit.h"
35 #include "argumentHandlers.h"
36 
37 using namespace std;
38 
40 {
41  wordexp_t p;
42  wordexp("~/.madp/results",&p,0);
43  string dir(p.we_wordv[0]);
44  wordfree(&p);
45  return(dir);
46 }
47 
48 string directories::MADPGetResultsDir(const string & method,
49  const string & problem)
50 {
51  string dir=MADPGetResultsDir() + "/" + method + "/" + problem;
52  return(dir);
53 }
54 
55 string directories::MADPGetResultsDir(const string & method,
56  const PlanningUnit &pu)
57 {
58  return(MADPGetResultsDir(method,pu.GetProblem()->GetUnixName()));
59 }
60 
61 string
62 directories::MADPGetResultsDir(const string & method,
64  &problem)
65 {
66  return(MADPGetResultsDir(method,problem.GetUnixName()));
67 }
68 
69 string directories::MADPGetResultsDir(const string & method,
70  const PlanningUnit *pu)
71 {
72  return(MADPGetResultsDir(method,pu->GetProblem()->GetUnixName()));
73 }
74 
75 string
76 directories::MADPGetResultsDir(const string & method,
78  *problem)
79 {
80  return(MADPGetResultsDir(method,problem->GetUnixName()));
81 }
82 
83 void directories::MADPCreateResultsDir(const string & method,
84  const string & problem)
85 {
86  string dir=MADPGetResultsDir() + "/" + method + "/" + problem;
87 
88  struct stat statInfo;
89  if(stat(dir.c_str(),&statInfo)==0 &&
90  S_ISDIR(statInfo.st_mode))
91  {
92 #if 0
93  cout << "Results dir " << dir << " already exists" << endl;
94 #endif
95  }
96  else
97  if(mkdir(dir.c_str(),0777)!=0)
98  perror("mkdir error");
99 }
100 
101 void directories::MADPCreateResultsDir(const string & method,
102  const PlanningUnit &pu)
103 {
104  return(MADPCreateResultsDir(method,pu.GetProblem()->GetUnixName()));
105 }
106 
107 void
108 directories::MADPCreateResultsDir(const string & method,
110  &problem)
111 {
112  return(MADPCreateResultsDir(method,problem.GetUnixName()));
113 }
114 
115 void directories::MADPCreateResultsDir(const string & method,
116  const PlanningUnit *pu)
117 {
118  return(MADPCreateResultsDir(method,pu->GetProblem()->GetUnixName()));
119 }
120 
121 void
122 directories::MADPCreateResultsDir(const string & method,
124  *problem)
125 {
126  return(MADPCreateResultsDir(method,problem->GetUnixName()));
127 }
128 
129 string
130 directories::MADPGetResultsBaseFilename(const string & method, const string & problem,
131  const ArgumentHandlers::Arguments &args)
132 {
133  string descr;
134  if(args.description == NULL)
135  descr = problem;
136  else
137  descr = string(args.description);
138 
139  string basename = method + "_" + descr + "_";
140  if(args.prefix != NULL )
141  basename = basename + args.prefix + "_";
142 
143  if(args.discount!=-1)
144  {
145  stringstream ss;
146  ss << basename << "g" << args.discount << "_";
147  basename=ss.str();
148  }
149  return(basename);
150 }
151 
152 string directories::MADPGetResultsFilename(const string & method,
153  const string & problem,
154  const
156 {
157  return(MADPGetResultsDir(method,problem) + "/" +
158  MADPGetResultsBaseFilename(method, problem, args));
159 }
160 
161 string directories::MADPGetResultsFilename(const string & method,
162  const PlanningUnit &pu,
163  const
165 {
166  return(MADPGetResultsDir(method,pu) + "/" +
168  args));
169 }
170 
171 string
173  const
175  const ArgumentHandlers::Arguments &args)
176 {
177  return(MADPGetResultsDir(method,problem) + "/" +
178  MADPGetResultsBaseFilename(method,problem.GetUnixName(),
179  args));
180 }
181 
183 {
184  wordexp_t p;
185  wordexp("~/.madp/problems",&p,0);
186  string dir(p.we_wordv[0]);
187  wordfree(&p);
188  return(dir);
189 }
190 
191 string directories::MADPGetProblemFilename(const string & problem, const string & extension)
192 {
193  // check whether the problem string ends in the extension
194  if(extension.size() < problem.size() && // otherwise the compare
195  // cannot be done
196  problem.compare(problem.size()-extension.size(),
197  extension.size(),
198  extension)==0)
199  return(problem);
200  else
201  return(MADPGetProblemsDir() + "/" + problem + "." + extension);
202 }
203 
204 string directories::MADPGetProblemFilename(const string & problem)
205 {
206  // default extension
207  return(MADPGetProblemFilename(problem,"dpomdp"));
208 }
209 
212 {
213  if(args.isTOI)
214  return(MADPGetProblemFilename(args.dpf,"toi-dpomdp"));
215  else
216  return(MADPGetProblemFilename(args.dpf,"dpomdp"));
217 }