[Avida-SVN] r3048 - development/source/main
beckma24 at myxo.css.msu.edu
beckma24 at myxo.css.msu.edu
Mon Dec 15 08:56:07 PST 2008
Author: beckma24
Date: 2008-12-15 11:56:07 -0500 (Mon, 15 Dec 2008)
New Revision: 3048
Modified:
development/source/main/cDeme.h
development/source/main/cPopulation.cc
Log:
Added more fields to deme_totalAvgEnergy.dat
Modified: development/source/main/cDeme.h
===================================================================
--- development/source/main/cDeme.h 2008-12-15 16:48:49 UTC (rev 3047)
+++ development/source/main/cDeme.h 2008-12-15 16:56:07 UTC (rev 3048)
@@ -76,6 +76,8 @@
unsigned int MSG_dropped;
unsigned int MSG_SuccessfullySent;
unsigned int MSG_sent;
+ double energyInjectedIntoOrganisms; //! total amount of energy injected into seed organisms
+ double energyRemainingInDemeAtReplication; //! total amount of energy remaining in deme when deme was last replicated.
double total_energy_testament; //! total amount of energy from suicide organisms for offspring deme
int eventsTotal;
unsigned int eventsKilled;
@@ -130,7 +132,7 @@
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),
_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), total_energy_testament(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),
eventsTotal(0), eventsKilled(0), eventsKilledThisSlot(0), eventKillAttempts(0), eventKillAttemptsThisSlot(0),
consecutiveSuccessfulEventPeriods(0), sleeping_count(0),
avg_founder_generation(0.0), generations_per_lifetime(0.0),
@@ -260,6 +262,10 @@
double CalculateTotalEnergy() const;
double CalculateTotalInitialEnergyResources() const;
+ double GetEnergyInjectedIntoOrganisms() const { return energyInjectedIntoOrganisms; }
+ void SetEnergyInjectedIntoOrganisms(double energy) { energyInjectedIntoOrganisms = energy; }
+ double GetEnergyRemainingInDemeAtReplication() const { return energyRemainingInDemeAtReplication; }
+ void SetEnergyRemainingInDemeAtReplication(double energy) { energyRemainingInDemeAtReplication = energy; }
double GetTotalEnergyTestament() { return total_energy_testament; }
void IncreaseTotalEnergyTestament(double increment) { total_energy_testament += increment; }
Modified: development/source/main/cPopulation.cc
===================================================================
--- development/source/main/cPopulation.cc 2008-12-15 16:48:49 UTC (rev 3047)
+++ development/source/main/cPopulation.cc 2008-12-15 16:56:07 UTC (rev 3048)
@@ -1405,7 +1405,9 @@
// used to pass energy to offspring demes (set to zero if energy model is not enabled)
double source_deme_energy(0.0), deme_energy_decay(0.0), parent_deme_energy(0.0), offspring_deme_energy(0.0);
if(m_world->GetConfig().ENERGY_ENABLED.Get()) {
- source_deme_energy = source_deme.CalculateTotalEnergy() + source_deme.GetTotalEnergyTestament();
+ double energyRemainingInSourceDeme = source_deme.CalculateTotalEnergy();
+ source_deme.SetEnergyRemainingInDemeAtReplication(energyRemainingInSourceDeme);
+ source_deme_energy = energyRemainingInSourceDeme + source_deme.GetTotalEnergyTestament();
m_world->GetStats().SumEnergyTestamentAcceptedByDeme().Add(source_deme.GetTotalEnergyTestament());
deme_energy_decay = 1.0 - m_world->GetConfig().FRAC_ENERGY_DECAY_AT_DEME_BIRTH.Get();
parent_deme_energy = source_deme_energy * deme_energy_decay * (1.0 - m_world->GetConfig().FRAC_PARENT_ENERGY_GIVEN_TO_DEME_AT_BIRTH.Get());
@@ -1437,7 +1439,10 @@
// Reset both demes, in case they have any cleanup work to do.
// Must reset target first for stats to be correctly updated!
- if(m_world->GetConfig().ENERGY_ENABLED.Get()) {
+ if(m_world->GetConfig().ENERGY_ENABLED.Get() == 1) {
+// if(m_world->GetConfig().ENERGY_PASSED_ON_DEME_REPLICATION_METHOD.Get() == 0) {
+// offspring_deme_energy = parent_deme_energy = 0.0;
+// }
// Transfer energy from source to target if we're using the energy model.
if (target_successfully_seeded) target_deme.DivideReset(source_deme, target_deme_resource_reset, offspring_deme_energy);
source_deme.DivideReset(source_deme, source_deme_resource_reset, parent_deme_energy);
@@ -1543,34 +1548,38 @@
// split energy from parent deme evenly among orgs in child deme
if(m_world->GetConfig().ENERGY_ENABLED.Get() == 1 && m_world->GetConfig().ENERGY_PASSED_ON_DEME_REPLICATION_METHOD.Get() == 0) {
assert(source_deme.GetOrgCount() > 0 && target_deme.GetOrgCount() > 0);
- if(offspring_deme_energy < 0.0)
- offspring_deme_energy = 0.0;
- if(parent_deme_energy < 0.0)
- parent_deme_energy = 0.0;
-
- // split deme energy evenly between organisms in source deme
- for (int i=0; i < source_deme.GetSize(); i++) {
- int cellid = source_deme.GetCellID(i);
- cPopulationCell& cell = m_world->GetPopulation().GetCell(cellid);
- if(cell.IsOccupied()) {
- cOrganism* organism = cell.GetOrganism();
- cPhenotype& phenotype = organism->GetPhenotype();
- phenotype.SetEnergy(phenotype.GetStoredEnergy() + parent_deme_energy/static_cast<double>(source_deme.GetOrgCount()));
- phenotype.SetMerit(cMerit(cMerit::EnergyToMerit(phenotype.GetStoredEnergy() * phenotype.GetEnergyUsageRatio(), m_world)));
+ if(offspring_deme_energy > 0.0) {
+ // split deme energy evenly between organisms in target deme
+ double totalEnergyInjectedIntoOrganisms(0.0);
+ for (int i=0; i < target_deme.GetSize(); i++) {
+ int cellid = target_deme.GetCellID(i);
+ cPopulationCell& cell = m_world->GetPopulation().GetCell(cellid);
+ if(cell.IsOccupied()) {
+ cOrganism* organism = cell.GetOrganism();
+ cPhenotype& phenotype = organism->GetPhenotype();
+ phenotype.SetEnergy(phenotype.GetStoredEnergy() + offspring_deme_energy/static_cast<double>(target_deme.GetOrgCount()));
+ phenotype.SetMerit(cMerit(cMerit::EnergyToMerit(phenotype.GetStoredEnergy() * phenotype.GetEnergyUsageRatio(), m_world)));
+ totalEnergyInjectedIntoOrganisms += phenotype.GetStoredEnergy();
+ }
}
+ target_deme.SetEnergyInjectedIntoOrganisms(totalEnergyInjectedIntoOrganisms);
}
-
- // split deme energy evenly between organisms in target deme
- for (int i=0; i < target_deme.GetSize(); i++) {
- int cellid = target_deme.GetCellID(i);
- cPopulationCell& cell = m_world->GetPopulation().GetCell(cellid);
- if(cell.IsOccupied()) {
- cOrganism* organism = cell.GetOrganism();
- cPhenotype& phenotype = organism->GetPhenotype();
- phenotype.SetEnergy(phenotype.GetStoredEnergy() + offspring_deme_energy/static_cast<double>(target_deme.GetOrgCount()));
- phenotype.SetMerit(cMerit(cMerit::EnergyToMerit(phenotype.GetStoredEnergy() * phenotype.GetEnergyUsageRatio(), m_world)));
+ if(parent_deme_energy > 0.0) {
+ // split deme energy evenly between organisms in source deme
+ double totalEnergyInjectedIntoOrganisms(0.0);
+ for (int i=0; i < source_deme.GetSize(); i++) {
+ int cellid = source_deme.GetCellID(i);
+ cPopulationCell& cell = m_world->GetPopulation().GetCell(cellid);
+ if(cell.IsOccupied()) {
+ cOrganism* organism = cell.GetOrganism();
+ cPhenotype& phenotype = organism->GetPhenotype();
+ phenotype.SetEnergy(phenotype.GetStoredEnergy() + parent_deme_energy/static_cast<double>(source_deme.GetOrgCount()));
+ phenotype.SetMerit(cMerit(cMerit::EnergyToMerit(phenotype.GetStoredEnergy() * phenotype.GetEnergyUsageRatio(), m_world)));
+ totalEnergyInjectedIntoOrganisms += phenotype.GetStoredEnergy();
+ }
}
- }
+ source_deme.SetEnergyInjectedIntoOrganisms(totalEnergyInjectedIntoOrganisms);
+ }
}
@@ -2720,12 +2729,21 @@
df_fit.WriteTimeStamp();
df_fit.Write(stats.GetUpdate(), "update");
cDoubleSum avg_energy;
+ cDoubleSum avg_injected;
+ cDoubleSum avg_remainAtReplation;
+ avg_energy.Clear();
+ avg_injected.Clear();
+ avg_remainAtReplation.Clear();
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());
+ avg_injected.Add(cur_deme.CalculateTotalInitialEnergyResources() + cur_deme.GetEnergyInjectedIntoOrganisms());
+ avg_remainAtReplation.Add(cur_deme.GetEnergyRemainingInDemeAtReplication());
}
df_fit.Write(avg_energy.Ave(), "Total Average Energy");
+ df_fit.Write(avg_injected.Ave(), "Average Energy Injected");
+ df_fit.Write(avg_remainAtReplation.Ave(), "Average Energy Remaining at Replication");
df_fit.Endl();
}
More information about the Avida-cvs
mailing list