[Avida-SVN] r2190 - branches/dkdev/source/main

dknoester at myxo.css.msu.edu dknoester at myxo.css.msu.edu
Sun Nov 11 05:47:46 PST 2007


Author: dknoester
Date: 2007-11-11 08:47:45 -0500 (Sun, 11 Nov 2007)
New Revision: 2190

Modified:
   branches/dkdev/source/main/cPopulation.cc
   branches/dkdev/source/main/cStats.cc
Log:
Added stats tracking for specifically non-zero deme trial merit.

Modified: branches/dkdev/source/main/cPopulation.cc
===================================================================
--- branches/dkdev/source/main/cPopulation.cc	2007-11-10 22:16:44 UTC (rev 2189)
+++ branches/dkdev/source/main/cPopulation.cc	2007-11-11 13:47:45 UTC (rev 2190)
@@ -1313,6 +1313,7 @@
     // Yes, we're using germlines.  Check to see if we need to do anything with 
     // germline merit.
     if(m_world->GetConfig().DEMES_HAVE_MERIT.Get()) {
+      assert(m_world->GetConfig().DEME_REPLICATION_TRIALS.Get() > 0);
       source_deme.GetGermline().UpdateMerit((double)std::accumulate(source_deme.GetTrials().begin(),
                                                                     source_deme.GetTrials().end(), 0.0)
                                             / m_world->GetConfig().DEME_REPLICATION_TRIALS.Get());

Modified: branches/dkdev/source/main/cStats.cc
===================================================================
--- branches/dkdev/source/main/cStats.cc	2007-11-10 22:16:44 UTC (rev 2189)
+++ branches/dkdev/source/main/cStats.cc	2007-11-11 13:47:45 UTC (rev 2190)
@@ -25,6 +25,8 @@
 #include <string>
 #include <sstream>
 #include <fstream>
+#include <functional>
+#include <algorithm>
 #include <boost/graph/graphviz.hpp>
 
 
@@ -1004,6 +1006,11 @@
   if(m_world->GetConfig().DEMES_USE_GERMLINE.Get() && m_world->GetConfig().DEMES_HAVE_MERIT.Get()) {
     _deme_last_germline = deme.GetGermline();
     _deme_merit.Add(deme.GetGermline().GetMerit().GetDouble());
+    // Calculate the non-zero deme merit:
+    unsigned int nz = std::count_if(deme.GetTrials().begin(), deme.GetTrials().end(), std::bind2nd(std::not_equal_to<double>(), 0.0));
+    if(nz != 0) {
+      _deme_merit_nonzero.Add(deme.GetGermline().GetMerit().GetDouble()/(double)nz);
+    }
     if(deme.GetGermline().GetMerit().GetDouble() > _deme_max_germline_merit) {
       _deme_max_germline_merit = deme.GetGermline().GetMerit().GetDouble();
       _deme_max_germline = deme.GetGermline();
@@ -1034,6 +1041,7 @@
   df.WriteTimeStamp();
   df.Write(GetUpdate(), "update [update]");
   df.Write(_deme_merit.Average(), "mean germline merit of replicated demes [mean_merit]");
+  df.Write(_deme_merit_nonzero.Average(), "mean germline merit of replicated demes, non-zero only [mean_merit_nz]");
   df.Write(_deme_max_germline_merit, "max germline merit of replicated demes [max_merit]");
   if(_deme_max_germline.Size() > 0) {
     df.Write(_deme_max_germline.GetLatest().AsString(), "max germline genome [max_genome]");
@@ -1042,6 +1050,7 @@
   }
   df.Endl();
   _deme_merit.Clear();
+  _deme_merit_nonzero.Clear();
   _deme_max_germline_merit = 0.0;
 }
 




More information about the Avida-cvs mailing list