[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