summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordmack <dmack@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-01-09 21:45:56 +0000
committerdmack <dmack@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-01-09 21:45:56 +0000
commitb02a9ccbcc574190341d245d69464c46f36f57da (patch)
treef236e70be0ab471087a9b9010127df83340d812d
parent242474893f2a2e17eaa986de29e35b1a6507aac0 (diff)
downloadATCD-b02a9ccbcc574190341d245d69464c46f36f57da.tar.gz
Fri Jan 9 21:39:55 UTC 2009 Daniel L.C. Mack <daniel.l.mack@vanderbilt.edu>
-rw-r--r--SA_POP/C2W/C2W_Demo.cpp50
-rw-r--r--SA_POP/C2W/LogGraphOut.cpp44
-rw-r--r--SA_POP/ChangeLog29
-rw-r--r--SA_POP/Planner.cpp14
-rw-r--r--SA_POP/Planner.h22
-rw-r--r--SA_POP/SANet/SANet.cpp54
-rw-r--r--SA_POP/SANet/SANet.h22
-rw-r--r--SA_POP/SANet/SANode.cpp73
-rw-r--r--SA_POP/SANet/SANode.h33
-rw-r--r--SA_POP/SA_WorkingPlan.cpp2
10 files changed, 311 insertions, 32 deletions
diff --git a/SA_POP/C2W/C2W_Demo.cpp b/SA_POP/C2W/C2W_Demo.cpp
index 155bc74ff21..8c8946e04bc 100644
--- a/SA_POP/C2W/C2W_Demo.cpp
+++ b/SA_POP/C2W/C2W_Demo.cpp
@@ -25,6 +25,7 @@
#include "LogGraphOut.h"
#include <vector>
+#include <map>
//Commands to run in the thread
unsigned long WINAPI ThirdThread(PVOID pvParam)
@@ -35,7 +36,7 @@ unsigned long WINAPI ThirdThread(PVOID pvParam)
}
//for displaying conditions
-void displayConds(SA_POP::Planner *plans, std::vector<SANet::CondID> checks)
+void displayConds(SA_POP::Planner *plans, std::vector<SANet::CondID> checks, std::map<SANet::CondID, double> *cMap)
{
std::ofstream cfile;
@@ -49,10 +50,20 @@ void displayConds(SA_POP::Planner *plans, std::vector<SANet::CondID> checks)
if(plans->get_cond_val(checks[node]) == 1)
{
+ std::map<SANet::CondID, double>::iterator cmp = cMap->find(checks[node]);
+ if(cmp != cMap->end())
+ {
+ (*cmp).second = 1;
+ }
cfile << "\t" << "\"" << plans->get_cond_name(checks[node]) << " " << checks[node] << "\" [shape = box, color = green];\n";
}
else
- {
+ {
+ std::map<SANet::CondID, double>::iterator cmp = cMap->find(checks[node]);
+ if(cmp != cMap->end())
+ {
+ (*cmp).second = 0;
+ }
cfile << "\t" << "\"" << plans->get_cond_name(checks[node]) << " " << checks[node] << "\" [shape = box, color = red];\n";
}
std::cout << "Ready for Next Cond" << std::endl;
@@ -80,6 +91,7 @@ int main (int argc, char* argv[])
std::string tm_filename = "";
std::vector<SA_POP::CondID> * kconds = new std::vector<SA_POP::CondID>;
std::vector<SANet::CondID> toCheck;
+ std::map<SANet::CondID, double> condMap;
// Get filenames from user.
std::cout << "Task Network file: ";
@@ -165,6 +177,7 @@ int main (int argc, char* argv[])
std::cout << "Enter the Condition ID to track:";
std::cin >> cid;
SA_POP::CondID ccid = SA_POP::CondID(cid);
+ condMap.insert(std::make_pair(ccid, 1));
toCheck.push_back(ccid);
}
@@ -193,7 +206,7 @@ int main (int argc, char* argv[])
std::string step;
std::cout << "Would you like to advance to the next time step? (Y or N): ";
- displayConds(planner, toCheck);
+ displayConds(planner, toCheck, &condMap);
std::cin >> step;
if(step == "Y" || step == "y")
{
@@ -213,8 +226,17 @@ int main (int argc, char* argv[])
std::cin >> curTask;
std::cout << "Enter the Condition ID: ";
std::cin >> curEff;
- //planner->(curTask, curEff, -1);
- planner->replan(100);
+ SA_POP::SA_Builder rebuilder;
+ sanet_in.build_net (sanet_filename, &rebuilder);
+ tm_in.build_task_map (tm_filename, &rebuilder);
+ planner = rebuilder.get_planner ();
+ planner->add_out_adapter (&graph_out);
+ for(std::map<SANet::CondID, double>::iterator cIter = condMap.begin(); cIter != condMap.end(); cIter++)
+ {
+ planner->update_cond_val((*cIter).first, (*cIter).second);
+ }
+ planner->update_effect(curTask, curEff, -1);
+ planner->plan(100, goal);
}
else if(eff == "C" || eff == "c")
@@ -225,8 +247,22 @@ int main (int argc, char* argv[])
std::cin >> envi;
std::cout << "Enter the Probability: ";
std::cin >> newprob;
- planner->update_cond_val(envi, newprob);
- planner->replan (100, goal);
+ std::map<SANet::CondID, double>::iterator cmp = condMap.find(envi);
+ if(cmp != condMap.end())
+ {
+ (*cmp).second = newprob;
+ }
+ SA_POP::SA_Builder rebuilder;
+ sanet_in.build_net (sanet_filename, &rebuilder);
+ tm_in.build_task_map (tm_filename, &rebuilder);
+ planner = rebuilder.get_planner ();
+ planner->add_out_adapter (&graph_out);
+ for(std::map<SANet::CondID, double>::iterator cIter = condMap.begin(); cIter != condMap.end(); cIter++)
+ {
+ planner->update_cond_val((*cIter).first, (*cIter).second);
+ }
+ planner->plan (100, goal);
+
}
else
{
diff --git a/SA_POP/C2W/LogGraphOut.cpp b/SA_POP/C2W/LogGraphOut.cpp
index 7c6eaafe4b4..3cbbb0c0005 100644
--- a/SA_POP/C2W/LogGraphOut.cpp
+++ b/SA_POP/C2W/LogGraphOut.cpp
@@ -65,7 +65,7 @@ void LogGraphOut::notify_eu (SA_POP::Planner *planner)
unsigned long WINAPI SecondThread(PVOID pvParam)
{
system("dot -Tgif GViz.dot -o step.gif");
- //system("step.gif");
+ system("step.gif");
return 0;
}
@@ -130,8 +130,10 @@ void LogGraphOut::notify_plan (SA_POP::Planner *planner)
ofstream gfile;
gfile.open("GViz.dot");
+
gfile << "strict digraph graph" << graphn << " {\n";
+ planner->print_graph(gfile);
if(graphn == 0)
{
for (CLSet::iterator cl_iter = plan.causal_links.begin ();
@@ -160,15 +162,39 @@ void LogGraphOut::notify_plan (SA_POP::Planner *planner)
if(planner->get_start_window (clink.first).first <= lastime)
{
- gfile << "\t" << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.first)) << " " << planner->get_task_from_inst (clink.first) << "\" " << "[shape=box];\n";
- gfile << "\t" << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.first)) << " " << planner->get_task_from_inst (clink.first) << "\" " << " -> ";
- gfile << "\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << ";\n";
- if(planner->get_start_window (clink.second).first <= lastime)
+ if(planner->get_start_window (clink.first).first == lastime)
+ {
+ gfile << "\t" << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.first)) << " " << planner->get_task_from_inst (clink.first) << "\" " << "[shape=box, color= green];\n";
+ gfile << "\t\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << "[color = green];\n";
+ gfile << "\t" << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.first)) << " " << planner->get_task_from_inst (clink.first) << "\" " << " -> ";
+ gfile << "\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << ";\n";
+ }
+ else
+ {
+ gfile << "\t" << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.first)) << " " << planner->get_task_from_inst (clink.first) << "\" " << "[shape=box, color= blue];\n";
+ gfile << "\t\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << "[color = blue];\n";
+ gfile << "\t" << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.first)) << " " << planner->get_task_from_inst (clink.first) << "\" " << " -> ";
+ gfile << "\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << ";\n";
+ }
+
+ if(planner->get_start_window (clink.second).first <= lastime)
{
- gfile << "\t" << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.second)) << " " << planner->get_task_from_inst (clink.second) << "\" " << "[shape=box];\n";
- gfile << "\t" << "\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << " -> ";
- gfile << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.second)) << " " << planner->get_task_from_inst (clink.second) << "\" " << "\n";
- }
+ if(planner->get_start_window (clink.second).first == lastime)
+ {
+ gfile << "\t" << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.second)) << " " << planner->get_task_from_inst (clink.second) << "\" " << "[shape=box, color = green];\n";
+ //gfile << "\t\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << "[color = green];\n";
+ gfile << "\t" << "\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << " -> ";
+ gfile << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.second)) << " " << planner->get_task_from_inst (clink.second) << "\" " << ";\n";
+ }
+ else
+ {
+ gfile << "\t" << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.second)) << " " << planner->get_task_from_inst (clink.second) << "\" " << "[shape=box, color = blue];\n";
+ gfile << "\t\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << "[color = blue];\n";
+ gfile << "\t" << "\"" << planner->get_cond_name (clink.cond.id) << " " << clink.cond.id << "\" " << " -> ";
+ gfile << "\"" << planner->get_task_name (planner->get_task_from_inst (clink.second)) << " " << planner->get_task_from_inst (clink.second) << "\" " << ";\n";
+
+ }
+ }
}
}
diff --git a/SA_POP/ChangeLog b/SA_POP/ChangeLog
index b5c8484b449..228e1a0741d 100644
--- a/SA_POP/ChangeLog
+++ b/SA_POP/ChangeLog
@@ -1,13 +1,36 @@
+Fri Jan 9 21:39:55 UTC 2009 Daniel L.C. Mack <daniel.l.mack@vanderbilt.edu>
+
+ * C2W/C2W_Demo.cpp:
+ Utilize update_effect function
+
+ * C2W/LogGraphOut.cpp:
+ Utilizes Complete Graphviz Visualization
+
+ * Planner.h:
+ * Planner.cpp:
+ Uses SANET::update_effect
+
+ * SANet/SANet.h:
+ * SANet/SANet.cpp:
+ Implements SANET::update_effect, which updates an effect link in a SANet, calls TaskNode::update_effect_link
+
+ * SANet/SANode.h:
+ * SANet/SANode.cpp:
+ Implements TaskNode::update_effect_link and CondNode::update_pre_link
+
+ * SA_WorkingPlan.cpp:
+ Clears causal links in reset_plan.
+
Wed Dec 17 23:21:30 UTC 2008 Daniel L.C. Mack <daniel.l.mack@vanderbilt.edu>
* C2W/C2W_Demo.cpp:
- Minor update to setting effect
+ Minor update to setting effect
* Planner.cpp:
- Fixed typo
+ Fixed typo
* SANet/SANode.cpp:
- Check for changed condition value in CondNode::update()
+ Check for changed condition value in CondNode::update()
Wed Dec 17 22:55:40 UTC 2008 Daniel L.C. Mack <daniel.l.mack@vanderbilt.edu>
diff --git a/SA_POP/Planner.cpp b/SA_POP/Planner.cpp
index 46af16a0cea..56552fbe0e6 100644
--- a/SA_POP/Planner.cpp
+++ b/SA_POP/Planner.cpp
@@ -528,14 +528,18 @@ TaskImplID Planner::get_impl_id (TaskInstID task_inst)
return this->working_plan_->get_impl_id(task_inst);
}
- //****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****
- // update effect throws excepetion
- //TODO: Add Update fucntions in SANet and SANode for updating the effect link.
- //****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****TEMP****
+
+void Planner::print_graph (std::basic_ostream<char, std::char_traits<char> >& strm)
+{
+ this->sanet_->print_graphviz(strm);
+
+}
+
+//Allows the planner to update an effect link
void Planner::update_effect (SANet::TaskID tsk, SANet::CondID cnd, SANet::LinkWeight weight)
{
- this->sanet_->add_effect_link(tsk, cnd, weight);
+ this->sanet_->update_effect_link(tsk, cnd, weight);
}
diff --git a/SA_POP/Planner.h b/SA_POP/Planner.h
index d38795e73f3..ef85438a7d3 100644
--- a/SA_POP/Planner.h
+++ b/SA_POP/Planner.h
@@ -489,16 +489,24 @@ namespace SA_POP {
virtual TaskImplID get_impl_id (TaskInstID task_inst);
- /// (re) Set Effect Link
- /**
- * @param task_inst The task id
+ /// (re) Set Effect Link
+ /**
+ * @param task_inst The task id
* @param task_inst The Cond ID
* @param task_inst The LinkWeight
- * @param task_inst The PortID(default is blank)
- *
- * @return nothing
- */
+ *
+ *
+ * @return nothing
+ */
virtual void update_effect (SANet::TaskID tsk, SANet::CondID cnd, SANet::LinkWeight weight);
+
+ /// print the graphviz network of the SANet
+ /**
+ * @param strm Output stream on which to print network representation.
+ *
+ * @return nothing
+ */
+ virtual void print_graph (std::basic_ostream<char, std::char_traits<char> >& strm);
protected:
diff --git a/SA_POP/SANet/SANet.cpp b/SA_POP/SANet/SANet.cpp
index e9bcb511394..a12798318f4 100644
--- a/SA_POP/SANet/SANet.cpp
+++ b/SA_POP/SANet/SANet.cpp
@@ -150,6 +150,60 @@ void SANet::Network::add_effect_link (TaskID task_ID, CondID cond_ID,
cond_ID), port_ID));
};
+void SANet::Network::update_effect_link(TaskID task_ID, CondID cond_ID,
+ LinkWeight weight, PortID port_ID)
+{
+ // Find task node pointer, throwing exception if not found.
+ TaskNodeMap::iterator task_iter = task_nodes_.find (task_ID);
+ if (task_iter == task_nodes_.end ()) {
+ throw UnknownNode ();
+ }
+ TaskNode *task_node = task_iter->second;
+
+ // Find condition node pointer, throwing exception if not found.
+ CondNodeMap::iterator cond_iter = cond_nodes_.find (cond_ID);
+ if (cond_iter == cond_nodes_.end ()) {
+ throw UnknownNode ();
+ }
+ CondNode *cond_node = cond_iter->second;
+
+ // update link.**************
+ task_node->update_effect (cond_ID, cond_node, weight);
+
+ // Update link to port map.
+
+ EffectLinkPortMap::iterator eliter = this->effect_links_.find((std::make_pair (task_ID,
+ cond_ID)));
+ if(eliter != effect_links_.end())
+ {
+ (*eliter).second = port_ID;
+ }
+
+};
+
+void SANet::Network::print_graphviz(std::basic_ostream<char, std::char_traits<char> >& strm)
+{
+ for (TaskNodeMap::iterator node_iter = task_nodes_.begin ();
+ node_iter != task_nodes_.end (); node_iter++)
+ {
+ strm << "\t" << "\"" << node_iter->second->get_name() << " " << node_iter->first << "\" " << "[shape=box, color = grey];\n";
+ }
+
+ for (CondNodeMap::iterator node_iter = cond_nodes_.begin ();
+ node_iter != cond_nodes_.end (); node_iter++)
+ {
+ strm << "\t" << "\"" << node_iter->second->get_name() << " " << node_iter->first << "\" " << "[color = grey];\n";
+ }
+
+ for (TaskNodeMap::iterator node_iter = task_nodes_.begin ();
+ node_iter != task_nodes_.end (); node_iter++)
+ {
+ node_iter->second->print_effects_graphviz(strm);
+ node_iter->second->print_preconds_graphviz(strm);
+ }
+
+}
+
void SANet::Network::print_xml (std::basic_ostream<char, std::char_traits<char> >& strm)
{
strm << "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" << std::endl;
diff --git a/SA_POP/SANet/SANet.h b/SA_POP/SANet/SANet.h
index fc14337dfc1..35d48c6bb59 100644
--- a/SA_POP/SANet/SANet.h
+++ b/SA_POP/SANet/SANet.h
@@ -120,6 +120,20 @@ namespace SANet {
virtual void add_effect_link (TaskID task_ID, CondID cond_ID,
LinkWeight weight, PortID port_ID = "");
+ /// Update the task to condition link.
+ /**
+ * @param cond_ID Condition node ID.
+ *
+ * @param task_ID Task node ID.
+ *
+ * @param weight Link weight (probability task sets condition to
+ * true, or negative of the probability task sets condition to false).
+ *
+ * @param port_ID ID of port (on task) associated with this condition
+ * (used for data nodes).
+ */
+ void update_effect_link(TaskID task_ID, CondID cond_ID,
+ LinkWeight weight, PortID port_ID= "");
// ************************************************************************
@@ -134,6 +148,14 @@ namespace SANet {
*/
virtual void print (std::basic_ostream<char, std::char_traits<char> >& strm
= std::cout, bool verbose = false);
+
+ /// Print Graphviz network representation to stream.
+ /**
+ * @param strm Output stream on which to print network representation.
+ */
+ virtual void print_graphviz (std::basic_ostream<char, std::char_traits<char> >& strm);
+
+
/// Print XML network representation to stream.
/**
diff --git a/SA_POP/SANet/SANode.cpp b/SA_POP/SANet/SANode.cpp
index 76c346b0f95..e19fb50b36e 100644
--- a/SA_POP/SANet/SANode.cpp
+++ b/SA_POP/SANet/SANode.cpp
@@ -480,6 +480,36 @@ void TaskNode::print_precond_links_xml (std::basic_ostream<char, std::char_trait
}
};
+//print Graphviz DOT format of precondition links
+void TaskNode::print_preconds_graphviz(std::basic_ostream<char, std::char_traits<char> >&
+ strm)
+{
+ for (NodeMap::iterator node_iter = pre_nodes_.begin ();
+ node_iter != pre_nodes_.end (); node_iter++)
+ {
+ //format for a pre-cond in graphviz with condition then task
+ strm << "\t" << "\"" << node_iter->second->get_name() << " " << node_iter->first << "\" " << " -> ";
+ strm << "\"" << this->name_ << " " << this->ID_ << "\" " << ";\n";
+ }
+
+
+}
+
+//print Graphviz DOT format of effect links
+void TaskNode::print_effects_graphviz(std::basic_ostream<char, std::char_traits<char> >&
+ strm)
+{
+ for (NodeMap::iterator node_iter = post_nodes_.begin ();
+ node_iter != post_nodes_.end (); node_iter++)
+ {
+ //format for the effect link in graphviz with task then condition
+ strm << "\t" << "\"" << this->name_ << " " << this->ID_ << "\" " << " -> ";
+ strm << "\"" << node_iter->second->get_name() << " " << node_iter->first << "\" " << ";\n";
+ }
+
+
+}
+
// Print XML representation of node's effect links to stream.
void TaskNode::print_effect_links_xml (std::basic_ostream<char, std::char_traits<char> >&
strm)
@@ -661,6 +691,30 @@ void TaskNode::add_effect (CondID ID, CondNode *node, LinkWeight weight)
node->add_pre_link (ID_, this, weight);
};
+void TaskNode::update_effect (CondID ID, CondNode *node, LinkWeight weight)
+{
+ // update node to post-nodes.
+
+ NodeMap::iterator pnodesiter = post_nodes_.find(ID);
+ if(pnodesiter != post_nodes_.end())
+ {
+ (*pnodesiter).second = node;
+ }
+
+
+ // update link weight
+
+ LinkMap::iterator pliter = post_links_.find(ID);
+ if(pliter != post_links_.end())
+ {
+ (*pliter).second = weight;
+ }
+
+ // update link for precondition node.
+ node->update_pre_link (ID_, this, weight);
+};
+
+
CondNode::CondNode (CondID ID, std::string name, MultFactor atten_factor,
Probability true_prob, Probability false_prob, Utility goal_util, CondKind condkind)
: Node (ID, name, atten_factor),
@@ -1310,6 +1364,25 @@ void CondNode::add_pre_link (TaskID ID, TaskNode *node, LinkWeight weight)
pre_links_.insert (std::make_pair (ID, weight));
};
+void CondNode::update_pre_link (TaskID ID, TaskNode *node, LinkWeight weight)
+{
+ // update node to pre-nodes.
+
+ NodeMap::iterator nmiter = pre_nodes_.find(ID);
+ if(nmiter != pre_nodes_.end())
+ {
+ (*nmiter).second = node;
+ }
+
+ // update link weight.
+
+ LinkMap::iterator lmiter = pre_links_.find(ID);
+ if(lmiter != pre_links_.end())
+ {
+ (*lmiter).second = weight;
+ }
+};
+
void CondNode::add_post_link (TaskID ID, TaskNode *node, LinkWeight weight)
{
// Add node to post-nodes.
diff --git a/SA_POP/SANet/SANode.h b/SA_POP/SANet/SANode.h
index a83a9436c13..75e12221948 100644
--- a/SA_POP/SANet/SANode.h
+++ b/SA_POP/SANet/SANode.h
@@ -255,6 +255,18 @@ namespace SANet {
*/
virtual void print_effect_links_xml (std::basic_ostream<char, std::char_traits<char> >& strm);
+ /// Print Graphviz representation of node's pre-condition links to stream.
+ /**
+ * @param strm Output stream on which to print links into Graphviz representation.
+ */
+ virtual void print_preconds_graphviz(std::basic_ostream<char, std::char_traits<char> >& strm);
+
+ /// Print Graphviz representation of node's effect links to stream.
+ /**
+ * @param strm Output stream on which to print links into Graphviz representation.
+ */
+ virtual void print_effects_graphviz(std::basic_ostream<char, std::char_traits<char> >& strm);
+
/// Update node to next step.
/**
* @return True if node changed probability or utility, false otherwise.
@@ -295,6 +307,17 @@ namespace SANet {
*/
virtual void add_effect (CondID ID, CondNode *node, LinkWeight weight);
+ /// Update effect link.
+ /**
+ * @param ID Node ID.
+ *
+ * @param node Node pointer.
+ *
+ * @param weight Link weight (probability task sets condition to
+ * true, or negative of the probability task sets condition to false).
+ */
+ virtual void update_effect (CondID ID, CondNode *node, LinkWeight weight);
+
protected:
/// Unconditional prior probability of success.
Probability prior_prob_;
@@ -390,6 +413,16 @@ namespace SANet {
*/
virtual void add_pre_link (TaskID ID, TaskNode *node, LinkWeight weight);
+ /// update pre-link.
+ /**
+ * @param ID Node ID.
+ *
+ * @param node Node pointer.
+ *
+ * @param weight Link weight.
+ */
+ virtual void update_pre_link (TaskID ID, TaskNode *node, LinkWeight weight);
+
/// Add post-link.
/**
* @param ID Node ID.
diff --git a/SA_POP/SA_WorkingPlan.cpp b/SA_POP/SA_WorkingPlan.cpp
index b2f3c11ecee..2182d67f9f3 100644
--- a/SA_POP/SA_WorkingPlan.cpp
+++ b/SA_POP/SA_WorkingPlan.cpp
@@ -252,7 +252,7 @@ void SA_WorkingPlan::reset_plan ()
next_inst_id_ =1;
this->task_insts_.clear ();
this->task_impls_.clear ();
- this->causal_links_.clear ();
+ this->causal_links_.clear ();
// Clear goal.
this->goal_.goal_id = "NULL";