X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=planner.cpp;h=46cf230d1421c25d4aa28574a79a53987fc8cbba;hb=52feef3369ad80d5b7207620f37ae341ccd11b95;hp=d49fb911beb267aa1b7005a8bdd9a729b84f2e22;hpb=c9c72023d15decebe700ad0bfe3e8cbac9a85248;p=popboot.git diff --git a/planner.cpp b/planner.cpp index d49fb91..46cf230 100644 --- a/planner.cpp +++ b/planner.cpp @@ -19,14 +19,15 @@ Planner::Planner(std::vector actions, Literals init, Literals goal){ _actions[*effect] = *action; } } - cout << "Number of actions: " << _actions.size() << endl; + cerr << "Number of actions: " << _actions.size() << endl; makePlan(_finish); } Planner::~Planner(){ - for (hash_map::iterator node = _addedNodes.begin(); node != _addedNodes.end(); ++node){ - cerr << "Deleting node " << node->second->action().name() << endl; - delete node->second; + cerr << "Deleting " << _addedNodes.size() << " nodes" << endl; + for (vector::iterator node = _addedNodes.begin(); node != _addedNodes.end(); ++node){ + cerr << "Deleting node " << (*node)->action().name() << endl; + delete *node; } } @@ -45,8 +46,8 @@ void Planner::makePlan(Node* node){ }else{ for (Preconditions::const_iterator precond = preconds.begin(); precond != preconds.end(); ++precond){ cerr << "Looking for: '" << precond->first << "'" << endl; - hash_map::iterator addedNode = _addedNodes.find(precond->first); - if(addedNode != _addedNodes.end()){ + hash_map::iterator addedNode = _addedEffects.find(precond->first); + if(addedNode != _addedEffects.end()){ cerr << "Using already added node" << endl; addedNode->second->addChild(node); }else { @@ -63,6 +64,7 @@ void Planner::makePlan(Node* node){ }else{ cerr << "Action with effect: " << precond->first << " not found!" << endl; cerr << "This is a soft precondition, so we will continue" << endl; + node->satisfyCondition(precond->first); } } } @@ -73,18 +75,24 @@ void Planner::addNode(Node* node){ cerr << "Adding node for action: " << node->action().name() << endl; const Literals& effects = node->action().effects(0); cerr << "Number of effects: " << effects.size() << endl; + _addedNodes.push_back(node); for (Literals::const_iterator effect = effects.begin(); effect != effects.end(); ++effect){ - cout << "Adding node for effect: " << *effect << endl; - _addedNodes[*effect] = node; + cerr << "Adding node for effect: " << *effect << endl; + _addedEffects[*effect] = node; } } void Planner::execute(){ _start->execute(Literals()); - /*for (hash_map::iterator node = _addedNodes.begin(); node != _addedNodes.end(); ++node){ - if (node->second->executed()){ - }*/ - _start->execute(Literals()); + cerr << "Number of nodes: " << _addedNodes.size() << endl; + for (vector::iterator node = _addedNodes.begin(); node != _addedNodes.end(); ++node){ + if ((*node)->executed()){ + //remove stuff + } + delete *node; + } + _addedNodes.clear(); + cerr << "Number of nodes left: " << _addedNodes.size() << endl; }