[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