[Avida-SVN] r1168 - in branches/coopcomm: Avida.xcodeproj documentation documentation/coopcomm source/actions source/cpu source/main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Fri Jan 5 08:31:33 PST 2007


Author: beckma24
Date: 2007-01-05 11:31:32 -0500 (Fri, 05 Jan 2007)
New Revision: 1168

Added:
   branches/coopcomm/documentation/coopcomm/
   branches/coopcomm/documentation/coopcomm/CoopCommAdditionsToAvida.tex
Modified:
   branches/coopcomm/Avida.xcodeproj/project.pbxproj
   branches/coopcomm/source/actions/PopulationActions.cc
   branches/coopcomm/source/cpu/cHardwareCPU.cc
   branches/coopcomm/source/cpu/cHardwareCPU.h
   branches/coopcomm/source/main/cOrgMessage.h
   branches/coopcomm/source/main/cOrganism.h
   branches/coopcomm/source/main/cPopulation.cc
   branches/coopcomm/source/main/cPopulation.h
   branches/coopcomm/source/main/cTaskLib.cc
   branches/coopcomm/source/main/cTaskLib.h
Log:
Added documentation of Coopcomm additions to Avida.

Added instruction am-i-base-station which allows an organism to determine if it is a base station

Added population action MoveBaseStation which allow existing base stations to be relocated and removed.


Modified: branches/coopcomm/Avida.xcodeproj/project.pbxproj
===================================================================
--- branches/coopcomm/Avida.xcodeproj/project.pbxproj	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/Avida.xcodeproj/project.pbxproj	2007-01-05 16:31:32 UTC (rev 1168)
@@ -363,6 +363,23 @@
 		E626209E0A372C2A00C07685 /* SaveLoadActions.cc in Sources */ = {isa = PBXBuildFile; fileRef = 708051A80A1F65FE00CBB8B6 /* SaveLoadActions.cc */; };
 /* End PBXBuildFile section */
 
+/* Begin PBXBuildStyle section */
+		B5F023EE0B4E9DA800B4F6F4 /* Development */ = {
+			isa = PBXBuildStyle;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+			};
+			name = Development;
+		};
+		B5F023EF0B4E9DA800B4F6F4 /* Deployment */ = {
+			isa = PBXBuildStyle;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+			};
+			name = Deployment;
+		};
+/* End PBXBuildStyle section */
+
 /* Begin PBXCopyFilesBuildPhase section */
 		700E2B6D085DE50C00CF158A /* CopyFiles */ = {
 			isa = PBXCopyFilesBuildPhase;
@@ -1757,6 +1774,12 @@
 		DCC30C4D0762532C008F7A48 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 702442D70859E0B00059BD9B /* Build configuration list for PBXProject "Avida" */;
+			buildSettings = {
+			};
+			buildStyles = (
+				B5F023EE0B4E9DA800B4F6F4 /* Development */,
+				B5F023EF0B4E9DA800B4F6F4 /* Deployment */,
+			);
 			hasScannedForEncodings = 0;
 			mainGroup = DCC30C490762532C008F7A48;
 			productRefGroup = DCC3164E07626CF3008F7A48 /* Products */;

Added: branches/coopcomm/documentation/coopcomm/CoopCommAdditionsToAvida.tex
===================================================================
--- branches/coopcomm/documentation/coopcomm/CoopCommAdditionsToAvida.tex	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/documentation/coopcomm/CoopCommAdditionsToAvida.tex	2007-01-05 16:31:32 UTC (rev 1168)
@@ -0,0 +1,248 @@
+\documentclass[12pt,english]{article}
+\usepackage[T1]{fontenc}
+\pagestyle{plain}
+
+\makeatletter
+\usepackage{latex8}
+\usepackage{times}
+\usepackage{babel}
+\usepackage{setspace}
+\usepackage{graphicx}
+%\doublespacing
+\makeatother
+
+\newcommand{\avida}{\textsc{Avida}}
+\newcommand{\bb}[1]{\textbf{\emph{[[bb: #1]]}}}
+
+\begin{document}
+
+
+\title{Coopcomm Additions to \avida}
+
+\author{Benjamin Beckmann\\ Dave Knoester}
+\affiliation{Computer Science and Engineering\\
+Michigan State University}
+
+\email{\{beckma24,dk\}@cse.msu.edu}
+
+\maketitle
+
+\tableofcontents
+
+\bb{Add sections as needed.}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%	Environment.cfg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Environment.cfg}
+
+\subsection{Directional Messaging Tasks}
+\begin{description}
+
+\item[sent-east] (skeleton: Revision 1067 implemented: Revision 1073)
+\item[sent-north] (skeleton: Revision 1067 implemented: Revision 1073)
+\item[sent-northeast] (skeleton: Revision 1067 implemented: Revision 1073)
+\item[sent-northwest] (skeleton: Revision 1067 implemented: Revision 1073)
+\item[sent-south] (skeleton: Revision 1067 implemented: Revision 1073)
+\item[sent-southeast] (skeleton: Revision 1067 implemented: Revision 1073)
+\item[sent-southwest] (skeleton: Revision 1067 implemented: Revision 1073)
+\item[sent-west] (skeleton: Revision 1067 implemented: Revision 1073)
+
+\end{description}
+
+\subsection{Messaging Tasks}
+\begin{description}
+
+\item[send-id-not-self] (Revision 1102)
+%
+Rewards organisms for sending IDs of other organisms.
+\end{description}
+
+%%%%%%%%%%%%%%%%%%%%% Sink Tree Tasks
+\subsection{Sink Tree Tasks}
+\begin{description}
+\item[send-non-self-toward-sink] (Revision ??)
+%
+This task rewards an organism for sending another organism's random cell ID in a message to a neighbor that is closer to a base station.
+%
+Distance is measured in hops between organism and base station.
+
+\item[send-not-toward-sink] (Revision 1017)
+%
+This task rewards an organism for sending a message to a neighbor that is not closer to a base station.
+%
+Distance is measured in hops between organism and base station.
+
+\item[send-self-toward-sink] (Revision ??)
+%
+This task rewards an organism for sending its random cell ID in a message to a neighbor that is closer to a base station.
+%
+Distance is measured in hops between organism and base station.
+
+\item[send-toward-sink] (Revision 1008)
+%
+This task rewards an organism for sending a message to a neighbor that is closer to a base station.
+%
+Distance is measured in hops between organism and base station.
+
+\item[send-toward-sink-multi-path] (Revision 1110)
+%
+This task rewards an organism for sending a message to multiple neighbors that is closer to a base station.
+%
+Distance is measured in hops between organism and base station.
+
+
+\end{description}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%	Events.cfg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Events.cfg}
+
+%%%%%%%%%%%%%%%%%%%%%%Population Actions
+\subsection{Population Actions}
+%
+\begin{description}
+
+\item[AddBaseStationPredicate] (Revision 1102)
+%
+Logs data that reaches a base station.
+
+\item[MoveBaseStation] (Revision ??)
+%
+This event relocates an existing base station.
+%
+An error is printed and \avida ~exits if the current base station to be move does not exist.
+%
+If the new location on the base station in negative then the base station is removed.
+
+Usage: <type> [timing] MoveBaseStation <Existing base station cell ID> <New cell ID of base station>
+
+\item[SetStaticBaseStation] (Revision 983)
+%
+This event sets a single \emph{CPopulationCell} as a base station.
+%
+It can be used multiple times if multiple base stations are required.
+
+Usage: <type> [timing] SetStaticBaseStation <Cell ID>
+\end{description}
+
+
+%%%%%%%%%%%%%%%%%%%%%%Print Actions
+\subsection{Print Actions}
+\begin{description}
+\item[PrintMessageDataPerUpdate] (Revision 995)
+%
+Prints general messaging data to \emph{message.dat}.
+%
+Fields are listed below.
+%
+\begin{itemize}
+%
+\item update
+%
+\item number of messages sent
+%
+\item number of messages sent to nonfacing organism NOT IMPLEMENTED
+%
+\item number of messages sent to no one NOT IMPLEMENTED
+%
+\item number of messages dropped NOT IMPLEMENTED
+%
+\item number of messages corrupted NOT IMPLEMENTED
+%
+\item number of messages received
+%
+\item number of messages retrieved
+%
+\item number of failed message retrievals
+%
+\item average inbox size
+%
+\item average sent box size
+\end{itemize}
+
+\item[PrintPredicatedMessages] (Revision 1027)
+Allows generic message tracking.  
+%
+See cOrgMessage.h, PrintActions.cc, cStats.cc, and PopulationActions.cc for an example of how to use it.
+%
+Note that the predicates are stateful - They could be used to track a particular message throughout the population, and note that they can also be added at runtime.
+
+\end{description}
+
+%%%%%%%%%%%%%%%%%%%%%%Save and Load Actions
+\subsection{Save and Load Actions}
+%
+\begin{description}
+\item[SaveLastSentTo] (Revision 1009)
+%
+Writes pairs (cell ID, last cell ID sent to) for each cell in the population.
+%
+All pairs from a single update are written to \emph{lastSentTo-UPDATE\#.pop}.
+\begin{itemize}
+\item Non-negative values in the second column represent messages that were receiver.
+%
+\item -1 means the organism in that cell has not sent any messages.
+%
+\item -2 means the organism sent a message to a cell which did not contain an organism during that update.
+%
+\item -3 means no organism in present in that cell during the update.
+\end{itemize}
+\end{description}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%	Instructions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Instructions}
+
+%%%%%%%%%%%%%%%%%%%%%% Identity instructions
+\subsection{Organism Identity}
+\begin{description}
+
+\item[am-i-base-station] (Revision ??)
+%
+Sets the call organism's ?BX? register to $1$ if it is currently a base station, $0$ otherwise.
+
+\end{description}
+
+%%%%%%%%%%%%%%%%%%%%%% Messaging instructions
+\subsection{Organism Messaging}
+\begin{description}
+
+\item[retrieve-msg-0-0] (Revision 1045)
+%
+Executes the same as retrieve-msg except when no message can be retrieved.
+%
+When no message is available for retrieval zeros are written to the target registers.
+%
+Tests show this version of RetieveMessage works as well as the other one, and allows for organisms to tell when it has failed.
+
+\end{description}
+
+%%%%%%%%%%%%%%%%%%%%%% Orientation instructions
+\subsection{Organism Orientation}
+\begin{description}
+
+\item[get-facing] (Revision 1045)
+%
+Uses Gray Codes to specify the direction a organism is facing.
+
+\item[rotate-label] (Revision 1068)
+%
+Rotates an organism to the direction specified by the label following.
+%
+The label specifies a direction using gray codes modulus the size of the majority of the neighborhoods in 
+the population.
+
+\item[rotate-value] (Revision 1045)
+%
+Read ?BX? and rotates left or right by the number stored in the register.
+\begin{itemize}
+\item Positive ?BX? value = rotate right
+\item Negative ?BX? value = rotate left
+\end{itemize}
+
+\end{description}
+
+\end{document}

Modified: branches/coopcomm/source/actions/PopulationActions.cc
===================================================================
--- branches/coopcomm/source/actions/PopulationActions.cc	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/source/actions/PopulationActions.cc	2007-01-05 16:31:32 UTC (rev 1168)
@@ -1515,7 +1515,7 @@
 };
 
 
-/**
+/*!
   Written by: Ben Beckmann
  Action to set an organism as a base station.  Multiple base stations are not allowed yet
  
@@ -1534,7 +1534,7 @@
     if (largs.IsNumber()) baseStation = largs.AsInt();
   }
   
-  static const cString GetDescription() { return "Arguments: [int baseStationCellID]"; }
+  static const cString GetDescription() { return "Arguments: <int baseStationCellID>"; }
   
   void Process(cAvidaContext& ctx)
   {
@@ -1542,7 +1542,46 @@
   }
 };
 
+/*!
+  Written by: Ben Beckmann
+ Action to change a base station.  Changing to a negative cell position is equivalent to removing a base station
+ 
+ Parameters:
+   Current cell ID of the base station
+   New cell ID on base station
+**/
+class cActionMoveBaseStation : public cAction
+{
+private:
+  int currentBaseStation;
+  int newBaseStation;
+  
+public:
+  cActionMoveBaseStation(cWorld* world, const cString& args) : cAction(world, args)
+  {
+    cString largs(args);
+    assert(largs.CountNumWords() == 2);
+    
+    cString currentBS(largs.PopWord());
+    cString newBS(largs.PopWord());
+    if (currentBS.IsNumber() && newBS.IsNumber()) {
+      currentBaseStation = currentBS.AsInt();
+      newBaseStation = newBS.AsInt();
+    } else {
+      std::cerr << "USAGE: MoveBaseStation\n" << GetDescription() << endl;
+      exit(-1);
+    }
+  }
+  
+  static const cString GetDescription() { return "Arguments: <int currentBaseStationCellID> <int newBaseStationCellID>"; }
+  
+  void Process(cAvidaContext& ctx)
+  {
+    m_world->GetPopulation().MoveBaseStation(currentBaseStation, newBaseStation);
+  }
+};
 
+
 /*! \brief Defines an action "ResetRandomCellIDs" that changes the random ID of a cell.
 
 This action takes as an argument either the number of cells to reset, or a keyword.
@@ -1808,6 +1847,7 @@
   // Coop-comm actions.
   action_lib->Register<cActionResetRandomCellIDs>("ResetRandomCellIDs");
   action_lib->Register<cActionSetStaticBaseStation>("SetStaticBaseStation");
+  action_lib->Register<cActionMoveBaseStation>("MoveBaseStation");
   action_lib->Register<cActionAddMessagePredicate>("AddMessagePredicate");
   action_lib->Register<cActionAddBaseStationPredicate>("AddBaseStationPredicate");
   action_lib->Register<cActionMessageRain>("MessageRain");

Modified: branches/coopcomm/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/coopcomm/source/cpu/cHardwareCPU.cc	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/source/cpu/cHardwareCPU.cc	2007-01-05 16:31:32 UTC (rev 1168)
@@ -373,7 +373,8 @@
     cInstEntryCPU("get-facing", &cHardwareCPU::Inst_GetFacing),
     cInstEntryCPU("set-leader", &cHardwareCPU::Inst_SetLeader),
     cInstEntryCPU("get-leader", &cHardwareCPU::Inst_GetLeader),
-    cInstEntryCPU("get-neighbor-id", &cHardwareCPU::Inst_GetNeighborID)
+    cInstEntryCPU("get-neighbor-id", &cHardwareCPU::Inst_GetNeighborID),
+    cInstEntryCPU("am-i-base-station", &cHardwareCPU::Inst_Am_I_Base_Station)
   };
   
   const int n_size = sizeof(s_n_array)/sizeof(cNOPEntryCPU);
@@ -3698,3 +3699,19 @@
   GetRegister(FindModifiedRegister(REG_BX)) = cell->GetRandomCellID();
   return true;  
 }
+
+
+/*!
+  Stores a ONE in the ?BX? register is the calling organisms is a sink, ZERO if not.
+*/
+bool cHardwareCPU::Inst_Am_I_Base_Station(cAvidaContext& ctx)
+{
+  tVector<int> BS_iter = m_world->GetPopulation().GetBaseStations();
+  for(int i = 0; i < BS_iter.Size(); i++) {
+    if(BS_iter[i] == organism->GetCellID()) {
+      GetRegister(FindModifiedRegister(REG_BX)) = 1;
+    }
+  }
+  GetRegister(FindModifiedRegister(REG_BX)) = 0;
+  return true;  
+}

Modified: branches/coopcomm/source/cpu/cHardwareCPU.h
===================================================================
--- branches/coopcomm/source/cpu/cHardwareCPU.h	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/source/cpu/cHardwareCPU.h	2007-01-05 16:31:32 UTC (rev 1168)
@@ -493,6 +493,7 @@
   bool Inst_SetLeader(cAvidaContext& ctx); //!< Set the leader of this organism.
   bool Inst_GetLeader(cAvidaContext& ctx); //!< Retrieve the leader of this organism.
   bool Inst_GetNeighborID(cAvidaContext& ctx); //!< One-shot retrieve of the ID of the faced organism.
+  bool Inst_Am_I_Base_Station(cAvidaContext& ctx); //!< Set ?BX? register to 1 if calling organism in a sink, zero otherwise.
 
   bool Inst_GetTimeUsed(cAvidaContext& ctx); //!< Retrieve the number of cycles that this organism has used.
   bool Inst_GetAge(cAvidaContext& ctx); //!< Return the number of updates that this organism has survived.    

Modified: branches/coopcomm/source/main/cOrgMessage.h
===================================================================
--- branches/coopcomm/source/main/cOrgMessage.h	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/source/main/cOrgMessage.h	2007-01-05 16:31:32 UTC (rev 1168)
@@ -17,6 +17,8 @@
 
 #include "cOrganism.h"
 #include "cPopulationCell.h"
+#include "cWorld.h"
+#include "cPopulation.h"
 
 class cOrgMessage
 {
@@ -130,6 +132,11 @@
   virtual bool operator()(cOrgMessage& msg) {
     if(m_data==(unsigned int)msg.GetReceiver()->GetCellID()) {
       m_cell_ids.insert(msg.GetData());
+      cWorld* w = msg.GetSender()->getWorld();
+/*      int i = w->GetPopulation().GetCell(289).GetRandomCellID();
+      if(msg.GetData() == i) {
+        std::cout<<"289 = "<< i<<endl;
+      }*/
     }
   }
 

Modified: branches/coopcomm/source/main/cOrganism.h
===================================================================
--- branches/coopcomm/source/main/cOrganism.h	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/source/main/cOrganism.h	2007-01-05 16:31:32 UTC (rev 1168)
@@ -333,6 +333,9 @@
   int GetLeaderID();
   //! Sets the ID of this organism's leader.
   bool SetLeaderID(int leader);
+  
+  cWorld* getWorld() {return m_world;}
+  
 };
 
 

Modified: branches/coopcomm/source/main/cPopulation.cc
===================================================================
--- branches/coopcomm/source/main/cPopulation.cc	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/source/main/cPopulation.cc	2007-01-05 16:31:32 UTC (rev 1168)
@@ -2153,3 +2153,19 @@
 cChangeList *cPopulation::GetChangeList(){
   return schedule->GetChangeList();
 }
+
+void cPopulation::MoveBaseStation(int currentBSCellID, int newBSCellID) {
+  int i;
+  for(i = 0; i < baseStations.Size(); i++)
+    if(currentBSCellID == baseStations[i])
+      break;
+  
+  if(i == baseStations.Size()) {
+    std::cerr << "MoveBaseStation " << currentBSCellID << ' ' << newBSCellID << " does not match an existing base station\n";
+    exit(-2);
+  } else if(newBSCellID < 0) {
+    baseStations.RemoveAt(i);
+  } else {
+    baseStations[i] = newBSCellID;
+  }
+}

Modified: branches/coopcomm/source/main/cPopulation.h
===================================================================
--- branches/coopcomm/source/main/cPopulation.h	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/source/main/cPopulation.h	2007-01-05 16:31:32 UTC (rev 1168)
@@ -214,6 +214,7 @@
   void SetChangeList(cChangeList* change_list);
   cChangeList* GetChangeList();
   void AddBaseStation(int cell_ID) {baseStations.Add(cell_ID);}
+  void MoveBaseStation(int currentBSCellID, int newBSCellID);
   tVector<int> GetBaseStations() {return baseStations;};
 };
 

Modified: branches/coopcomm/source/main/cTaskLib.cc
===================================================================
--- branches/coopcomm/source/main/cTaskLib.cc	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/source/main/cTaskLib.cc	2007-01-05 16:31:32 UTC (rev 1168)
@@ -358,6 +358,12 @@
     NewTask(name, "Reward the sending of the sender's ID.", &cTaskLib::Task_SendSelf);
   else if(name == "send-toward-sink")
     NewTask(name, "Reward the sender for sending toward the sink", &cTaskLib::Task_SendTowardSink);
+  else if(name == "send-self-toward-sink")
+    NewTask(name, "Reward the sender for sending their random ID toward the sink", &cTaskLib::Task_SendSelfTowardSink);
+  else if(name == "send-non-self-toward-sink")
+    NewTask(name, "Reward the sender for sending another organism's random ID toward the sink", &cTaskLib::Task_SendNonSelfTowardSink);
+  else if(name == "send-multiple-non-self-toward-sink")
+    NewTask(name, "Reward the sender for sending multiple other organism's random ID toward the sink", &cTaskLib::Task_SendMultipleNonSelfTowardSink);  
   else if(name == "send-toward-sink-multi-path")
     NewTask(name, "Reward the sender for sending multiple message toward the sink through different neighbors", &cTaskLib::Task_SendTowardSinkMultiPath);
   else if(name == "send-not-toward-sink")
@@ -2036,6 +2042,48 @@
   return 0.0;
 }
 
+//! Reward an organism for sending there random ID to organism who is closer to the sink
+double cTaskLib::Task_SendSelfTowardSink(cTaskContext* ctx) const {
+  if(Task_SendTowardSink(ctx) == 1.0 && Task_SendSelf(ctx) == 1.0)
+    return 1.0;
+  return 0.0;
+}
+
+//! Reward an organism for sending a message containing another organism's ID closer to the sink
+double cTaskLib::Task_SendNonSelfTowardSink(cTaskContext* ctx) const{
+  if(Task_SendTowardSink(ctx) == 1.0 && Task_SendIDNotSelf(ctx) == 1.0)
+    return 1.0;
+  return 0.0;
+}
+
+//! Reward an organism for sending a message containing another organism's ID closer to the sink
+double cTaskLib::Task_SendMultipleNonSelfTowardSink(cTaskContext* ctx) const{
+  std::set<int> IDForwarded;
+  cOrganism::t_message_list senderInbox = ctx->GetMessage()->GetSender()->GetSentMessages();
+  int x_sender, y_sender, x_receiver, y_receiver, x_BS, y_BS;  
+  
+  
+  //check all base stations
+/*  for(int i =0; i < BS_iter.Size(); i++) {
+    cPopulationCell& bsCell = m_world->GetPopulation().GetCell(BS_iter[i]);
+    if(nGeometry::GRID == m_world->GetConfig().WORLD_GEOMETRY.Get()) {     //bounded grid
+      if(hopWiseCloserGRID(x_sender, y_sender, x_receiver, y_receiver, x_BS, y_BS)) {
+
+  */
+  for(cOrganism::t_message_list::iterator i = senderInbox.begin(); i < senderInbox.end(); i++) {
+  
+    (*i).GetSender()->GetPosition(x_sender,y_sender);
+    (*i).GetReceiver()->GetPosition(x_receiver,y_receiver);
+    
+  }
+  
+//  !cPopulationCell::IsRandomCellID(msg->GetData()) || received_msgs.empty()
+  
+  return 0.0;
+}
+
+
+
 double cTaskLib::Task_SendTowardSinkMultiPath(cTaskContext* ctx) const {
   if(ctx->GetMessage() == NULL ) {
     //catch IO

Modified: branches/coopcomm/source/main/cTaskLib.h
===================================================================
--- branches/coopcomm/source/main/cTaskLib.h	2007-01-05 14:29:11 UTC (rev 1167)
+++ branches/coopcomm/source/main/cTaskLib.h	2007-01-05 16:31:32 UTC (rev 1168)
@@ -245,6 +245,14 @@
   double Task_SendNotTowardSink(cTaskContext* ctx) const;
   //! REward an organism for sending a message to multiple closer neighbors (by hop count)
   double Task_SendTowardSinkMultiPath(cTaskContext* ctx) const;
+
+  //! Reward an organism for sending message to organism who is closer to the sink
+  double Task_SendSelfTowardSink(cTaskContext* ctx) const;
+  //! Reward an organism for sending message to organism who is closer to the sink
+  double Task_SendNonSelfTowardSink(cTaskContext* ctx) const;
+
+  double Task_SendMultipleNonSelfTowardSink(cTaskContext* ctx) const;
+  
   //! simple directional sending tasks
   double Task_SentNorth(cTaskContext* ctx) const;
   double Task_SentNorthWest(cTaskContext* ctx) const;




More information about the Avida-cvs mailing list