[Avida-SVN] r2355 - branches/energy/source/main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Thu Feb 21 14:12:45 PST 2008


Author: beckma24
Date: 2008-02-21 17:12:45 -0500 (Thu, 21 Feb 2008)
New Revision: 2355

Modified:
   branches/energy/source/main/cAvidaConfig.h
   branches/energy/source/main/cPopulation.cc
   branches/energy/source/main/cPopulation.h
   branches/energy/source/main/cTaskLib.cc
Log:
Added logging of resource levels when deme replicates

Modified: branches/energy/source/main/cAvidaConfig.h
===================================================================
--- branches/energy/source/main/cAvidaConfig.h	2008-02-21 21:03:10 UTC (rev 2354)
+++ branches/energy/source/main/cAvidaConfig.h	2008-02-21 22:12:45 UTC (rev 2355)
@@ -302,6 +302,7 @@
   CONFIG_ADD_VAR(GERMLINE_INJECT_ORGS, int, 1, "Defines how many organisms are injected.  GERMLINE_RANDOM_PLACEMENT must equal 2");
   CONFIG_ADD_VAR(MAX_DEME_AGE, int, 500, "The maximum age of a deme (in updates) to be\nused for age-based replication (default=500).");  
   CONFIG_ADD_VAR(MAX_DEME_BIRTHS, int, 500, "The maximum number of births within a deme to be\nused for birth-based replication (default=500)."); 
+  CONFIG_ADD_VAR(DEME_REPLICATE_LOG_RESOURCES_AFTER_UPDATE, int, 49500, "Log resource levels of deme when it replicates after an update"); 
   
   CONFIG_ADD_GROUP(REPRODUCTION_GROUP, "Birth and Death");
   CONFIG_ADD_VAR(BIRTH_METHOD, int, 0, "Which organism should be replaced on birth?\n0 = Random organism in neighborhood\n1 = Oldest in neighborhood\n2 = Largest Age/Merit in neighborhood\n3 = None (use only empty cells in neighborhood)\n4 = Random from population (Mass Action)\n5 = Oldest in entire population\n6 = Random within deme\n7 = Organism faced by parent\n8 = Next grid cell (id+1)\n9 = Largest energy used in entire population\n10 = Largest energy used in neighborhood");

Modified: branches/energy/source/main/cPopulation.cc
===================================================================
--- branches/energy/source/main/cPopulation.cc	2008-02-21 21:03:10 UTC (rev 2354)
+++ branches/energy/source/main/cPopulation.cc	2008-02-21 22:12:45 UTC (rev 2355)
@@ -1165,6 +1165,11 @@
     // -- If we made it this far, we should replicate this deme --
     cRandom& random = m_world->GetRandom();
     
+    // save resource levels of replicated demes
+    if(rep_trigger == 5 && m_world->GetConfig().DEME_REPLICATE_LOG_RESOURCES_AFTER_UPDATE.Get() <= m_world->GetStats().GetUpdate()) {
+      PrintDemeResourceOnReplicate(deme_id);
+    }
+    
     // Choose a random target deme to replicate to, and kill all the organisms
     // in that deme.  Favor empty demes
     int id;
@@ -1952,6 +1957,45 @@
   df_resources.Endl();
 }
 
+//////////////
+void cPopulation::PrintDemeResourceOnReplicate(int deme_id) {
+  
+  cDataFile & df_resources = m_world->GetDataFile("deme_resources_replicate.dat");
+  df_resources.WriteComment("Avida deme resource data");
+  df_resources.WriteTimeStamp();
+  df_resources.WriteRawComment("replicate_deme_spacial_resource_levels = [ ...");
+  df_resources.Endl();
+  
+  cDeme & cur_deme = deme_array[deme_id];  
+  cur_deme.UpdateDemeRes();
+  cResourceCount res = GetDeme(deme_id).GetDemeResourceCount();
+  for(int j = 0; j < res.GetSize(); j++) {
+//    const char * tmp = res.GetResName(j);
+//    df_resources.WriteRaw(res.Get(j), cStringUtil::Stringf("Deme %d Resource %s", deme_id, tmp)); //comment);
+    if((res.GetResourcesGeometry())[j] != nGeometry::GLOBAL) {
+      const char* resName = res.GetResName(j);
+
+      cString StructStr = cStringUtil::Stringf( "struct('name', '%s', 'update', %07i, 'subupdate', %07i, 'cell_resource_levels', ...",
+                                                  resName, m_world->GetStats().GetUpdate(), m_world->GetStats().GetSubUpdate());
+      df_resources.WriteRaw(StructStr);
+
+      
+      cSpatialResCount sp_res = res.GetSpatialResource(j);
+      int gridsize = sp_res.GetSize();
+      int xsize = m_world->GetConfig().WORLD_X.Get();
+
+      df_resources.WriteRaw("[ ...");      
+      for (int i = 0; i < gridsize; i++) {
+        df_resources.WriteBlockElement(sp_res.GetAmount(i), i, xsize);
+      }
+      df_resources.WriteRaw("]);");
+      df_resources.Endl();
+    }
+  }
+  df_resources.Endl();
+}
+//////////////
+
 void cPopulation::PrintDemeSatPredicate(const cString& filename) {
 
   //ignore events that are dead

Modified: branches/energy/source/main/cPopulation.h
===================================================================
--- branches/energy/source/main/cPopulation.h	2008-02-21 21:03:10 UTC (rev 2354)
+++ branches/energy/source/main/cPopulation.h	2008-02-21 22:12:45 UTC (rev 2355)
@@ -196,6 +196,7 @@
   void PrintDemeMutationRate();
   void PrintDemeReceiver();
   void PrintDemeResource();
+  void PrintDemeResourceOnReplicate(int deme_id);
   void PrintDemeSatPredicate(const cString& filename);
   void PrintDemeSpatialResData(cResourceCount res, const int i, const int deme_id) const;
   void PrintDemeSpatialEnergyData() const;

Modified: branches/energy/source/main/cTaskLib.cc
===================================================================
--- branches/energy/source/main/cTaskLib.cc	2008-02-21 21:03:10 UTC (rev 2354)
+++ branches/energy/source/main/cTaskLib.cc	2008-02-21 22:12:45 UTC (rev 2355)
@@ -2869,7 +2869,7 @@
 
   int current_cell = iface->GetCellID();
   int xsize = m_world->GetPopulation().GetWorldX();
-  int ysize = m_world->GetPopulation().GetWorldY();
+//  int ysize = m_world->GetPopulation().GetWorldY();
 
   if((current_cell % xsize) == 0) {
       return 1.0;
@@ -2885,7 +2885,7 @@
 
   int current_cell = iface->GetCellID();
   int xsize = m_world->GetPopulation().GetWorldX();
-  int ysize = m_world->GetPopulation().GetWorldY();
+//  int ysize = m_world->GetPopulation().GetWorldY();
 
   if((current_cell % xsize) == (xsize - 1)) {
       return 1.0;
@@ -2988,7 +2988,7 @@
       return 1.0;
     }
   }
-  
+  return true;
 } //End cTaskLib::Task_MoveBetweenTwo()
 
 




More information about the Avida-cvs mailing list