[Avida-SVN] r2217 - in branches/energy/source: drivers main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Sat Dec 1 08:53:01 PST 2007


Author: beckma24
Date: 2007-12-01 11:53:01 -0500 (Sat, 01 Dec 2007)
New Revision: 2217

Modified:
   branches/energy/source/drivers/cDefaultRunDriver.cc
   branches/energy/source/main/cDeme.cc
   branches/energy/source/main/cPopulation.cc
Log:
Increased performance of deme resources.  Bug fix, demes were aging when no organisms where present within the deme.  Bug fix, incrementer in wrong spot in loop that kill a deme event

Modified: branches/energy/source/drivers/cDefaultRunDriver.cc
===================================================================
--- branches/energy/source/drivers/cDefaultRunDriver.cc	2007-11-30 20:39:12 UTC (rev 2216)
+++ branches/energy/source/drivers/cDefaultRunDriver.cc	2007-12-01 16:53:01 UTC (rev 2217)
@@ -69,6 +69,7 @@
   cAvidaContext& ctx = m_world->GetDefaultContext();
 
   while (!m_done) {
+  
     if (cChangeList* change_list = population.GetChangeList()) {
       change_list->Reset();
     }

Modified: branches/energy/source/main/cDeme.cc
===================================================================
--- branches/energy/source/main/cDeme.cc	2007-11-30 20:39:12 UTC (rev 2216)
+++ branches/energy/source/main/cDeme.cc	2007-12-01 16:53:01 UTC (rev 2217)
@@ -82,6 +82,9 @@
 
 
 void cDeme::ProcessUpdate() {
+  if(IsEmpty())
+    return;
+
   for(int i = 0; i < cell_events.Size(); i++) {
     cDemeCellEvent& event = cell_events[i];
     if(event.GetDelay() == _age) {
@@ -101,14 +104,14 @@
 
         eventCell = event.GetNextEventCellID();
       }
-    } else if(event.GetDelay() + event.GetDuration() == _age) {
+    } else if(event.GetDelay() + event.GetDuration() == _age) {  //this does not work for all kinds of deme event (gradiant)
       int eventCell = event.GetNextEventCellID();
       while(eventCell != -1) {
         if(event.GetEventID() == m_world->GetPopulation().GetCell(GetCellID(eventCell)).GetCellData()) { // eventID == CellData
           //set cell data to 0
           m_world->GetPopulation().GetCell(GetCellID(eventCell)).SetCellData(0);
-          eventCell = event.GetNextEventCellID();
         }
+        eventCell = event.GetNextEventCellID();
       }
       event.DeactivateEvent();  //event over
     }

Modified: branches/energy/source/main/cPopulation.cc
===================================================================
--- branches/energy/source/main/cPopulation.cc	2007-11-30 20:39:12 UTC (rev 2216)
+++ branches/energy/source/main/cPopulation.cc	2007-12-01 16:53:01 UTC (rev 2217)
@@ -1141,7 +1141,7 @@
       }
       case 6: {
         // Replicate old demes
-        if(source_deme.GetAge() < m_world->GetConfig().MAX_DEME_AGE.Get() && source_deme.GetOrgCount() > 0)
+        if(source_deme.GetAge() < m_world->GetConfig().MAX_DEME_AGE.Get())
           continue;
         break;
       }
@@ -2251,13 +2251,17 @@
   assert(cell.IsOccupied()); // Unoccupied cell getting processor time!
   cOrganism* cur_org = cell.GetOrganism();
   cell.GetHardware()->SingleProcess(ctx);
-  if (cur_org->GetPhenotype().GetToDelete() == true) {
-    delete cur_org;
-  }
+
   m_world->GetStats().IncExecuted();
   resource_count.Update(step_size);
-  for(int i = 0; i < GetNumDemes(); i++) {
+  
+  GetDeme(cell.GetDemeID()).Update(step_size);
+/*  for(int i = 0; i < GetNumDemes(); i++) {
     GetDeme(i).Update(step_size);
+  }*/
+
+  if (cur_org->GetPhenotype().GetToDelete() == true) {
+    delete cur_org;
   }
 }
 
@@ -2271,9 +2275,12 @@
   stats.SumDemeOrgCount().Clear();
   
   for(int i = 0; i < GetNumDemes(); i++) {
-    stats.SumDemeAge().Add(GetDeme(i).GetAge());
-    stats.SumDemeBirthCount().Add(GetDeme(i).GetBirthCount());
-    stats.SumDemeOrgCount().Add(GetDeme(i).GetOrgCount());
+    cDeme& deme = GetDeme(i);
+    if(deme.IsEmpty())  // ignore empty demes
+      continue;
+    stats.SumDemeAge().Add(deme.GetAge());
+    stats.SumDemeBirthCount().Add(deme.GetBirthCount());
+    stats.SumDemeOrgCount().Add(deme.GetOrgCount());
   }
 }
 




More information about the Avida-cvs mailing list