[Avida-cvs] [avida-svn] r995 - in branches/coopcomm: Avida.xcodeproj source/actions source/main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Tue Sep 26 10:09:34 PDT 2006


Author: beckma24
Date: 2006-09-26 13:09:33 -0400 (Tue, 26 Sep 2006)
New Revision: 995

Modified:
   branches/coopcomm/Avida.xcodeproj/project.pbxproj
   branches/coopcomm/source/actions/PrintActions.cc
   branches/coopcomm/source/main/cOrganism.cc
   branches/coopcomm/source/main/cStats.cc
   branches/coopcomm/source/main/cStats.h
Log:
Added PrintMessageDataPerUpdate event

Modified: branches/coopcomm/Avida.xcodeproj/project.pbxproj
===================================================================
--- branches/coopcomm/Avida.xcodeproj/project.pbxproj	2006-09-26 15:14:20 UTC (rev 994)
+++ branches/coopcomm/Avida.xcodeproj/project.pbxproj	2006-09-26 17:09:33 UTC (rev 995)
@@ -938,7 +938,7 @@
 		DCC315CF076253A5008F7A48 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
 		DCC315D0076253A5008F7A48 /* task_event_gen.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = task_event_gen.cc; sourceTree = "<group>"; };
 		DCC315D1076253A5008F7A48 /* task_event_gen.old.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = task_event_gen.old.cc; sourceTree = "<group>"; };
-		DCC3164D07626CF3008F7A48 /* avida */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = avida; sourceTree = BUILT_PRODUCTS_DIR; };
+		DCC3164D07626CF3008F7A48 /* avida */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = avida; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */

Modified: branches/coopcomm/source/actions/PrintActions.cc
===================================================================
--- branches/coopcomm/source/actions/PrintActions.cc	2006-09-26 15:14:20 UTC (rev 994)
+++ branches/coopcomm/source/actions/PrintActions.cc	2006-09-26 17:09:33 UTC (rev 995)
@@ -70,6 +70,8 @@
 STATS_OUT_FILE(PrintMessageData, message_log.dat);
 STATS_OUT_FILE(PrintIDData, id_log.dat);
 
+STATS_OUT_FILE(PrintMessageDataPerUpdate,       message.dat);
+
 #define POP_OUT_FILE(METHOD, DEFAULT)                                                     /*  1 */ \
 class cAction ## METHOD : public cAction {                                                /*  2 */ \
 private:                                                                                  /*  3 */ \
@@ -1581,4 +1583,6 @@
   action_lib->Register<cActionDumpReceiverGrid>("dump_receiver_grid");
 
   action_lib->Register<cActionSetVerbose>("VERBOSE");
+  
+  action_lib->Register<cActionPrintMessageDataPerUpdate>("PrintMessageDataPerUpdate");
 }

Modified: branches/coopcomm/source/main/cOrganism.cc
===================================================================
--- branches/coopcomm/source/main/cOrganism.cc	2006-09-26 15:14:20 UTC (rev 994)
+++ branches/coopcomm/source/main/cOrganism.cc	2006-09-26 17:09:33 UTC (rev 995)
@@ -517,12 +517,17 @@
     // Stat-tracking.
     m_world->GetStats().SentMessage(msg);
 
+    int old_size = m_sent_messages.size();
+  
     // store the message.  yes, we're storing it twice.  yes, we could save memory
     // by using pointers.  this is number two; if we need another sorted list of 
     // messages, it'll be time to refactor.
     m_sent_messages.push_back(msg);
     m_sorted_sent_messages.insert(std::make_pair(msg.GetData(), msg));
 
+    int new_size = m_sent_messages.size();
+    m_world->GetStats().UpdateSentSize(old_size, new_size);
+
     assert(m_interface);
     const tArray<double>& resource_count = m_interface->GetResources();
     
@@ -581,7 +586,11 @@
 */
 bool cOrganism::ReceiveMessage(cOrgMessage& msg)
 {
+  m_world->GetStats().IncReceived();
+  int old_size = m_received_messages.size();
   m_received_messages.push_back(msg);
+  int new_size = m_received_messages.size();
+  m_world->GetStats().UpdateInboxSize(old_size, new_size);  //needed to computer average inbox size
   m_sorted_recv_messages.insert(std::make_pair(msg.GetData(), msg));
   return true;
 }
@@ -593,8 +602,10 @@
 const cOrgMessage* cOrganism::RetrieveMessage()
 {
   if((m_retrieve_pos+1) > m_received_messages.size()) {
+    m_world->GetStats().IncFailedRetrieve();
     return NULL;
   } else {
+    m_world->GetStats().IncRetrieved();
     return &m_received_messages.at(m_retrieve_pos++);
   }
 }

Modified: branches/coopcomm/source/main/cStats.cc
===================================================================
--- branches/coopcomm/source/main/cStats.cc	2006-09-26 15:14:20 UTC (rev 994)
+++ branches/coopcomm/source/main/cStats.cc	2006-09-26 17:09:33 UTC (rev 995)
@@ -137,6 +137,18 @@
   SetupPrintDatabase();
 }
 
+void cStats::UpdateInboxSize(int old_val, int new_val) {
+  if(old_val != 0)
+    inbox_size.Subtract(old_val);
+  inbox_size.Add(new_val);
+}
+
+void cStats::UpdateSentSize(int old_val, int new_val) {
+  if(old_val != 0)
+    sent_size.Subtract(old_val);
+  sent_size.Add(new_val);
+}
+
 void cStats::SetupPrintDatabase()
 {
   // Load in all the keywords, descriptions, and associated functions for
@@ -363,6 +375,18 @@
 
   // Zero-out any variables which need to be cleared at end of update.
 
+  //added by ben
+  num_msg_sent = 0;
+  num_msg_sent_to_nonfacing = 0;
+  num_msg_sent_no_one = 0;
+  num_msg_dropped = 0;
+  num_msg_corrupted = 0;
+  num_msg_received = 0;
+  num_msg_retrieved = 0;
+  num_msg_failed_retrieve = 0;
+  inbox_size.Clear();
+  sent_size.Clear();
+
   num_births = 0;
   num_deaths = 0;
   num_breed_true = 0;
@@ -868,6 +892,7 @@
 void cStats::SentMessage(cOrgMessage& msg)
 {
   ++m_count_msgs;
+  num_msg_sent++; //<! added because m_count_msgs is reset in cStats::PrintMessageData
   m_msg_data.Add(msg.GetData());
   m_max_id = cPopulationCell::GetMaxRandomCellID();
   if(cPopulationCell::IsRandomCellID(msg.GetData())) {
@@ -989,3 +1014,25 @@
   df.Write(m_update, "Update");
   df.Endl();
 }
+
+//added by ben
+//! prints message numbers for an update
+void cStats::PrintMessageDataPerUpdate(const cString& filename) {
+    cDataFile & df = m_world->GetDataFile(filename);
+
+  df.WriteComment( "Avida message data" );
+  df.WriteTimeStamp();
+
+  df.Write(m_update,               "update");
+  df.Write(num_msg_sent,              "number of messages sent");
+  df.Write(num_msg_sent_to_nonfacing,     "number of messages sent to nonfacing organism NOT IMPLEMENTED");
+  df.Write(num_msg_sent_no_one,         "number of messages sent to no one NOT IMPLEMENTED");
+  df.Write(num_msg_dropped,           "number of messages dropped NOT IMPLEMENTED");
+  df.Write(num_msg_corrupted,         "number of messages corrupted NOT IMPLEMENTED");
+  df.Write(num_msg_received,          "number of messages received");
+  df.Write(num_msg_retrieved,         "number of messages retrieved");
+  df.Write(num_msg_failed_retrieve,         "number of failed message retrievals");
+  df.Write(inbox_size.Average(),         "average inbox size");
+  df.Write(sent_size.Average(),          "average sent box size");
+  df.Endl();
+}
\ No newline at end of file

Modified: branches/coopcomm/source/main/cStats.h
===================================================================
--- branches/coopcomm/source/main/cStats.h	2006-09-26 15:14:20 UTC (rev 994)
+++ branches/coopcomm/source/main/cStats.h	2006-09-26 17:09:33 UTC (rev 995)
@@ -177,6 +177,29 @@
 
   int num_genotypes_last;
 
+//added by ben for messaging stats
+  int num_msg_sent;
+  int num_msg_sent_to_nonfacing;
+  int num_msg_sent_no_one;
+  int num_msg_dropped;
+  int num_msg_corrupted;
+  int num_msg_received;
+  int num_msg_retrieved;
+  int num_msg_failed_retrieve;
+  cIntSum inbox_size;
+  cIntSum sent_size;
+  
+  cDoubleSum msg_sent;
+  cDoubleSum msg_sent_nonfacing;
+  cDoubleSum msg_sent_no_one;
+  cDoubleSum msg_dropped;
+  cDoubleSum msg_corrupted;
+  cDoubleSum msg_received;
+  cDoubleSum msg_retrieved;
+  //avg_inbox_length;
+  //avg_sent_length;
+
+
   int tot_organisms;
   int tot_genotypes;
   int tot_threshold;
@@ -587,6 +610,34 @@
   void PrintMessageData(const cString& filename);
   //! Log ID-specific data.
   void PrintIDData(const cString& filename);
+  
+  
+    //added by ben
+  void PrintMessageDataPerUpdate(const cString& filename);//!< prints message date file
+  
+  //added by ben for messaging stats
+  void IncSent() {num_msg_sent++;} //!< inc. number of messages sent
+  void IncSentToNonFacing() {num_msg_sent_to_nonfacing++;}
+  void IncSentNoOne() {num_msg_sent_no_one++;} //!< inc. number of messages to no one
+  void IncDropped() {num_msg_dropped++;} //!< inc. number of messages dropped
+  void IncCorrupted() {num_msg_corrupted++;} //!< inc. number of messages corrupted
+  void IncReceived() {num_msg_received++;} //!< inc. number of messages received
+  void IncRetrieved() {num_msg_retrieved++;} //!< inc. number of messages retrieved from inbox
+  void IncFailedRetrieve() {num_msg_failed_retrieve++;} //!< inc. number of failed message retrievals from inbox
+  void UpdateInboxSize(int old_val, int new_val);
+  void UpdateSentSize(int old_val, int new_val);
+    
+  
+  int GetNumSent() const {return num_msg_sent;} //!< returns number of messages sent
+  int GetNumSentNonfacing() const {return num_msg_sent_to_nonfacing;} //!< returns number of messages sent to nonfacing organisms
+  int GetNumSentNoOne() const {return num_msg_sent_no_one;} //!< returns number of messages sent to no one
+  int GetNumDropped() const {return num_msg_dropped;} //!< returns number of messages dropped
+  int GetNumCorrupted() const {return num_msg_corrupted;} //!< returns number of messages corrupted
+  int GetNumReceived() const {return num_msg_received;} //!< returns number of messages received
+  int GetNumRetrieved() const {return num_msg_retrieved;} //!< returns number of messages retrieved
+  //failed retrieval
+  double GetAvgInboxSize() const {return inbox_size.Average();}
+  double GetAvgSentSize() const {return sent_size.Average();}
 };
 
 




More information about the Avida-cvs mailing list