[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