[Avida-SVN] r2410 - development/source/main
dknoester at myxo.css.msu.edu
dknoester at myxo.css.msu.edu
Sun Mar 2 10:08:51 PST 2008
Author: dknoester
Date: 2008-03-02 13:08:51 -0500 (Sun, 02 Mar 2008)
New Revision: 2410
Modified:
development/source/main/cEnvironment.cc
development/source/main/cPhenotype.cc
development/source/main/cReactionResult.cc
development/source/main/cReactionResult.h
Log:
Better handling of demefrac.
Modified: development/source/main/cEnvironment.cc
===================================================================
--- development/source/main/cEnvironment.cc 2008-03-02 18:07:44 UTC (rev 2409)
+++ development/source/main/cEnvironment.cc 2008-03-02 18:08:51 UTC (rev 2410)
@@ -1025,18 +1025,19 @@
double deme_bonus = cur_process->GetDemeFraction() * consumed * cur_process->GetValue();
double bonus = (1.0 - cur_process->GetDemeFraction()) * consumed * cur_process->GetValue();
+ // Take care of the organism's bonus:
switch (cur_process->GetType()) {
case nReaction::PROCTYPE_ADD:
result.AddBonus(bonus, reaction_id);
- result.AddDemeBonus(deme_bonus);
break;
case nReaction::PROCTYPE_MULT:
result.MultBonus(bonus);
- result.AddDemeBonus(deme_bonus);
+ // Not quite sure what to do to the deme_bonus for this process:type.
break;
case nReaction::PROCTYPE_POW:
result.MultBonus(pow(2.0, bonus));
- result.AddDemeBonus(pow(2.0, deme_bonus));
+ // Increase deme_bonus according to type=pow.
+ deme_bonus = pow(2.0, deme_bonus);
break;
case nReaction::PROCTYPE_LIN:
result.AddBonus(bonus * task_count, reaction_id);
@@ -1070,7 +1071,14 @@
assert(false); // Should not get here!
break;
};
-
+
+ // And now let's take care of the deme's bonus. Note that all deme bonuses
+ // are additive, though the amount of bonus that's added to the deme depends
+ // on the process:type.
+ if(cur_process->GetDemeFraction() > 0.0) {
+ result.AddDemeBonus(deme_bonus);
+ }
+
// Determine detection events
cResource* detected = cur_process->GetDetect();
if (detected != NULL) {
Modified: development/source/main/cPhenotype.cc
===================================================================
--- development/source/main/cPhenotype.cc 2008-03-02 18:07:44 UTC (rev 2409)
+++ development/source/main/cPhenotype.cc 2008-03-02 18:08:51 UTC (rev 2410)
@@ -1006,12 +1006,11 @@
cur_bonus *= result.GetMultBonus();
cur_bonus += result.GetAddBonus();
- // Update deme merit.
- if(taskctx.GetOrganism()->GetOrgInterface().GetDeme() && result.GetActiveDeme()) {
- cDeme* deme = taskctx.GetOrganism()->GetOrgInterface().GetDeme();
- double deme_bonus = 1 + result.GetAddDemeBonus();
- deme_bonus *= result.GetMultDemeBonus();
- deme->UpdateHeritableDemeMerit(deme_bonus);
+ // Update deme merit (guard against running in the test CPU, where there is
+ // no deme object. Don't touch deme merit if there is no deme frac component.
+ cDeme* deme = taskctx.GetOrganism()->GetOrgInterface().GetDeme();
+ if(deme && result.GetActiveDeme()) {
+ deme->UpdateHeritableDemeMerit(result.GetAddDemeBonus());
}
// Update the energy bonus
Modified: development/source/main/cReactionResult.cc
===================================================================
--- development/source/main/cReactionResult.cc 2008-03-02 18:07:44 UTC (rev 2409)
+++ development/source/main/cReactionResult.cc 2008-03-02 18:08:51 UTC (rev 2410)
@@ -45,7 +45,6 @@
, sterilize(false)
, active_reaction(false)
, deme_add_bonus(0.0)
- , deme_mult_bonus(1.0)
, active_deme_reaction(false)
{
}
@@ -145,13 +144,6 @@
deme_add_bonus += value;
}
-void cReactionResult::MultDemeBonus(double value)
-{
- ActivateReaction();
- active_deme_reaction = true;
- deme_mult_bonus *= value;
-}
-
void cReactionResult::AddInst(int id)
{
insts_triggered.Push(id);
Modified: development/source/main/cReactionResult.h
===================================================================
--- development/source/main/cReactionResult.h 2008-03-02 18:07:44 UTC (rev 2409)
+++ development/source/main/cReactionResult.h 2008-03-02 18:08:51 UTC (rev 2410)
@@ -49,7 +49,6 @@
bool active_reaction;
double deme_add_bonus; //!< Additive bonus applied to the deme as a result of this reaction.
- double deme_mult_bonus; //!< Multiplicative bonus applied to the deme as a result of this reaction.
bool active_deme_reaction; //!< Whether this reaction result includes a deme merit component.
inline void ActivateReaction();
@@ -77,7 +76,6 @@
void AddBonus(double value, int id);
void MultBonus(double value);
void AddDemeBonus(double value);
- void MultDemeBonus(double value);
void AddInst(int id);
@@ -96,7 +94,6 @@
double GetMultBonus() { return bonus_mult; }
tArray<int>& GetInstArray() { return insts_triggered; }
double GetAddDemeBonus() { return deme_add_bonus; }
- double GetMultDemeBonus() { return deme_mult_bonus; }
};
More information about the Avida-cvs
mailing list