[Avida-SVN] r2433 - development/source/main
dknoester at myxo.css.msu.edu
dknoester at myxo.css.msu.edu
Fri Mar 7 08:40:31 PST 2008
Author: dknoester
Date: 2008-03-07 11:40:30 -0500 (Fri, 07 Mar 2008)
New Revision: 2433
Modified:
development/source/main/cEnvironment.cc
development/source/main/cPhenotype.cc
development/source/main/cReactionResult.cc
development/source/main/cReactionResult.h
Log:
Added multiplicative deme merit, renamed process:demefrac to process:deme.
Modified: development/source/main/cEnvironment.cc
===================================================================
--- development/source/main/cEnvironment.cc 2008-03-07 15:41:08 UTC (rev 2432)
+++ development/source/main/cEnvironment.cc 2008-03-07 16:40:30 UTC (rev 2433)
@@ -207,7 +207,7 @@
return false;
new_process->SetSterile(var_value.AsInt());
}
- else if (var_name == "demefrac") {
+ else if (var_name == "deme") {
if (!AssertInputDouble(var_value, "demefrac", var_type))
return false;
new_process->SetDemeFraction(var_value.AsDouble());
@@ -1029,15 +1029,15 @@
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);
- // @todo Not quite sure what to do to the deme_bonus for this process:type.
+ result.MultDemeBonus(deme_bonus);
break;
case nReaction::PROCTYPE_POW:
result.MultBonus(pow(2.0, bonus));
- // Increase deme_bonus according to type=pow.
- deme_bonus = pow(2.0, deme_bonus);
+ result.MultDemeBonus(pow(2.0, deme_bonus));
break;
case nReaction::PROCTYPE_LIN:
result.AddBonus(bonus * task_count, reaction_id);
@@ -1072,13 +1072,6 @@
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-07 15:41:08 UTC (rev 2432)
+++ development/source/main/cPhenotype.cc 2008-03-07 16:40:30 UTC (rev 2433)
@@ -1010,7 +1010,10 @@
// 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());
+ double deme_bonus = deme->GetHeritableDemeMerit().GetDouble();
+ deme_bonus *= result.GetMultDemeBonus();
+ deme_bonus += result.GetAddDemeBonus();
+ deme->UpdateHeritableDemeMerit(deme_bonus);
}
// Update the energy bonus
Modified: development/source/main/cReactionResult.cc
===================================================================
--- development/source/main/cReactionResult.cc 2008-03-07 15:41:08 UTC (rev 2432)
+++ development/source/main/cReactionResult.cc 2008-03-07 16:40:30 UTC (rev 2433)
@@ -45,6 +45,7 @@
, sterilize(false)
, active_reaction(false)
, deme_add_bonus(0.0)
+ , deme_mult_bonus(1.0)
, active_deme_reaction(false)
{
}
@@ -144,6 +145,13 @@
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-07 15:41:08 UTC (rev 2432)
+++ development/source/main/cReactionResult.h 2008-03-07 16:40:30 UTC (rev 2433)
@@ -49,6 +49,7 @@
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();
@@ -76,6 +77,7 @@
void AddBonus(double value, int id);
void MultBonus(double value);
void AddDemeBonus(double value);
+ void MultDemeBonus(double value);
void AddInst(int id);
@@ -94,6 +96,7 @@
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