[Avida-SVN] r3251 - in development/source: actions main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Wed May 20 18:43:49 PDT 2009


Author: beckma24
Date: 2009-05-20 21:43:49 -0400 (Wed, 20 May 2009)
New Revision: 3251

Modified:
   development/source/actions/EnvironmentActions.cc
   development/source/actions/PrintActions.cc
   development/source/main/cDeme.h
   development/source/main/cStats.cc
   development/source/main/cStats.h
Log:
Added actions SetFracDemeTreatable, PrintDemeTreatableReplicationData, PrintDemeUntreatableReplicationData, and PrintDemeTreatableCount

Modified: development/source/actions/EnvironmentActions.cc
===================================================================
--- development/source/actions/EnvironmentActions.cc	2009-05-20 16:11:08 UTC (rev 3250)
+++ development/source/actions/EnvironmentActions.cc	2009-05-21 01:43:49 UTC (rev 3251)
@@ -921,6 +921,33 @@
   }
 };
 
+class cActionSetFracDemeTreatable : public cAction {
+private:
+	double factionTreatable; // total number of unique event to create; they may overlab
+	
+public:
+	cActionSetFracDemeTreatable(cWorld* world, const cString& args) : 
+	cAction(world, args), 
+	factionTreatable(0.0)
+	{
+		cString largs(args);
+		if (largs.GetSize()) factionTreatable = largs.PopWord().AsDouble();
+	}
+	
+	static const cString GetDescription() { return "Arguments: <double factionTreatable>"; }
+	
+	void Process(cAvidaContext& ctx)
+	{
+		cPopulation& pop = m_world->GetPopulation();
+		int numDemes = pop.GetNumDemes();
+		for(int i = 0; i < numDemes; i++) {
+			if(ctx.GetRandom().P(factionTreatable))
+				pop.GetDeme(i).setTreatable(true);
+			else
+				pop.GetDeme(i).setTreatable(false);
+		}
+	}
+};
 
 class cActionSetConfig : public cAction
 {
@@ -951,6 +978,7 @@
 
 void RegisterEnvironmentActions(cActionLibrary* action_lib)
 {
+	action_lib->Register<cActionSetFracDemeTreatable>("SetFracDemeTreatable");
   action_lib->Register<cActionDelayedDemeEvent>("DelayedDemeEvent");
   action_lib->Register<cActionDelayedDemeEventsPerSlots>("DelayedDemeEventsPerSlots");
   action_lib->Register<cActionInjectResource>("InjectResource");

Modified: development/source/actions/PrintActions.cc
===================================================================
--- development/source/actions/PrintActions.cc	2009-05-20 16:11:08 UTC (rev 3250)
+++ development/source/actions/PrintActions.cc	2009-05-21 01:43:49 UTC (rev 3251)
@@ -102,6 +102,10 @@
 STATS_OUT_FILE(PrintSleepData,              sleep.dat           );
 STATS_OUT_FILE(PrintCompetitionData,        competition.dat     );
 STATS_OUT_FILE(PrintDemeReplicationData,    deme_repl.dat       );
+STATS_OUT_FILE(PrintDemeTreatableReplicationData,    deme_repl_treatable.dat       );
+STATS_OUT_FILE(PrintDemeUntreatableReplicationData,  deme_repl_untreatable.dat       );
+STATS_OUT_FILE(PrintDemeTreatableCount,    deme_treatable.dat       );
+
 STATS_OUT_FILE(PrintDemeCompetitionData,    deme_compete.dat);
 STATS_OUT_FILE(PrintDemeFoundersData,       deme_founders.dat   );
 STATS_OUT_FILE(PrintPerDemeTasksData,       per_deme_tasks.dat      );
@@ -3014,6 +3018,11 @@
   action_lib->Register<cActionPrintDemeSpacialSleep>("PrintDemeSpacialSleepStats");
   action_lib->Register<cActionPrintDemeResources>("PrintDemeResourceStats");
   action_lib->Register<cActionPrintDemeReplicationData>("PrintDemeReplicationData");
+  action_lib->Register<cActionPrintDemeTreatableReplicationData>("PrintDemeTreatableReplicationData");
+  action_lib->Register<cActionPrintDemeUntreatableReplicationData>("PrintDemeUntreatableReplicationData");
+  action_lib->Register<cActionPrintDemeTreatableCount>("PrintDemeTreatableCount");
+
+	
   action_lib->Register<cActionPrintDemeCompetitionData>("PrintDemeCompetitionData");
   action_lib->Register<cActionPrintDemeFoundersData>("PrintDemeFoundersData");
   action_lib->Register<cActionPrintGermlineData>("PrintGermlineData");

Modified: development/source/main/cDeme.h
===================================================================
--- development/source/main/cDeme.h	2009-05-20 16:11:08 UTC (rev 3250)
+++ development/source/main/cDeme.h	2009-05-21 01:43:49 UTC (rev 3251)
@@ -58,6 +58,7 @@
   int width; //!< Width of this deme.
 
 	bool replicateDeme;
+	bool treatable;
 	
 // The following should be moved to cDemePhenotype / cPopulationPhenotype
   int cur_birth_count; //!< Number of organisms that have been born into this deme since reset.
@@ -140,7 +141,7 @@
 	
   
 public:
-  cDeme() : _id(0), width(0), replicateDeme(false), cur_birth_count(0), last_birth_count(0), cur_org_count(0), last_org_count(0), injected_count(0), birth_count_perslot(0),
+  cDeme() : _id(0), width(0), replicateDeme(false), treatable(true), cur_birth_count(0), last_birth_count(0), cur_org_count(0), last_org_count(0), injected_count(0), birth_count_perslot(0),
             _age(0), generation(0), total_org_energy(0.0),
             time_used(0), gestation_time(0), cur_normalized_time_used(0.0), last_normalized_time_used(0.0), 
 						MSG_sendFailed(0), MSG_dropped(0), MSG_SuccessfullySent(0), MSG_sent(0), energyInjectedIntoOrganisms(0.0), energyRemainingInDemeAtReplication(0.0), total_energy_testament(0.0),
@@ -197,6 +198,9 @@
 	
 	bool TestReplication() const { return replicateDeme; }
 	void ReplicateDeme() { replicateDeme = true; }
+	
+	bool isTreatable() const { return treatable; }
+	void setTreatable(bool value) { treatable = value; }
 
   int GetSlotFlowRate() const;
   int GetEventsTotal() const { return eventsTotal; }

Modified: development/source/main/cStats.cc
===================================================================
--- development/source/main/cStats.cc	2009-05-20 16:11:08 UTC (rev 3250)
+++ development/source/main/cStats.cc	2009-05-21 01:43:49 UTC (rev 3251)
@@ -135,6 +135,8 @@
   , m_spec_waste(0)
   , num_orgs_killed(0)
   , m_deme_num_repls(0)
+	, m_deme_num_repls_treatable(0)
+	, m_deme_num_repls_untreatable(0)
   , m_donate_to_donor (0)
   , m_donate_to_facing (0)
 {
@@ -1502,6 +1504,20 @@
   m_deme_births.Add(source_deme.GetBirthCount());
   m_deme_merit.Add(source_deme.GetHeritableDemeMerit().GetDouble());
   m_deme_generation.Add(source_deme.GetGeneration());
+	
+	if(source_deme.isTreatable()) {
+		++m_deme_num_repls_treatable;
+		m_deme_gestation_time_treatable.Add(source_deme.GetAge());
+		m_deme_births_treatable.Add(source_deme.GetBirthCount());
+		m_deme_merit_treatable.Add(source_deme.GetHeritableDemeMerit().GetDouble());
+		m_deme_generation_treatable.Add(source_deme.GetGeneration());		
+	} else {
+		++m_deme_num_repls_untreatable;
+		m_deme_gestation_time_untreatable.Add(source_deme.GetAge());
+		m_deme_births_untreatable.Add(source_deme.GetBirthCount());
+		m_deme_merit_untreatable.Add(source_deme.GetHeritableDemeMerit().GetDouble());
+		m_deme_generation_untreatable.Add(source_deme.GetGeneration());
+	}
 }
 
 
@@ -1559,7 +1575,84 @@
   m_deme_generation.Clear();
 }
 
+/*! Print statistics related to deme replication.  Currently only prints the
+ number of deme replications since the last time PrintDemeReplicationData was
+ invoked.
+ */
+void cStats::PrintDemeTreatableReplicationData(const cString& filename)
+{
+  cDataFile& df = m_world->GetDataFile(filename);
+  
+  df.WriteComment("Avida deme replication data for treatable deme");
+  df.WriteTimeStamp();
+  df.Write(GetUpdate(), "Update [update]");
+  df.Write(m_deme_num_repls_treatable, "Number of deme replications [numrepl]");
+  df.Write(m_deme_gestation_time_treatable.Average(), "Mean deme gestation time [gesttime]");
+  df.Write(m_deme_births_treatable.Average(), "Mean number of births within replicated demes [numbirths]");
+  df.Write(m_deme_merit_treatable.Average(), "Mean heritable merit of replicated demes [merit]");
+  df.Write(m_deme_generation_treatable.Average(), "Mean generation of replicated demes [generation]");
+  
+  df.Endl();
+  
+  m_deme_num_repls_treatable = 0;
+  m_deme_gestation_time_treatable.Clear();
+  m_deme_births_treatable.Clear();
+  m_deme_merit_treatable.Clear();
+  m_deme_generation_treatable.Clear();
+}
 
+/*! Print statistics related to deme replication.  Currently only prints the
+ number of deme replications since the last time PrintDemeReplicationData was
+ invoked.
+ */
+void cStats::PrintDemeUntreatableReplicationData(const cString& filename)
+{
+  cDataFile& df = m_world->GetDataFile(filename);
+  
+  df.WriteComment("Avida deme replication data for untreatable deme");
+  df.WriteTimeStamp();
+  df.Write(GetUpdate(), "Update [update]");
+  df.Write(m_deme_num_repls_untreatable, "Number of deme replications [numrepl]");
+  df.Write(m_deme_gestation_time_untreatable.Average(), "Mean deme gestation time [gesttime]");
+  df.Write(m_deme_births_untreatable.Average(), "Mean number of births within replicated demes [numbirths]");
+  df.Write(m_deme_merit_untreatable.Average(), "Mean heritable merit of replicated demes [merit]");
+  df.Write(m_deme_generation_untreatable.Average(), "Mean generation of replicated demes [generation]");
+  
+  df.Endl();
+  
+  m_deme_num_repls_untreatable = 0;
+  m_deme_gestation_time_untreatable.Clear();
+  m_deme_births_untreatable.Clear();
+  m_deme_merit_untreatable.Clear();
+  m_deme_generation_untreatable.Clear();
+}
+
+
+void cStats::PrintDemeTreatableCount(const cString& filename)
+{
+  cPopulation& pop = m_world->GetPopulation();
+	static const int numDemes = pop.GetNumDemes();
+	int treatable(0);
+	int untreatable(0);
+	for(int i = 0; i < numDemes; ++i) {
+		if(pop.GetDeme(i).isTreatable())
+			++treatable;
+		else
+			++untreatable;
+	}
+  
+	cDataFile& df = m_world->GetDataFile(filename);
+
+  df.WriteComment("Avida deme replication data for untreatable deme");
+  df.WriteTimeStamp();
+  df.Write(GetUpdate(), "Update [update]");
+  df.Write(treatable, "Number demes treatable");
+  df.Write(untreatable, "Number demes untreatable");
+  df.Write(static_cast<double>(treatable)/static_cast<double>(untreatable), "Treatable:untreatable ratio");
+  
+  df.Endl();
+}
+
 void cStats::PrintGermlineData(const cString& filename)
 {
   cDataFile& df = m_world->GetDataFile(filename);

Modified: development/source/main/cStats.h
===================================================================
--- development/source/main/cStats.h	2009-05-20 16:11:08 UTC (rev 3250)
+++ development/source/main/cStats.h	2009-05-21 01:43:49 UTC (rev 3251)
@@ -827,6 +827,11 @@
   void GermlineReplication(cGermline& source_germline, cGermline& target_germline);
   //! Print statistics about deme replication.
   void PrintDemeReplicationData(const cString& filename);
+	
+	void PrintDemeTreatableReplicationData(const cString& filename);
+	void PrintDemeUntreatableReplicationData(const cString& filename);
+	void PrintDemeTreatableCount(const cString& filename);
+
   //! Print statistics about germlines.
   void PrintGermlineData(const cString& filename);
   //! Accessor for average "generation" of germlines.
@@ -865,7 +870,20 @@
   cDoubleSum m_deme_merit; //!< Mean merit of replicated demes.
   cDoubleSum m_deme_generation; //!< Mean generation of replicated demes.
   cDoubleSum m_germline_generation; //!< "Generation" accumulator of replicated germlines.
-  t_founder_map m_deme_founders; //!< Data structure to track the founders of demes.
+
+	int m_deme_num_repls_treatable; //!< Number of deme replications in treatable demes since last PrintDemeReplicationData.
+  cDoubleSum m_deme_gestation_time_treatable; //!< Gestation time for treatable demes - mean age at deme replication.
+  cDoubleSum m_deme_births_treatable; //!< Mean number of births in replicated treatable demes.
+  cDoubleSum m_deme_merit_treatable; //!< Mean merit of replicated treatable demes.
+  cDoubleSum m_deme_generation_treatable; //!< Mean generation of replicated treatable demes.
+
+	int m_deme_num_repls_untreatable; //!< Number of deme replications in untreatable demes since last PrintDemeReplicationData.
+  cDoubleSum m_deme_gestation_time_untreatable; //!< Gestation time for untreatable demes - mean age at deme replication.
+  cDoubleSum m_deme_births_untreatable; //!< Mean number of births in replicated untreatable demes.
+  cDoubleSum m_deme_merit_untreatable; //!< Mean merit of replicated untreatable demes.
+  cDoubleSum m_deme_generation_untreatable; //!< Mean generation of replicated untreatabledemes.
+	
+	t_founder_map m_deme_founders; //!< Data structure to track the founders of demes.
   
   
   // -------- Deme competition support --------




More information about the Avida-cvs mailing list