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

goingssh at myxo.css.msu.edu goingssh at myxo.css.msu.edu
Sat Dec 19 16:16:56 PST 2009


Author: goingssh
Date: 2009-12-19 19:16:56 -0500 (Sat, 19 Dec 2009)
New Revision: 3569

Modified:
   development/source/main/cEnvironment.cc
   development/source/main/cReactionRequisite.h
Log:
Added reaction requesite for total number of reactions completed (max and min).  max_tot_count sets the maximum number of reactions an individual can do (including this one) and still get rewarded for the given reaction.  min_tot_count sets the minimum an individual has to do before they can get rewarded for the given reaction.

Modified: development/source/main/cEnvironment.cc
===================================================================
--- development/source/main/cEnvironment.cc	2009-12-18 21:53:32 UTC (rev 3568)
+++ development/source/main/cEnvironment.cc	2009-12-20 00:16:56 UTC (rev 3569)
@@ -335,6 +335,14 @@
       if (!AssertInputInt(var_value, "divide_only", var_type)) return false;
       new_requisite->SetDivideOnly(var_value.AsInt());
     }
+	else if (var_name == "min_tot_count") {
+	  if (!AssertInputInt(var_value, "min_tot_count", var_type)) return false;
+	  new_requisite->SetMinTotReactionCount(var_value.AsInt());
+    }
+	else if (var_name == "max_tot_count") {
+	  if (!AssertInputInt(var_value, "max_tot_count", var_type)) return false;
+	  new_requisite->SetMaxTotReactionCount(var_value.AsInt());
+    }
     else {
       cerr << "Error: Unknown requisite variable '" << var_name
       << "' in reaction '" << reaction->GetName() << "'" << endl;
@@ -1177,6 +1185,14 @@
     // Have all task counts been met?
     if (task_count < cur_req->GetMinTaskCount()) continue;
     if (task_count >= cur_req->GetMaxTaskCount()) continue;
+
+	// Have all total reaction counts been met?
+	int tot_reactions = 0;
+	for (int i=0; i<reaction_count.GetSize(); i++)
+		tot_reactions += reaction_count[i];
+	if (tot_reactions < cur_req->GetMinTotReactionCount()) continue;
+	if (tot_reactions >= cur_req->GetMaxTotReactionCount()) continue;
+
     
     // Have divide task reqs been met?
     // If div_type is 0 we only check on IO, if 1 we only check on divide,

Modified: development/source/main/cReactionRequisite.h
===================================================================
--- development/source/main/cReactionRequisite.h	2009-12-18 21:53:32 UTC (rev 3568)
+++ development/source/main/cReactionRequisite.h	2009-12-20 00:16:56 UTC (rev 3569)
@@ -41,6 +41,8 @@
   tList<cReaction> prior_noreaction_list;
   int min_task_count;
   int max_task_count;
+  int min_tot_reaction_count;
+  int max_tot_reaction_count;
   int divide_only;
 
 
@@ -48,7 +50,8 @@
   cReactionRequisite& operator=(const cReactionRequisite&);
 
 public:
-  cReactionRequisite() : min_task_count(0) , max_task_count(INT_MAX), divide_only(0) { ; }
+  cReactionRequisite() : min_task_count(0) , max_task_count(INT_MAX), divide_only(0), 
+	  min_tot_reaction_count(0), max_tot_reaction_count(INT_MAX) { ; }
   ~cReactionRequisite() { ; }
 
   const tList<cReaction>& GetReactions() const { return prior_reaction_list; }
@@ -56,6 +59,8 @@
   int GetMinTaskCount() const { return min_task_count; }
   int GetMaxTaskCount() const { return max_task_count; }
   int GetDivideOnly() const { return divide_only; }
+  int GetMinTotReactionCount() const { return min_tot_reaction_count; }
+  int GetMaxTotReactionCount() const { return max_tot_reaction_count; }
 
   void AddReaction(cReaction* in_reaction) {
     prior_reaction_list.PushRear(in_reaction);
@@ -66,6 +71,8 @@
   void SetMinTaskCount(int min) { min_task_count = min; }
   void SetMaxTaskCount(int max) { max_task_count = max; }
   void SetDivideOnly(int div) { divide_only = div; }
+  void SetMinTotReactionCount(int min) { min_tot_reaction_count = min; }
+  void SetMaxTotReactionCount(int max) { max_tot_reaction_count = max; }
 
   /*
   added to satisfy Boost.Python; the semantics are fairly useless --




More information about the Avida-cvs mailing list