[Avida-cvs] [avida-svn] r469 - trunk/source/main

goingssh@myxo.css.msu.edu goingssh at myxo.css.msu.edu
Tue Feb 7 08:56:45 PST 2006


Author: goingssh
Date: 2006-02-07 11:56:44 -0500 (Tue, 07 Feb 2006)
New Revision: 469

Modified:
   trunk/source/main/cEnvironment.cc
   trunk/source/main/cPhenotype.cc
   trunk/source/main/cPhenotype.h
   trunk/source/main/cPopulation.cc
   trunk/source/main/cReactionResult.cc
   trunk/source/main/cReactionResult.h
   trunk/source/main/cStats.cc
   trunk/source/main/cStats.h
   trunk/source/main/cTaskLib.cc
Log:
Added ability to report average task quality in tasks.dat file instead of just how many organsims are performing a given task

Modified: trunk/source/main/cEnvironment.cc
===================================================================
--- trunk/source/main/cEnvironment.cc	2006-02-06 20:18:42 UTC (rev 468)
+++ trunk/source/main/cEnvironment.cc	2006-02-07 16:56:44 UTC (rev 469)
@@ -46,6 +46,7 @@
 #include "cTools.h"
 #endif
 
+#include <iostream>
 using namespace std;
 
 cEnvironment::cEnvironment()
@@ -760,7 +761,6 @@
     // If this task wasn't performed, move on to the next one.
     if (task_quality == 0.0) continue;
 
-
     // Examine requisites on this reaction
     if (TestRequisites(cur_reaction->GetRequisites(), task_count[task_id],
 		       reaction_count) == false) continue;

Modified: trunk/source/main/cPhenotype.cc
===================================================================
--- trunk/source/main/cPhenotype.cc	2006-02-06 20:18:42 UTC (rev 468)
+++ trunk/source/main/cPhenotype.cc	2006-02-07 16:56:44 UTC (rev 469)
@@ -31,10 +31,12 @@
   : environment(_environment)
   , initialized(false)
   , cur_task_count(environment.GetTaskLib().GetSize())
+  , cur_task_quality(environment.GetTaskLib().GetSize())
   , cur_reaction_count(environment.GetReactionLib().GetSize())
   , cur_inst_count(environment.GetInstSet().GetSize())
   , sensed_resources(environment.GetResourceLib().GetSize())
   , last_task_count(environment.GetTaskLib().GetSize())
+  , last_task_quality(environment.GetTaskLib().GetSize())
   , last_reaction_count(environment.GetReactionLib().GetSize())
   , last_inst_count(environment.GetInstSet().GetSize())
 {
@@ -104,6 +106,7 @@
   cur_num_errors  = 0;
   cur_num_donates  = 0;
   cur_task_count.SetAll(0);
+  cur_task_quality.SetAll(0);
   cur_reaction_count.SetAll(0);
   cur_inst_count.SetAll(0);
   for (int j = 0; j < sensed_resources.GetSize(); j++)
@@ -116,6 +119,7 @@
   last_num_errors     = parent_phenotype.last_num_errors;
   last_num_donates    = parent_phenotype.last_num_donates;
   last_task_count     = parent_phenotype.last_task_count;
+  last_task_quality   = parent_phenotype.last_task_quality;
   last_reaction_count = parent_phenotype.last_reaction_count;
   last_inst_count     = parent_phenotype.last_inst_count;
   last_fitness        = last_merit_base * last_bonus / gestation_time;
@@ -196,6 +200,7 @@
   last_num_errors = 0;
   last_num_donates = 0;
   last_task_count.SetAll(0);
+  last_task_quality.SetAll(0);
   last_reaction_count.SetAll(0);
   last_inst_count.SetAll(0);
 
@@ -264,6 +269,7 @@
   last_num_errors     = cur_num_errors;
   last_num_donates    = cur_num_donates;
   last_task_count     = cur_task_count;
+  last_task_quality   = cur_task_quality;
   last_reaction_count = cur_reaction_count;
   last_inst_count     = cur_inst_count;
 
@@ -272,6 +278,7 @@
   cur_num_errors  = 0;
   cur_num_donates  = 0;
   cur_task_count.SetAll(0);
+  cur_task_quality.SetAll(0);
   cur_reaction_count.SetAll(0);
   cur_inst_count.SetAll(0);
 
@@ -349,6 +356,7 @@
   last_num_errors     = cur_num_errors;
   last_num_donates    = cur_num_donates;
   last_task_count     = cur_task_count;
+  last_task_quality   = cur_task_quality;
   last_reaction_count = cur_reaction_count;
   last_inst_count     = cur_inst_count;
 
@@ -357,6 +365,7 @@
   cur_num_errors  = 0;
   cur_num_donates  = 0;
   cur_task_count.SetAll(0);
+  cur_task_quality.SetAll(0);
   cur_reaction_count.SetAll(0);
   cur_inst_count.SetAll(0);
   sensed_resources.SetAll(-1.0);
@@ -526,6 +535,9 @@
   for (int i = 0; i < num_tasks; i++) {
     if (result.TaskDone(i) == true) cur_task_count[i]++;
   }
+  for (int i = 0; i < num_tasks; i++) {
+    if (result.TaskQuality(i) > 0) cur_task_quality[i]+= result.TaskQuality(i);
+  }
   for (int i = 0; i < num_reactions; i++) {
     if (result.ReactionTriggered(i) == true) cur_reaction_count[i]++;
   }

Modified: trunk/source/main/cPhenotype.h
===================================================================
--- trunk/source/main/cPhenotype.h	2006-02-06 20:18:42 UTC (rev 468)
+++ trunk/source/main/cPhenotype.h	2006-02-07 16:56:44 UTC (rev 469)
@@ -74,6 +74,7 @@
   int cur_num_errors;             // Total instructions executed illeagally.
   int cur_num_donates;            // Number of donations so far
   tArray<int> cur_task_count;     // Total times each task was performed
+  tArray<double> cur_task_quality;	  // Average (total?) quality with which each task was performed
   tArray<int> cur_reaction_count; // Total times each reaction was triggered.
   tArray<int> cur_inst_count;	  // Intruction exection counter
   tArray<double> sensed_resources; // Resources of which the organism is explictly aware
@@ -84,6 +85,7 @@
   int last_num_errors;
   int last_num_donates;
   tArray<int> last_task_count;
+  tArray<double> last_task_quality;
   tArray<int> last_reaction_count;
   tArray<int> last_inst_count;	  // Intruction exection counter
   double last_fitness;            // Used to determine sterilization.
@@ -203,6 +205,8 @@
     { assert(initialized == true); return cur_num_donates; }
   const tArray<int> & GetCurTaskCount() const
     { assert(initialized == true); return cur_task_count; }
+  const tArray<double> & GetCurTaskQuality() const
+    { assert(initialized == true); return cur_task_quality; }
   const tArray<int> & GetCurReactionCount() const
     { assert(initialized == true); return cur_reaction_count;}
   const tArray<int> & GetCurInstCount() const
@@ -223,6 +227,8 @@
     { assert(initialized == true); return last_num_donates; }
   const tArray<int> & GetLastTaskCount() const
     { assert(initialized == true); return last_task_count; }
+  const tArray<double> & GetLastTaskQuality() const
+    { assert(initialized == true); return last_task_quality; }
   const tArray<int> & GetLastReactionCount() const
     { assert(initialized == true); return last_reaction_count; }
   const tArray<int> & GetLastInstCount() const

Modified: trunk/source/main/cPopulation.cc
===================================================================
--- trunk/source/main/cPopulation.cc	2006-02-06 20:18:42 UTC (rev 468)
+++ trunk/source/main/cPopulation.cc	2006-02-07 16:56:44 UTC (rev 469)
@@ -1238,9 +1238,18 @@
     
     // Test what tasks this creatures has completed.
     for (int j=0; j < phenotype.GetEnvironment().GetTaskLib().GetSize(); j++) {
-      if (phenotype.GetCurTaskCount()[j] > 0)  stats.AddCurTask(j);
-      if (phenotype.GetLastTaskCount()[j] > 0) stats.AddLastTask(j);
+      if (phenotype.GetCurTaskCount()[j] > 0)  
+	  {
+		  stats.AddCurTask(j);
+		  stats.AddCurTaskQuality(j, phenotype.GetCurTaskQuality()[j]);
+	  }
+
       if (phenotype.GetLastTaskCount()[j] > 0) 
+	  {
+		  stats.AddLastTask(j);
+		  stats.AddLastTaskQuality(j, phenotype.GetLastTaskQuality()[j]);
+	  }
+      if (phenotype.GetLastTaskCount()[j] > 0) 
         stats.IncTaskExeCount(j, phenotype.GetLastTaskCount()[j]);
     }
     

Modified: trunk/source/main/cReactionResult.cc
===================================================================
--- trunk/source/main/cReactionResult.cc	2006-02-06 20:18:42 UTC (rev 468)
+++ trunk/source/main/cReactionResult.cc	2006-02-07 16:56:44 UTC (rev 469)
@@ -6,6 +6,8 @@
 //////////////////////////////////////////////////////////////////////////////
 
 #include "cReactionResult.h"
+#include <iostream>
+using namespace std;
 
 
 cReactionResult::cReactionResult(const int num_resources,
@@ -78,11 +80,11 @@
  lethal = flag;
 }
 
-void cReactionResult::MarkTask(int id, const double quality)
+void cReactionResult::MarkTask(int id, double quality)
 {
   ActivateReaction();
   tasks_done[id] = true;
-  tasks_quality[id]+=quality;
+  tasks_quality[id] = quality;
 }
 
 
@@ -164,7 +166,7 @@
 
 double cReactionResult::TaskQuality(int id)
 {
-	if (GetActive() == false) return false;
+	if (GetActive() == false) return 0;
 	return tasks_quality[id];
 }
 

Modified: trunk/source/main/cReactionResult.h
===================================================================
--- trunk/source/main/cReactionResult.h	2006-02-06 20:18:42 UTC (rev 468)
+++ trunk/source/main/cReactionResult.h	2006-02-07 16:56:44 UTC (rev 469)
@@ -20,7 +20,7 @@
   tArray<double> resources_produced;
   tArray<double> resources_detected;  //Initialize to -1.0
   tArray<bool> tasks_done;
-  tArray<bool> tasks_quality;
+  tArray<double> tasks_quality;
   tArray<bool> receive_tasks_done;
   tArray<bool> send_tasks_done;
   tArray<bool> reactions_triggered;
@@ -42,7 +42,7 @@
   void Produce(int id, double num);
   void Detect(int id, double num);
   void Lethal(bool flag);
-  void MarkTask(int id, const double quality=1);
+  void MarkTask(int id, double quality=1);
   void MarkReceiveTask(int id);
   void MarkSendTask(int id);
   void MarkReaction(int id);

Modified: trunk/source/main/cStats.cc
===================================================================
--- trunk/source/main/cStats.cc	2006-02-06 20:18:42 UTC (rev 468)
+++ trunk/source/main/cStats.cc	2006-02-07 16:56:44 UTC (rev 469)
@@ -101,9 +101,13 @@
 
   task_cur_count.Resize( cConfig::GetNumTasks() );
   task_last_count.Resize( cConfig::GetNumTasks() );
+  task_cur_quality.Resize( cConfig::GetNumTasks() );
+  task_last_quality.Resize( cConfig::GetNumTasks() );
   task_exe_count.Resize( cConfig::GetNumTasks() );
   task_cur_count.SetAll(0);
   task_last_count.SetAll(0);
+  task_cur_quality.SetAll(0);
+  task_last_quality.SetAll(0);
   task_exe_count.SetAll(0);
 
 #ifdef INSTRUCTION_COUNT
@@ -235,6 +239,8 @@
   for( int i=0; i < task_cur_count.GetSize(); i++ ){
     task_cur_count[i] = 0;
     task_last_count[i] = 0;
+	task_cur_quality[i] = 0;
+    task_last_quality[i] = 0;
   }
 }
 
@@ -392,6 +398,8 @@
 
   task_cur_count.SetAll(0);
   task_last_count.SetAll(0);
+  task_cur_quality.SetAll(0);
+  task_last_quality.SetAll(0);
   task_exe_count.SetAll(0);
 
   dom_merit = 0;
@@ -651,13 +659,18 @@
 
   df.WriteComment( "Avida tasks data" );
   df.WriteTimeStamp();
-  df.WriteComment( "First column gives the current update, all further columns give the number" );
-  df.WriteComment( "of organisms that have the particular task as a component of the merit." );
+  df.WriteComment( "First column gives the current update, next columns give the number" );
+  df.WriteComment( "of organisms that have the particular task as a component of their merit" );
+  //df.WriteComment( "and the total task quality of all those orgs performing it" );
 
 
   df.Write( GetUpdate(),   "Update");
   for(int i = 0; i < task_last_count.GetSize(); i++) {
     df.Write( task_last_count[i], task_names[i] );
+	double qual=0;
+	if (task_last_count[i] > 0)
+		qual = task_last_quality[i]/(double)task_last_count[i];
+	//df.Write( qual, "quality" );
   }
   df.Endl();
 }

Modified: trunk/source/main/cStats.h
===================================================================
--- trunk/source/main/cStats.h	2006-02-06 20:18:42 UTC (rev 468)
+++ trunk/source/main/cStats.h	2006-02-07 16:56:44 UTC (rev 469)
@@ -221,6 +221,8 @@
 
   tArray<int> task_cur_count;
   tArray<int> task_last_count;
+  tArray<double> task_cur_quality;
+  tArray<double> task_last_quality;
   tArray<int> task_exe_count;
 
   tArray<double> reaction_count;
@@ -444,7 +446,9 @@
   void IncExecuted() { num_executed++; }
 
   void AddCurTask(int task_num) { task_cur_count[task_num]++; }
+  void AddCurTaskQuality(int task_num, double quality) { task_cur_quality[task_num] += quality; }
   void AddLastTask(int task_num) { task_last_count[task_num]++; }
+  void AddLastTaskQuality(int task_num, double quality) { task_last_quality[task_num] += quality; }
   void IncTaskExeCount(int task_num, int task_count) 
     { task_exe_count[task_num] += task_count; }
   void ZeroTasks();
@@ -492,6 +496,8 @@
 
   int GetTaskCurCount(int task_num) const { return task_cur_count[task_num]; }
   int GetTaskLastCount(int task_num) const {return task_last_count[task_num];}
+  int GetTaskCurQuality(int task_num) const { return task_cur_quality[task_num]; }
+  int GetTaskLastQuality(int task_num) const {return task_last_quality[task_num];}
   int GetTaskExeCount(int task_num) const { return task_exe_count[task_num]; }
 
   const tArray<double> & GetReactions() const { return reaction_count; }

Modified: trunk/source/main/cTaskLib.cc
===================================================================
--- trunk/source/main/cTaskLib.cc	2006-02-06 20:18:42 UTC (rev 468)
+++ trunk/source/main/cTaskLib.cc	2006-02-07 16:56:44 UTC (rev 469)
@@ -1699,13 +1699,12 @@
 		if (num_matched > max_num_matched)
 			max_num_matched = num_matched;
 	//}
+	output_buffer.Add(1234);
 
-	// return # of bits matched over the expected 50% that would match just by chance 
-	// this value is multiplied into the bonus
-	int bonus = max_num_matched - string_to_match.GetSize()/2;
-	if (bonus < 0)
-		bonus = 0;
-	return (double) bonus;
+
+	// return value between 0 & 1 representing the percentage of string that was matched
+	double bonus = pow((double(max_num_matched*2)/(double)string_to_match.GetSize()),2);
+	return bonus;
 }
 
 double cTaskLib::Task_CommEcho() const




More information about the Avida-cvs mailing list