[Avida-SVN] r2527 - in branches/jobScheduling/source: cpu main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Tue Apr 8 13:07:28 PDT 2008


Author: beckma24
Date: 2008-04-08 16:07:27 -0400 (Tue, 08 Apr 2008)
New Revision: 2527

Modified:
   branches/jobScheduling/source/cpu/cHardwareCPU.cc
   branches/jobScheduling/source/cpu/cHardwareCPU.h
   branches/jobScheduling/source/main/cAvidaConfig.h
   branches/jobScheduling/source/main/cDeme.cc
   branches/jobScheduling/source/main/cDeme.h
   branches/jobScheduling/source/main/cPhenotype.cc
   branches/jobScheduling/source/main/cPhenotype.h
   branches/jobScheduling/source/main/cPopulation.cc
   branches/jobScheduling/source/main/cStats.h
Log:


Modified: branches/jobScheduling/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/jobScheduling/source/cpu/cHardwareCPU.cc	2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/cpu/cHardwareCPU.cc	2008-04-08 20:07:27 UTC (rev 2527)
@@ -211,6 +211,7 @@
     tInstLibEntry<tMethod>("if-resources", &cHardwareCPU::Inst_IfResources, nInstFlag::STALL),
     // Data collection
     tInstLibEntry<tMethod>("collect-cell-data", &cHardwareCPU::Inst_CollectCellData, nInstFlag::STALL),
+    tInstLibEntry<tMethod>("kill-cell-event", &cHardwareCPU::Inst_KillCellEvent, nInstFlag::STALL),
     tInstLibEntry<tMethod>("collect-cell-data-and-kill-event", &cHardwareCPU::Inst_CollectCellDataAndKillEvent, nInstFlag::STALL),
 
     tInstLibEntry<tMethod>("donate-rnd", &cHardwareCPU::Inst_DonateRandom, nInstFlag::STALL),
@@ -2599,6 +2600,10 @@
   // const bool viable = Divide_CheckViable(ctx, div_point, child_size);
   // these checks should be done, but currently they make some assumptions
   // that crash when evaluating this kind of organism -- JEB
+  
+  // check if repro can replace an existing organism
+  if(m_world->GetConfig().REPRO_METHOD.Get() == 0 && organism->IsNeighborCellOccupied())
+    return false;
 
   if (organism->GetPhenotype().GetCurBonus() < m_world->GetConfig().REQUIRED_BONUS.Get()) return false;
   
@@ -3238,9 +3243,20 @@
   return true;
 }
 
+bool cHardwareCPU::Inst_KillCellEvent(cAvidaContext& ctx) {
+  // Fail if we're running in the test CPU.
+  if((organism->GetOrgInterface().GetDemeID() < 0) || (organism->GetCellID() < 0))
+    return false;
+
+  int eventID = organism->GetCellData();
+  organism->GetOrgInterface().GetDeme()->KillCellEvent(eventID);
+  return true;
+}
+
 bool cHardwareCPU::Inst_CollectCellDataAndKillEvent(cAvidaContext& ctx) {
   // Fail if we're running in the test CPU.
-  if((organism->GetOrgInterface().GetDemeID() < 0) || (organism->GetCellID() < 0)) return false;
+  if((organism->GetOrgInterface().GetDemeID() < 0) || (organism->GetCellID() < 0))
+    return false;
   
   const int out_reg = FindModifiedRegister(REG_BX);
   int eventID = organism->GetCellData();

Modified: branches/jobScheduling/source/cpu/cHardwareCPU.h
===================================================================
--- branches/jobScheduling/source/cpu/cHardwareCPU.h	2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/cpu/cHardwareCPU.h	2008-04-08 20:07:27 UTC (rev 2527)
@@ -461,6 +461,7 @@
   //! Execute the following instruction if all resources are above their min level.
   bool Inst_IfResources(cAvidaContext& ctx);
   bool Inst_CollectCellData(cAvidaContext& ctx);
+  bool Inst_KillCellEvent(cAvidaContext& ctx);
   bool Inst_CollectCellDataAndKillEvent(cAvidaContext& ctx);
 
   void DoDonate(cOrganism * to_org);

Modified: branches/jobScheduling/source/main/cAvidaConfig.h
===================================================================
--- branches/jobScheduling/source/main/cAvidaConfig.h	2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cAvidaConfig.h	2008-04-08 20:07:27 UTC (rev 2527)
@@ -329,6 +329,7 @@
   CONFIG_ADD_VAR(INJECT_METHOD, int, 0, "0 = Leaves the parasite thread state untouched.\n1 = Resets the calling thread state on inject");
   CONFIG_ADD_VAR(GENERATION_INC_METHOD, int, 1, "0 = Only the generation of the child is\n    increased on divide.\n1 = Both the generation of the mother and child are\n    increased on divide (good with DIVIDE_METHOD 1).");
   CONFIG_ADD_VAR(RESET_INPUTS_ON_DIVIDE, int, 0, "Reset environment inputs of parent upon successful divide.");
+  CONFIG_ADD_VAR(REPRO_METHOD, int, 1, "Replace existing organism: 1=yes");
 	
   CONFIG_ADD_GROUP(RECOMBINATION_GROUP, "Sexual Recombination and Modularity");
   CONFIG_ADD_VAR(RECOMBINATION_PROB, double, 1.0, "probability of recombination in div-sex");

Modified: branches/jobScheduling/source/main/cDeme.cc
===================================================================
--- branches/jobScheduling/source/main/cDeme.cc	2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cDeme.cc	2008-04-08 20:07:27 UTC (rev 2527)
@@ -104,8 +104,8 @@
     if(_age == (*iter).first) {
       // at end point
       (m_world->GetStats().FlowRateTuple())[(*iter).second].first.Add(GetSize());
-      (m_world->GetStats().FlowRateTuple())[(*iter).second].second.Add(GetEventsKilled());
-
+      (m_world->GetStats().FlowRateTuple())[(*iter).second].second.Add(GetEventsKilledThisSlot());
+      eventsKilledThisSlot = 0;
       break;
     }
   }
@@ -144,6 +144,7 @@
   birth_count = 0;
   cur_normalized_time_used = 0;
   eventsKilled = 0;
+  eventsKilledThisSlot = 0;
   
   if(resetResources) deme_resource_count.ReinitializeResources();
 }
@@ -320,6 +321,7 @@
       }
       event.DeactivateEvent();  //event over
       eventsKilled++;
+      eventsKilledThisSlot++;
     }
   }
 }

Modified: branches/jobScheduling/source/main/cDeme.h
===================================================================
--- branches/jobScheduling/source/main/cDeme.h	2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cDeme.h	2008-04-08 20:07:27 UTC (rev 2527)
@@ -62,6 +62,7 @@
   double cur_normalized_time_used; // normalized by merit and number of orgs
   double last_normalized_time_used; 
   unsigned int eventsKilled;
+  unsigned int eventsKilledThisSlot;
   
   // End of phenotypic traits
   
@@ -85,7 +86,7 @@
 public:
   cDeme() : _id(0), width(0), birth_count(0), org_count(0), _age(0), generation(0), total_org_energy(0.0), total_energy_testament(0.0),
             time_used(0), gestation_time(0), cur_normalized_time_used(0.0), last_normalized_time_used(0.0), 
-            eventsKilled(0), deme_resource_count(0), m_germline_genotype_id(0) { ; }
+            eventsKilled(0), eventsKilledThisSlot(0), deme_resource_count(0), m_germline_genotype_id(0) { ; }
   ~cDeme() { ; }
 
   void Setup(int id, const tArray<int>& in_cells, int in_width = -1, cWorld* world = NULL);
@@ -116,6 +117,7 @@
   int GetGeneration() const { return generation; }
 
   int GetEventsKilled() const { return eventsKilled; }
+  int GetEventsKilledThisSlot() const { return eventsKilledThisSlot;}
   
   bool IsEmpty() const { return org_count == 0; }
   bool IsFull() const { return org_count == cell_ids.GetSize(); }

Modified: branches/jobScheduling/source/main/cPhenotype.cc
===================================================================
--- branches/jobScheduling/source/main/cPhenotype.cc	2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cPhenotype.cc	2008-04-08 20:07:27 UTC (rev 2527)
@@ -87,9 +87,10 @@
   
   // 1. These are values calculated at the last divide (of self or offspring)
   merit                    = in_phen.merit;
-  executionRatio          = in_phen.executionRatio;
+  executionRatio           = in_phen.executionRatio;
   energy_store             = in_phen.energy_store;    
   energy_tobe_applied      = in_phen.energy_tobe_applied;
+  energy_testament         = in_phen.energy_testament;
   genome_length            = in_phen.genome_length;        
   bonus_instruction_count  = in_phen.bonus_instruction_count; 
   copied_size              = in_phen.copied_size;          
@@ -259,6 +260,7 @@
   executionRatio = 1.0;
   energy_store    = min(energy_store, (double) m_world->GetConfig().ENERGY_CAP.Get());
   energy_tobe_applied = 0.0;
+  energy_testament = 0.0;
   genome_length   = _genome.GetSize();
   copied_size     = parent_phenotype.child_copied_size;
   executed_size   = parent_phenotype.executed_size;
@@ -403,6 +405,7 @@
   executed_size   = genome_length;
   energy_store    = min(m_world->GetConfig().ENERGY_GIVEN_ON_INJECT.Get(), m_world->GetConfig().ENERGY_CAP.Get());
   energy_tobe_applied = 0.0;
+  energy_testament = 0.0;
   executionRatio = 1.0;
   gestation_time  = 0;
   gestation_start = 0;
@@ -537,8 +540,10 @@
   }
   merit = cur_merit_base * cur_bonus;
   
-  //BB:TODO update energy store
   SetEnergy(energy_store + cur_energy_bonus);
+  m_world->GetStats().SumEnergyTestamentAcceptedByOrganisms().Add(energy_testament);
+  energy_testament = 0.0;
+
   
   genome_length   = _genome.GetSize();
   (void) copied_size;          // Unchanged
@@ -810,6 +815,7 @@
   
   energy_store    = clone_phenotype.energy_store;
   energy_tobe_applied = 0.0;
+  energy_testament = 0.0;
   executionRatio = 1.0;
   
   executionRatio  = clone_phenotype.executionRatio;
@@ -1388,6 +1394,8 @@
       energy_tobe_applied += cur_energy_bonus;
     } else if(m_world->GetConfig().APPLY_ENERGY_METHOD.Get() == 1) {
       SetEnergy(energy_store + cur_energy_bonus);
+      m_world->GetStats().SumEnergyTestamentAcceptedByOrganisms().Add(energy_testament);
+      energy_testament = 0.0;
     } else {
       cerr<< "Unknown APPLY_ENERGY_METHOD value " << m_world->GetConfig().APPLY_ENERGY_METHOD.Get();
       exit(-1);
@@ -1398,7 +1406,10 @@
 
 void cPhenotype::ApplyToEnergyStore() {
   SetEnergy(energy_store + energy_tobe_applied);
+  m_world->GetStats().SumEnergyTestamentAcceptedByOrganisms().Add(energy_testament);
+  energy_testament = 0.0;
   energy_tobe_applied = 0.0;
+  energy_testament = 0.0;
 }
 
 double cPhenotype::ExtractParentEnergy() {
@@ -1586,8 +1597,9 @@
   }
   merit = cur_merit_base * cur_bonus;
 
-  //BB:TODO update energy store
   SetEnergy(energy_store + cur_energy_bonus);
+  m_world->GetStats().SumEnergyTestamentAcceptedByOrganisms().Add(energy_testament);
+  energy_testament = 0.0;
     
   genome_length   = _genome.GetSize();
   gestation_start = time_used;

Modified: branches/jobScheduling/source/main/cPhenotype.h
===================================================================
--- branches/jobScheduling/source/main/cPhenotype.h	2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cPhenotype.h	2008-04-08 20:07:27 UTC (rev 2527)
@@ -108,6 +108,7 @@
   double cur_bonus;                           // Current Bonus
   double cur_energy_bonus;                    // Current energy bonus
   double energy_tobe_applied;                 // Energy that has not yet been added to energy store.
+  double energy_testament;
   int cur_num_errors;                         // Total instructions executed illeagally.
   int cur_num_donates;                        // Number of donations so far
   tArray<int> cur_task_count;                 // Total times each task was performed

Modified: branches/jobScheduling/source/main/cPopulation.cc
===================================================================
--- branches/jobScheduling/source/main/cPopulation.cc	2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cPopulation.cc	2008-04-08 20:07:27 UTC (rev 2527)
@@ -1223,6 +1223,7 @@
   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();
+    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());
     offspring_deme_energy = source_deme_energy * deme_energy_decay * m_world->GetConfig().FRAC_PARENT_ENERGY_GIVEN_TO_DEME_AT_BIRTH.Get();
@@ -2041,9 +2042,11 @@
   cDataFile& df = m_world->GetDataFile(filename);
   df.WriteTimeStamp();
   df.Write(m_world->GetStats().GetUpdate(), "Update");
-  df.Write(stats.SumEnergyTestamentToDemeOrganisms().Average(),     "Energy Testament To Deme Organisms");
-  df.Write(stats.SumEnergyTestamentToFutureDeme().Average(),        "Energy Testament To Future Deme");
-  df.Write(stats.SumEnergyTestamentToNeighborOrganisms().Average(), "Energy Testament To Neighbor Organisms");
+  df.Write(stats.SumEnergyTestamentToDemeOrganisms().Average(),     "Energy Testament to Deme Organisms");
+  df.Write(stats.SumEnergyTestamentToFutureDeme().Average(),        "Energy Testament to Future Deme");
+  df.Write(stats.SumEnergyTestamentToNeighborOrganisms().Average(), "Energy Testament to Neighbor Organisms");
+  df.Write(stats.SumEnergyTestamentAcceptedByDeme().Average(),      "Energy Testament Accepted by Future Deme");
+  df.Write(stats.SumEnergyTestamentAcceptedByOrganisms().Average(), "Energy Testament Accepted by Organisms");
   df.Endl();
 
 

Modified: branches/jobScheduling/source/main/cStats.h
===================================================================
--- branches/jobScheduling/source/main/cStats.h	2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cStats.h	2008-04-08 20:07:27 UTC (rev 2527)
@@ -279,6 +279,8 @@
   cDoubleSum EnergyTestamentToFutureDeme;
   cDoubleSum EnergyTestamentToNeighborOrganisms;
   cDoubleSum EnergyTestamentToDemeOrganisms;
+  cDoubleSum EnergyTestamentAcceptedByOrganisms;
+  cDoubleSum EnergyTestamentAcceptedByDeme;
   
   //(event flow rate, (deme pop size, events killed))
   std::map<int, std::pair<cIntSum, cIntSum> > flow_rate_tuple;
@@ -431,6 +433,8 @@
   cDoubleSum& SumEnergyTestamentToFutureDeme() { return EnergyTestamentToFutureDeme;}
   cDoubleSum& SumEnergyTestamentToNeighborOrganisms() { return EnergyTestamentToNeighborOrganisms; }
   cDoubleSum& SumEnergyTestamentToDemeOrganisms() { return EnergyTestamentToDemeOrganisms; }
+  cDoubleSum& SumEnergyTestamentAcceptedByOrganisms() { return EnergyTestamentAcceptedByOrganisms; }
+  cDoubleSum& SumEnergyTestamentAcceptedByDeme() { return EnergyTestamentAcceptedByDeme; }
 
   
   std::map<int, std::pair<cIntSum, cIntSum> >&  FlowRateTuple() { return flow_rate_tuple; }
@@ -479,7 +483,9 @@
   const cDoubleSum& SumEnergyTestamentToFutureDeme() const { return EnergyTestamentToFutureDeme;}
   const cDoubleSum& SumEnergyTestamentToNeighborOrganisms() const { return EnergyTestamentToNeighborOrganisms; }
   const cDoubleSum& SumEnergyTestamentToDemeOrganisms() const { return EnergyTestamentToDemeOrganisms; }
-  
+  const cDoubleSum& SumEnergyTestamentAcceptedByOrganisms() const { return EnergyTestamentAcceptedByOrganisms; }
+  const cDoubleSum& SumEnergyTestamentAcceptedByDeme() const { return EnergyTestamentAcceptedByDeme; }
+
   const std::map<int, std::pair<cIntSum, cIntSum> >&  FlowRateTuple() const { return flow_rate_tuple; }
 
 




More information about the Avida-cvs mailing list