[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