summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbpodgursky <bpodgursky@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-10-15 00:42:07 +0000
committerbpodgursky <bpodgursky@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-10-15 00:42:07 +0000
commit27926fe3de408cb90048ce7507843fae88add755 (patch)
tree4de2331e6e193673fb7b41e856370781348367b8
parent28560d4a95aeccc74b4b1668ff4830d09b3a1de4 (diff)
downloadATCD-27926fe3de408cb90048ce7507843fae88add755.tar.gz
Thu Oct 15 00:40:20 UTC 2009 Ben Podgursky <bpodgursky@gmail.com>
-rw-r--r--C2W/C2W_Demo.cpp11
-rw-r--r--ChangeLog26
-rw-r--r--Planner.cpp12
-rw-r--r--Planner.h5
-rw-r--r--SANet/SANet.cpp10
-rw-r--r--SANet/SANetFileIn.cpp4
-rw-r--r--SA_POP_Types.h10
-rw-r--r--SA_PlanHeuristics.cpp34
-rw-r--r--SA_SchedStrategy.cpp11
-rw-r--r--SA_WorkingPlan.cpp52
-rw-r--r--TaskMapFileIn.cpp20
-rw-r--r--utils/PDDLtoSANetTranslator/PDDLParser/src/PDDLtoSAN.java168
-rw-r--r--utils/PDDLtoSANetTranslator/PDDLParser/src/Translator/PDDL_Translator.java283
-rw-r--r--utils/PDDLtoSANetTranslator/PDDLParser/src/pddl4j/ErrorManager.java1
14 files changed, 469 insertions, 178 deletions
diff --git a/C2W/C2W_Demo.cpp b/C2W/C2W_Demo.cpp
index cf53993bb9a..fb9bbb70abb 100644
--- a/C2W/C2W_Demo.cpp
+++ b/C2W/C2W_Demo.cpp
@@ -201,7 +201,9 @@ int main (int argc, char* argv[])
tm_in.build_task_map (tm_filename, &builder);
- } catch (std::string e) {
+ }
+
+ catch (std::string e) {
std::cerr << "ERROR while building task network and task map from files:";
std::cerr << std::endl;
std::cerr << e;
@@ -215,7 +217,7 @@ int main (int argc, char* argv[])
- try {
+ // try {
planner = builder.get_planner ();
//Set any probabilities not listed in the XML
@@ -262,7 +264,9 @@ int main (int argc, char* argv[])
planner->plan (15, goal);
- } catch (std::string e) {
+ //}
+ /*
+ catch (std::string e) {
std::cerr << "ERROR while planning:" << std::endl;
std::cerr << e;
delete planner;
@@ -270,6 +274,7 @@ int main (int argc, char* argv[])
std::cerr << "UNKNOWN ERROR while planning." << std::endl;
delete planner;
}
+ */
bool stop = false;
while(!stop)
diff --git a/ChangeLog b/ChangeLog
index 764d7417046..641f0ffa5c0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,34 @@
+Thu Oct 15 00:40:20 UTC 2009 Ben Podgursky <bpodgursky@gmail.com>
+
+ * C2W/C2W_Demo.cpp:
+
+ * Planner.h:
+ * Planner.cpp:
+
+ * SANet/SANet.cpp:
+ * SANet/SANetFileIn.cpp:
+
+ * SA_POP_Types.h:
+ * SA_PlanHeuristics.cpp:
+ * SA_SchedStrategy.cpp:
+ * SA_WorkingPlan.cpp:
+ * TaskMapFileIn.cpp:
+
+ * utils/PDDLtoSANetTranslator/PDDLParser/src/PDDLtoSAN.java:
+
+ * utils/PDDLtoSANetTranslator/PDDLParser/src/Translator/PDDL_Translator.java:
+
+ * utils/PDDLtoSANetTranslator/PDDLParser/src/pddl4j/ErrorManager.java:
+
+ Eliminated initial action
+
Sun Oct 4 19:44:35 UTC 2009 Ben Podgursky <bpodgursky@gmail.com>
* SA_POP_Types.h:
* SA_SchedStrategy.cpp:
* SA_WorkingPlan.cpp:
- Changed debug levels
+ Changed debug levels
Fri Oct 2 23:31:27 UTC 2009 Ben Podgursky <bpodgursky@gmail.com>
diff --git a/Planner.cpp b/Planner.cpp
index 68adafd2b87..38b0e1f6337 100644
--- a/Planner.cpp
+++ b/Planner.cpp
@@ -50,9 +50,6 @@ cur_cmd_ (0)
this->plan_.task_insts.clear ();
this->plan_.threat_links.clear ();
- //****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****
- this->init_added = false;
-
this->not_backtracking.decision_pt = -1;
this->not_backtracking.seq_num = -1;
this->not_backtracking.step = -1;
@@ -365,6 +362,10 @@ const GoalMap& Planner::get_goals (void)
// Get a task's name.
std::string Planner::get_task_name (TaskID task_id)
{
+ if(task_id == INIT_TASK_ID){
+ return "init task";
+ }
+
return this->sanet_->get_task_name (task_id);
};
@@ -493,6 +494,11 @@ ResourceID resource_id)
// Get all resources used by a task implementation.
ResourceMap Planner::get_all_resources (TaskImplID impl_id)
{
+
+ if(impl_id == INIT_TASK_IMPL_ID){
+ return SA_POP::ResourceMap();
+ }
+
return this->task_map_->get_all_resources (impl_id);
};
diff --git a/Planner.h b/Planner.h
index 5f75fe82d6b..03efa10247a 100644
--- a/Planner.h
+++ b/Planner.h
@@ -40,11 +40,6 @@ namespace SA_POP {
class Planner {
public:
- //KILL ME SOON
- bool init_added;
-
-
-
/// Constructor.
Planner (void);
diff --git a/SANet/SANet.cpp b/SANet/SANet.cpp
index 981ff8e4d49..174183fa444 100644
--- a/SANet/SANet.cpp
+++ b/SANet/SANet.cpp
@@ -407,16 +407,6 @@ void SANet::Network::update (int max_steps)
}
}
- //Until the initial task is not a task, we need to ensure that it always has a higher
- //utility than anything else so it is considered first as a way to satisfy a task.
- double max_util = 0;
- for(TaskNodeMap::iterator it = task_nodes_.begin(); it != task_nodes_.end(); it++){
- if(it->second->get_pos_util().utility > max_util){
- max_util = it->second->get_pos_util().utility;
- }
- }
- task_nodes_.find(SA_POP::INIT_TASK_ID)->second->set_pos_util(max_util*2);
-
};
// Update a condition's current value (probability of being true).
diff --git a/SANet/SANetFileIn.cpp b/SANet/SANetFileIn.cpp
index a8c3c6da4a3..187d9f8a9fe 100644
--- a/SANet/SANetFileIn.cpp
+++ b/SANet/SANetFileIn.cpp
@@ -186,7 +186,7 @@ void SANetFileIn::build_net (std::string filename, SA_POP::Builder *builder)
builder->add_task (nodeID, priorProb, name);
}
- builder->add_task(SA_POP::INIT_TASK_ID, .5, "initact");
+ // builder->add_task(SA_POP::INIT_TASK_ID, .5, "initact");
// Get condition nodes.
for (SANet::XML::Network::condNode_iterator iter = xml_net.begin_condNode ();
@@ -208,7 +208,7 @@ void SANetFileIn::build_net (std::string filename, SA_POP::Builder *builder)
else cond=::SA_POP::DATA;
builder->add_cond (nodeID, utility, probTrue, name, cond);
- builder->set_effect(SA_POP::INIT_TASK_ID, nodeID, "", (probTrue-.5)*2);
+// builder->set_effect(SA_POP::INIT_TASK_ID, nodeID, "", (probTrue-.5)*2);
}
// Get precondition->task links.
diff --git a/SA_POP_Types.h b/SA_POP_Types.h
index 9d82845763e..acf1c3a4487 100644
--- a/SA_POP_Types.h
+++ b/SA_POP_Types.h
@@ -29,10 +29,10 @@
#include "ace/Log_Priority.h"
#endif /* SA_POP_HAS_ACE */
-#define MAX_TASK_INSTS 8
+
#define SA_POP_DEBUG_VERBOSE 1
#define SA_POP_DEBUG_NORMAL 5
-#define SA_POP_DEBUG_LOW 9
+#define SA_POP_DEBUG_MINIMAL 9
#define SA_POP_DEBUG_HIGH 10
#define _CRTDBG_MAP_ALLOC
#if defined (SA_POP_HAS_ACE)
@@ -152,6 +152,10 @@ namespace SA_POP {
const TaskID INIT_TASK_ID = -5;
+ const TaskInstID INIT_TASK_INST_ID = -6;
+
+ const int MAX_TASK_INSTS = 12;
+
/// Type of a task implementation id.
/// (must be unique across all task implementations).
typedef std::string TaskImplID;
@@ -175,6 +179,8 @@ namespace SA_POP {
TaskID task_id;
};
+
+ const TaskImplID INIT_TASK_IMPL_ID = "init_impl";
///List of TaskChoices
diff --git a/SA_PlanHeuristics.cpp b/SA_PlanHeuristics.cpp
index 11599e60b79..55cda30b758 100644
--- a/SA_PlanHeuristics.cpp
+++ b/SA_PlanHeuristics.cpp
@@ -187,6 +187,16 @@ TaskChoiceList SA_TaskStrategy::choose_task_fair (Condition open_cond)
TaskChoiceList task_list;
task_list.clear ();
+ //If init can handle it, put it on here first
+ if(this->planner_->get_cond_val(open_cond.id) == open_cond.value){
+ TaskChoice init_choice;
+ init_choice.choice = REUSE_INST;
+ init_choice.task_id = INIT_TASK_ID;
+ init_choice.task_inst_id = INIT_TASK_INST_ID;
+
+ task_list.push_back(init_choice);
+ }
+
std::vector<SortTaskByTime> tasks_with_existing_instances;
for (std::multimap<EUCalc, TaskID>::reverse_iterator iter = task_map.rbegin ();
@@ -202,9 +212,6 @@ TaskChoiceList SA_TaskStrategy::choose_task_fair (Condition open_cond)
task_list.push_back(task_choice);
-
-
-
}else{
SortTaskByTime to_sort;
@@ -223,9 +230,9 @@ TaskChoiceList SA_TaskStrategy::choose_task_fair (Condition open_cond)
to_sort.note_instance(it->second);
}
- if(!(iter->second == INIT_TASK_ID && this->planner_->init_added)){
+ // if(!(iter->second == INIT_TASK_ID && this->planner_->init_added)){
tasks_with_existing_instances.push_back(to_sort);
- }
+ // }
}
}
@@ -257,9 +264,9 @@ TaskChoiceList SA_TaskStrategy::choose_task (Condition open_cond)
{
TaskSet tasks = this->planner_->get_satisfying_tasks (open_cond);
- if(this->planner_->init_added){
- tasks.erase(INIT_TASK_ID);
- }
+// if(this->planner_->init_added){
+// tasks.erase(INIT_TASK_ID);
+// }
// Add tasks to map with EU (to sort).
std::multimap<EUCalc, TaskID> task_map;
@@ -285,6 +292,17 @@ TaskChoiceList SA_TaskStrategy::choose_task (Condition open_cond)
TaskChoiceList task_list;
task_list.clear ();
+ //If init can handle it, put it on here first
+ if(this->planner_->get_cond_val(open_cond.id) == open_cond.value){
+ TaskChoice init_choice;
+ init_choice.choice = REUSE_INST;
+ init_choice.task_id = INIT_TASK_ID;
+ init_choice.task_inst_id = INIT_TASK_INST_ID;
+
+ task_list.push_back(init_choice);
+ }
+
+
for (std::multimap<EUCalc, TaskID>::reverse_iterator iter = task_map.rbegin ();
iter != task_map.rend (); iter++)
{
diff --git a/SA_SchedStrategy.cpp b/SA_SchedStrategy.cpp
index 6000ab3845e..d975bb145c5 100644
--- a/SA_SchedStrategy.cpp
+++ b/SA_SchedStrategy.cpp
@@ -207,8 +207,15 @@ bool SA_SchedStrategy::satisfy_full_sched ()
TaskInstEndTimeSet new_execute;
new_execute.inst = prev_it->first;
- new_execute.end_time = current_execution_time + this->planner_->get_impl(working_plan_tmp->get_impl_id(prev_it->first))
- ->get_duration();
+
+
+ if(prev_it->first == INIT_TASK_INST_ID){
+ new_execute.end_time = current_execution_time + 0;
+ }else{
+ new_execute.end_time = current_execution_time + this->planner_->get_impl(working_plan_tmp->get_impl_id(prev_it->first))
+ ->get_duration();
+ }
+
executing_tasks.push_back(new_execute);
befores.erase(prev_it);
}
diff --git a/SA_WorkingPlan.cpp b/SA_WorkingPlan.cpp
index 8fa2d3e3cc6..b619a1e6d0f 100644
--- a/SA_WorkingPlan.cpp
+++ b/SA_WorkingPlan.cpp
@@ -70,6 +70,9 @@ add_threats_cmd_ (0)
this->precedence_graph_.insert(std::make_pair(SIMUL,temp));
this->precedence_graph_.insert(std::make_pair(UNRANKED,temp));
+ this->init_start.insert(std::make_pair(-6, (TimeWindow)std::make_pair(NULL_TIME, NULL_TIME)));
+ this->init_end.insert(std::make_pair(-6, (TimeWindow)std::make_pair(NULL_TIME, NULL_TIME)));
+
for(int i = 0; i < 2; i++){
this->init_start.insert(std::make_pair(i,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
this->init_end.insert(std::make_pair(i,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
@@ -80,6 +83,9 @@ add_threats_cmd_ (0)
this->no_link.first = -4;
this->no_link.second = -4;
+ this->task_impls_.insert(std::pair<TaskInstID, TaskImplID>(INIT_TASK_INST_ID, INIT_TASK_IMPL_ID));
+ this->task_insts_.insert(std::pair<TaskInstID, TaskID>(INIT_TASK_INST_ID, INIT_TASK_ID));
+
};
// Destructor.
@@ -292,6 +298,10 @@ const TaskInstSet *SA_WorkingPlan::get_prec_set (TaskInstID task_inst, Precedenc
// Get task id of a task instance.
TaskID SA_WorkingPlan::get_task_from_inst (TaskInstID inst_id)
{
+ if(inst_id == INIT_TASK_INST_ID){
+ return INIT_TASK_ID;
+ }
+
InstToTaskMap::iterator iter =
this->task_insts_.find (inst_id);
if (iter == this->task_insts_.end ())
@@ -347,7 +357,7 @@ void SA_WorkingPlan::generate_all_threats(void)
debug_text <<" Task (" <<threat_possibility_taskid << ")"<< ": Inst (" <<iterator->first << ")" << std::endl;
}
debug_text<<std::endl;
- SA_POP_DEBUG_STR (SA_POP_DEBUG_LOW, debug_text.str ());
+ SA_POP_DEBUG_STR (SA_POP_DEBUG_MINIMAL, debug_text.str ());
debug_text.str("");
debug_text << "SA_WorkingPlan::generate_all_threats: All Causal Threats: " << std::endl;
@@ -356,6 +366,11 @@ void SA_WorkingPlan::generate_all_threats(void)
for(InstToTaskMap::iterator iterator = this->task_insts_.begin(); iterator != this->task_insts_.end(); iterator++){
TaskInstID threat_possibility = iterator->first;
TaskID threat_possibility_taskid = iterator->second;
+
+ if(threat_possibility_taskid == INIT_TASK_ID){
+ continue;
+ }
+
CondSet set = this->planner_->get_effects(threat_possibility_taskid);
//Iterate through the effects of each task instance
@@ -375,7 +390,13 @@ void SA_WorkingPlan::generate_all_threats(void)
TaskID threatened_task = this->task_insts_.find(causal_threatened.first)->second;
SANet::LinkWeight threat_effect = this->planner_->get_link(threat_possibility_taskid, condition.id);
- SANet::LinkWeight causal_effect = this->planner_->get_link(threatened_task, causal_threatened.cond.id);
+
+ SANet::LinkWeight causal_effect;
+ if(threatened_task == INIT_TASK_ID){
+ causal_effect = 2*(this->planner_->get_cond_val(causal_threatened.cond.id)-.5);
+ }else{
+ causal_effect = this->planner_->get_link(threatened_task, causal_threatened.cond.id);
+ }
if((threat_effect > 0 && causal_effect < 0 )|| (threat_effect < 0 && causal_effect > 0)){
@@ -600,13 +621,14 @@ void SA_WorkingPlan::execute (SA_AddTaskCmd *cmd)
}
else if(task_choice.choice == NEW_INST){
- if(task == INIT_TASK_ID && this->planner_->init_added)
- {
- throw "Reached SA_WorkingPlan::execute (SA_AddTaskCmd *cmd) for Special Initial Action after it was already existing instance tried";
- }
+ // if(task == INIT_TASK_ID && this->planner_->init_added)
+ // {
+ // throw "Reached SA_WorkingPlan::execute (SA_AddTaskCmd *cmd) for Special Initial Action after it was already existing instance tried";
+ // }
if(task == INIT_TASK_ID){
- this->planner_->init_added = true;
+ // this->planner_->init_added = true;
+ bool asdf_problem = true;
}
task_inst = this->get_next_inst_id ();
@@ -769,10 +791,6 @@ void SA_WorkingPlan::undo (SA_AddTaskCmd *cmd)
if(cmd->last_task_choice_.choice == NEW_INST){
- if(cmd->last_task_ == INIT_TASK_ID){
- planner_->init_added = false;
- }
-
this->task_insts_.erase (this->task_insts_.find(cmd->last_task_inst_));
}else{
this->reused_insts_.erase(this->reused_insts_.find(cmd->last_task_inst_));
@@ -874,6 +892,11 @@ bool SA_WorkingPlan::execute (SA_AssocTaskImplCmd *cmd)
}
+
+ if(cmd->task_inst_ == INIT_TASK_INST_ID){
+ this->durations.insert(std::make_pair(cmd->task_inst_, 1));
+ }
+
// Update last implementation to this one and remove it from command.
cmd->last_impl_ = cmd->impls_.front ();
cmd->impls_.pop_front ();
@@ -957,7 +980,7 @@ bool SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd)
Condition condition = cmd->condition;
- if(task_insts_.find(cmd->second)->second == INIT_TASK_ID){
+ if(cmd->second == INIT_TASK_INST_ID){
debug_text << "SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd): Cannot schedule before initial task"<<std::endl;
SA_POP_DEBUG_STR (SA_POP_DEBUG_NORMAL, debug_text.str ());
@@ -1608,8 +1631,8 @@ bool SA_WorkingPlan::init_prec_insert(TaskInstID task_inst, SA_AssocTaskImplCmd
this->precedence_graph_.find(SIMUL)->second.insert(std::make_pair(task_inst,temp));
- if(init_start.size() <= task_inst){
- for(int i = init_start.size(); i < 100+task_inst; i++){
+ if(init_start.size()-1 <= task_inst){
+ for(int i = init_start.size()-1; i < 100+task_inst; i++){
this->init_start.insert(std::make_pair(i,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
this->init_end.insert(std::make_pair(i,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
}
@@ -2039,6 +2062,7 @@ TaskInstSet SA_WorkingPlan::get_all_insts()
/// Check if the instance id already exists and is being reused.
bool SA_WorkingPlan::inst_exists (TaskInstID task_inst)
{
+
if(this->task_impls_.find(task_inst)!=this->task_impls_.end()) return true;
else return false;
}
diff --git a/TaskMapFileIn.cpp b/TaskMapFileIn.cpp
index 583a95c4551..22ac5a51626 100644
--- a/TaskMapFileIn.cpp
+++ b/TaskMapFileIn.cpp
@@ -99,15 +99,15 @@ void TaskMapFileIn::build_task_map (std::string filename, Builder *builder)
builder->add_task_impl (impl);
}
- ImplParamSet init_params;
- ImplParam init_param;
- init_param.id = "test_param1";
- init_param.kind = "test_kind1";
- init_param.value = "test_param_value1";
- init_params.insert (init_param);
+ // ImplParamSet init_params;
+ // ImplParam init_param;
+ // init_param.id = "test_param1";
+ // init_param.kind = "test_kind1";
+ // init_param.value = "test_param_value1";
+ // init_params.insert (init_param);
- TaskImpl* initimpl = new TaskImpl ("initact_impl", init_params);
- builder->add_task_impl (initimpl);
+ // TaskImpl* initimpl = new TaskImpl ("initact_impl", init_params);
+ // builder->add_task_impl (initimpl);
// Get resources.
for (SA_POP::XML::TaskMap::resource_iterator res_iter =
@@ -141,7 +141,7 @@ void TaskMapFileIn::build_task_map (std::string filename, Builder *builder)
builder->add_resource (resource);
- builder->assoc_impl_with_resource ("initact_impl", resourceID, 1);
+// builder->assoc_impl_with_resource ("initact_impl", resourceID, 1);
}
// Get task to implementation associations.
@@ -164,7 +164,7 @@ void TaskMapFileIn::build_task_map (std::string filename, Builder *builder)
builder->assoc_task_with_impl (taskID, implID, duration);
}
- builder->assoc_task_with_impl (INIT_TASK_ID, "initact_impl", 1);
+ // builder->assoc_task_with_impl (INIT_TASK_ID, "initact_impl", 1);
// Get task implementation to resource associations.
for (SA_POP::XML::TaskMap::implToResource_iterator iassocr_iter =
diff --git a/utils/PDDLtoSANetTranslator/PDDLParser/src/PDDLtoSAN.java b/utils/PDDLtoSANetTranslator/PDDLParser/src/PDDLtoSAN.java
index 7ed80fbefe8..341b4162ac9 100644
--- a/utils/PDDLtoSANetTranslator/PDDLParser/src/PDDLtoSAN.java
+++ b/utils/PDDLtoSANetTranslator/PDDLParser/src/PDDLtoSAN.java
@@ -1,8 +1,18 @@
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
import java.util.Properties;
+import java.util.Scanner;
import Translator.PDDL_Translator;
+import Translator.StatisticsCompilation;
+import Translator.StatisticsReport;
import pddl4j.Domain;
import pddl4j.ErrorManager;
@@ -32,15 +42,12 @@ public class PDDLtoSAN {
// int cond_combine = new Integer(args[3]);
// String output_name = args[4];
- String domain_path = "hanoi.pddl";
- String problem_path = "hanoi-pb1.pddl";
- boolean include_init = false;
- int cond_combine = 4;
- String output_name = "ferry-orig-pruned";
+// String domain_path = "TPP-domain.pddl";
+// String problem_path = "tpp-p08.pddl";
+// boolean include_init = false;
+// int cond_combine = 2;
+// String output_name = "ferry-orig-pruned";
- Domain domain = null;
- Problem problem = null;
-
Properties options = new Properties();
options.put("source", Source.V3_0);
options.put(RequireKey.STRIPS, true);
@@ -49,51 +56,122 @@ public class PDDLtoSAN {
options.put(RequireKey.NEGATIVE_PRECONDITIONS, true);
options.put(RequireKey.DISJUNCTIVE_PRECONDITIONS, true);
options.put(RequireKey.CONDITIONAL_EFFECTS, true);
- // options.put(RequireKey.EXISTENTIAL_PRECONDITIONS, true);
- // options.put(RequireKey.UNIVERSAL_PRECONDITIONS, true);
-
- Parser parser = new Parser(options);
-
- File domain_file = new File(domain_path);
- File problem_file = new File(problem_path);
+
+ Map<String, List<String>> domains_to_problems = read_input_file(args[0]);
+
+ // List<StatisticsReport> info_sets = new LinkedList<StatisticsReport>();
+
+ StatisticsCompilation all_stat_compl = new StatisticsCompilation();
+
+ for(String domain_path: domains_to_problems.keySet()){
+
+ StatisticsCompilation stat_compl = new StatisticsCompilation();
+
+ Domain domain = null;
+ File domain_file = new File(domain_path);
+ Parser parser = new Parser(options);
+
+ try {
+ domain = parser.parse(domain_file);
+ } catch (FileNotFoundException e) {
+ System.out.println("Error: domain file "+domain_file+" not found");
+ System.exit(0);
+ }
+
+ for(String problem_path: domains_to_problems.get(domain_path)){
+ File problem_file = new File(problem_path);
+ Problem problem = null;
+ Parser problem_parser = new Parser(options);
+
+ try {
+ problem = problem_parser.parse(problem_file);
+ } catch (FileNotFoundException e) {
+ System.out.println("Error: problem file "+problem_file+" not found");
+ System.exit(0);
+ }
+
+ PDDLObject obj = problem_parser.link(domain, problem);
+ ErrorManager mgr = parser.getErrorManager();
+
+ if (mgr.contains(Message.ERROR)) {
+ mgr.print(Message.ALL);
+ mgr.clear();
+ System.exit(0);
+ }
+ else {
+ mgr.print(Message.WARNING);
+ mgr.clear();
+
+ System.out.println();
+ System.out.println("Translating: "+ problem_file+ " " + domain_file);
+ System.out.println();
+
+ PDDL_Translator n = new PDDL_Translator(obj, 1, false);
+
+ System.out.println("Done translating");
+ System.out.println(" SAN number of conditions: "+ n.getConditonNodeCount());
+ System.out.println(" SAN number of actions: " + n.getActionNodeCount());
- try {
- domain = parser.parse(domain_file);
- } catch (FileNotFoundException e) {
- System.out.println("Error: domain file "+domain_file+" not found");
- System.exit(0);
+ stat_compl.all_reports.add(n.getStatReport());
+ all_stat_compl.all_reports.add(n.getStatReport());
+
+ // n.printSAN();
+ // n.write_SAN_to_xml(domain.getDomainName()+"_"+problem.getProblemName()+"-san.xml");
+ // n.write_TM_to_xml(domain.getDomainName()+"_"+problem.getProblemName()+"-tm.xml");
+ // n.write_goals_to_file(domain.getDomainName()+"_"+problem.getProblemName()+"-goals");
+ }
+ }
+
+ try {
+ FileWriter fileout = new FileWriter(new File(domain_path+args[1]));
+ fileout.write(stat_compl.toString());
+ fileout.close();
+
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
}
+ FileWriter fileout;
try {
- problem = parser.parse(problem_file);
- } catch (FileNotFoundException e) {
- System.out.println("Error: problem file "+problem_file+" not found");
- System.exit(0);
- }
+ fileout = new FileWriter(new File(args[1]));
+ fileout.write(all_stat_compl.toString());
+ fileout.close();
- PDDLObject obj = parser.link(domain, problem);
-
- ErrorManager mgr = parser.getErrorManager();
-
- if (mgr.contains(Message.ERROR)) {
- mgr.print(Message.ALL);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
}
- else {
- mgr.print(Message.WARNING);
+
+ // System.out.println(stat_compl.toString());
+ }
- System.out.println();
- System.out.println("Translating:");
+ public static Map<String, List<String>> read_input_file(String filename){
+ //TODO make this work properly
+ Map<String, List<String>> to_ret = new LinkedHashMap<String, List<String>>();
+ Scanner scan = null;
+ try {
+ scan = new Scanner(new FileReader(new File(filename)));
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ while(scan.hasNext()){
+ String domain_name = scan.next();
- PDDL_Translator n = new PDDL_Translator(obj, cond_combine, include_init);
+ String next = scan.next();
+ List<String> problems = new LinkedList<String>();
- System.out.println("Done translating");
- System.out.println(" SAN number of conditions: "+ n.getConditonNodeCount());
- System.out.println(" SAN number of actions: " + n.getActionNodeCount());
-
- n.printSAN();
- n.write_SAN_to_xml(output_name+"-san.xml");
- n.write_TM_to_xml(output_name+"-tm.xml");
- n.write_goals_to_file(output_name+"-goals");
+ while(!next.equals("END")){
+ problems.add(next);
+ next = scan.next();
+ }
+ to_ret.put(domain_name, problems);
}
+
+ return to_ret;
}
-}
+} \ No newline at end of file
diff --git a/utils/PDDLtoSANetTranslator/PDDLParser/src/Translator/PDDL_Translator.java b/utils/PDDLtoSANetTranslator/PDDLParser/src/Translator/PDDL_Translator.java
index 05192efcf31..5fd7e8a9099 100644
--- a/utils/PDDLtoSANetTranslator/PDDLParser/src/Translator/PDDL_Translator.java
+++ b/utils/PDDLtoSANetTranslator/PDDLParser/src/Translator/PDDL_Translator.java
@@ -53,6 +53,8 @@ import javax.xml.transform.stream.*;
public class PDDL_Translator {
+
+ StatisticsReport stat_report;
Map<String, CondNode> condition_nodes = new LinkedHashMap<String, CondNode>();
Map<String, TaskNode> task_nodes= new LinkedHashMap<String, TaskNode>();
@@ -85,6 +87,8 @@ public class PDDL_Translator {
*/
public PDDL_Translator(PDDLObject pddl_object, int condition_combine_levels, boolean use_initial_action){
+ stat_report = new StatisticsReport(pddl_object.getDomainName(), pddl_object.getProblemName());
+
long start_time = new Date().getTime();
init_act_visible = use_initial_action;
@@ -140,13 +144,9 @@ public class PDDL_Translator {
//Add the initial action in as an anchor--otherwise it would seem that none
//of the conditions can come true
setup_initial_action(init_act);
-
- System.out.println();
- System.out.println("Initial Network Statistics: ");
- System.out.println();
- calculateNetworkStatistics();
- System.out.println();
-
+
+ calculateNetworkStatistics("before_impossibility_removal");
+
System.out.println("Before optimizing: "+ this.task_nodes.size()+" tasks "+ this.condition_nodes.size()+" conditions");
System.out.println("Elapsed: "+ (new Date().getTime()-start_time));
@@ -159,29 +159,22 @@ public class PDDL_Translator {
//Basically cut down through the tasks and conditions and only take the relevant
//ones
- keep_looping = eliminate_irreleevant_tasks_and_conditions()||keep_looping;
+ // keep_looping = eliminate_irreleevant_tasks_and_conditions()||keep_looping;
//Get rid of tasks that take plan backwards and where getting there
//helps nothing else
- // keep_looping = eliminate_dominated_tasks()||keep_looping;
+ //////////// keep_looping = eliminate_dominated_tasks()||keep_looping;
} while(keep_looping);
//Go through and look to see if any conditions can be replaced by a set of other
//conditions
//TODO maybe try something like a kmap here?
- System.out.println();
- System.out.println("Network Statistics Before Condition Combining: ");
- System.out.println();
- calculateNetworkStatistics();
- System.out.println();
-
- combine_conditions(condition_combine_levels);
+
+ calculateNetworkStatistics("before_cond_combining");
+
+ // combine_conditions(condition_combine_levels);
- System.out.println();
- System.out.println("Network Statistics After Condition Combining: ");
- System.out.println();
- calculateNetworkStatistics();
- System.out.println();
+ // calculateNetworkStatistics("after_cond_combining");
System.out.println("End elapsed: "+ (new Date().getTime()-start_time));
@@ -192,11 +185,13 @@ public class PDDL_Translator {
record_task_impls();
}
- private void calculateNetworkStatistics(){
-
- System.out.println("Number of conditions: "+this.condition_nodes.size());
- System.out.println("Number of tasks: "+ this.task_nodes.size());
+ private void calculateNetworkStatistics(String label){
+ System.out.println();
+ System.out.println("Network stats at: "+label);
+ System.out.println(" Number of conditions: "+this.condition_nodes.size());
+ System.out.println(" Number of tasks: "+ this.task_nodes.size());
+ System.out.println();
int total_precond_links = 0;
int num_sat_links = 0;
@@ -205,10 +200,15 @@ public class PDDL_Translator {
int total_effect_links = 0;
- int[] effects_per_cond = new int[condition_nodes.size()];
- int[] preconds_per_cond = new int[condition_nodes.size()];
- int[] effects_per_task = new int[task_nodes.size()-1];
- int[] preconds_per_task = new int[task_nodes.size()-1];
+// int[] effects_per_cond = new int[condition_nodes.size()];
+// int[] preconds_per_cond = new int[condition_nodes.size()];
+// int[] effects_per_task = new int[task_nodes.size()-1];
+// int[] preconds_per_task = new int[task_nodes.size()-1];
+
+ List<Integer> effects_per_cond = new LinkedList<Integer>();
+ List<Integer> preconds_per_cond = new LinkedList<Integer>();
+ List<Integer> effects_per_task = new LinkedList<Integer>();
+ List<Integer> preconds_per_task = new LinkedList<Integer>();
List<Integer> ways_to_sat_each_precond = new LinkedList<Integer>();
List<Integer> threats_to_each_precond = new LinkedList<Integer>();
@@ -221,7 +221,7 @@ public class PDDL_Translator {
for(EffectLink el: cnd.getAffectedBy()){
- if(el.getTaskID().equals("20")){
+ if(el.action.getName().equals("initact")){
continue;
}
@@ -252,9 +252,8 @@ public class PDDL_Translator {
total_precond_links++;
}
- preconds_per_cond[count] = cnd.getPreconditionTo().size();
-
- effects_per_cond[count] = cnd.getAffectedBy().size();
+ preconds_per_cond.add(cnd.getPreconditionTo().size());
+ effects_per_cond.add(cnd.getAffectedBy().size());
count++;
}
@@ -266,48 +265,185 @@ public class PDDL_Translator {
continue;
}
- effects_per_task[count] = tnd.get_negative_effect_links().size()+tnd.get_positive_effect_links().size();
- preconds_per_task[count] = tnd.get_positive_precondition_links().size()+tnd.get_negative_precondition_links().size();
+ effects_per_task.add(tnd.get_negative_effect_links().size()+tnd.get_positive_effect_links().size());
+ preconds_per_task.add(tnd.get_positive_precondition_links().size()+tnd.get_negative_precondition_links().size());
count++;
}
- double avg_effect_each_cond = total_effect_links/(double)condition_nodes.size();
- double avg_precond_each_cond = total_precond_links/(double)condition_nodes.size();
- double avg_effect_each_act = total_effect_links/(double)task_nodes.size();
- double avg_precond_each_act = total_effect_links/(double)task_nodes.size();
- double avg_ways_to_sat_precond = num_sat_links/(double)total_precond_links;
- double avg_threats_per_precond = num_threat_links/(double)total_precond_links;
-
- double stdev_effects_per_cond = get_std_dev(avg_effect_each_cond, effects_per_cond);
- double stdev_precond_per_cond = get_std_dev(avg_precond_each_cond, preconds_per_cond);
- double stdev_effects_per_task = get_std_dev(avg_effect_each_act, effects_per_task);
- double stdev_precond_per_task = get_std_dev(avg_precond_each_act, preconds_per_task);
- double stdev_ways_to_sat_precond = get_std_dev(avg_ways_to_sat_precond, ways_to_sat_each_precond);
- double stdev_threats_pre_precond = get_std_dev(avg_threats_per_precond, threats_to_each_precond);
-
- System.out.println("Avg effects per cond: "+ avg_effect_each_cond);
- System.out.println(" std dev: "+stdev_effects_per_cond);
- System.out.println("Avg precond per cond:" + avg_precond_each_cond);
- System.out.println(" std dev: "+stdev_precond_per_cond);
- System.out.println("Avg effects per act: " + avg_effect_each_act);
- System.out.println(" std dev: "+stdev_effects_per_task);
- System.out.println("Avg precond per act: " + avg_precond_each_act);
- System.out.println(" std dev: "+stdev_precond_per_task);
- System.out.println("Avg ways to satisfy precond: "+ avg_ways_to_sat_precond);
- System.out.println(" std dev: "+stdev_ways_to_sat_precond);
- System.out.println("Avg threats to precond: "+avg_threats_per_precond);
- System.out.println(" std dev: "+stdev_threats_pre_precond);
-
- //*Num conds STD
- //*Num actions STD
- //*Average effects to each cond STD
- //*Average precond each cond STD
- //*average effects each task STD
- //*average precond each task STD
-
- //Average #ways to satisfy each precond
- //diameter!
+ InfoSet info_set = new InfoSet();
+
+ info_set.total_tasks = this.task_nodes.size() - 1;
+ info_set.total_conds = this.condition_nodes.size();
+ info_set.total_preconds = this.precondition_links.size();
+ info_set.total_effects = this.effect_links.size();
+
+ info_set.effects_per_cond = effects_per_cond;
+ info_set.preconds_per_cond = preconds_per_cond;
+ info_set.effects_per_act = effects_per_task;
+ info_set.preconds_per_act = preconds_per_task;
+ info_set.satisfiers_per_precond = ways_to_sat_each_precond;
+ info_set.threats_per_precond = threats_to_each_precond;
+
+ info_set.avg_effects_per_cond = total_effect_links/(double)condition_nodes.size();
+ info_set.avg_preconds_per_cond = total_precond_links/(double)condition_nodes.size();
+ info_set.avg_effects_per_act = total_effect_links/(double)task_nodes.size();
+ info_set.avg_preconds_per_act = total_effect_links/(double)task_nodes.size();
+ info_set.avg_satisfiers_per_precond = num_sat_links/(double)total_precond_links;
+ info_set.avg_threats_per_precond = num_threat_links/(double)total_precond_links;
+
+ info_set.std_dev_effects_per_cond = get_std_dev(info_set.avg_effects_per_cond, effects_per_cond);
+ info_set.std_dev_preconds_per_cond = get_std_dev(info_set.avg_preconds_per_cond, preconds_per_cond);
+ info_set.std_dev_effects_per_act = get_std_dev(info_set.avg_effects_per_act, effects_per_task);
+ info_set.std_dev_preconds_per_act = get_std_dev(info_set.avg_preconds_per_act, preconds_per_task);
+ info_set.std_dev_satisfiers_per_precond = get_std_dev(info_set.avg_satisfiers_per_precond , ways_to_sat_each_precond);
+ info_set.std_dev_threats_per_precond = get_std_dev(info_set.avg_threats_per_precond, threats_to_each_precond);
+
+ //Find the probability that an arbitrary precondition has an effect opposite it
+
+ double precond_with_negation = 0;
+ for(PrecondLink el: this.precondition_links){
+ TaskNode tnd = el.action;
+
+ List<EffectLink> all_effects = new LinkedList<EffectLink>(tnd.get_negative_effect_links());
+ all_effects.addAll(tnd.get_positive_effect_links());
+
+ for(EffectLink elk: all_effects){
+ if(elk.effect == el.precondition && el.getRequiredState() != (elk.getWeight() == 1)){
+ precond_with_negation++;
+ break;
+ }
+ }
+ }
+
+ info_set.reverse_link_prob = precond_with_negation/this.precondition_links.size();
+ // System.out.println(info_set.reverse_link_prob);
+
+ //TODO generate reverse link prob
+ //TODO generate clustering coeff
+ //TODO diameter!
+ // if(!label.equals("before_impossibility_removal")){
+
+ System.out.println("Generating simplified graph");
+ Map<String, SimpleNode> simple_graph = generate_simplified_graph();
+ System.out.println("Done generating simplified graph");
+
+
+ List<Double> connectednesses = new LinkedList<Double>();
+
+ for(SimpleNode sn: simple_graph.values()){
+ double connected = 0;
+
+ for(SimpleNode sn_child: sn.neigbors){
+ for(SimpleNode sn_child_check: sn.neigbors){
+ if(sn_child == sn_child_check){
+ continue;
+ }
+ if(sn_child.neigbors.contains(sn_child_check)){
+ connected++;
+ }
+ }
+ }
+ // System.out.println("Connected: "+connected);
+ // System.out.println("Neighbors: "+sn.neigbors.size());
+ // if(sn.neigbors.size() > 1)
+ connectednesses.add((connected)/(sn.neigbors.size()*(sn.neigbors.size()-1)));
+ // System.out.println((connected)/(sn.neigbors.size()*(sn.neigbors.size()-1)));
+ }
+
+ double sum = 0;
+
+ for(Double d: connectednesses){
+ sum+=d;
+ }
+ info_set.clustering_coeff = sum/connectednesses.size();
+ // }
+
+ stat_report.reports.put(label, info_set);
+ }
+
+ public StatisticsReport getStatReport(){
+ return stat_report;
+ }
+
+ private Map<String, SimpleNode> generate_simplified_graph(){
+ Map<String, SimpleNode> node_name_to_simple = new LinkedHashMap<String, SimpleNode>();
+
+ for(String tn: this.task_nodes.keySet()){
+
+ if(tn.equals("initact")){
+ continue;
+ }
+
+ node_name_to_simple.put(task_nodes.get(tn).getName(), new SimpleNode(tn));
+ }
+
+ for(TaskNode tn: this.task_nodes.values()){
+
+ if(tn.getName().equals("initact")){
+ continue;
+ }
+
+ List<EffectLink> all_effects = new LinkedList<EffectLink>(tn.get_negative_effect_links());
+ all_effects.addAll(tn.get_positive_effect_links());
+
+ for(EffectLink elk: all_effects){
+ CondNode condition = elk.effect;
+
+ //All precond from cond
+ for(PrecondLink pl: condition.getPreconditionTo()){
+ TaskNode tn2 = pl.action;
+ if(tn2 == tn || tn2.getName().equals("initact")){
+ continue;
+ }
+
+
+ SimpleNode.connect(node_name_to_simple.get(tn.getName()), node_name_to_simple.get(tn2.getName()));
+ }
+
+ //All effect from cond
+ for(EffectLink el: condition.getAffectedBy()){
+ TaskNode tn2 = el.action;
+ if(tn2 == tn || tn2.getName().equals("initact")){
+ continue;
+ }
+
+ // System.out.println(tn2.getNodeID());
+ // System.out.println(tn.getName());
+ // System.out.println(tn2.getName());
+ SimpleNode.connect(node_name_to_simple.get(tn.getName()), node_name_to_simple.get(tn2.getName()));
+ }
+ }
+
+ List<PrecondLink> all_preconds = new LinkedList<PrecondLink>(tn.get_negative_precondition_links());
+ all_preconds.addAll(tn.get_positive_precondition_links());
+
+ for(PrecondLink plk: all_preconds){
+ CondNode condition = plk.precondition;
+
+ //All precond from cond
+ for(PrecondLink pl: condition.getPreconditionTo()){
+ TaskNode tn2 = pl.action;
+ if(tn2 == tn || tn2.getName().equals("initact")){
+ continue;
+ }
+
+ SimpleNode.connect(node_name_to_simple.get(tn.getName()), node_name_to_simple.get(tn2.getName()));
+ }
+
+ //All effect from cond
+ for(EffectLink el: condition.getAffectedBy()){
+ TaskNode tn2 = el.action;
+ if(tn2 == tn || tn2.getName().equals("initact")){
+ continue;
+ }
+
+ SimpleNode.connect(node_name_to_simple.get(tn.getName()), node_name_to_simple.get(tn2.getName()));
+ }
+ }
+ }
+
+ return node_name_to_simple;
}
private double get_std_dev(double mean, int[] data){
@@ -425,6 +561,7 @@ public class PDDL_Translator {
long intv2 = new Date().getTime();
}
+
private boolean combine_conditions_aux(List<CondNode> fixed_cnds, int still_to_fix){
if(still_to_fix != 0){
for(CondNode cn: this.condition_nodes.values()){
@@ -2277,7 +2414,7 @@ public class PDDL_Translator {
for(TaskNode a: task_nodes.values()){
- if(!init_act_visible && a.getNodeID().equals("20")){
+ if(!init_act_visible && a.getName().equals("initact")){
continue;
}
@@ -2386,7 +2523,7 @@ public class PDDL_Translator {
for(EffectLink l: effect_links){
- if(!init_act_visible && l.action.getNodeID().equals("20")){
+ if(!init_act_visible && l.action.getName().equals("initact")){
continue;
}
diff --git a/utils/PDDLtoSANetTranslator/PDDLParser/src/pddl4j/ErrorManager.java b/utils/PDDLtoSANetTranslator/PDDLParser/src/pddl4j/ErrorManager.java
index c1e4fcd48a0..e19794961a1 100644
--- a/utils/PDDLtoSANetTranslator/PDDLParser/src/pddl4j/ErrorManager.java
+++ b/utils/PDDLtoSANetTranslator/PDDLParser/src/pddl4j/ErrorManager.java
@@ -245,6 +245,7 @@ public class ErrorManager {
*/
public void clear() {
this.msg.clear();
+ // this.tMsg.clear();
}
/**