[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