[Avida-SVN] r1798 - in branches/uml: Avida.xcodeproj source/cpu source/main

hjg at myxo.css.msu.edu hjg at myxo.css.msu.edu
Fri Jul 13 11:30:21 PDT 2007


Author: hjg
Date: 2007-07-13 14:30:21 -0400 (Fri, 13 Jul 2007)
New Revision: 1798

Modified:
   branches/uml/Avida.xcodeproj/project.pbxproj
   branches/uml/source/cpu/cHardwareCPU.cc
   branches/uml/source/cpu/cHardwareCPU.h
   branches/uml/source/main/cOrganism.cc
   branches/uml/source/main/cStats.cc
   branches/uml/source/main/cStats.h
   branches/uml/source/main/cTaskContext.h
   branches/uml/source/main/cTaskLib.cc
   branches/uml/source/main/cTaskLib.h
Log:


Modified: branches/uml/Avida.xcodeproj/project.pbxproj
===================================================================
--- branches/uml/Avida.xcodeproj/project.pbxproj	2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/Avida.xcodeproj/project.pbxproj	2007-07-13 18:30:21 UTC (rev 1798)
@@ -23,6 +23,8 @@
 /* End PBXAggregateTarget section */
 
 /* Begin PBXBuildFile section */
+		3EDCA1BC0C47FAB50078778D /* cUMLModel.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCA0150C46C9B70078778D /* cUMLModel.cc */; };
+		3EDCA1BD0C47FAB70078778D /* cUMLStateDiagram.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCA0170C46C9B70078778D /* cUMLStateDiagram.cc */; };
 		5629D8110C3EE14800C5F152 /* cTextWindow.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5629D80D0C3EE13500C5F152 /* cTextWindow.cc */; };
 		5629D8180C3EE20C00C5F152 /* libncurses.5.4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 70658C59085DF67D00486BED /* libncurses.5.4.dylib */; };
 		5629D8190C3EE21300C5F152 /* libavida-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7023EC330C0A426900362B9C /* libavida-core.a */; };
@@ -834,7 +836,7 @@
 		DCC315CE076253A5008F7A48 /* environment.rotate */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = environment.rotate; sourceTree = "<group>"; };
 		DCC315D0076253A5008F7A48 /* task_event_gen.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = task_event_gen.cc; sourceTree = "<group>"; };
 		DCC315D1076253A5008F7A48 /* task_event_gen.old.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = task_event_gen.old.cc; sourceTree = "<group>"; };
-		DCC3164D07626CF3008F7A48 /* avida */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = avida; sourceTree = BUILT_PRODUCTS_DIR; };
+		DCC3164D07626CF3008F7A48 /* avida */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = avida; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -1947,6 +1949,8 @@
 				7023ECA10C0A431B00362B9C /* SaveLoadActions.cc in Sources */,
 				70436B280C36C64400A05ABA /* cThread.cc in Sources */,
 				70436B6C0C36C98900A05ABA /* PlatformExpert.cc in Sources */,
+				3EDCA1BC0C47FAB50078778D /* cUMLModel.cc in Sources */,
+				3EDCA1BD0C47FAB70078778D /* cUMLStateDiagram.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2151,7 +2155,11 @@
 		7023EC350C0A42BC00362B9C /* Development */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				HEADER_SEARCH_PATHS = "$(inherited)";
+				GCC_ENABLE_CPP_RTTI = YES;
+				HEADER_SEARCH_PATHS = (
+					/opt/local/include,
+					"$(inherited)",
+				);
 				PRODUCT_NAME = "avida-core";
 			};
 			name = Development;
@@ -2159,7 +2167,11 @@
 		7023EC360C0A42BC00362B9C /* Deployment */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				HEADER_SEARCH_PATHS = "$(inherited)";
+				GCC_ENABLE_CPP_RTTI = YES;
+				HEADER_SEARCH_PATHS = (
+					/opt/local/include,
+					"$(inherited)",
+				);
 				PRODUCT_NAME = "avida-core";
 			};
 			name = Deployment;
@@ -2167,7 +2179,11 @@
 		7023EC370C0A42BC00362B9C /* Deployment-G5 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				HEADER_SEARCH_PATHS = "$(inherited)";
+				GCC_ENABLE_CPP_RTTI = YES;
+				HEADER_SEARCH_PATHS = (
+					/opt/local/include,
+					"$(inherited)",
+				);
 				PRODUCT_NAME = "avida-core";
 			};
 			name = "Deployment-G5";
@@ -2175,7 +2191,11 @@
 		7023EC380C0A42BC00362B9C /* Deployment-Universal */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				HEADER_SEARCH_PATHS = "$(inherited)";
+				GCC_ENABLE_CPP_RTTI = YES;
+				HEADER_SEARCH_PATHS = (
+					/opt/local/include,
+					"$(inherited)",
+				);
 				PRODUCT_NAME = "avida-core";
 			};
 			name = "Deployment-Universal";
@@ -2183,7 +2203,11 @@
 		7023EC390C0A42BC00362B9C /* Profile */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				HEADER_SEARCH_PATHS = "$(inherited)";
+				GCC_ENABLE_CPP_RTTI = YES;
+				HEADER_SEARCH_PATHS = (
+					/opt/local/include,
+					"$(inherited)",
+				);
 				PRODUCT_NAME = "avida-core";
 			};
 			name = Profile;

Modified: branches/uml/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.cc	2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/cpu/cHardwareCPU.cc	2007-07-13 18:30:21 UTC (rev 1798)
@@ -478,7 +478,15 @@
 	tInstLibEntry<tMethod>("action-2", &cHardwareCPU::Inst_Action2, false, 
 					"Change to action 2"),						
 	tInstLibEntry<tMethod>("action-3", &cHardwareCPU::Inst_Action3, false, 
-					"Change to action 3"),						
+					"Change to action 3"),		
+	tInstLibEntry<tMethod>("action-4", &cHardwareCPU::Inst_Action4, false, 
+					"Change to action 4"),						
+	tInstLibEntry<tMethod>("action-5", &cHardwareCPU::Inst_Action5, false, 
+					"Change to action 5"),						
+	tInstLibEntry<tMethod>("action-6", &cHardwareCPU::Inst_Action6, false, 
+					"Change to action 6"),						
+	tInstLibEntry<tMethod>("action-7", &cHardwareCPU::Inst_Action7, false, 
+					"Change to action 7"),										
 
 	
     // Placebo instructions
@@ -4907,5 +4915,15 @@
 bool cHardwareCPU::Inst_Action3(cAvidaContext& ctx)
 { return (organism->getStateDiagram()->absoluteJumpAction(3)); }
 
+bool cHardwareCPU::Inst_Action4(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(4)); }
 
+bool cHardwareCPU::Inst_Action5(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(5)); }
 
+bool cHardwareCPU::Inst_Action6(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(6)); }
+
+bool cHardwareCPU::Inst_Action7(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(7)); }
+

Modified: branches/uml/source/cpu/cHardwareCPU.h
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.h	2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/cpu/cHardwareCPU.h	2007-07-13 18:30:21 UTC (rev 1798)
@@ -611,6 +611,10 @@
   bool Inst_Action1(cAvidaContext& ctx);
   bool Inst_Action2(cAvidaContext& ctx);
   bool Inst_Action3(cAvidaContext& ctx);
+  bool Inst_Action4(cAvidaContext& ctx);
+  bool Inst_Action5(cAvidaContext& ctx);
+  bool Inst_Action6(cAvidaContext& ctx);
+  bool Inst_Action7(cAvidaContext& ctx);
     
 };
 

Modified: branches/uml/source/main/cOrganism.cc
===================================================================
--- branches/uml/source/main/cOrganism.cc	2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cOrganism.cc	2007-07-13 18:30:21 UTC (rev 1798)
@@ -599,12 +599,11 @@
 	if(GetCellID()==-1) return;
 	m_model.printXMI();	
 
- assert(m_interface);
   const tArray<double> & resource_count = m_interface->GetResources();
-
+  
   tList<tBuffer<int> > other_input_list;
   tList<tBuffer<int> > other_output_list;
-
+  
   // If tasks require us to consider neighbor inputs, collect them...
   if (m_world->GetEnvironment().UseNeighborInput()) {
     const int num_neighbors = m_interface->GetNumNeighbors();
@@ -612,11 +611,11 @@
       m_interface->Rotate();
       cOrganism * cur_neighbor = m_interface->GetNeighbor();
       if (cur_neighbor == NULL) continue;
-
+      
       other_input_list.Push( &(cur_neighbor->m_input_buf) );
     }
   }
-
+  
   // If tasks require us to consider neighbor outputs, collect them...
   if (m_world->GetEnvironment().UseNeighborOutput()) {
     const int num_neighbors = m_interface->GetNumNeighbors();
@@ -624,36 +623,47 @@
       m_interface->Rotate();
       cOrganism * cur_neighbor = m_interface->GetNeighbor();
       if (cur_neighbor == NULL) continue;
-
+      
       other_output_list.Push( &(cur_neighbor->m_output_buf) );
     }
   }
   
- // bool net_valid = false;
+//  bool net_valid = false;
  // if (m_net) net_valid = NetValidate(ctx, value);
-
+  
   // Do the testing of tasks performed...
-
+  
   // if on IO add value to m_output_buf, if on divide don't need to
-  //if (!on_divide) m_output_buf.Add(value);
+//  if(!on_divide) output_buffer.Add(value);
   
   tArray<double> res_change(resource_count.GetSize());
   tArray<int> insts_triggered;
-  bool clear_input = false;
-
+  
   tBuffer<int>* received_messages_point = &m_received_messages;
   if (!m_world->GetConfig().SAVE_RECEIVED.Get()) received_messages_point = NULL;
   
-  cTaskContext taskctx(m_interface, m_input_buf, m_output_buf, other_input_list, other_output_list, 0, 0, 0, received_messages_point, this);
-  m_phenotype.TestOutput(ctx, taskctx, resource_count, res_change, insts_triggered);
+  // Edited for UML branch
+  cTaskContext taskctx(m_interface, m_input_buf, m_output_buf, other_input_list, 
+                       other_output_list, 0, 0, 0, received_messages_point);
+  bool task_completed = m_phenotype.TestOutput(ctx, taskctx, resource_count, res_change, insts_triggered);
+  
+  if(m_world->GetConfig().ENERGY_ENABLED.Get() && m_world->GetConfig().APPLY_ENERGY_METHOD.Get() == 1 && task_completed) {
+    m_phenotype.RefreshEnergy();
+    double newMerit = m_phenotype.ApplyToEnergyStore();
+    if(newMerit != -1) {
+      m_interface->UpdateMerit(newMerit);
+    }
+  }
+
   m_interface->UpdateResources(res_change);
 
+  //if(m_world->GetConfig().CLEAR_ON_OUTPUT.Get()) input_buffer.Clear();  @JEB Not fully implemented 
+
   for (int i = 0; i < insts_triggered.GetSize(); i++) {
     const int cur_inst = insts_triggered[i];
     m_hardware->ProcessBonusInst(ctx, cInstruction(cur_inst));
   }
   
-  if (clear_input) m_input_buf.Clear();
  
 	m_world->GetStats().addState(m_model.numStates());
 	m_world->GetStats().addTrans(m_model.numTrans());

Modified: branches/uml/source/main/cStats.cc
===================================================================
--- branches/uml/source/main/cStats.cc	2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cStats.cc	2007-07-13 18:30:21 UTC (rev 1798)
@@ -996,3 +996,46 @@
   }
   df.Endl();
 }
+
+
+void cStats::PrintUMLData(const cString& filename)
+{
+	cDataFile& df = m_world->GetDataFile(filename);
+
+	df.WriteComment( "Avida uml data\n" );
+	df.WriteComment("the average number of transitions and states per organism");
+	df.WriteTimeStamp();
+	df.Write( GetUpdate(), "update" );
+	df.Write( av_number_of_states.Average(), "av num states");
+	df.Write( av_number_of_trans.Average(), "av num trans");
+	df.Write( av_number_of_triggers.Average(), "av num triggers");
+	df.Write( av_number_of_guards.Average(), "av num guards");
+	df.Write( av_number_of_actions.Average(), "av num actions");
+	df.Write( av_number_of_state_diagrams.Average(), "av num state diagrams");
+	df.Write( av_number_of_trans_lab.Average(), "av num of trans lab");
+	df.Write( m_hydraAttempt.Sum(), "total number of hydra attempts" );
+	df.Write( m_hydraPassed.Sum(), "total number of hydra passes" );
+	df.Write( m_spinAttempt.Sum(), "total number of spin attempts" );
+	df.Write( m_spinPassed.Sum(), "total number of spin passes" );
+	df.Write( m_panAttempt.Sum(), "total number of pan attempts" );
+	df.Write( m_panPassed.Sum(), "total number of pan passes" );
+	
+	av_number_of_states.Clear();
+	av_number_of_trans.Clear();
+	av_number_of_triggers.Clear();
+	av_number_of_guards.Clear();
+	av_number_of_actions.Clear();
+	av_number_of_state_diagrams.Clear();
+	
+	av_number_of_trans_lab.Clear();
+
+  m_hydraAttempt.Clear();
+  m_hydraPassed.Clear();
+  m_spinAttempt.Clear();
+  m_spinPassed.Clear();
+  m_panAttempt.Clear();
+  m_panPassed.Clear();
+
+
+df.Endl();
+}

Modified: branches/uml/source/main/cStats.h
===================================================================
--- branches/uml/source/main/cStats.h	2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cStats.h	2007-07-13 18:30:21 UTC (rev 1798)
@@ -249,6 +249,23 @@
   tArray<int> sense_last_exe_count;
   tArray<cString> sense_names;
 
+// Stats for UML state diagrams
+  cDoubleSum av_number_of_states;
+  cDoubleSum av_number_of_trans;	
+  cDoubleSum av_number_of_triggers;
+  cDoubleSum av_number_of_guards;
+  cDoubleSum av_number_of_actions;
+  cDoubleSum av_number_of_state_diagrams;
+  
+  cDoubleSum av_number_of_trans_lab;
+  cDoubleSum m_hydraAttempt;
+  cDoubleSum m_hydraPassed;
+  cDoubleSum m_spinAttempt;
+  cDoubleSum m_spinPassed;
+  cDoubleSum m_panAttempt;
+  cDoubleSum m_panPassed;
+
+
   cStats(); // @not_implemented
   cStats(const cStats&); // @not_implemented
   cStats& operator=(const cStats&); // @not_implemented
@@ -605,7 +622,26 @@
   void PrintMarketData(const cString& filename);
   void PrintSenseData(const cString& filename);
   void PrintSenseExeData(const cString& filename);
+  void PrintUMLData(const cString& filename);
+
   
+   // UML Data Function
+  void addState(int x) { av_number_of_states.Add(x); }
+  void addTrans(int x) { av_number_of_trans.Add(x); }
+  void addTriggers(int x) { av_number_of_triggers.Add(x); }
+  void addGuards(int x) { av_number_of_guards.Add(x); }
+  void addActions(int x) { av_number_of_actions.Add(x); }
+  void addStateDiagrams(int x) { av_number_of_state_diagrams.Add(x); }
+  
+  void addTransLabel(int x) { av_number_of_trans_lab.Add(x); }
+  void HydraAttempt() { m_hydraAttempt.Add(1); }
+  void HydraPassed() { m_hydraPassed.Add(1); }
+  void SpinAttempt() { m_spinAttempt.Add(1); }
+  void SpinPassed() { m_spinPassed.Add(1); }
+  void PanAttempt() { m_panAttempt.Add(1); }
+  void PanPassed() { m_panPassed.Add(1); }
+
+  
 };
 
 

Modified: branches/uml/source/main/cTaskContext.h
===================================================================
--- branches/uml/source/main/cTaskContext.h	2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cTaskContext.h	2007-07-13 18:30:21 UTC (rev 1798)
@@ -37,6 +37,9 @@
 #ifndef tHashTable_h
 #include "tHashTable.h"
 #endif
+#ifndef cOrganism
+#include "cOrganism.h"
+#endif
 
 class cTaskEntry;
 class cTaskState;
@@ -55,7 +58,9 @@
   tBuffer<int>* m_received_messages;
   int m_logic_id;
   bool m_on_divide;
+  
 
+
   // for optimize tasks actual value of function org is outputting, for all others nothing
   // implemented for now...
   double m_task_value;	
@@ -63,11 +68,18 @@
   cTaskEntry* m_task_entry;
   tHashTable<void*, cTaskState*>* m_task_states;
 
+
 public:
+
+  // For UML branch - Note: should eventually be made private.
+  bool m_task_success_complete;
+  cOrganism* organism;
+  
+
   cTaskContext(cOrgInterface* interface, const tBuffer<int>& inputs, const tBuffer<int>& outputs,
                const tList<tBuffer<int> >& other_inputs, const tList<tBuffer<int> >& other_outputs,
                bool in_net_valid, int in_net_completed, bool in_on_divide = false,
-               tBuffer<int>* in_received_messages = NULL)
+               tBuffer<int>* in_received_messages = NULL, cOrganism* in_org = NULL)
     : m_interface(interface)
     , m_input_buffer(inputs)
     , m_output_buffer(outputs)
@@ -80,6 +92,8 @@
     , m_on_divide(in_on_divide)
     , m_task_entry(NULL)
     , m_task_states(NULL)
+	, organism(in_org)
+	, m_task_success_complete(true)
   {
 	  m_task_value = 0;
   }

Modified: branches/uml/source/main/cTaskLib.cc
===================================================================
--- branches/uml/source/main/cTaskLib.cc	2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cTaskLib.cc	2007-07-13 18:30:21 UTC (rev 1798)
@@ -37,6 +37,9 @@
 #include <cmath>
 #include <climits>
 #include <iomanip>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
 
 // Various workarounds for Visual Studio shortcomings
 #if AVIDA_PLATFORM(WINDOWS)
@@ -382,7 +385,7 @@
     NewTask(name, "Successfully Received Network Message", &cTaskLib::Task_NetReceive);
   
   
-      // UML tasks
+    // UML tasks
   else if (name == "trans1") // 
 	  NewTask(name, "Successfully created trans 1", &cTaskLib::Task_Trans1);
   else if (name == "trans2") // 
@@ -405,6 +408,12 @@
 	  NewTask(name, "Successfully created trans 10", &cTaskLib::Task_Trans10);	  
   else if (name == "scene-1") // 
 	  NewTask(name, "Successfully created scenario 1", &cTaskLib::Task_Scenario1);
+  else if (name == "scene-2") // 
+	  NewTask(name, "Successfully created scenario 2", &cTaskLib::Task_Scenario2);
+  else if (name == "scene-3") // 
+	  NewTask(name, "Successfully created scenario 3", &cTaskLib::Task_Scenario3);
+  else if (name == "scene-4") // 
+	  NewTask(name, "Successfully created scenario 4", &cTaskLib::Task_Scenario4);	  
   else if (name == "numStates") // 
 	  NewTask(name, "Successfully created 5 states", &cTaskLib::Task_NumStates);  	  
   else if (name == "numTrans") // 
@@ -417,10 +426,16 @@
 	  NewTask(name, "Successfully ran Spin", &cTaskLib::Task_SpinN1);	  
   else if (name == "spin-w1") // 
 	  NewTask(name, "Successfully ran Spin witness trace", &cTaskLib::Task_SpinW1);
+  else if (name == "spin2") // 
+	  NewTask(name, "Successfully ran Spin", &cTaskLib::Task_SpinN2);	  
+  else if (name == "spin-w2") // 
+	  NewTask(name, "Successfully ran Spin witness trace", &cTaskLib::Task_SpinW2);
   else if (name == "mult_trans") // 
 	  NewTask(name, "Successfully completed multiple transitions", &cTaskLib::Task_MultTrans);
 	  
 	 
+	  
+	 
 
   // Make sure we have actually found a task  
   if (task_array.GetSize() == start_size) {
@@ -2749,7 +2764,7 @@
 	double bonus = 0.0;
 	
 	//Init 	
-	ctx.task_success_complete = true;	
+	ctx.m_task_success_complete = true;	
 
 //	if (ctx.organism->currTrans(1, -1, -1, -1, -1, "^TempSensor.getOpState()")) {		
 //	if (ctx.organism->currTrans(1, -1, -1, -1, -1, 1)) {		
@@ -2759,11 +2774,11 @@
 // temp sensor
 	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(0, 1, 0, 0, 0))
 	{
-	//	ctx.task_success_complete += 1;	
+	//	ctx.m_task_success_complete += 1;	
 		bonus = 1.0;
 	}
 	
-	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;	
 	return bonus;
 }
 
@@ -2781,7 +2796,7 @@
 			bonus = 1.0;
 	}
 
-	ctx.task_success_complete = ctx.task_success_complete && bonus;		
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;		
 	return bonus;
 
 }
@@ -2800,7 +2815,7 @@
 			bonus = 1.0;
 	}
 	
-	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;	
 	return bonus;
 
 }
@@ -2819,7 +2834,7 @@
 			bonus = 1.0;
 	}
 
-	ctx.task_success_complete = ctx.task_success_complete && bonus;		
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;		
 	return bonus;
 
 }
@@ -2835,7 +2850,7 @@
 			bonus = 1.0;
 	}
 
-	ctx.task_success_complete = ctx.task_success_complete && bonus;		
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;		
 	return bonus;
 
 }
@@ -2852,7 +2867,7 @@
 		bonus = 1.0;
 	}
 
-	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;	
 	return bonus;
 }
 
@@ -2867,7 +2882,7 @@
 			bonus = 1.0;
 	}
 
-	ctx.task_success_complete = ctx.task_success_complete && bonus;		
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;		
 	return bonus;
 
 }
@@ -2883,7 +2898,7 @@
 			bonus = 1.0;
 	}
 	
-	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;	
 	return bonus;
 
 }
@@ -2899,7 +2914,7 @@
 		bonus = 1.0;
 	}
 	
-	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;	
 	return bonus;
 
 }
@@ -2915,10 +2930,11 @@
 		bonus = 1.0;
 	}
 	
-	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;	
 	return bonus;
 }
 
+
 double cTaskLib::Task_Scenario1(cTaskContext& ctx) const
 {
 	double bonus = 0.0; 
@@ -2926,9 +2942,9 @@
 	
 	// Check if the tasks are complete so far... 
 	// This provides a basic ordering mechanism for the tasks.
-	if (!ctx.task_success_complete) {
+/*	if (!ctx.m_task_success_complete) {
 		return 0;
-	}	
+	}*/	
 	
 	// Check if this model is different than the organism's parent's model
 	if (ctx.organism->getParentXMI() != ctx.organism->getUMLModel()->getXMI()) {
@@ -2938,7 +2954,9 @@
 		path1.push_back("setTempOpState");
 	
 		// check for scneario
-		bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1)) / path1.size());
+//		bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1)) / path1.size());
+		bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1))); // / path1.size());
+
 	} else { 
 		bonus = ctx.organism->getParentBonus("scenario1"); 
 	}
@@ -2946,16 +2964,138 @@
 	// Set bonus info for current model
 	ctx.organism->getUMLModel()->setBonusInfo("scenario1", bonus);		
 		
-	if (bonus == 1) { 
-		ctx.task_success_complete = true;
+	/*if (bonus == 2) { 
+		ctx.m_task_success_complete  = ctx.m_task_success_complete && true;
 	} else { 
-		ctx.task_success_complete = false;	
+		ctx.m_task_success_complete = false;	
 	}
+	path1.clear();*/
+	return bonus;
+}
+
+
+double cTaskLib::Task_Scenario2(cTaskContext& ctx) const
+{
+	double bonus = 0.0; 
+	std::deque<std::string> path1;
 	
+	// Check if the tasks are complete so far... 
+	// This provides a basic ordering mechanism for the tasks.
+	/*if (!ctx.m_task_success_complete) {
+		return 0;
+	}*/	
+	
+	// Check if this model is different than the organism's parent's model
+	if (ctx.organism->getParentXMI() != ctx.organism->getUMLModel()->getXMI()) {
+		
+		// create the scenario
+		path1.push_back("^TempSensor.getTempData()");
+		path1.push_back("setTempData");
+	
+		// check for scneario
+		//bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1)) / path1.size());
+		bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1))); // / path1.size());
+		
+	} else { 
+		bonus = ctx.organism->getParentBonus("scenario2"); 
+	}
+	
+	// Set bonus info for current model
+	/*ctx.organism->getUMLModel()->setBonusInfo("scenario2", bonus);		
+	if (bonus == 2) { 
+		ctx.m_task_success_complete  = ctx.m_task_success_complete && true;
+	} else { 
+		ctx.m_task_success_complete = false;	
+	}*/
+	
+	// Set bonus info for current model
+	ctx.organism->getUMLModel()->setBonusInfo("scenario2", bonus);	
+	
 	return bonus;
 }
 
+double cTaskLib::Task_Scenario3(cTaskContext& ctx) const
+{
+	double bonus = 0.0; 
+	std::deque<std::string> path1;
+	
+	// Check if the tasks are complete so far... 
+	// This provides a basic ordering mechanism for the tasks.
+	/*if (!ctx.m_task_success_complete) {
+		return 0;
+	}*/	
+	
+	// Check if this model is different than the organism's parent's model
+	if (ctx.organism->getParentXMI() != ctx.organism->getUMLModel()->getXMI()) {
+		
+		// create the scenario
+		path1.push_back("getOpState");
+		path1.push_back("op_state:=1");
+		path1.push_back("^SoftwareSensor.setTempOpState(op_state)");
+		
+	
+		// check for scneario
+		//bonus = ((ctx.organism->getUMLModel()->getStateDiagram(0)->findPath(path1)) / path1.size());
+		bonus = ((ctx.organism->getUMLModel()->getStateDiagram(0)->findPath(path1))); // / path1.size());
 
+	} else { 
+		bonus = ctx.organism->getParentBonus("scenario3"); 
+	}
+	
+	// Set bonus info for current model
+	ctx.organism->getUMLModel()->setBonusInfo("scenario3", bonus);		
+
+	/*int temp = path1.size();	
+		
+	if (bonus == 3) { 
+		ctx.m_task_success_complete  = ctx.m_task_success_complete && true;
+	} else { 
+		ctx.m_task_success_complete = false;	
+	}*/
+	
+	return bonus;
+}
+
+double cTaskLib::Task_Scenario4(cTaskContext& ctx) const
+{
+	double bonus = 0.0; 
+	std::deque<std::string> path1;
+	
+	// Check if the tasks are complete so far... 
+	// This provides a basic ordering mechanism for the tasks.
+	/*if (!ctx.m_task_success_complete) {
+		return 0;
+	}*/	
+	
+	// Check if this model is different than the organism's parent's model
+	if (ctx.organism->getParentXMI() != ctx.organism->getUMLModel()->getXMI()) {
+		
+		// create the scenario
+		path1.push_back("getOpState");
+		path1.push_back("op_state:=0");
+		path1.push_back("^SoftwareSensor.setTempOpState(op_state)");
+		
+	
+		// check for scneario
+//		bonus = ((ctx.organism->getUMLModel()->getStateDiagram(0)->findPath(path1)) / path1.size());
+		bonus = ((ctx.organism->getUMLModel()->getStateDiagram(0)->findPath(path1))); // / path1.size());
+
+	} else { 
+		bonus = ctx.organism->getParentBonus("scenario4"); 
+	}
+	
+	// Set bonus info for current model
+	ctx.organism->getUMLModel()->setBonusInfo("scenario4", bonus);		
+		
+	/*if (bonus == 3) { 
+		ctx.m_task_success_complete = ctx.m_task_success_complete && true;
+	} else { 
+		ctx.m_task_success_complete = false;	
+	}*/
+	
+	return bonus;
+}
+
 double cTaskLib::Task_NumStates(cTaskContext& ctx) const
 {
 	double ns = (double) ctx.organism->getStateDiagram()->numStates();
@@ -2989,9 +3129,22 @@
 
 	temp = organism->getUMLModel()->getXMI();
 	
-	if (!ctx.task_success_complete) {
+	int temp1, temp2, temp3, temp4; 
+	temp1= ctx.organism->getUMLModel()->getBonusInfo("scenario1");
+	temp2= ctx.organism->getUMLModel()->getBonusInfo("scenario2");
+	temp3= ctx.organism->getUMLModel()->getBonusInfo("scenario3");
+	temp4= ctx.organism->getUMLModel()->getBonusInfo("scenario4");
+	
+	if (!((ctx.organism->getUMLModel()->getBonusInfo("scenario1") == 2) && 
+	//	(ctx.organism->getUMLModel()->getBonusInfo("scenario2") == 2) && 
+		(ctx.organism->getUMLModel()->getBonusInfo("scenario3") == 3) && 
+		(ctx.organism->getUMLModel()->getBonusInfo("scenario4") == 3))) {
+		ctx.organism->getUMLModel()->setBonusInfo("hydra", bonus);
 		return 0;
 	}
+	/*if (!ctx.m_task_success_complete) {
+		return 0;
+	}*/
 	
 	
 	m_world->GetStats().HydraAttempt();
@@ -2999,7 +3152,7 @@
 	if (ctx.organism->getParentXMI() == temp) {
 	
 		bonus = ctx.organism->getParentBonus("hydra"); 
-		if (bonus) ctx.task_success_complete = true;
+		//if (bonus) ctx.m_task_success_complete = true;
 		ctx.organism->getUMLModel()->setBonusInfo("hydra", bonus);	
 		return bonus;
 	}		
@@ -3067,12 +3220,12 @@
 	// if there are no errors, return 0 from hydraulic.  otherwise, return non-zero.
 	if(status != 0) {
 //		organism->setBonusInfo("hydra", 0.0); 
-		ctx.task_success_complete = false;	
+		ctx.m_task_success_complete = false;	
 		bonus =  0.0;
 	} else {
 		m_world->GetStats().HydraPassed();
 //		organism->setBonusInfo("hydra", 1.0); 
-		ctx.task_success_complete = true;	
+		ctx.m_task_success_complete = true;	
 		bonus = 1.0;
 	}
 	
@@ -3104,7 +3257,7 @@
 	if(system("cat pan.out | perl -e 'while(<STDIN>) { if(/errors:\\s(\\d+)/) {exit($1);}}'")!=0) return 0.0;
 //	if(system("cat pan.out | perl -e 'while(<STDIN>) { if(/unreached/) {exit(1);}}'")!=0) return 0.2;
 	
-	std::cout << "I AM HERE" << std::endl;
+//	std::cout << "I AM HERE" << std::endl;
 	std::ostringstream strstrm;
 	strstrm << "cp tmp.xmi " << m_world->GetStats().GetUpdate() << "." << organism->GetID();
 	strstrm << ".xml";	
@@ -3119,8 +3272,9 @@
 //	m_world->GetStats().SpinAttempt();
 	int status=0;
 	int num_witness = 0;
+	const int max_witness = 5;
 	
-	ctx.task_success_complete = false;
+	ctx.m_task_success_complete = false;
 	std::string cmd = "cp tmp.pr tmp-witness.pr" ;
 	if(system(cmd.c_str())!=0) return 0.0;
 	
@@ -3142,15 +3296,22 @@
 			
 //	m_world->GetStats().PanPassed();
 
-	ctx.task_success_complete = num_witness;
-	return num_witness;
+	if (num_witness == max_witness) { 
+		ctx.m_task_success_complete = true;
+	} else { 
+		ctx.m_task_success_complete = false;	
+	}	
+	return (num_witness/max_witness);
 }
 
 double cTaskLib::Task_SpinN1(cTaskContext& ctx) const {
 	//cOrganism* organism = ctx.organism;
 	double bonus = 0.0;
 	
-	if (!ctx.task_success_complete) return bonus;
+	if (ctx.organism->getUMLModel()->getBonusInfo("hydra") == 0) { 
+		return bonus;
+	}
+
 	
 	if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {
 	
@@ -3161,11 +3322,11 @@
 		bonus = SpinCoprocess(ctx, "N1");
 	}
 	
-	if (bonus) {
-		ctx.task_success_complete = true;
+	/*if (bonus) {
+		ctx.m_task_success_complete = true;
 	} else { 
-		ctx.task_success_complete = false;
-	}
+		ctx.m_task_success_complete = false;
+	}*/
 	ctx.organism->getUMLModel()->setBonusInfo("spinn1", bonus);	
 
 	return bonus;
@@ -3177,7 +3338,10 @@
 //	cOrganism* organism = ctx.organism;
 //	double temp1 = 0.0;
 	double bonus = 0.0;
-	if (!ctx.task_success_complete) return bonus;
+	//if (!ctx.m_task_success_complete) return bonus;
+	if (ctx.organism->getUMLModel()->getBonusInfo("hydra") == 0) { 
+		return bonus;
+	}
 	
 	if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {	
 		bonus = ctx.organism->getParentBonus("spinw1"); 
@@ -3187,18 +3351,77 @@
 		bonus = SpinWitnessCoprocess(ctx, "W1");
 	}
 	
-	if (bonus) {
-		ctx.task_success_complete = true;
+	/*if (bonus) {
+		ctx.m_task_success_complete = true;
 	} else { 
-		ctx.task_success_complete = false;
-	}
+		ctx.m_task_success_complete = false;
+	}*/
 	ctx.organism->getUMLModel()->setBonusInfo("spinw1", bonus);	
 
 	return bonus;
 }
 
+
+double cTaskLib::Task_SpinN2(cTaskContext& ctx) const {
+	//cOrganism* organism = ctx.organism;
+	double bonus = 0.0;
+	
+	//if (!ctx.m_task_success_complete) return bonus;
+	if (ctx.organism->getUMLModel()->getBonusInfo("hydra") == 0) { 
+		return bonus;
+	}
+	
+	if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {
+	
+		bonus = ctx.organism->getParentBonus("spinn2"); 
+//		return bonus;
+	}	else {
+	
+		bonus = SpinCoprocess(ctx, "N2");
+	}
+	
+	/*if (bonus) {
+		ctx.m_task_success_complete = true;
+	} else { 
+		ctx.m_task_success_complete = false;
+	}*/
+	ctx.organism->getUMLModel()->setBonusInfo("spinn2", bonus);	
+
+	return bonus;
+}
+
+
+
+double cTaskLib::Task_SpinW2(cTaskContext& ctx) const { 
+//	cOrganism* organism = ctx.organism;
+//	double temp1 = 0.0;
+	double bonus = 0.0;
+	//if (!ctx.m_task_success_complete) return bonus;
+	if (ctx.organism->getUMLModel()->getBonusInfo("hydra") == 0) { 
+		return bonus;
+	}
+		
+	if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {	
+		bonus = ctx.organism->getParentBonus("spinw2"); 
+//		return bonus;
+	}	else {
+	
+		bonus = SpinWitnessCoprocess(ctx, "W2");
+	}
+	
+	/*if (bonus) {
+		ctx.m_task_success_complete = true;
+	} else { 
+		ctx.m_task_success_complete = false;
+	}*/
+	ctx.organism->getUMLModel()->setBonusInfo("spinw2", bonus);	
+
+	return bonus;
+}
+
+
 double cTaskLib::Task_MultTrans(cTaskContext& ctx) const {
-	return (2^ctx.task_success_complete);
+	return (2^ctx.m_task_success_complete);
 }
 
 
@@ -3211,6 +3434,6 @@
 		bonus = 1.0;
 	}
 	
-	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;	
 	return bonus;
 }

Modified: branches/uml/source/main/cTaskLib.h
===================================================================
--- branches/uml/source/main/cTaskLib.h	2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cTaskLib.h	2007-07-13 18:30:21 UTC (rev 1798)
@@ -288,6 +288,9 @@
   double Task_Trans9(cTaskContext& ctx) const;   
   double Task_Trans10(cTaskContext& ctx) const;
   double Task_Scenario1(cTaskContext& ctx) const;
+  double Task_Scenario2(cTaskContext& ctx) const;
+  double Task_Scenario3(cTaskContext& ctx) const;
+  double Task_Scenario4(cTaskContext& ctx) const;
   double Task_NumStates(cTaskContext& ctx) const;
   double Task_NumTrans(cTaskContext& ctx) const;
   double Task_PropTrigger(cTaskContext& ctx) const;
@@ -295,7 +298,9 @@
   double SpinCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const;
   double SpinWitnessCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const;
   double Task_SpinN1(cTaskContext& ctx) const;
+  double Task_SpinN2(cTaskContext& ctx) const;
   double Task_SpinW1(cTaskContext& ctx) const;
+  double Task_SpinW2(cTaskContext& ctx) const;	
   double Task_MultTrans(cTaskContext& ctx) const;  
 };
 




More information about the Avida-cvs mailing list