Skip to content

Create a configuration for a Harbour

Currently, the harbours are static and after they start, none harbour can create additional agents. They can only replicate an agent.

To configure the Harbour, we need to write a YAML file which configures one Harbour.

This tutorial explains how to create these files.

To see how to use this configuration file, please see the guides: Usage and Run experiments

Main architecture of the file

The configuration file is divided into two parts:

  • The first is about the Harbour itself and contains some information like its capacity, the network port, etc...
  • The second contains the initial list of the agents.

Hence, a configuration file looks like this:

agents:
  LULU-0:
    actions: migration.RandomMigrate,replication.ReplicateToReachRGAggregate,evals.Logger,algorithm.migration.LeaderBased
    class: SKD
    data: LULU-0
    failureDetectionAfter: 5
    messageDelayInBuffer: 14400
    rg: 3
    size: 3
    sleepForBeforeMigrate: 4
    stopSendingAfter: 900
    timer_RandomMigrate: 10000
    probabilityCrash: 0    
capacity: 90
gui: true
name: Harbour0
port: 8000

Configuration of the Harbour itself

Currently, there re five parameters for the harbour:

  • agents: it's the list of agents initially created on this Harbour (see below for the configuration of one agent).
  • capacity: it's the maximal size of the agents on this Harbour. The current size is the sum of the variable size of each agent hosted.
  • gui: it's a boolean which controls the presence of the Jade GUI (useful to debug but not in experiment).
  • name: it's a unique name that identifies the Harbour.
  • port: it's the network port used to communicate with other Harbours.

Configuration of the agents

The configuration of an agent looks like the following:

LULU-0:
    actions: migration.RandomMigrate,replication.ReplicateToReachRGAggregate,evals.Logger,algorithm.migration.LeaderBased
    class: SKD
    data: LULU-0
    failureDetectionAfter: 5
    messageDelayInBuffer: 14400
    rg: 3
    size: 3
    sleepForBeforeMigrate: 4

    timer_RandomMigrate: 10000
    probabilityCrash: 0.0  

The first parameters are mandatory:

  • actions: the list of behaviours of the agent (see How to create a behaviour)
  • class: the class name of the agent (see How to create an agent)
  • data: a string which corresponds to the data
  • failureDetectionAfter: the delay before considering a family member that does not answer as dead
  • messageDelayInBuffer: the time (in s) a message can be in the buffer without ACKed
  • rg: the replication goal of the family
  • size: the size of the agent
  • sleepForBeforeMigrate: the minimal time between two migrations

Then, we have different parameters which customize the behaviours. Here:

  • time_RandomMigrate: the delay between two migrations
  • probabilityCrash: a double corresponding to the probability that an agent fails