[Avida-SVN] r2219 - in branches/energy/source: classification main
beckma24 at myxo.css.msu.edu
beckma24 at myxo.css.msu.edu
Mon Dec 3 11:57:43 PST 2007
Author: beckma24
Date: 2007-12-03 14:57:42 -0500 (Mon, 03 Dec 2007)
New Revision: 2219
Modified:
branches/energy/source/classification/cClassificationManager.cc
branches/energy/source/main/cGenome.cc
branches/energy/source/main/cGenome.h
branches/energy/source/main/cOrganism.cc
branches/energy/source/main/cOrganism.h
branches/energy/source/main/cPhenotype.cc
branches/energy/source/main/cPopulation.cc
Log:
trying to make energy heritable
Modified: branches/energy/source/classification/cClassificationManager.cc
===================================================================
--- branches/energy/source/classification/cClassificationManager.cc 2007-12-03 01:35:18 UTC (rev 2218)
+++ branches/energy/source/classification/cClassificationManager.cc 2007-12-03 19:57:42 UTC (rev 2219)
@@ -172,8 +172,9 @@
found_genotype->SetParent(NULL, NULL);
found_genotype->SetLineageLabel(lineage_label);
AddGenotype(found_genotype, list_num);
+ cerr<<"here\n";
}
-
+ cerr<<"here1\n";
return found_genotype;
}
Modified: branches/energy/source/main/cGenome.cc
===================================================================
--- branches/energy/source/main/cGenome.cc 2007-12-03 01:35:18 UTC (rev 2218)
+++ branches/energy/source/main/cGenome.cc 2007-12-03 19:57:42 UTC (rev 2219)
@@ -30,17 +30,17 @@
cGenome::cGenome(int _size)
- : genome(_size), active_size(_size)
+ : genome(_size), active_size(_size), energy(0.0)
{
}
cGenome::cGenome(const cGenome & in_genome)
- : genome(in_genome.GetSize()), active_size(in_genome.GetSize())
+ : genome(in_genome.GetSize()), active_size(in_genome.GetSize()), energy(in_genome.GetEnergy())
{
for (int i = 0; i < active_size; i++) genome[i] = in_genome[i];
}
-cGenome::cGenome(const cString & in_string)
+cGenome::cGenome(const cString & in_string): energy(0.0)
{
cString tmp_string(in_string);
tmp_string.RemoveChar('_'); // Remove all blanks from alignments...
@@ -60,7 +60,7 @@
\todo Just as an aside, it looks like Push continually reallocs memory in tArray.
*/
cGenome::cGenome(cInstruction* begin, cInstruction* end)
-: active_size(0)
+: active_size(0), energy(0.0)
{
for(cInstruction* i=begin; i!=end; ++i,++active_size) {
genome.Push(*i);
@@ -75,6 +75,8 @@
void cGenome::operator=(const cGenome & other_genome)
{
+ energy = other_genome.GetEnergy();
+
// If we need to resize, do so...
active_size = other_genome.GetSize();
genome.ResizeClear(active_size);
Modified: branches/energy/source/main/cGenome.h
===================================================================
--- branches/energy/source/main/cGenome.h 2007-12-03 01:35:18 UTC (rev 2218)
+++ branches/energy/source/main/cGenome.h 2007-12-03 19:57:42 UTC (rev 2219)
@@ -48,10 +48,15 @@
protected:
tArray<cInstruction> genome;
int active_size;
+
+ mutable double energy;
public:
+ double GetEnergy() const { return energy; }
+ void SetEnergy(const double value) const { energy = value; }
+
//! Default constructor.
- cGenome() { ; }
+ cGenome() { energy = 0.0; }
explicit cGenome(int _size); //! Constructor that builds a 'blank' cGenome of the specified size.
cGenome(const cGenome& in_genome); //! Copy constructor.
cGenome(const cString& in_string); //! Constructor that builds a cGenome from a string.
Modified: branches/energy/source/main/cOrganism.cc
===================================================================
--- branches/energy/source/main/cOrganism.cc 2007-12-03 01:35:18 UTC (rev 2218)
+++ branches/energy/source/main/cOrganism.cc 2007-12-03 19:57:42 UTC (rev 2219)
@@ -255,6 +255,16 @@
m_phenotype.RefreshEnergy();
m_phenotype.ApplyToEnergyStore();
double newMerit = cMerit::EnergyToMerit(GetPhenotype().GetStoredEnergy() * GetPhenotype().GetEnergyUsageRatio(), m_world);
+
+ /******** tmp*******/
+ newMerit += m_phenotype.GetCurBonus();
+
+// set in germ line
+
+ m_world->GetPopulation().GetDeme(this->GetOrgInterface().GetDemeID()).GetGermline().GetLatest().SetEnergy(GetPhenotype().GetStoredEnergy());
+ cerr<<m_world->GetPopulation().GetDeme(this->GetOrgInterface().GetDemeID()).GetGermline().GetLatest().GetEnergy()<<endl;
+
+// m_phenotype.SetCurBonus(0.0);
if(newMerit != -1) {
m_interface->UpdateMerit(newMerit);
}
Modified: branches/energy/source/main/cOrganism.h
===================================================================
--- branches/energy/source/main/cOrganism.h 2007-12-03 01:35:18 UTC (rev 2218)
+++ branches/energy/source/main/cOrganism.h 2007-12-03 19:57:42 UTC (rev 2219)
@@ -357,7 +357,7 @@
// -------- Movement TEMP --------
public:
- const double GetGradientMovement() const {
+ double GetGradientMovement() const {
return m_gradient_movement;
}
Modified: branches/energy/source/main/cPhenotype.cc
===================================================================
--- branches/energy/source/main/cPhenotype.cc 2007-12-03 01:35:18 UTC (rev 2218)
+++ branches/energy/source/main/cPhenotype.cc 2007-12-03 19:57:42 UTC (rev 2219)
@@ -404,7 +404,10 @@
merit = genome_length;
copied_size = genome_length;
executed_size = genome_length;
- energy_store = min(m_world->GetConfig().ENERGY_GIVEN_ON_INJECT.Get(), m_world->GetConfig().ENERGY_CAP.Get());
+
+ cerr<<"cPhenotype::SetupInject "<<_genome.GetEnergy()<<endl;
+
+ energy_store = min(m_world->GetConfig().ENERGY_GIVEN_ON_INJECT.Get() + (int)(_genome.GetEnergy() * (1-m_world->GetConfig().FRAC_ENERGY_DECAY_AT_BIRTH.Get())), m_world->GetConfig().ENERGY_CAP.Get());
energy_tobe_applied = 0.0;
executionRatio = 1.0;
gestation_time = 0;
Modified: branches/energy/source/main/cPopulation.cc
===================================================================
--- branches/energy/source/main/cPopulation.cc 2007-12-03 01:35:18 UTC (rev 2218)
+++ branches/energy/source/main/cPopulation.cc 2007-12-03 19:57:42 UTC (rev 2219)
@@ -1156,8 +1156,16 @@
cRandom& random = m_world->GetRandom();
// Choose a random target deme to replicate to, and kill all the organisms
- // in that deme.
+ // in that deme. Favor empty demes
+ int id;
int target_id = deme_id;
+
+ for (id = 0; id < num_demes; id++) {
+ if(GetDeme(id).IsEmpty()) {
+ target_id = id;
+ }
+ }
+
while(target_id == deme_id) {
target_id = random.GetUInt(num_demes);
}
@@ -1178,6 +1186,10 @@
// Now create the next germ by manually mutating the source.
// @refactor (strategy pattern)
cGenome next_germ(source_germ);
+
+ cerr<<source_germ.GetEnergy()<<" - "<<next_germ.GetEnergy()<<endl;
+
+
if(m_world->GetConfig().GERMLINE_COPY_MUT.Get() > 0) {
const cInstSet& instset = m_world->GetHardwareManager().GetInstSet();
cAvidaContext ctx(m_world->GetRandom());
@@ -1198,12 +1210,15 @@
source_germline.Add(next_germ);
}
+
if(!m_world->GetConfig().LOG_GERMLINE.Get()) {
target_germline.RemoveOldest();
if(m_world->GetConfig().GERMLINE_REPLACES_SOURCE.Get()) {
source_germline.RemoveOldest();
}
}
+
+ cerr<<source_germline.GetLatest().GetEnergy()<<" - "<<target_germline.GetLatest().GetEnergy()<<endl;
// Kill all the organisms in the source deme.
for (int i=0; i<source_deme.GetSize(); i++) {
@@ -3269,7 +3284,10 @@
{
// Setup the genotype...
cGenotype* new_genotype = m_world->GetClassificationManager().GetGenotypeInjected(genome, lineage_label);
-
+
+ /*****TEMP*****/
+ new_genotype->GetGenome().SetEnergy(genome.GetEnergy());
+
// The rest is done by InjectGenotype();
InjectGenotype( cell_id, new_genotype );
}
More information about the Avida-cvs
mailing list