[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