[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