[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