[Avida-SVN] r2407 - development/source/main
dknoester at myxo.css.msu.edu
dknoester at myxo.css.msu.edu
Sat Mar 1 16:50:52 PST 2008
Author: dknoester
Date: 2008-03-01 19:50:52 -0500 (Sat, 01 Mar 2008)
New Revision: 2407
Modified:
development/source/main/cDeme.cc
development/source/main/cEnvironment.cc
development/source/main/cPhenotype.cc
development/source/main/cReactionResult.cc
development/source/main/cReactionResult.h
Log:
Updates to demefrac.
Modified: development/source/main/cDeme.cc
===================================================================
--- development/source/main/cDeme.cc 2008-03-02 00:17:13 UTC (rev 2406)
+++ development/source/main/cDeme.cc 2008-03-02 00:50:52 UTC (rev 2407)
@@ -139,6 +139,7 @@
we need to rotate the heritable merit to the current merit.
*/
void cDeme::UpdateDemeMerit() {
+ assert(_next_merit.GetDouble()>=1.0);
_current_merit = _next_merit;
_next_merit = 1.0;
}
@@ -149,6 +150,7 @@
void cDeme::UpdateDemeMerit(cDeme& source) {
_current_merit = source.GetHeritableDemeMerit();
_next_merit = 1.0;
+ assert(_current_merit.GetDouble()>=1.0);
}
Modified: development/source/main/cEnvironment.cc
===================================================================
--- development/source/main/cEnvironment.cc 2008-03-02 00:17:13 UTC (rev 2406)
+++ development/source/main/cEnvironment.cc 2008-03-02 00:50:52 UTC (rev 2407)
@@ -1025,23 +1025,26 @@
double deme_bonus = cur_process->GetDemeFraction() * consumed * cur_process->GetValue();
double bonus = (1.0 - cur_process->GetDemeFraction()) * consumed * cur_process->GetValue();
- result.DemeBonus(deme_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);
break;
case nReaction::PROCTYPE_POW:
- result.MultBonus( pow(2.0, bonus) );
+ result.MultBonus(pow(2.0, bonus));
+ result.AddDemeBonus(pow(2.0, deme_bonus));
break;
case nReaction::PROCTYPE_LIN:
- result.AddBonus( bonus * task_count, reaction_id);
+ result.AddBonus(bonus * task_count, reaction_id);
+ assert(deme_bonus == 0.0);
break;
case nReaction::PROCTYPE_ENERGY:
result.AddEnergy(bonus);
+ assert(deme_bonus == 0.0);
break;
case nReaction::PROCTYPE_ENZYME: //@JEB
{
Modified: development/source/main/cPhenotype.cc
===================================================================
--- development/source/main/cPhenotype.cc 2008-03-02 00:17:13 UTC (rev 2406)
+++ development/source/main/cPhenotype.cc 2008-03-02 00:50:52 UTC (rev 2407)
@@ -1007,8 +1007,11 @@
cur_bonus += result.GetAddBonus();
// Update deme merit.
- if(taskctx.GetOrganism()->GetOrgInterface().GetDeme()) {
- taskctx.GetOrganism()->GetOrgInterface().GetDeme()->UpdateHeritableDemeMerit(result.GetDemeBonus());
+ 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 the energy bonus
Modified: development/source/main/cReactionResult.cc
===================================================================
--- development/source/main/cReactionResult.cc 2008-03-02 00:17:13 UTC (rev 2406)
+++ development/source/main/cReactionResult.cc 2008-03-02 00:50:52 UTC (rev 2407)
@@ -44,7 +44,9 @@
, lethal(false)
, sterilize(false)
, active_reaction(false)
- , deme_bonus(0.0)
+ , deme_add_bonus(0.0)
+ , deme_mult_bonus(1.0)
+ , active_deme_reaction(false)
{
}
@@ -136,12 +138,19 @@
bonus_mult *= value;
}
-void cReactionResult::DemeBonus(double value)
+void cReactionResult::AddDemeBonus(double value)
{
ActivateReaction();
- deme_bonus += value;
+ active_deme_reaction = true;
+ deme_add_bonus += value;
}
+void cReactionResult::MultDemeBonus(double value)
+{
+ ActivateReaction();
+ active_deme_reaction = true;
+ deme_mult_bonus *= value;
+}
void cReactionResult::AddInst(int id)
{
Modified: development/source/main/cReactionResult.h
===================================================================
--- development/source/main/cReactionResult.h 2008-03-02 00:17:13 UTC (rev 2406)
+++ development/source/main/cReactionResult.h 2008-03-02 00:50:52 UTC (rev 2407)
@@ -48,7 +48,9 @@
bool sterilize;
bool active_reaction;
- double deme_bonus; //!< Bonus applied to the deme as a result of this 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();
@@ -61,6 +63,7 @@
~cReactionResult() { ; }
bool GetActive() { return active_reaction; }
+ bool GetActiveDeme() { return active_deme_reaction; }
void Consume(int id, double num);
void Produce(int id, double num);
@@ -73,7 +76,8 @@
void AddEnergy(double value);
void AddBonus(double value, int id);
void MultBonus(double value);
- void DemeBonus(double value);
+ void AddDemeBonus(double value);
+ void MultDemeBonus(double value);
void AddInst(int id);
@@ -91,7 +95,8 @@
double GetReactionAddBonus(const int i) { return reaction_add_bonus[i]; }
double GetMultBonus() { return bonus_mult; }
tArray<int>& GetInstArray() { return insts_triggered; }
- double GetDemeBonus() { return deme_bonus; }
+ double GetAddDemeBonus() { return deme_add_bonus; }
+ double GetMultDemeBonus() { return deme_mult_bonus; }
};
More information about the Avida-cvs
mailing list