[Avida-SVN] r2692 - in branches/interrupt/source: actions main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Mon Jun 30 13:30:47 PDT 2008


Author: beckma24
Date: 2008-06-30 16:30:47 -0400 (Mon, 30 Jun 2008)
New Revision: 2692

Modified:
   branches/interrupt/source/actions/PopulationActions.cc
   branches/interrupt/source/main/cDeme.cc
   branches/interrupt/source/main/cDeme.h
Log:
Added another compete deme fitness function

Modified: branches/interrupt/source/actions/PopulationActions.cc
===================================================================
--- branches/interrupt/source/actions/PopulationActions.cc	2008-06-26 19:51:35 UTC (rev 2691)
+++ branches/interrupt/source/actions/PopulationActions.cc	2008-06-30 20:30:47 UTC (rev 2692)
@@ -1281,6 +1281,25 @@
     }
 };
 
+class cAbstractCompeteDemes__AttackKill_EnergyConserve_QuickKill : public cAbstractCompeteDemes {
+
+  public:
+    cAbstractCompeteDemes__AttackKill_EnergyConserve_QuickKill(cWorld* world, const cString& args) : cAbstractCompeteDemes(world, args) { }
+
+    static const cString GetDescription() { return "No Arguments"; }
+  
+    double Fitness(const cDeme& deme) {    
+      double eventsKilled = static_cast<double>(deme.GetEventsKilled());
+      double totalEvents  = static_cast<double>(deme.GetEventsTotal());
+      double energyRemaining = deme.CalculateTotalEnergy();
+      double initialEnergy = deme.CalculateTotalInitialEnergyResources();
+      double avgEventLifeTime = deme.GetAverageEventLifeTime();
+      double maxEventLifetime = deme.GetMaxEventLifetime();
+      double fitnessOfDeme = ((eventsKilled / totalEvents) + (energyRemaining / initialEnergy) - (avgEventLifeTime / maxEventLifetime) ) / 2.0;
+      return fitnessOfDeme;
+    }
+};
+
 /* This Action will check if any demes have met the critera to be replicated
    and do so.  There are several bases this can be checked on:
 
@@ -1972,6 +1991,7 @@
 
 /****AbstractCompeteDemes sub-classes****/
   action_lib->Register<cAbstractCompeteDemes_AttackKillAndEnergyConserve>("CompeteDemes_AttackKillAndEnergyConserve");
+  action_lib->Register<cAbstractCompeteDemes__AttackKill_EnergyConserve_QuickKill>("CompeteDemes__AttackKill_EnergyConserve_QuickKill");
   
   action_lib->Register<cActionNewTrial>("NewTrial");
   action_lib->Register<cActionCompeteOrganisms>("CompeteOrganisms");

Modified: branches/interrupt/source/main/cDeme.cc
===================================================================
--- branches/interrupt/source/main/cDeme.cc	2008-06-26 19:51:35 UTC (rev 2691)
+++ branches/interrupt/source/main/cDeme.cc	2008-06-30 20:30:47 UTC (rev 2692)
@@ -185,6 +185,7 @@
         eventCell = event.GetNextEventCellID();
       }
       event.DeactivateEvent();  //event over
+      averageEventLifetime.Add(event.GetDuration());
     }
   }
   
@@ -508,6 +509,8 @@
   assert(cell_events.Size() == 0); // not designed to be used with other cell events
   assert(m_world->GetConfig().DEMES_MAX_AGE.Get() >= m_total_slots);
   
+  maxEventLifetime = m_total_events_per_slot_max;
+  
   int flow_level_increment = (m_total_events_per_slot_max - m_total_events_per_slot_min) / (m_tolal_event_flow_levels-1);
   int slot_length = m_world->GetConfig().DEMES_MAX_AGE.Get() / m_total_slots;
 

Modified: branches/interrupt/source/main/cDeme.h
===================================================================
--- branches/interrupt/source/main/cDeme.h	2008-06-26 19:51:35 UTC (rev 2691)
+++ branches/interrupt/source/main/cDeme.h	2008-06-30 20:30:47 UTC (rev 2692)
@@ -80,6 +80,7 @@
   unsigned int eventKillAttempts;
   unsigned int eventKillAttemptsThisSlot;
   cIntSum averageEventLifetime;
+  int maxEventLifetime;
   unsigned int consecutiveSuccessfulEventPeriods;
   int sleeping_count; //!< Number of organisms currently sleeping
   cDoubleSum energyUsage;
@@ -126,7 +127,7 @@
   cDeme() : _id(0), width(0), 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), total_energy_testament(0.0),
-            eventsTotal(0), eventsKilled(0), eventsKilledThisSlot(0), eventKillAttempts(0), eventKillAttemptsThisSlot(0),
+            eventsTotal(0), eventsKilled(0), eventsKilledThisSlot(0), eventKillAttempts(0), eventKillAttemptsThisSlot(0), maxEventLifetime(0),
             consecutiveSuccessfulEventPeriods(0), sleeping_count(0),
             avg_founder_generation(0.0), generations_per_lifetime(0.0),
             deme_resource_count(0), m_germline_genotype_id(0) { ; }
@@ -183,6 +184,8 @@
   int GetEventKillAttempts() const { return eventKillAttempts; }
   int GetEventKillAttemptsThisSlot() const { return eventKillAttemptsThisSlot; }
   int GetConsecutiveSuccessfulEventPeriods() const { return consecutiveSuccessfulEventPeriods;}
+  double GetAverageEventLifeTime() const { return averageEventLifetime.Average(); }
+  int GetMaxEventLifetime() const { return maxEventLifetime; }
   
   // -= Germline =-
   //! Returns this deme's germline.




More information about the Avida-cvs mailing list