ScenarioConverter::ScenarioConverter( ScenarioLoader *scen ) { this->scen = scen; ifstream in; char scrap[256], type[256]; int rows, columns, i, j; Experiment exp = scen->GetNthExperiment( 0 ); /*cout << "map " << exp.GetMapName() << "\n";*/ in.open( exp.GetMapName(), ifstream::in ); in >> scrap; in >> type; in >> scrap; in >> rows; in >> scrap; in >> columns; in >> scrap; /*cout << "type " << type << "\n"; cout << "rows " << rows << "\n"; cout << "columns " << columns << "\n";*/ this->rows = rows; this->columns = columns; this->map = (char**)malloc( sizeof(char*) * rows ); for( i = 0; i < rows; i++ ) this->map[i] = (char*)malloc( sizeof(char) * columns ); in.get(); /*newline*/ for( i = 0; i < rows; i++ ) { for( j = 0; j < columns; j++ ) this->map[i][j] = in.get(); in.get(); /*newline*/ } }
int main(int argc, char* argv[]) { char scenfile[1024]; char line[1024]; processArgs(argc,argv); // Note: bid*4 is the actual bucket value // init stat collection here ! hash_map<int, vector<vector<IncStat> > > stat; // [bid][alg][scenid] hash_map<int, int> maxDiffX; // [bid] hash_map<int, int> maxDiffY; // [bid] FILE* catelog = fopen(filelist,"r"); if(catelog == 0) exit(-1); while(1) { if(fgets(line,1024,catelog)==0) break; remove_newline(line); if(strlen(line)==0) continue; sprintf(scenfile,"scenarios/%s",line); ScenarioLoader* sl; sl = new ScenarioLoader(scenfile); if(sl->GetNumExperiments()==0) { std::cout<<"No experiments in this scenario file or invalid file:"<<scenfile<<endl; //exit(1); delete sl; continue; } //fprintf(stderr,"line=%s\n",line); vector<IncStat> tmp; for(int iexp=0;iexp<sl->GetNumExperiments();iexp++) { Experiment exp = sl->GetNthExperiment(iexp); if(stat[exp.GetBucket()].size() > 0) continue; for(int i=0;i<=MAX_ALG_ID;i++) {// we have 9 algs stat[exp.GetBucket()].push_back(tmp); } } delete sl; } Graph* g=0; Map* mp=0; GraphMapInconsistentHeuristic* heuristic = 0; GraphEnvironment* env=0; string currentMap; int currentScaleX=-1; int currentScaleY=-1; fclose(catelog); catelog = fopen(filelist,"r"); while(1) { if(fgets(line,1024,catelog)==0) break; remove_newline(line); if(strlen(line)==0) continue; sprintf(scenfile,"scenarios/%s",line); ScenarioLoader* sl; vector<graphState> thePath; sl = new ScenarioLoader(scenfile); if(sl->GetNumExperiments()==0) { std::cout<<"No experiments in this scenario file or invalid file.\n"; //exit(1); delete sl; continue; } // init buckets //hash_map<int, vector<vector<InconsistStat> > > statBuckets; // [bucket][alg][item] //for(int iexp=0;iexp<sl->GetNumExperiments();iexp++) { // Experiment exp = sl->GetNthExperiment(iexp); // if(statBuckets[exp.GetBucket()].size() > 0) // continue; // for(int i=0;i<10;i++) {// we have 9 algs // vector<InconsistStat> tmp; // statBuckets[exp.GetBucket()].push_back(tmp); // } //} char datapath[100]; sprintf(datapath,"outputs/DB%d.dat.AOct",GraphMapInconsistentHeuristic::HN); FILE *AOctdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.AMax",GraphMapInconsistentHeuristic::HN); FILE *AMaxdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.A",GraphMapInconsistentHeuristic::HN); FILE *Adata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.B",GraphMapInconsistentHeuristic::HN); FILE *Bdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.BP",GraphMapInconsistentHeuristic::HN); FILE *BPdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.bpmx",GraphMapInconsistentHeuristic::HN); FILE *BPMXdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.bpmx2",GraphMapInconsistentHeuristic::HN); FILE *BPMX2data = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.bpmx3",GraphMapInconsistentHeuristic::HN); FILE *BPMX3data = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.bpmxinf",GraphMapInconsistentHeuristic::HN); FILE *BPMXidata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.asd.2",GraphMapInconsistentHeuristic::HN); FILE *ASD2data = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.asd.2.bpmx",GraphMapInconsistentHeuristic::HN); FILE *ASD2bpmxdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.asd.2.bpmxinf",GraphMapInconsistentHeuristic::HN); FILE *ASD2bpmxinfdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.DP",GraphMapInconsistentHeuristic::HN); FILE *DPdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.DP.bpmx",GraphMapInconsistentHeuristic::HN); FILE *DPbpmxdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.DPDL2MX",GraphMapInconsistentHeuristic::HN); FILE *DPDL2MXdata = fopen(datapath,"a"); sprintf(datapath,"outputs/DB%d.dat.NULL",GraphMapInconsistentHeuristic::HN); FILE *NULLdata = fopen(datapath,"a"); for(int iexp=0;iexp<sl->GetNumExperiments();iexp++) { Experiment exp = sl->GetNthExperiment(iexp); char mname[1024]; //xyLoc locstart, locgoal; struct timeval t0,t1; exp.GetMapName(mname); if((string)(mname)==currentMap && exp.GetXScale()==currentScaleX && exp.GetYScale()==currentScaleY){ // rebuild the map,g,env only when necessary } else { if(mp != 0) { delete mp; //delete g; //delete heuristic; delete env; } mp = new Map(mname); if(exp.GetXScale() <= 0) { printf("Invalid scaling\n"); //exit(-1); delete mp; continue; } currentMap = (string)(mname); currentScaleX = exp.GetXScale(); currentScaleY = exp.GetYScale(); mp->scale(exp.GetXScale(), exp.GetYScale()); g = GraphSearchConstants::GetGraph(mp); heuristic = new GraphMapInconsistentHeuristic(mp, g); env = new GraphEnvironment(g,heuristic); // } //mp = new Map(mname); //// need to scale the map ! //if(exp.GetXScale() <= 0) { // printf("Invalid scaling\n"); // exit(-1); //} //mp->scale(exp.GetXScale(), exp.GetYScale()); //g = GetMapGraph(mp); // identify from & to graphState from, to; from = mp->getNodeNum(exp.GetStartX(),exp.GetStartY()); to = mp->getNodeNum(exp.GetGoalX(),exp.GetGoalY()); int bid = exp.GetBucket(); //maxDiffX[bid] = (int)max(maxDiffX[bid],abs(exp.GetStartX()-exp.GetGoalX())); //maxDiffY[bid] = (int)max(maxDiffY[bid],abs(exp.GetStartY()-exp.GetGoalY())); //printf("scene=%s,iexp=%d\n",scenfile,iexp); Prop A(PROP_A); Prop B(PROP_B); Prop BP(PROP_BP); Prop BPMX1(PROP_BPMX); Prop BPMX2(PROP_BPMX); BPMX2.bpmxLevel = 2; Prop BPMX3(PROP_BPMX); BPMX3.bpmxLevel = 3; Prop BPMXi(PROP_BPMX); BPMXi.bpmxLevel = 65536; AStarDelay asd(0); AStarDelay asdmx(1); AStarDelay asdmxinf(65536); Prop DP(PROP_DP); DP.bpmxLevel = 0; Prop DPMX(PROP_DP); DPMX.bpmxLevel = 1; Prop DPDL2MX(PROP_DPDLMX); //alg0.bpmxLevel = 1; //AStarDelay alg0(1); //Prop alg1(PROP_A); //Prop alg2(PROP_A); //Prop alg2(2); //Prop alg3(3,delta); //Prop alg4(4); //Prop alg5(5); //AStarDelay alg6; //Prop alg7(7); //Prop alg8(8); //Prop alg9(9); // the following are special ! A* with a different heuristic //Prop alg10(0); // upper bound //Prop alg11(0); // lower bound ?? GraphMapInconsistentHeuristic::hmode = 0; gettimeofday(&t0,0); A.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); //fprintf(NULLdata,"%ld %lf %d\n",A.GetNodesExpanded(), A.solutionCost, bid); fprintf(AOctdata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",A.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)A.nNewExp,(unsigned long)A.nReExp,(unsigned long)A.nBPMX,A.tickNewExp,A.tickReExp,A.tickBPMX); GraphMapInconsistentHeuristic::hmode = 2; gettimeofday(&t0,0); A.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(AMaxdata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",A.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)A.nNewExp,(unsigned long)A.nReExp,(unsigned long)A.nBPMX,A.tickNewExp,A.tickReExp,A.tickBPMX); GraphMapInconsistentHeuristic::hmode = 1; // careful !!!! gettimeofday(&t0,0); A.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(Adata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n", A.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)A.nNewExp,(unsigned long)A.nReExp,(unsigned long)A.nBPMX,A.tickNewExp,A.tickReExp,A.tickBPMX); gettimeofday(&t0,0); B.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(Bdata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",B.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)B.nNewExp,(unsigned long)B.nReExp,(unsigned long)B.nBPMX,B.tickNewExp,B.tickReExp,B.tickBPMX); gettimeofday(&t0,0); BP.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(BPdata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",BP.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)BP.nNewExp,(unsigned long)BP.nReExp,(unsigned long)BP.nBPMX,BP.tickNewExp,BP.tickReExp,BP.tickBPMX); gettimeofday(&t0,0); BPMX1.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(BPMXdata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",BPMX1.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)BPMX1.nNewExp,(unsigned long)BPMX1.nReExp,(unsigned long)BPMX1.nBPMX,BPMX1.tickNewExp,BPMX1.tickReExp,BPMX1.tickBPMX); gettimeofday(&t0,0); BPMX2.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(BPMX2data,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",BPMX2.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)BPMX2.nNewExp,(unsigned long)BPMX2.nReExp,(unsigned long)BPMX2.nBPMX,BPMX2.tickNewExp,BPMX2.tickReExp,BPMX2.tickBPMX); gettimeofday(&t0,0); BPMX3.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(BPMX3data,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",BPMX3.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)BPMX3.nNewExp,(unsigned long)BPMX3.nReExp,(unsigned long)BPMX3.nBPMX,BPMX3.tickNewExp,BPMX3.tickReExp,BPMX3.tickBPMX); gettimeofday(&t0,0); BPMXi.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(BPMXidata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",BPMXi.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)BPMXi.nNewExp,(unsigned long)BPMXi.nReExp,(unsigned long)BPMXi.nBPMX,BPMXi.tickNewExp,BPMXi.tickReExp,BPMXi.tickBPMX); gettimeofday(&t0,0); asd.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(ASD2data,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",asd.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)asd.nNewExp,(unsigned long)asd.nReExp,(unsigned long)asd.nBPMX,asd.tickNewExp,asd.tickReExp,asd.tickBPMX); gettimeofday(&t0,0); asdmx.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(ASD2bpmxdata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",asdmx.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)asdmx.nNewExp,(unsigned long)asdmx.nReExp,(unsigned long)asdmx.nBPMX,asdmx.tickNewExp,asdmx.tickReExp,asdmx.tickBPMX); gettimeofday(&t0,0); asdmxinf.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(ASD2bpmxinfdata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",asdmxinf.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)asdmxinf.nNewExp,(unsigned long)asdmxinf.nReExp,(unsigned long)asdmxinf.nBPMX,asdmxinf.tickNewExp,asdmxinf.tickReExp,asdmxinf.tickBPMX); gettimeofday(&t0,0); DP.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(DPdata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",DP.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)DP.nNewExp,(unsigned long)DP.nReExp,(unsigned long)DP.nBPMX,DP.tickNewExp,DP.tickReExp,DP.tickBPMX); gettimeofday(&t0,0); DPMX.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); fprintf(DPbpmxdata,"%ld %lf %d %lu %lu %lu %lu %lu %lu\n",DPMX.GetNodesExpanded(), calcTime(t0,t1), bid, (unsigned long)DPMX.nNewExp,(unsigned long)DPMX.nReExp,(unsigned long)DPMX.nBPMX,DPMX.tickNewExp,DPMX.tickReExp,DPMX.tickBPMX); gettimeofday(&t0,0); //DPDL2MX.GetPath(env,g,from,to,thePath); gettimeofday(&t1,0); //fprintf(DPDL2MXdata,"%ld %lf %d\n",DPDL2MX.GetNodesExpanded(), calcTime(t0,t1), bid); //==================================================== //gettimeofday(&t0,0); //alg1.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //hmode = 2; //gettimeofday(&t0,0); //alg1.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //stat[bid][1].push_back(IncStat(alg1.GetNodesExpanded(),calcTime(t0,t1))); //if(! (alg0.solutionCost == alg1.solutionCost )) //{ //printf("scenfile= %s , exp = %d, %lf, %lf \n", line, iexp, alg0.solutionCost, alg1.solutionCost); //exit(-1); //} //if(strcmp(line,"AR0205SR.map.txt") == 0 && iexp == 498) { // printf("The cost is %lf \n", alg0.solutionCost); // exit(-1); //} //gettimeofday(&t0,0); //alg2.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //stat[bid][2].push_back(IncStat(alg2.GetNodesExpanded(),calcTime(t0,t1))); //gettimeofday(&t0,0); //alg3.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //stat[bid][3].push_back(IncStat(alg3.GetNodesExpanded(),calcTime(t0,t1))); ////alg4.GetPath(env,g,from,to,thePath); ////alg5.GetPath(env,g,from,to,thePath); //gettimeofday(&t0,0); //alg6.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //stat[bid][6].push_back(IncStat(alg6.GetNodesExpanded(),calcTime(t0,t1))); //gettimeofday(&t0,0); //alg7.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //stat[bid][7].push_back(IncStat(alg7.GetNodesExpanded(),calcTime(t0,t1))); //gettimeofday(&t0,0); //alg8.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //stat[bid][8].push_back(IncStat(alg8.GetNodesExpanded(),calcTime(t0,t1))); //gettimeofday(&t0,0); //alg9.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //stat[bid][9].push_back(IncStat(alg9.GetNodesExpanded(),calcTime(t0,t1))); //hmode = 0; //gettimeofday(&t0,0); //alg10.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //stat[bid][10].push_back(IncStat(alg10.GetNodesExpanded(),calcTime(t0,t1))); //hmode = 2; //gettimeofday(&t0,0); //alg11.GetPath(env,g,from,to,thePath); //gettimeofday(&t1,0); //stat[bid][11].push_back(IncStat(alg11.GetNodesExpanded(),calcTime(t0,t1))); //delete env; //delete g; //delete mp; } fclose(AOctdata); fclose(AMaxdata); fclose(Adata); fclose(Bdata); fclose(BPdata); fclose(BPMXdata); fclose(BPMX2data); fclose(BPMX3data); fclose(BPMXidata); fclose(ASD2data); fclose(ASD2bpmxdata); fclose(ASD2bpmxinfdata); fclose(DPdata); fclose(DPbpmxdata); fclose(DPDL2MXdata); fclose(NULLdata); // Note: bid*4 is the actual bucket value // summary of the stat // write to file, //FILE *outlog,*outtable,*outstat; //char log[1024],table[1024],st[1024]; //sprintf(log,"outputs/run.hn%d.log",HN); //sprintf(table,"outputs/run.hn%d.table",HN); //sprintf(st,"outputs/run.hn%d.stat",HN); //outlog = fopen(log,"a"); // append //outtable = fopen(table,"w"); //outstat = fopen(st,"w"); //for(hash_map<int, vector<vector<IncStat> > >::iterator biter=stat.begin();biter!=stat.end();biter++) //{ // int vid=0; // for(vector<vector<IncStat> >::iterator viter=biter->second.begin();viter != biter->second.end(); viter++,vid++) // { // if(vid == 4 || vid == 5) // continue; // // compute the ave // double expanded=0,time=0; // total // for(vector<IncStat>::iterator iter=viter->begin();iter!=viter->end();iter++) // { // expanded += iter->expanded; // time += iter->time; // } // expanded /= viter->size(); // time /= viter->size(); // fprintf(outstat,"%d %d %lf %lf\n",4*biter->first,vid,expanded,time); // bucket = 4*bid // // compute std, max/min // double maxExp=0,maxTime=0; // double minExp=DBL_MAX,minTime=DBL_MAX; // double stdExp =0; // double stdTime = 0; // for(vector<IncStat>::iterator iter=viter->begin();iter!=viter->end();iter++) // { // maxExp = max(maxExp,iter->expanded); // maxTime = max(maxTime,iter->time); // minExp = min(minExp,iter->expanded); // minTime = min(minTime,iter->time); // stdExp += pow(expanded-iter->expanded,2); // stdTime += pow(time-iter->time,2); // } // stdExp = sqrt(stdExp/viter->size()); // stdTime = sqrt(stdTime/viter->size()); // fprintf(outtable,"%d %d %lf %lf %d %lf %d %lf %d %d\n",4*biter->first,vid,stdExp,stdTime,(int)maxExp,maxTime,(int)minExp,minTime,maxDiffX[biter->first],maxDiffY[biter->first]); // } //} //fprintf(outlog,"%s\n",scenfile); // what file has been processed delete sl; //fclose(outlog); //fclose(outtable); //fclose(outstat); } fclose(catelog); if(mp != 0) { delete mp; //delete g; //delete heuristic; delete env; } return 0; }