[Avida-SVN] r2840 - in branches/interrupt/source: actions cpu main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Mon Oct 13 13:01:43 PDT 2008


Author: beckma24
Date: 2008-10-13 16:01:43 -0400 (Mon, 13 Oct 2008)
New Revision: 2840

Modified:
   branches/interrupt/source/actions/PopulationActions.cc
   branches/interrupt/source/actions/PrintActions.cc
   branches/interrupt/source/cpu/cHardwareCPU.cc
   branches/interrupt/source/main/cGenomeUtil.cc
   branches/interrupt/source/main/cOrgMessagePredicate.h
   branches/interrupt/source/main/cPopulation.cc
   branches/interrupt/source/main/cPopulation.h
Log:
Added compete demes code to allow for comp. to be based on energy conservation

Modified: branches/interrupt/source/actions/PopulationActions.cc
===================================================================
--- branches/interrupt/source/actions/PopulationActions.cc	2008-10-13 16:30:29 UTC (rev 2839)
+++ branches/interrupt/source/actions/PopulationActions.cc	2008-10-13 20:01:43 UTC (rev 2840)
@@ -1281,6 +1281,21 @@
     }
 };
 
+class cAbstractCompeteDemes_EnergyConserve : public cAbstractCompeteDemes {
+	
+public:
+	cAbstractCompeteDemes_EnergyConserve(cWorld* world, const cString& args) : cAbstractCompeteDemes(world, args) { }
+	
+	static const cString GetDescription() { return "No Arguments"; }
+  
+	double Fitness(const cDeme& deme) {    
+		double energyRemaining = deme.CalculateTotalEnergy();
+		double initialEnergy = m_world->GetConfig().ENERGY_GIVEN_ON_INJECT.Get();
+		double fitnessOfDeme = energyRemaining / initialEnergy;
+		return fitnessOfDeme;
+	}
+};
+
 /* This Action will check if any demes have met the critera to be replicated
    and do so.  There are several bases this can be checked on:
 
@@ -1972,6 +1987,7 @@
 
 /****AbstractCompeteDemes sub-classes****/
   action_lib->Register<cAbstractCompeteDemes_AttackKillAndEnergyConserve>("CompeteDemes_AttackKillAndEnergyConserve");
+	action_lib->Register<cAbstractCompeteDemes_EnergyConserve>("CompeteDemes_EnergyConserve");
   
   action_lib->Register<cActionNewTrial>("NewTrial");
   action_lib->Register<cActionCompeteOrganisms>("CompeteOrganisms");

Modified: branches/interrupt/source/actions/PrintActions.cc
===================================================================
--- branches/interrupt/source/actions/PrintActions.cc	2008-10-13 16:30:29 UTC (rev 2839)
+++ branches/interrupt/source/actions/PrintActions.cc	2008-10-13 20:01:43 UTC (rev 2840)
@@ -2527,6 +2527,18 @@
   }
 };
 
+class cActionPrintDemesTotalAvgEnergy : public cAction {
+public:
+	cActionPrintDemesTotalAvgEnergy(cWorld* world, const cString& args) : cAction(world, args) { ; }
+		
+	static const cString GetDescription() { return "No Arguments"; }
+		
+	void Process(cAvidaContext& ctx) {
+		m_world->GetPopulation().PrintDemesTotalAvgEnergy();
+	}
+};
+
+
 class cActionPrintDemeDonorStats : public cAction
 {
 public:
@@ -2691,6 +2703,7 @@
   // deme output files
   action_lib->Register<cActionPrintDemeAllStats>("PrintDemeAllStats");
   action_lib->Register<cActionPrintDemeAllStats>("PrintDemeStats"); //duplicate of previous
+	action_lib->Register<cActionPrintDemesTotalAvgEnergy>("PrintDemesTotalAvgEnergy");
   action_lib->Register<cActionPrintDemeDonorStats>("PrintDemeDonorStats");
   action_lib->Register<cActionPrintDemeSpacialEnergy>("PrintDemeSpacialEnergyStats");
   action_lib->Register<cActionPrintDemeSpacialSleep>("PrintDemeSpacialSleepStats");

Modified: branches/interrupt/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/interrupt/source/cpu/cHardwareCPU.cc	2008-10-13 16:30:29 UTC (rev 2839)
+++ branches/interrupt/source/cpu/cHardwareCPU.cc	2008-10-13 20:01:43 UTC (rev 2840)
@@ -833,8 +833,8 @@
 
     } // if exec
       
-		if(m_world->GetConfig().INTERRUPT_ENABLED.Get()) {
-		static const cInstruction moveInst = GetInstSet().GetInst("move");
+		if(m_world->GetConfig().INTERRUPT_ENABLED.Get() && GetInstSet().InstInSet("move")) {
+			static const cInstruction moveInst = GetInstSet().GetInst("move");
 			if(cur_inst == moveInst) {
 				// fire move interrupt
 				m_threads[m_cur_thread].interruptContextSwitch(cLocalThread::MOVE_INTERRUPT);

Modified: branches/interrupt/source/main/cGenomeUtil.cc
===================================================================
--- branches/interrupt/source/main/cGenomeUtil.cc	2008-10-13 16:30:29 UTC (rev 2839)
+++ branches/interrupt/source/main/cGenomeUtil.cc	2008-10-13 20:01:43 UTC (rev 2840)
@@ -261,7 +261,7 @@
 		if(cur_line.GetWord(1) == "protected")
 			site_protected = true;
 		
-		cerr<< cur_line.GetWord(0) << " " << cur_line.GetWord(1) << " " << site_protected << endl;
+//		cerr<< cur_line.GetWord(0) << " " << cur_line.GetWord(1) << " " << site_protected << endl;
 		
     new_genome.SetInst(line_num, inst_set.GetInst(cur_line.GetWord(0)), site_protected);
     

Modified: branches/interrupt/source/main/cOrgMessagePredicate.h
===================================================================
--- branches/interrupt/source/main/cOrgMessagePredicate.h	2008-10-13 16:30:29 UTC (rev 2839)
+++ branches/interrupt/source/main/cOrgMessagePredicate.h	2008-10-13 20:01:43 UTC (rev 2840)
@@ -316,13 +316,14 @@
 /*quorum sensing - no births once deme is full*/
 /*struct cOrgMessagePred_MinBirths : public cOrgMessagePredicate 
 {
-  virtual ~cOrgMessagePredicate() { }
-  virtual bool operator()(const cOrgMessage& msg) = 0;
-  virtual void Print(std::ostream& out) { }
-  virtual void Reset() { }
-  virtual bool PreviouslySatisfied() = 0;
-  virtual cString GetName() = 0;
-  virtual void UpdateStats(cStats& stats) {}
-  virtual cDemeCellEvent* GetEvent() { return NULL; }
+	~cOrgMessagePredicate() { }
+	bool operator()(const cOrgMessage& msg);
+	void Print(std::ostream& out) { }
+	void Reset() { }
+	bool PreviouslySatisfied();
+	cString GetName();
+	void UpdateStats(cStats& stats) {}
+	cDemeCellEvent* GetEvent() { return NULL; }
 };*/
+
 #endif

Modified: branches/interrupt/source/main/cPopulation.cc
===================================================================
--- branches/interrupt/source/main/cPopulation.cc	2008-10-13 16:30:29 UTC (rev 2839)
+++ branches/interrupt/source/main/cPopulation.cc	2008-10-13 20:01:43 UTC (rev 2840)
@@ -2585,6 +2585,24 @@
   df_fit.Endl();
 }
 
+
+void cPopulation::PrintDemesTotalAvgEnergy() {
+  cStats& stats = m_world->GetStats();
+  const int num_demes = deme_array.GetSize();
+  cDataFile & df_fit = m_world->GetDataFile("deme_totalAvgEnergy.dat");
+  df_fit.WriteComment("Average energy for demes in the population");
+  df_fit.WriteTimeStamp();
+  df_fit.Write(stats.GetUpdate(), "update");
+	cDoubleSum avg_energy;
+  
+  for (int deme_id = 0; deme_id < num_demes; deme_id++) {
+    const cDeme & cur_deme = deme_array[deme_id];    
+		avg_energy.Add(cur_deme.CalculateTotalEnergy());
+	}
+	df_fit.Write(avg_energy.Ave(), "Total Average Energy");
+	df_fit.Endl();
+}
+
 void cPopulation::PrintDemeGestationTime() {
   cStats& stats = m_world->GetStats();
   const int num_demes = deme_array.GetSize();

Modified: branches/interrupt/source/main/cPopulation.h
===================================================================
--- branches/interrupt/source/main/cPopulation.h	2008-10-13 16:30:29 UTC (rev 2839)
+++ branches/interrupt/source/main/cPopulation.h	2008-10-13 20:01:43 UTC (rev 2840)
@@ -229,6 +229,7 @@
   void PrintDemeAllStats();
   void PrintDemeTestamentStats(const cString& filename);
   void PrintDemeDonor();
+	void PrintDemesTotalAvgEnergy();
   void PrintDemeFitness();
   void PrintDemeGestationTime();
   void PrintDemeInstructions();




More information about the Avida-cvs mailing list