[Avida-SVN] r1585 - in development/source: actions main

goingssh at myxo.css.msu.edu goingssh at myxo.css.msu.edu
Tue May 22 03:27:01 PDT 2007


Author: goingssh
Date: 2007-05-22 06:27:00 -0400 (Tue, 22 May 2007)
New Revision: 1585

Modified:
   development/source/actions/PopulationActions.cc
   development/source/main/cEnvironment.cc
   development/source/main/cPhenotype.cc
   development/source/main/cPhenotype.h
   development/source/main/cReactionResult.cc
   development/source/main/cReactionResult.h
   development/source/main/cTaskContext.h
   development/source/main/cTaskLib.cc
Log:
Implementing relative task quality based on other orgs outputs

Modified: development/source/actions/PopulationActions.cc
===================================================================
--- development/source/actions/PopulationActions.cc	2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/actions/PopulationActions.cc	2007-05-22 10:27:00 UTC (rev 1585)
@@ -34,6 +34,7 @@
 #include "cPopulationCell.h"
 #include "cStats.h"
 #include "cWorld.h"
+#include "cOrganism.h"
 
 
 /*
@@ -1430,7 +1431,7 @@
   void Process(cAvidaContext& ctx)
   {
     for (int i = 0; i < m_world->GetPopulation().GetSize(); i++) {
-      m_world->GetPopulation().GetCell(i).GetOrganism();
+      (m_world->GetPopulation().GetCell(i).GetOrganism())->GetPhenotype();
     }
   }
 };

Modified: development/source/main/cEnvironment.cc
===================================================================
--- development/source/main/cEnvironment.cc	2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cEnvironment.cc	2007-05-22 10:27:00 UTC (rev 1585)
@@ -825,12 +825,13 @@
     }
 
     const double task_quality = m_tasklib.TestOutput(taskctx);
+	
 
     // If this task wasn't performed, move on to the next one.
     if (task_quality == 0.0) continue;
     
     // Mark this task as performed...
-    result.MarkTask(task_id, task_quality);
+    result.MarkTask(task_id, task_quality, taskctx.GetTaskValue());
 
     // And lets process it!
     DoProcesses(ctx, cur_reaction->GetProcesses(), resource_count, task_quality, task_cnt, i, result);

Modified: development/source/main/cPhenotype.cc
===================================================================
--- development/source/main/cPhenotype.cc	2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cPhenotype.cc	2007-05-22 10:27:00 UTC (rev 1585)
@@ -44,6 +44,7 @@
   , cur_task_count(m_world->GetEnvironment().GetNumTasks())
   , eff_task_count(m_world->GetEnvironment().GetNumTasks())
   , cur_task_quality(m_world->GetEnvironment().GetNumTasks())  
+  , cur_task_value(m_world->GetEnvironment().GetNumTasks())  
   , cur_reaction_count(m_world->GetEnvironment().GetReactionLib().GetSize())
   , cur_reaction_add_reward(m_world->GetEnvironment().GetReactionLib().GetSize())
   , cur_inst_count(world->GetHardwareManager().GetInstSet().GetSize())
@@ -52,6 +53,7 @@
   , last_task_count(m_world->GetEnvironment().GetNumTasks())
   , last_reaction_add_reward(m_world->GetEnvironment().GetReactionLib().GetSize())  
   , last_task_quality(m_world->GetEnvironment().GetNumTasks())
+  , last_task_value(m_world->GetEnvironment().GetNumTasks())
   , last_reaction_count(m_world->GetEnvironment().GetReactionLib().GetSize())
   , last_inst_count(world->GetHardwareManager().GetInstSet().GetSize())
   , last_sense_count(m_world->GetStats().GetSenseSize())
@@ -132,6 +134,7 @@
   cur_task_count.SetAll(0);
   eff_task_count.SetAll(0);
   cur_task_quality.SetAll(0);
+  cur_task_value.SetAll(0);
   cur_reaction_count.SetAll(0);
   cur_reaction_add_reward.SetAll(0);
   cur_inst_count.SetAll(0);
@@ -147,6 +150,7 @@
   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_task_value			= parent_phenotype.last_task_value;
   last_reaction_count       = parent_phenotype.last_reaction_count;
   last_reaction_add_reward  = parent_phenotype.last_reaction_add_reward;
   last_inst_count           = parent_phenotype.last_inst_count;
@@ -222,6 +226,7 @@
   cur_task_count.SetAll(0);
   eff_task_count.SetAll(0);
   cur_task_quality.SetAll(0);
+  cur_task_value.SetAll(0);
   cur_reaction_count.SetAll(0);
   cur_reaction_add_reward.SetAll(0);
   cur_inst_count.SetAll(0);
@@ -236,6 +241,7 @@
   last_num_donates = 0;
   last_task_count.SetAll(0);
   last_task_quality.SetAll(0);
+  last_task_value.SetAll(0);
   last_reaction_count.SetAll(0);
   last_reaction_add_reward.SetAll(0);
   last_sense_count.SetAll(0);
@@ -316,6 +322,7 @@
   last_num_donates          = cur_num_donates;
   last_task_count           = cur_task_count;
   last_task_quality         = cur_task_quality;
+  last_task_value			= cur_task_value;
   last_reaction_count       = cur_reaction_count;
   last_reaction_add_reward  = cur_reaction_add_reward;
   last_inst_count           = cur_inst_count;
@@ -328,6 +335,7 @@
   cur_task_count.SetAll(0);
   eff_task_count.SetAll(0);
   cur_task_quality.SetAll(0);
+  cur_task_value.SetAll(0);
   cur_reaction_count.SetAll(0);
   cur_reaction_add_reward.SetAll(0);
   cur_inst_count.SetAll(0);
@@ -416,6 +424,7 @@
   last_num_donates          = cur_num_donates;
   last_task_count           = cur_task_count;
   last_task_quality         = cur_task_quality;
+  last_task_value			= cur_task_value;
   last_reaction_count       = cur_reaction_count;
   last_reaction_add_reward  = cur_reaction_add_reward;
   last_inst_count           = cur_inst_count;
@@ -428,6 +437,7 @@
   cur_task_count.SetAll(0);
   eff_task_count.SetAll(0);
   cur_task_quality.SetAll(0);
+  cur_task_value.SetAll(0);
   cur_reaction_count.SetAll(0);
   cur_reaction_add_reward.SetAll(0);
   cur_inst_count.SetAll(0);
@@ -610,6 +620,7 @@
       eff_task_count[i]++;
     }
     if (result.TaskQuality(i) > 0) cur_task_quality[i]+= result.TaskQuality(i);
+	cur_task_value[i] = result.TaskValue(i);
   }
   for (int i = 0; i < num_reactions; i++) {
     if (result.ReactionTriggered(i) == true) cur_reaction_count[i]++;

Modified: development/source/main/cPhenotype.h
===================================================================
--- development/source/main/cPhenotype.h	2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cPhenotype.h	2007-05-22 10:27:00 UTC (rev 1585)
@@ -107,6 +107,7 @@
   tArray<int> cur_task_count;                 // Total times each task was performed
   tArray<int> eff_task_count;                 // Total times each task was performed (resetable during the life of the organism)
   tArray<double> cur_task_quality;            // Average (total?) quality with which each task was performed
+  tArray<double> cur_task_value;			  // Value with which this phenotype performs task
   tArray<int> cur_reaction_count;             // Total times each reaction was triggered.  
   tArray<double> cur_reaction_add_reward;     // Bonus change from triggering each reaction.
   tArray<int> cur_inst_count;                 // Instruction exection counter
@@ -129,6 +130,7 @@
   int last_num_donates;
   tArray<int> last_task_count;
   tArray<double> last_task_quality;
+  tArray<double> last_task_value;
   tArray<int> last_reaction_count;
   tArray<double> last_reaction_add_reward; 
   tArray<int> last_inst_count;	  // Instruction exection counter
@@ -246,6 +248,7 @@
   const tArray<int>& GetCurTaskCount() const { assert(initialized == true); return cur_task_count; }
   void ClearEffTaskCount() { assert(initialized == true); eff_task_count.SetAll(0); }
   const tArray<double> & GetCurTaskQuality() const { assert(initialized == true); return cur_task_quality; }
+  const tArray<double> & GetCurTaskValue() const { assert(initialized == true); return cur_task_value; }
   const tArray<int>& GetCurReactionCount() const { assert(initialized == true); return cur_reaction_count;}
   const tArray<int>& GetCurInstCount() const { assert(initialized == true); return cur_inst_count; }
   const tArray<int>& GetCurSenseCount() const { assert(initialized == true); return cur_sense_count; }
@@ -261,6 +264,7 @@
   int GetLastNumDonates() const { 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<double>& GetLastTaskValue() const { assert(intialized == true); return last_task_value; }
   const tArray<int>& GetLastReactionCount() const { assert(initialized == true); return last_reaction_count; }
   const tArray<double>& GetLastReactionAddReward() const { assert(initialized == true); return last_reaction_add_reward; }
   const tArray<int>& GetLastInstCount() const { assert(initialized == true); return last_inst_count; }

Modified: development/source/main/cReactionResult.cc
===================================================================
--- development/source/main/cReactionResult.cc	2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cReactionResult.cc	2007-05-22 10:27:00 UTC (rev 1585)
@@ -34,6 +34,7 @@
   , resources_detected(num_resources)
   , tasks_done(num_tasks)
   , tasks_quality(num_tasks)
+  , tasks_value(num_tasks)
   , reactions_triggered(num_reactions)
   , reaction_add_bonus(num_reactions)
   , bonus_add(0.0)
@@ -55,6 +56,7 @@
   resources_detected.SetAll(-1.0);
   tasks_done.SetAll(false);
   tasks_quality.SetAll(0.0);
+  tasks_value.SetAll(0.0);
   reactions_triggered.SetAll(false);
   reaction_add_bonus.SetAll(0.0);
 
@@ -89,11 +91,12 @@
  lethal = flag;
 }
 
-void cReactionResult::MarkTask(int id, const double quality)
+void cReactionResult::MarkTask(int id, const double quality, const double value)
 {
   ActivateReaction();
   tasks_done[id] = true;
   tasks_quality[id] = quality;
+  tasks_value[id] = value;
 }
 
 
@@ -166,3 +169,9 @@
 	return tasks_quality[id];
 }
 
+double cReactionResult::TaskValue(int id)
+{
+	if (GetActive() == false) return 0;
+	return tasks_value[id];
+}
+

Modified: development/source/main/cReactionResult.h
===================================================================
--- development/source/main/cReactionResult.h	2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cReactionResult.h	2007-05-22 10:27:00 UTC (rev 1585)
@@ -37,6 +37,7 @@
   tArray<double> resources_detected;  //Initialize to -1.0
   tArray<bool> tasks_done;
   tArray<double> tasks_quality;
+  tArray<double> tasks_value;
   tArray<bool> reactions_triggered;
   tArray<double> reaction_add_bonus; 
   double bonus_add;
@@ -61,7 +62,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, const double quality=1, const double value=0);
 
   void MarkReaction(int id);
   void AddBonus(double value, int id);
@@ -76,6 +77,7 @@
   bool ReactionTriggered(int id);
   bool TaskDone(int id);
   double TaskQuality(int id);
+  double TaskValue(int id);
   double GetAddBonus() { return bonus_add; }
   double GetReactionAddBonus(const int i) { return reaction_add_bonus[i]; }
   double GetMultBonus() { return bonus_mult; }

Modified: development/source/main/cTaskContext.h
===================================================================
--- development/source/main/cTaskContext.h	2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cTaskContext.h	2007-05-22 10:27:00 UTC (rev 1585)
@@ -55,7 +55,11 @@
   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;	
+
   cTaskEntry* m_task_entry;
   tHashTable<void*, cTaskState*>* m_task_states;
 
@@ -77,6 +81,7 @@
     , m_task_entry(NULL)
     , m_task_states(NULL)
   {
+	  m_task_value = 0;
   }
   
   inline int GetInputAt(int index) { return m_interface->GetInputAt(index); }
@@ -90,6 +95,8 @@
   inline int GetLogicId() const { return m_logic_id; }
   inline void SetLogicId(int v) { m_logic_id = v; }
   inline bool GetOnDivide() const { return m_on_divide; }
+  inline void SetTaskValue(double v) { m_task_value = v; }
+  inline double GetTaskValue() { return m_task_value; }
   
   inline void SetTaskEntry(cTaskEntry* in_entry) { m_task_entry = in_entry; }
   inline cTaskEntry* GetTaskEntry() { return m_task_entry; }

Modified: development/source/main/cTaskLib.cc
===================================================================
--- development/source/main/cTaskLib.cc	2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cTaskLib.cc	2007-05-22 10:27:00 UTC (rev 1585)
@@ -2125,8 +2125,8 @@
   schema.AddEntry("varlength", 2, 8);
   // Double Arguments
   schema.AddEntry("basepow", 0, 2.0);
-  schema.AddEntry("max_Fx", 1, 1.0);
-  schema.AddEntry("min_Fx", 2, 0.0);
+  schema.AddEntry("maxFx", 1, 1.0);
+  schema.AddEntry("minFx", 2, 0.0);
 
 
   cArgContainer* args = cArgContainer::Load(argstr, schema, errors);
@@ -2166,7 +2166,7 @@
   const int function = ctx.GetTaskEntry()->GetArguments().GetInt(0);
 
    // always get x&y, at least for now, turn it into a double between 0 and 1
-  double y, x;
+  double y, x, Fx;
 
   const cArgContainer& args = ctx.GetTaskEntry()->GetArguments();
   if (args.GetInt(1)) {
@@ -2187,44 +2187,46 @@
 
   switch(function) {
     case 1:
-      quality = 1.0 - x;
+	  Fx = x;		// F1
       break;
 
     case 2:
-      quality = 1.0 - ((1.0 + y) * (1.0 - sqrt(x / (1.0 + y)))) / 2.0;  // F2
+      Fx = (1.0 + y) * (1.0 - sqrt(x / (1.0 + y)));   // F2
       break;
 
     case 3:
-      quality = 1.0 - ((1.0 + y) * (1.0 - pow(x / (1.0 + y), 2.0))) / 2.0;  // F3
+      Fx = (1.0 + y) * (1.0 - pow(x / (1.0 + y), 2.0));  // F3
       break;
 
     case 4:
-      quality = 1.0 - (((1.0 + y) * (1.0 - sqrt(x / (1.0 + y)) - (x / (1.0 + y)) * sin(3.14159 * x * 10.0)) + .76) / 2.76);
-      break;
+      Fx = (1.0 + y) * (1.0 - sqrt(x / (1.0 + y)) - (x / (1.0 + y)) * sin(3.14159 * x * 10.0));
+	  break;
 
     case 5:
       x = x * -2.0;
-      quality = 1 - (x * x + y * y) / 5.0;
+      Fx = x*x + y*y;
       break;
 
     case 6:
       x = x * -2.0;
-      quality = 1 - ((x + 2.0) * (x + 2.0) + y * y) / 5.0;
+      Fx = (x + 2.0)*(x + 2.0) + y*y;
       break;
 
     case 7:
       x = x * 4.0;
-      quality = 1 - (sqrt(x) + y) / 3.0;
+      Fx = sqrt(x) + y;
       break;
 
     case 8:
       x = x * 4.0;
-      quality = 1 - (sqrt(4.0 - x) + y) / 3.0;
+      Fx = sqrt(4.0 - x) + y;
       break;
 
     default:
       quality = .001;
   }
+  ctx.SetTaskValue(Fx);
+  quality = (args.GetDouble(1) - Fx + .001) / (args.GetDouble(1) - args.GetDouble(2) + .001);
   
   // because want org to only have 1 shot to use outputs for all functions at once, even if they
   // output numbers that give a quality of 0 on a function, still want to mark it as completed




More information about the Avida-cvs mailing list