[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