[Avida-SVN] r3383 - development/source/main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Mon Aug 24 13:47:13 PDT 2009


Author: beckma24
Date: 2009-08-24 16:47:13 -0400 (Mon, 24 Aug 2009)
New Revision: 3383

Modified:
   development/source/main/cPhenotype.cc
   development/source/main/cTaskLib.cc
   development/source/main/cTaskLib.h
Log:
Added resource dependent nand and nor tasks

Modified: development/source/main/cPhenotype.cc
===================================================================
--- development/source/main/cPhenotype.cc	2009-08-24 20:35:56 UTC (rev 3382)
+++ development/source/main/cPhenotype.cc	2009-08-24 20:47:13 UTC (rev 3383)
@@ -1191,7 +1191,7 @@
   }
 
   for (int i = 0; i < num_reactions; i++) {
-//    if (result.ReactionTriggered(i) == true) cur_reaction_count[i]++;  // moved into cEnvironment::TestOutput to allow reaction requisites to be satisified at teh time a reaction is completed
+//    if (result.ReactionTriggered(i) == true) cur_reaction_count[i]++;  // moved into cEnvironment::TestOutput to allow reaction requisites to be satisified at the time a reaction is completed
     cur_reaction_add_reward[i] += result.GetReactionAddBonus(i);
   }
 

Modified: development/source/main/cTaskLib.cc
===================================================================
--- development/source/main/cTaskLib.cc	2009-08-24 20:35:56 UTC (rev 3382)
+++ development/source/main/cTaskLib.cc	2009-08-24 20:47:13 UTC (rev 3383)
@@ -116,6 +116,10 @@
   else if (name == "equ") NewTask(name, "Equals", &cTaskLib::Task_Equ);
   else if (name == "equ_dup") NewTask(name, "Equals_dup", &cTaskLib::Task_Equ);
   
+	// resoruce dependent version
+  else if (name == "nand-resourceDependent") NewTask(name, "Nand-resourceDependent", &cTaskLib::Task_Nand_ResourceDependent);
+	else if (name == "nor-resourceDependent") NewTask(name, "Nor-resourceDependent", &cTaskLib::Task_Nor_ResourceDependent);
+	
   // All 3-Input Logic Functions
   if (name == "logic_3AA")
     NewTask(name, "Logic 3AA (A+B+C == 0)", &cTaskLib::Task_Logic3in_AA);
@@ -692,6 +696,67 @@
   return 0.0;
 }
 
+////////////////////////////////////
+
+double cTaskLib::Task_Nand_ResourceDependent(cTaskContext& ctx) const {
+	const double resCrossoverLevel = 100;
+
+	const int logic_id = ctx.GetLogicId();
+  if (!(logic_id == 63 || logic_id == 95 || logic_id == 119))
+		return 0.0;
+		
+	const cResourceLib& resLib = m_world->GetEnvironment().GetResourceLib();
+	
+	const tArray<double>& resource_count_array =  ctx.GetOrganism()->GetOrgInterface().GetResources(); 
+	const cResourceCount& resource_count = m_world->GetPopulation().GetResourceCount();
+	
+	if(resource_count.GetSize() == 0) assert(false); // change to: return false;
+	
+	double pher_amount = 0;
+	cResource* res = resLib.GetResource("pheromone");
+	
+	if(strncmp(resource_count.GetResName(res->GetID()), "pheromone", 9) == 0) {
+		pher_amount += resource_count_array[res->GetID()];
+	}
+	
+//	double diff = fabs(resCrossoverLevel - pher_amount);
+//	double reward = pow(diff, 2) * 25;
+	if(pher_amount < resCrossoverLevel)
+		return 1.0;
+	return 0.0;	
+}
+
+double cTaskLib::Task_Nor_ResourceDependent(cTaskContext& ctx) const {
+	const double resCrossoverLevel = 100;
+
+	const int logic_id = ctx.GetLogicId();
+  if (!(logic_id == 3 || logic_id == 5 || logic_id == 17))
+		return 0.0;
+	
+	const cResourceLib& resLib = m_world->GetEnvironment().GetResourceLib();
+	
+	const tArray<double>& resource_count_array = ctx.GetOrganism()->GetOrgInterface().GetResources(); 
+	const cResourceCount& resource_count = m_world->GetPopulation().GetResourceCount();
+	
+	if(resource_count.GetSize() == 0) assert(false); // change to: return false;
+	
+	double pher_amount = 0;
+	cResource* res = resLib.GetResource("pheromone");
+	
+	if(strncmp(resource_count.GetResName(res->GetID()), "pheromone", 9) == 0) {
+		pher_amount += resource_count_array[res->GetID()];
+	}
+	
+//	double diff = fabs(resCrossoverLevel - pher_amount);
+//	double reward = pow(diff, 2) * 25;
+	if(pher_amount > resCrossoverLevel)
+		return 1.0;
+	return 0.0;	
+}
+
+////////////////////////////////////
+
+
 double cTaskLib::Task_Logic3in_AA(cTaskContext& ctx) const
 {
   const int logic_id = ctx.GetLogicId();

Modified: development/source/main/cTaskLib.h
===================================================================
--- development/source/main/cTaskLib.h	2009-08-24 20:35:56 UTC (rev 3382)
+++ development/source/main/cTaskLib.h	2009-08-24 20:47:13 UTC (rev 3383)
@@ -126,6 +126,11 @@
   double Task_Xor(cTaskContext& ctx) const;
   double Task_Equ(cTaskContext& ctx) const;
 
+	// resource dependent
+	double Task_Nand_ResourceDependent(cTaskContext& ctx) const;
+	double Task_Nor_ResourceDependent(cTaskContext& ctx) const;
+			
+	
   // All 3-Input Logic Functions
   double Task_Logic3in_AA(cTaskContext& ctx) const;
   double Task_Logic3in_AB(cTaskContext& ctx) const;




More information about the Avida-cvs mailing list