[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