5. API reference¶
5.1. Input format¶
The JSONProblemDescription
input is a JSON dictionary containing six keys, Tasks
, AgentCapabilities
, CommunicationNetwork
, Time
, Options
, and Cost
.
5.1.1. Tasks attributes¶
OptionalTasks, a dict with Tasks as keys. OptionalTasks[Task] is True if Task is optional and False otherwise.
TaskReward, a dict with Tasks as keys. TaskReward[Task] is the reward obtained for completing Task, a float.
ProductsSize, a dict with Tasks as keys. PS[Task] is the size of the products of Task (in storage units), a float.
DependencyList, a dict with Tasks as keys. DL[Task] expresses the pre-requisites for each Task is conjunctive normal form. That is, DependencyList[Task] is a list. Each entry of the List contains a number of predecessor Tasks. For each entry in DependencyList[Task][i], at least one task.
IncompatibleTasks, a list of lists. IT[j] is a list of tasks that are incompatible with each other (that is, only one can be executed).
MaxLatency, a dict with keys task1, task2. MaxLatency[T1][T2] is the maximum latency that the data products of T2 (a dependency of T1) can tolerate before they are ingested by task T1.
5.1.2. Example¶
{'DependencyList': {'puffer1:28. Store Sample': [['puffer1:27. Analyse Sample']],
'puffer1:27. Analyse Sample': [['puffer1:26. Take Sample']],
'puffer1:26. Take Sample': [[]],
'puffer1:08. Store Sample': [['puffer1:07. Analyse Sample']],
'puffer1:2. Short Range Image': [[]],
'puffer1:16. Take Sample': [[]],
'puffer1:4. Plan Path (VO)': [['puffer1:3. VO Localization']],
'puffer1:3. VO Localization': [['puffer1:2. Short Range Image']],
'puffer1:07. Analyse Sample': [['puffer1:06. Take Sample']],
'puffer1:17. Analyse Sample': [['puffer1:16. Take Sample']],
'puffer1:5. Send Drive Command': [['puffer1:4. Plan Path (VO)']],
'puffer1:18. Store Sample': [['puffer1:17. Analyse Sample']],
'puffer1:06. Take Sample': [[]]},
'ProductsSize': {'puffer1:28. Store Sample': 0.1,
'puffer1:27. Analyse Sample': 1,
'puffer1:17. Analyse Sample': 1,
'puffer1:26. Take Sample': 15,
'puffer1:16. Take Sample': 15,
'puffer1:2. Short Range Image': 8.0,
'puffer1:08. Store Sample': 0.1,
'puffer1:4. Plan Path (VO)': 0.1,
'puffer1:07. Analyse Sample': 1,
'puffer1:3. VO Localization': 0.1,
'puffer1:5. Send Drive Command': 0.1,
'puffer1:18. Store Sample': 0.1,
'puffer1:06. Take Sample': 15},
'TaskReward': {'puffer1:28. Store Sample': 20,
'puffer1:27. Analyse Sample': 10,
'puffer1:17. Analyse Sample': 10,
'puffer1:26. Take Sample': 5,
'puffer1:16. Take Sample': 5,
'puffer1:2. Short Range Image': 0,
'puffer1:08. Store Sample': 20,
'puffer1:4. Plan Path (VO)': 0,
'puffer1:07. Analyse Sample': 10,
'puffer1:3. VO Localization': 0,
'puffer1:5. Send Drive Command': 0,
'puffer1:18. Store Sample': 20,
'puffer1:06. Take Sample': 5},
'MaxLatency': {'puffer1:28. Store Sample': 100.0,
'puffer1:27. Analyse Sample': 100.0,
'puffer1:26. Take Sample': 100.0,
'puffer1:08. Store Sample': 100.0,
'puffer1:2. Short Range Image': 100.0,
'puffer1:16. Take Sample': 100.0,
'puffer1:4. Plan Path (VO)': 100.0,
'puffer1:3. VO Localization': 100.0,
'puffer1:07. Analyse Sample': 100.0,
'puffer1:17. Analyse Sample': 100.0,
'puffer1:5. Send Drive Command': 100.0,
'puffer1:18. Store Sample': 100.0,
'puffer1:06. Take Sample': 100.0},
'IncompatibleTasks': [],
'OptionalTasks': {'puffer1:28. Store Sample': True,
'puffer1:27. Analyse Sample': True,
'puffer1:17. Analyse Sample': True,
'puffer1:26. Take Sample': True,
'puffer1:16. Take Sample': True,
'puffer1:2. Short Range Image': False,
'puffer1:08. Store Sample': True,
'puffer1:4. Plan Path (VO)': False,
'puffer1:07. Analyse Sample': True,
'puffer1:3. VO Localization': False,
'puffer1:5. Send Drive Command': False,
'puffer1:18. Store Sample': True,
'puffer1:06. Take Sample': True}}
5.1.3. AgentCapabilities attributes¶
ComputationTime: a dictionary with keys Task, Agent. The value of CT[Task][Agent] is the time (in time steps) required for Agent to complete Tasks, an int.
ComputationLoad: a dictionary with keys Task, Agent. The value of CT[Task][Agent] is the fraction of Agent’s computational resources required to complete Task, a float between 0 and 1.
EnergyCost, a dictionary with keys Task, Agent. EnergyCost[Task][Agent] is the energy cost when agent A computes task T.
MaxComputationLoad, a dict with keys Agents. MaxComputationLoad[Agent] is the maximum computational resources of agent A.
LinkComputationalLoadIn, a dict with keys Agent, Agent. LinkComputationalLoadIn[A1][A2] is the computational load required to decode messages on link [A1][A2] at A2.
LinkComputationalLoadOut, a dict with keys Agent, Agent. LinkComputationalLoadOut[A1][A2] is the computational load required to encode messages on link [A1][A2] at A1.
[Optional] InitialInformation: a dictionary with keys Task, Agent. II[Task][Agent] is a Bool. It is true iff Agent knows the output of Task at time t=0. This can be helpful to specify that only one agent can do a given task
5.1.4. Example¶
{'InitialInformation': {'puffer1:28. Store Sample': {'puffer1': False},
'puffer1:27. Analyse Sample': {'puffer1': False},
'puffer1:26. Take Sample': {'puffer1': False},
'puffer1:08. Store Sample': {'puffer1': False},
'puffer1:2. Short Range Image': {'puffer1': False},
'puffer1:16. Take Sample': {'puffer1': False},
'puffer1:4. Plan Path (VO)': {'puffer1': False},
'puffer1:3. VO Localization': {'puffer1': False},
'puffer1:07. Analyse Sample': {'puffer1': False},
'puffer1:17. Analyse Sample': {'puffer1': False},
'puffer1:5. Send Drive Command': {'puffer1': False},
'puffer1:18. Store Sample': {'puffer1': False},
'puffer1:06. Take Sample': {'puffer1': False}},
'EnergyCost': {'puffer1': {'puffer1:28. Store Sample': 2.0,
'puffer1:27. Analyse Sample': 0.3333333333333333,
'puffer1:17. Analyse Sample': 0.3333333333333333,
'puffer1:26. Take Sample': 0.2,
'puffer1:08. Store Sample': 2.0,
'puffer1:2. Short Range Image': 0.13333333333333333,
'puffer1:16. Take Sample': 0.2,
'puffer1:4. Plan Path (VO)': 0.3333333333333333,
'puffer1:07. Analyse Sample': 0.3333333333333333,
'puffer1:3. VO Localization': 0.3333333333333333,
'puffer1:5. Send Drive Command': 0.06666666666666667,
'puffer1:18. Store Sample': 2.0,
'puffer1:06. Take Sample': 0.2}},
'ComputationTime': {'puffer1:28. Store Sample': {'puffer1': 30},
'puffer1:27. Analyse Sample': {'puffer1': 3},
'puffer1:26. Take Sample': {'puffer1': 2},
'puffer1:08. Store Sample': {'puffer1': 30},
'puffer1:2. Short Range Image': {'puffer1': 1},
'puffer1:16. Take Sample': {'puffer1': 2},
'puffer1:4. Plan Path (VO)': {'puffer1': 3},
'puffer1:3. VO Localization': {'puffer1': 3},
'puffer1:07. Analyse Sample': {'puffer1': 3},
'puffer1:17. Analyse Sample': {'puffer1': 3},
'puffer1:5. Send Drive Command': {'puffer1': 1},
'puffer1:18. Store Sample': {'puffer1': 30},
'puffer1:06. Take Sample': {'puffer1': 2}},
'MaxComputationLoad': {'puffer1': 1.0},
'LinkComputationalLoadIn': {'puffer1': {'puffer1': 0.02}},
'ComputationLoad': {'puffer1': {'puffer1:28. Store Sample': 2.0,
'puffer1:27. Analyse Sample': 0.3333333333333333,
'puffer1:17. Analyse Sample': 0.3333333333333333,
'puffer1:26. Take Sample': 0.2,
'puffer1:08. Store Sample': 2.0,
'puffer1:2. Short Range Image': 0.13333333333333333,
'puffer1:16. Take Sample': 0.2,
'puffer1:4. Plan Path (VO)': 0.3333333333333333,
'puffer1:07. Analyse Sample': 0.3333333333333333,
'puffer1:3. VO Localization': 0.3333333333333333,
'puffer1:5. Send Drive Command': 0.06666666666666667,
'puffer1:18. Store Sample': 2.0,
'puffer1:06. Take Sample': 0.2}},
'LinkComputationalLoadOut': {'puffer1': {'puffer1': 0.02}}}
5.1.5. CommunicationNetwork attributes¶
CommunicationNetwork is a list of dictionaries. Each dictionary has the following keys:
origin, the name of the origin node.
destination, the name of the destination node.
bandwidth, the bandwidth from agent Origin to agent Destination. If the bandwidth is zero, the link is not considered in the optimization.
time_start, the time when the communication window opens.
time_end, the time when the communication window closes.
latency, the light-speed latency of the link during the window. Note that the latency of a datagram is computed as Latency[origin][destination]+datagram_size/bandwidth
energy_cost, the energy cost to transmit one bit on the link.
5.1.6. Example¶
[{'origin': 'puffer1',
'latency': 0.001,
'time_start': 831.2,
'destination': 'puffer1',
'time_end': 1.7976931348623157e+308,
'bandwidth': 11.0,
'energy_cost': 0.0}]
5.1.7. Time attributes¶
Thor, the time horizon of the optimization. Ignored by time-invariant solvers.
TimeStep, the discretization time step. Ignored by time-invariant and continuous-time solvers.
5.1.8. Example¶
{'Thor': 30, 'TimeStep': 2}
5.1.9. Options attributes¶
Options is reserved for solver-specific attributes. It can be left empty.
5.1.10. Cost function¶
A dictionary with keys corresponding to basic cost components and entries corresponding to the weight (coefficient) given to each cost function. The cost components are:
energy: the energy required to complete the tasks;
total_task_reward: the reward obtained for completing optional tasks;
total_time: the total time (makespan) to complete all tasks;
5.1.11. Example¶
{"energy": 0.,
"total_task_reward": 1.,
"total_time": .5}
5.1.12. Example Input¶
{
u'AgentCapabilities': {
u'ComputationLoad': {
u'puffer1:06. Take Sample':{u'puffer1': 1.0},
u'puffer1:07. Analyse Sample': {u'puffer1': 1.0},
u'puffer1:08. Store Sample': {u'puffer1': 1.0},
u'puffer1:16. Take Sample': {u'puffer1': 1.0},
u'puffer1:17. Analyse Sample': {u'puffer1': 1.0},
u'puffer1:18. Store Sample': {u'puffer1': 1.0},
u'puffer1:2. Short Range Image': {u'puffer1': 1.0},
u'puffer1:26. Take Sample': {u'puffer1': 1.0},
u'puffer1:27. Analyse Sample': {u'puffer1': 1.0},
u'puffer1:28. Store Sample': {u'puffer1': 1.0},
u'puffer1:3. VO Localization': {u'puffer1': 1.0},
u'puffer1:4. Plan Path (VO)': {u'puffer1': 1.0},
u'puffer1:5. Send Drive Command': {u'puffer1': 1.0}
},
u'ComputationTime': {
u'puffer1:06. Take Sample': {u'puffer1': 2},
u'puffer1:07. Analyse Sample': {u'puffer1': 3},
u'puffer1:08. Store Sample': {u'puffer1': 30},
u'puffer1:16. Take Sample': {u'puffer1': 2},
u'puffer1:17. Analyse Sample': {u'puffer1': 3},
u'puffer1:18. Store Sample': {u'puffer1': 30},
u'puffer1:2. Short Range Image': {u'puffer1': 1},
u'puffer1:26. Take Sample': {u'puffer1': 2},
u'puffer1:27. Analyse Sample': {u'puffer1': 3},
u'puffer1:28. Store Sample': {u'puffer1': 30},
u'puffer1:3. VO Localization': {u'puffer1': 3},
u'puffer1:4. Plan Path (VO)': {u'puffer1': 3},
u'puffer1:5. Send Drive Command': {u'puffer1': 1}
},
u'EnergyCost': {
u'puffer1:06. Take Sample': {u'puffer1': 0.2},
u'puffer1:07. Analyse Sample': {u'puffer1': 0.3333333333333333},
u'puffer1:08. Store Sample': {u'puffer1': 2.0},
u'puffer1:16. Take Sample': {u'puffer1': 0.2},
u'puffer1:17. Analyse Sample': {u'puffer1': 0.3333333333333333},
u'puffer1:18. Store Sample': {u'puffer1': 2.0},
u'puffer1:2. Short Range Image': {u'puffer1': 0.13333333333333333},
u'puffer1:26. Take Sample': {u'puffer1': 0.2},
u'puffer1:27. Analyse Sample': {u'puffer1': 0.3333333333333333},
u'puffer1:28. Store Sample': {u'puffer1': 2.0},
u'puffer1:3. VO Localization': {u'puffer1': 0.3333333333333333},
u'puffer1:4. Plan Path (VO)': {u'puffer1': 0.3333333333333333},
u'puffer1:5. Send Drive Command': {u'puffer1': 0.06666666666666667}
},
u'InitialInformation': {
u'puffer1:06. Take Sample': {u'puffer1': False},
u'puffer1:07. Analyse Sample': {u'puffer1': False},
u'puffer1:08. Store Sample': {u'puffer1': False},
u'puffer1:16. Take Sample': {u'puffer1': False},
u'puffer1:17. Analyse Sample': {u'puffer1': False},
u'puffer1:18. Store Sample': {u'puffer1': False},
u'puffer1:2. Short Range Image': {u'puffer1': False},
u'puffer1:26. Take Sample': {u'puffer1': False},
u'puffer1:27. Analyse Sample': {u'puffer1': False},
u'puffer1:28. Store Sample': {u'puffer1': False},
u'puffer1:3. VO Localization': {u'puffer1': False},
u'puffer1:4. Plan Path (VO)': {u'puffer1': False},
u'puffer1:5. Send Drive Command': {u'puffer1': False}
},
u'LinkComputationalLoadIn': {
u'puffer1': {u'puffer1': 0.02}
},
u'LinkComputationalLoadOut': {
u'puffer1': {u'puffer1': 0.02}
},
u'MaxComputationLoad': {
u'puffer1': 1.0
}
},
u'CommunicationNetwork': [
{u'bandwidth': 11.0,
u'destination': u'puffer1',
u'energy_cost': 0.0,
u'latency': 0.001,
u'origin': u'puffer1',
u'time_end': 1.7976931348623157e+308,
u'time_start': 831.2}
],
u'Options': {},
u'Tasks': {
u'DependencyList': {
u'puffer1:06. Take Sample': [[]],
u'puffer1:07. Analyse Sample': [[u'puffer1:06. Take Sample']],
u'puffer1:08. Store Sample': [[u'puffer1:07. Analyse Sample']],
u'puffer1:16. Take Sample': [[]],
u'puffer1:17. Analyse Sample': [[u'puffer1:16. Take Sample']],
u'puffer1:18. Store Sample': [[u'puffer1:17. Analyse Sample']],
u'puffer1:2. Short Range Image': [[]],
u'puffer1:26. Take Sample': [[]],
u'puffer1:27. Analyse Sample': [[u'puffer1:26. Take Sample']],
u'puffer1:28. Store Sample': [[u'puffer1:27. Analyse Sample']],
u'puffer1:3. VO Localization': [[u'puffer1:2. Short Range Image']],
u'puffer1:4. Plan Path (VO)': [[u'puffer1:3. VO Localization']],
u'puffer1:5. Send Drive Command': [[u'puffer1:4. Plan Path (VO)']]
},
u'IncompatibleTasks': [],
u'MaxLatency': {
u'puffer1:06. Take Sample': 100.0,
u'puffer1:07. Analyse Sample': 100.0,
u'puffer1:08. Store Sample': 100.0,
u'puffer1:16. Take Sample': 100.0,
u'puffer1:17. Analyse Sample': 100.0,
u'puffer1:18. Store Sample': 100.0,
u'puffer1:2. Short Range Image': 100.0,
u'puffer1:26. Take Sample': 100.0,
u'puffer1:27. Analyse Sample': 100.0,
u'puffer1:28. Store Sample': 100.0,
u'puffer1:3. VO Localization': 100.0,
u'puffer1:4. Plan Path (VO)': 100.0,
u'puffer1:5. Send Drive Command': 100.0
},
u'OptionalTasks': {
u'puffer1:06. Take Sample': True,
u'puffer1:07. Analyse Sample': True,
u'puffer1:08. Store Sample': True,
u'puffer1:16. Take Sample': True,
u'puffer1:17. Analyse Sample': True,
u'puffer1:18. Store Sample': True,
u'puffer1:2. Short Range Image': False,
u'puffer1:26. Take Sample': True,
u'puffer1:27. Analyse Sample': True,
u'puffer1:28. Store Sample': True,
u'puffer1:3. VO Localization': False,
u'puffer1:4. Plan Path (VO)': False,
u'puffer1:5. Send Drive Command': False
},
u'ProductsSize': {
u'puffer1:06. Take Sample': 15,
u'puffer1:07. Analyse Sample': 1,
u'puffer1:08. Store Sample': 0.1,
u'puffer1:16. Take Sample': 15,
u'puffer1:17. Analyse Sample': 1,
u'puffer1:18. Store Sample': 0.1,
u'puffer1:2. Short Range Image': 8.0,
u'puffer1:26. Take Sample': 15,
u'puffer1:27. Analyse Sample': 1,
u'puffer1:28. Store Sample': 0.1,
u'puffer1:3. VO Localization': 0.1,
u'puffer1:4. Plan Path (VO)': 0.1,
u'puffer1:5. Send Drive Command': 0.1
},
u'TaskReward': {
u'puffer1:06. Take Sample': 5,
u'puffer1:07. Analyse Sample': 10,
u'puffer1:08. Store Sample': 20,
u'puffer1:16. Take Sample': 5,
u'puffer1:17. Analyse Sample': 10,
u'puffer1:18. Store Sample': 20,
u'puffer1:2. Short Range Image': 0,
u'puffer1:26. Take Sample': 5,
u'puffer1:27. Analyse Sample': 10,
u'puffer1:28. Store Sample': 20,
u'puffer1:3. VO Localization': 0,
u'puffer1:4. Plan Path (VO)': 0,
u'puffer1:5. Send Drive Command': 0
}
},
u'Time': {
u'Thor': 30,
u'TimeStep': 2
}
}
5.2. Output format¶
{
# A list of tasks
"tasks": [
{
# Duration, in seconds
"duration": 3.0,
# Start time, in seconds
"start_time": 0.0,
# Additional task-specific parameters.
# Every task contains an `agent` key identifying the agent performing the task.
# For a communication task, the dict also contains keys `transmitter`, `receiver`, `data_type`, and `bandwidth`.
# `transmitter` and `receiver` are the transmitter and receiver. `data_type` identifies the
# task whose data product is transmitted. `bandwidth` is the bandwidth used by the communication (in case a link is shared by multiple simultaneous communications).
"params": {
"agent": "puffer3"
},
# Task ID, from the inputs.
"id": "0",
# Task name
"name": "short_range_image"
},
]
}
5.2.1. Example output¶
{
"tasks": [
{
"duration": 3.0,
"start_time": 0.0,
"params": {
"agent": "puffer3"
},
"id": "0",
"name": "short_range_image"
},
{
"duration": 3.0,
"start_time": 0.001,
"params": {
"agent": "puffer2"
},
"id": "1",
"name": "short_range_image"
},
{
"duration": 3.0,
"start_time": 0.002,
"params": {
"agent": "puffer1"
},
"id": "2",
"name": "short_range_image"
},
{
"duration": 5.0,
"start_time": 3.003,
"params": {
"agent": "puffer1"
},
"id": "3",
"name": "take_sample"
},
{
"duration": 1.363,
"start_time": 8.004,
"params": {
"transmitter": "puffer1",
"data_type": "sample",
"agent": "puffer1",
"receiver": "puffer2",
"bandwidth": 11.0
},
"id": "4",
"name": "transfer_data"
},
{
"duration": 1.363,
"start_time": 9.368,
"params": {
"transmitter": "puffer2",
"data_type": "sample",
"agent": "puffer2",
"receiver": "puffer3",
"bandwidth": 11.0
},
"id": "5",
"name": "transfer_data"
},
{
"duration": 5.0,
"start_time": 9.368,
"params": {
"agent": "puffer1"
},
"id": "6",
"name": "take_sample"
},
{
"duration": 1.363,
"start_time": 10.732,
"params": {
"transmitter": "puffer3",
"data_type": "sample",
"agent": "puffer3",
"receiver": "base_station",
"bandwidth": 11.0
},
"id": "7",
"name": "transfer_data"
},
{
"duration": 1.0,
"start_time": 12.096,
"params": {
"agent": "base_station"
},
"id": "8",
"name": "analyze_sample"
},
{
"duration": 0.727,
"start_time": 13.097,
"params": {
"transmitter": "puffer3",
"data_type": "terrain_image",
"agent": "puffer3",
"receiver": "base_station",
"bandwidth": 11.0
},
"id": "9",
"name": "transfer_data"
},
{
"duration": 1.0,
"start_time": 13.825,
"params": {
"agent": "base_station"
},
"id": "10",
"name": "vo_localization"
},
{
"duration": 0.727,
"start_time": 13.825,
"params": {
"transmitter": "puffer2",
"data_type": "terrain_image",
"agent": "puffer2",
"receiver": "puffer3",
"bandwidth": 11.0
},
"id": "11",
"name": "transfer_data"
},
{
"duration": 0.727,
"start_time": 14.553,
"params": {
"transmitter": "puffer1",
"data_type": "terrain_image",
"agent": "puffer1",
"receiver": "puffer2",
"bandwidth": 11.0
},
"id": "12",
"name": "transfer_data"
},
{
"duration": 0.1,
"start_time": 14.826,
"params": {
"agent": "base_station"
},
"id": "13",
"name": "plan_path"
},
{
"duration": 0.009,
"start_time": 14.927,
"params": {
"transmitter": "base_station",
"data_type": "path",
"agent": "base_station",
"receiver": "puffer3",
"bandwidth": 11.0
},
"id": "14",
"name": "transfer_data"
},
{
"duration": 0.1,
"start_time": 14.937,
"params": {
"agent": "puffer3"
},
"id": "15",
"name": "send_drive_cmd"
},
{
"duration": 0.727,
"start_time": 15.038,
"params": {
"transmitter": "puffer3",
"data_type": "terrain_image",
"agent": "puffer3",
"receiver": "base_station",
"bandwidth": 11.0
},
"id": "16",
"name": "transfer_data"
},
{
"duration": 1.0,
"start_time": 15.766,
"params": {
"agent": "base_station"
},
"id": "17",
"name": "vo_localization"
},
{
"duration": 0.1,
"start_time": 16.767,
"params": {
"agent": "base_station"
},
"id": "18",
"name": "plan_path"
},
{
"duration": 0.009,
"start_time": 16.868,
"params": {
"transmitter": "base_station",
"data_type": "path",
"agent": "base_station",
"receiver": "puffer3",
"bandwidth": 11.0
},
"id": "19",
"name": "transfer_data"
},
{
"duration": 0.009,
"start_time": 16.878,
"params": {
"transmitter": "puffer3",
"data_type": "path",
"agent": "puffer3",
"receiver": "puffer2",
"bandwidth": 11.0
},
"id": "20",
"name": "transfer_data"
},
{
"duration": 0.1,
"start_time": 16.888,
"params": {
"agent": "puffer2"
},
"id": "21",
"name": "send_drive_cmd"
},
{
"duration": 0.727,
"start_time": 16.989,
"params": {
"transmitter": "puffer2",
"data_type": "terrain_image",
"agent": "puffer2",
"receiver": "puffer3",
"bandwidth": 11.0
},
"id": "22",
"name": "transfer_data"
},
{
"duration": 0.727,
"start_time": 17.717,
"params": {
"transmitter": "puffer3",
"data_type": "terrain_image",
"agent": "puffer3",
"receiver": "base_station",
"bandwidth": 11.0
},
"id": "23",
"name": "transfer_data"
},
{
"duration": 1.0,
"start_time": 18.445,
"params": {
"agent": "base_station"
},
"id": "24",
"name": "vo_localization"
},
{
"duration": 0.1,
"start_time": 19.446,
"params": {
"agent": "base_station"
},
"id": "25",
"name": "plan_path"
},
{
"duration": 0.009,
"start_time": 19.547,
"params": {
"transmitter": "base_station",
"data_type": "path",
"agent": "base_station",
"receiver": "puffer3",
"bandwidth": 11.0
},
"id": "26",
"name": "transfer_data"
},
{
"duration": 0.009,
"start_time": 19.557,
"params": {
"transmitter": "puffer3",
"data_type": "path",
"agent": "puffer3",
"receiver": "puffer2",
"bandwidth": 11.0
},
"id": "27",
"name": "transfer_data"
},
{
"duration": 0.009,
"start_time": 19.567,
"params": {
"transmitter": "puffer2",
"data_type": "path",
"agent": "puffer2",
"receiver": "puffer1",
"bandwidth": 11.0
},
"id": "28",
"name": "transfer_data"
},
{
"duration": 0.1,
"start_time": 19.577,
"params": {
"agent": "puffer1"
},
"id": "29",
"name": "send_drive_cmd"
},
{
"duration": 0.1,
"start_time": 19.578,
"params": {
"agent": "base_station"
},
"id": "30",
"name": "store_sample"
},
{
"duration": 1.363,
"start_time": 19.678,
"params": {
"transmitter": "puffer1",
"data_type": "sample",
"agent": "puffer1",
"receiver": "puffer2",
"bandwidth": 11.0
},
"id": "31",
"name": "transfer_data"
},
{
"duration": 1.363,
"start_time": 21.042,
"params": {
"transmitter": "puffer2",
"data_type": "sample",
"agent": "puffer2",
"receiver": "puffer3",
"bandwidth": 11.0
},
"id": "32",
"name": "transfer_data"
},
{
"duration": 5.0,
"start_time": 21.042,
"params": {
"agent": "puffer1"
},
"id": "33",
"name": "take_sample"
},
{
"duration": 1.363,
"start_time": 22.406,
"params": {
"transmitter": "puffer3",
"data_type": "sample",
"agent": "puffer3",
"receiver": "base_station",
"bandwidth": 11.0
},
"id": "34",
"name": "transfer_data"
},
{
"duration": 1.0,
"start_time": 23.77,
"params": {
"agent": "base_station"
},
"id": "35",
"name": "analyze_sample"
},
{
"duration": 0.1,
"start_time": 24.771,
"params": {
"agent": "base_station"
},
"id": "36",
"name": "store_sample"
},
{
"duration": 1.363,
"start_time": 26.043,
"params": {
"transmitter": "puffer1",
"data_type": "sample",
"agent": "puffer1",
"receiver": "puffer2",
"bandwidth": 11.0
},
"id": "37",
"name": "transfer_data"
},
{
"duration": 1.363,
"start_time": 27.407,
"params": {
"transmitter": "puffer2",
"data_type": "sample",
"agent": "puffer2",
"receiver": "puffer3",
"bandwidth": 11.0
},
"id": "38",
"name": "transfer_data"
},
{
"duration": 1.363,
"start_time": 28.771,
"params": {
"transmitter": "puffer3",
"data_type": "sample",
"agent": "puffer3",
"receiver": "base_station",
"bandwidth": 11.0
},
"id": "39",
"name": "transfer_data"
},
{
"duration": 1.0,
"start_time": 30.135,
"params": {
"agent": "base_station"
},
"id": "40",
"name": "analyze_sample"
},
{
"duration": 0.1,
"start_time": 31.136,
"params": {
"agent": "base_station"
},
"id": "41",
"name": "store_sample"
}
]
}