void ManSearchPath::Print() { printf("%s:\n", GetEnvVar()); CString sp(GetSearchPath()); if (!sp.isNull()) { CTokenizedString path (sp,Separator().data()); CString subpath = path.next(); while (!subpath.isNull()) { printf("\t%s\n",subpath.data()); subpath = path.next(); } printf("\n"); } }
bool ADPlanner::Search(ADSearchStateSpace_t* pSearchStateSpace, vector<int>& pathIds, int & PathCost, bool bFirstSolution, bool bOptimalSolution, double MaxNumofSecs) { CKey key; TimeStarted = clock(); searchexpands = 0; #if DEBUG fprintf(fDeb, "new search call (call number=%d)\n", pSearchStateSpace->callnumber); #endif if(pSearchStateSpace->bReinitializeSearchStateSpace == true){ //re-initialize state space ReInitializeSearchStateSpace(pSearchStateSpace); } if(bOptimalSolution) { pSearchStateSpace->eps = 1; MaxNumofSecs = INFINITECOST; } else if(bFirstSolution) { MaxNumofSecs = INFINITECOST; } //the main loop of AD* int prevexpands = 0; while(pSearchStateSpace->eps_satisfied > AD_FINAL_EPS && (clock()- TimeStarted) < MaxNumofSecs*(double)CLOCKS_PER_SEC) { //it will be a new search iteration pSearchStateSpace->iteration++; //decrease eps for all subsequent iterations if(fabs(pSearchStateSpace->eps_satisfied - pSearchStateSpace->eps) < ERR_EPS) { pSearchStateSpace->eps = pSearchStateSpace->eps - AD_DECREASE_EPS; if(pSearchStateSpace->eps < AD_FINAL_EPS) pSearchStateSpace->eps = AD_FINAL_EPS; pSearchStateSpace->bReevaluatefvals = true; } //build a new open list by merging it with incons one BuildNewOPENList(pSearchStateSpace); //re-compute f-values if necessary and reorder the heap if(pSearchStateSpace->bReevaluatefvals) Reevaluatefvals(pSearchStateSpace); //improve or compute path if(ComputePath(pSearchStateSpace, MaxNumofSecs) == 1){ pSearchStateSpace->eps_satisfied = pSearchStateSpace->eps; } //print the solution cost and eps bound printf("eps=%f expands=%d g(sstart)=%d\n", pSearchStateSpace->eps_satisfied, searchexpands - prevexpands, ((ADState*)pSearchStateSpace->searchgoalstate->PlannerSpecificData)->g); #if DEBUG fprintf(fDeb, "eps=%f eps_sat=%f expands=%d g(sstart)=%d\n", pSearchStateSpace->eps, pSearchStateSpace->eps_satisfied, searchexpands - prevexpands, ((ADState*)pSearchStateSpace->searchgoalstate->PlannerSpecificData)->g); #endif prevexpands = searchexpands; //if just the first solution then we are done if(bFirstSolution) break; //no solution exists if(((ADState*)pSearchStateSpace->searchgoalstate->PlannerSpecificData)->g == INFINITECOST) break; } #if DEBUG fflush(fDeb); #endif PathCost = ((ADState*)pSearchStateSpace->searchgoalstate->PlannerSpecificData)->g; MaxMemoryCounter += environment_->StateID2IndexMapping.size()*sizeof(int); printf("MaxMemoryCounter = %d\n", MaxMemoryCounter); int solcost = INFINITECOST; bool ret = false; if(PathCost == INFINITECOST) { printf("could not find a solution\n"); ret = false; } else { printf("solution is found\n"); pathIds = GetSearchPath(pSearchStateSpace, solcost); ret = true; } printf("total expands this call = %d, planning time = %.3f secs, solution cost=%d\n", searchexpands, (clock()-TimeStarted)/((double)CLOCKS_PER_SEC), solcost); //fprintf(fStat, "%d %d\n", searchexpands, solcost); return true; }