diff --git a/.gitignore b/.gitignore
index 5cc30b11118c1d1ed582f34035c76b420c5805eb..bb2256e64c7ca2269012d3ff1472466354f34b87 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,9 @@ desktop.ini
 .idea
 venv
 *.bat
-__pycache__/
\ No newline at end of file
+__pycache__/
+ping/migrations/*
+db.sqlite3
+uploads/tmp/*
+uploads/media/*
+uploads/current_experiment/*
diff --git a/db.sqlite3 b/db.sqlite3
deleted file mode 100644
index e7914df3e2bbedfddc5f951f6789d3558ab5f351..0000000000000000000000000000000000000000
Binary files a/db.sqlite3 and /dev/null differ
diff --git a/ping/migrations/0001_initial.py b/ping/migrations/0001_initial.py
deleted file mode 100644
index ae0c37f73e11cbb2e187439556f37a476c144143..0000000000000000000000000000000000000000
--- a/ping/migrations/0001_initial.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Generated by Django 4.0.4 on 2022-05-12 08:50
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    initial = True
-
-    dependencies = [
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Agent',
-            fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('ip', models.CharField(max_length=16)),
-                ('command', models.CharField(max_length=256)),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Client',
-            fields=[
-                ('hostname', models.CharField(max_length=16, primary_key=True, serialize=False, unique=True)),
-                ('username', models.CharField(max_length=16)),
-                ('password', models.CharField(max_length=16)),
-                ('status', models.CharField(default='Offline', max_length=8)),
-            ],
-        ),
-    ]
diff --git a/ping/migrations/0002_experiment.py b/ping/migrations/0002_experiment.py
deleted file mode 100644
index c06c6d60dcf15c768fd20542a0605ce4ebb46062..0000000000000000000000000000000000000000
--- a/ping/migrations/0002_experiment.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 4.0.4 on 2022-05-12 12:21
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('ping', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Experiment',
-            fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=60)),
-                ('status', models.CharField(default='Not checked', max_length=60)),
-                ('description', models.TextField()),
-                ('media', models.FileField(blank=True, null=True, upload_to='')),
-            ],
-        ),
-    ]
diff --git a/ping/migrations/0003_currentexperiment_metrics_alter_experiment_media.py b/ping/migrations/0003_currentexperiment_metrics_alter_experiment_media.py
deleted file mode 100644
index d014e25f9508d4c05a52c3c3bb4038f585fa4c7a..0000000000000000000000000000000000000000
--- a/ping/migrations/0003_currentexperiment_metrics_alter_experiment_media.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Generated by Django 4.0.4 on 2022-05-13 12:19
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('ping', '0002_experiment'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='CurrentExperiment',
-            fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=60)),
-                ('cycle', models.PositiveIntegerField(default=0)),
-                ('nbr_agent', models.PositiveIntegerField(default=0)),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Metrics',
-            fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('experiment_name', models.CharField(max_length=60)),
-                ('cycle', models.PositiveIntegerField()),
-                ('agent_id', models.PositiveIntegerField()),
-                ('_metrics', models.BinaryField()),
-            ],
-        ),
-        migrations.AlterField(
-            model_name='experiment',
-            name='media',
-            field=models.FileField(blank=True, null=True, upload_to='media'),
-        ),
-    ]
diff --git a/ping/models.py b/ping/models.py
index ecc17795aad954629623f58144890dc7fdfbd6b5..7731b893404518c72be9642b47fe585292ffddea 100644
--- a/ping/models.py
+++ b/ping/models.py
@@ -5,10 +5,11 @@ from django.forms import ModelForm
 
 
 class Client(models.Model):
-    hostname = models.CharField(max_length=16, primary_key=True, unique=True)
+    hostname = models.CharField(max_length=16)
     username = models.CharField(max_length=16)
     password = models.CharField(max_length=16)
     status = models.CharField(max_length=8, default="Offline")
+    active = models.BooleanField(default=True)
 
     def __str__(self):
         return "Hostname : " + self.hostname + " Username : " + self.username + " Status : " + self.status
@@ -34,9 +35,7 @@ class ExperimentForm(ModelForm):
         fields = ["name", "description", "media"]
 
 class Metrics(models.Model):
-    experiment_name = models.CharField(max_length=60)
     cycle = models.PositiveIntegerField()
-    agent_id = models.PositiveIntegerField()
     _metrics = models.BinaryField()
 
     def set_data(self, data):
@@ -52,4 +51,8 @@ class CurrentExperiment(models.Model):
 
     name = models.CharField(max_length=60)
     cycle = models.PositiveIntegerField(default=0)
-    nbr_agent = models.PositiveIntegerField(default=0)
\ No newline at end of file
+    nbr_agent = models.PositiveIntegerField(default=0)
+
+    amas_pid = models.PositiveIntegerField(default=0)
+    scheduler_pid = models.PositiveIntegerField(default=0)
+    env_pid = models.PositiveIntegerField(default=0)
\ No newline at end of file
diff --git a/ping/templates/ping/experiment.html b/ping/templates/ping/experiment.html
index e725a128fed66979a861d03286772ffa7fa3cf80..8e067ae0161f6be493a43409b798230114617f03 100644
--- a/ping/templates/ping/experiment.html
+++ b/ping/templates/ping/experiment.html
@@ -28,18 +28,19 @@
     <tr>
       <th>Name</th>
       <th>Status</th>
-      <th>Check</th>
     </tr>
     {% for experiment in experiments %}
     <tr>
       <td>{{ experiment.name }}</td>
       <td>{{ experiment.status }}</td>
       <td><a href="/experiment/{{ experiment.id }}/check">Check</td>
+      <td><a href="/experiment/{{ experiment.id }}/select">Select</td>
+      <td><a href="/experiment/{{ experiment.id }}/delete">Delete</td>
     </tr>
     {% endfor %}
   </table>
   {% else %}
-  <p>No agents are available.</p>
+  <p>No experiment are available.</p>
   {% endif %}
 
 </body>
diff --git a/ping/templates/ping/index.html b/ping/templates/ping/index.html
index 4e63881224eaf9e740978e16f18b2350aef391ab..449b3170923438af7ee2bc6ae7d689c770427303 100644
--- a/ping/templates/ping/index.html
+++ b/ping/templates/ping/index.html
@@ -37,12 +37,15 @@
       <th>Hostname</th>
       <th>Username</th>
       <th>Status</th>
+      <th>Active</th>
     </tr>
     {% for client in host_list %}
     <tr>
       <td>{{ client.hostname }}</td>
       <td>{{ client.username }}</td>
       <td>{{ client.status }}</td>
+      <td>{{ client.active }}</td>
+      <td><a href="/network/{{ client.id }}/activate">Enable/Disable</td>
     </tr>
     {% endfor %}
   </table>
diff --git a/ping/templates/ping/play.html b/ping/templates/ping/play.html
index ebc8c51a6ebc4dbbc00dafe808576949405d06bf..b0f0affb4ce4f7b7561a36758229fe5db42bbbae 100644
--- a/ping/templates/ping/play.html
+++ b/ping/templates/ping/play.html
@@ -10,51 +10,48 @@
   <meta name="viewport" content="width=device-width, initial-scale=1">
 
   <script type="text/javascript">
-window.addEventListener('load', eventWindowLoaded, false);
-function eventWindowLoaded() {
-    canvasApp();
-
-}
+    window.addEventListener('load', eventWindowLoaded, false);
+    function eventWindowLoaded() {
+      canvasApp();
+    }
 
- function canvasApp() {
-    var metrics = {{metrics}};
+    function canvasApp() {
+      var metrics = {{ metrics }};
 
-    var cycle = 0;
+      var cycle = 0;
 
-    theCanvas = document.getElementById('canvasOne');
-    context = theCanvas.getContext('2d');
+      theCanvas = document.getElementById('canvasOne');
+      context = theCanvas.getContext('2d');
 
-    function erraseCanvas() {
-        context.clearRect(0,0,theCanvas.width,theCanvas.height);
-    }
+      function erraseCanvas() {
+        context.clearRect(0, 0, theCanvas.width, theCanvas.height);
+      }
 
-    function drawScreen () {
+      function drawScreen() {
         erraseCanvas();
 
         var count = metrics[cycle].length;
-        for (let id_agent = 0; id_agent<count; id_agent++){
+        for (let id_agent = 0; id_agent < count; id_agent++) {
           context.fillStyle = "#000000";
           context.beginPath();
-              context.arc(metrics[cycle][id_agent][0],metrics[cycle][id_agent][1],15,0,Math.PI*2,true);
+          context.arc(metrics[cycle][id_agent][0], metrics[cycle][id_agent][1], 1, 0, Math.PI * 2, true);
           context.closePath();
           context.fill();
         }
-    }
-
-    function gameLoop() {
-          if (cycle < metrics.length) {
-           window.setTimeout(gameLoop, 20);
-           drawScreen();
-           cycle = cycle + 1 ;
+      }
 
-          }
+      function gameLoop() {
+        if (cycle < metrics.length) {
+          window.setTimeout(gameLoop, 20);
+          drawScreen();
+          cycle = cycle + 1;
+        }
+      }
 
+      gameLoop();
     }
 
-    gameLoop();
-}
-
-</script>
+  </script>
 
 </head>
 
@@ -98,9 +95,14 @@ function eventWindowLoaded() {
     <button type='submit'> Load</button>
   </form>
 
-<canvas id="canvasOne" width="500" height="500" style="border:1px solid #000000;">
- Your browser does not support the HTML 5 Canvas.
-</canvas>
+  <form action='./global/kill' method='GET'>
+    <button type='submit'> Kill Amas, Env, Scheduler</button>
+  </form>
+
+  <canvas id="canvasOne" width="500" height="500" style="border:1px solid #000000;">
+    Your browser does not support the HTML 5 Canvas.
+  </canvas>
 
 </body>
+
 </html>
\ No newline at end of file
diff --git a/ping/urls.py b/ping/urls.py
index 133b8fbff2a66971b9292a6bb3193c535437f0bf..1dcf382abcc5c040fcf507333e3456de2eea3c34 100644
--- a/ping/urls.py
+++ b/ping/urls.py
@@ -9,9 +9,12 @@ urlpatterns = [
     path('network/update/', views.update, name='update'),
     path('network/agents/', views.agents, name='agents'),
     path('network/agent/kill', views.kill, name='kill'),
+    path('network/<int:client_id>/activate/', views.client_activate, name='active'),
     path('experiment/new/', views.entry, name='entry'),
     path('experiment/', views.experiment, name='experiment'),
     path('experiment/<int:experiment_id>/check/', views.check, name='check'),
+    path('experiment/<int:experiment_id>/select/', views.select, name='select'),
+    path('experiment/<int:experiment_id>/delete/', views.delete, name='delete'),
     path('play/', views.main_play, name='play'),
     path('play/scheduler/start', views.scheduler_start, name='start'),
     path('play/scheduler/step', views.scheduler_step, name='step'),
@@ -20,4 +23,5 @@ urlpatterns = [
     path('play/global/share', views.experiment_share, name='share'),
     path('play/global/start', views.experiment_start, name='start_exp'),
     path('play/global/load', views.experiment_load, name='load_exp'),
+    path('play/global/kill', views.experiment_kill, name='kill_exp'),
 ]
\ No newline at end of file
diff --git a/ping/views/experiment.py b/ping/views/experiment.py
index ca83afb55b19a44481fd2e518ec02df151427151..c0ed1ba151d8dd9052911fd8e0c921a50932e97e 100644
--- a/ping/views/experiment.py
+++ b/ping/views/experiment.py
@@ -1,5 +1,4 @@
 import os
-import shutil
 import zipfile
 
 from django.conf import settings
@@ -8,6 +7,7 @@ from django.http import HttpResponse, HttpResponseRedirect
 from django.template import loader
 from django.urls import reverse
 
+from .tool import delete_folder
 from ..models import Experiment, ExperimentForm
 
 
@@ -26,19 +26,6 @@ def entry(request):
         return HttpResponse(template.render(context, request))
 
 
-def empty_tmp():
-    folder = str(settings.MEDIA_ROOT) + "/tmp"
-    for filename in os.listdir(folder):
-        file_path = os.path.join(folder, filename)
-        try:
-            if os.path.isfile(file_path) or os.path.islink(file_path):
-                os.unlink(file_path)
-            elif os.path.isdir(file_path):
-                shutil.rmtree(file_path)
-        except Exception as e:
-            print('Failed to delete %s. Reason: %s' % (file_path, e))
-
-
 def check(request, experiment_id):
     # get the path
     exp = Experiment.objects.get(pk=experiment_id)
@@ -57,7 +44,7 @@ def check(request, experiment_id):
     if not os.path.isdir(folder_path):
         exp.status = "Wrong format : zip should contain a folder"
         exp.save()
-        empty_tmp()
+        delete_folder(str(settings.MEDIA_ROOT) + "/tmp")
         return HttpResponseRedirect(reverse('ping:experiment'))
 
     required_files = ["amas.py", "agent.py", "env.py", "scheduler.py"]
@@ -65,14 +52,33 @@ def check(request, experiment_id):
         if not os.path.exists(folder_path + "/" + required_file):
             exp.status = "Wrong format : " + required_file + " file is expected"
             exp.save()
-            empty_tmp()
+            delete_folder(str(settings.MEDIA_ROOT) + "/tmp")
             return HttpResponseRedirect(reverse('ping:experiment'))
 
     exp.status = "Checked"
     exp.save()
-    empty_tmp()
+    delete_folder(str(settings.MEDIA_ROOT) + "/tmp")
     return HttpResponseRedirect(reverse('ping:experiment'))
 
+def select(request, experiment_id):
+
+    exp = Experiment.objects.get(pk=experiment_id)
+
+    if exp.status == "Checked":
+        exp_list = Experiment.objects.filter(status="Selected")
+        for expe in exp_list:
+            expe.status = "Checked"
+            expe.save()
+        exp.status = "Selected"
+        exp.save()
+    return HttpResponseRedirect(reverse('ping:experiment'))
+
+def delete(request, experiment_id):
+    exp = Experiment.objects.get(pk=experiment_id)
+    os.remove(str(settings.MEDIA_ROOT) + str(exp.media))
+
+    Experiment.objects.get(pk=experiment_id).delete()
+    return HttpResponseRedirect(reverse('ping:experiment'))
 
 def experiment(request):
     template = loader.get_template('ping/experiment.html')
diff --git a/ping/views/network.py b/ping/views/network.py
index 5a13bc786bd60451425f50eba978fc0257d2b894..f9e147a6e4380e2a8a0d634ec3f36ed37d24ea7f 100644
--- a/ping/views/network.py
+++ b/ping/views/network.py
@@ -5,27 +5,15 @@ import re
 from django.http import HttpResponse, HttpResponseRedirect
 from django.template import loader
 from django.urls import reverse
-from iotAmak.tool.remote_client import RemoteClient
-from iotAmak.tool.ssh_client import SSHClient, Cmd
+from iotAmak.tool.ssh_client import Cmd
 
+from .tool import get_ssh_client
 from ..models import Client, Agent
 
-def get_remote_client():
-    res = []
-    for client in Client.objects.all():
-        if client.status == "Online":
-            res.append(RemoteClient(client.hostname, client.username, client.password))
-
-    return res
-
-
-def get_ssh_client():
-    return SSHClient(get_remote_client())
-
 
 def update(request):
     ssh = get_ssh_client()
-    version = "0.0.1"
+    version = "0.0.2"
     commands = [
         Cmd(
             cmd="cd Desktop/mqtt_goyon/iotamak-core"
@@ -69,6 +57,7 @@ def agents(request):
 
     return HttpResponseRedirect(reverse('ping:index'))
 
+
 def kill(request):
     ssh = get_ssh_client()
 
@@ -82,7 +71,6 @@ def kill(request):
     return HttpResponseRedirect(reverse('ping:index'))
 
 
-
 def index(request):
     template = loader.get_template('ping/index.html')
     context = {
@@ -106,4 +94,11 @@ def pressed(request):
             c.status = "Offline"
         c.save()
 
+    return HttpResponseRedirect(reverse('ping:index'))
+
+def client_activate(request, client_id):
+    client = Client.objects.get(pk=client_id)
+
+    client.active = not client.active
+    client.save()
     return HttpResponseRedirect(reverse('ping:index'))
\ No newline at end of file
diff --git a/ping/views/play.py b/ping/views/play.py
index 60d8fbad96d73ddf2e1e31a8c5b32f09a3ffbdb6..c2518131039ea9cc5b1f806dcaa2015e7dd70c33 100644
--- a/ping/views/play.py
+++ b/ping/views/play.py
@@ -1,5 +1,4 @@
 import os
-import shutil
 import sys
 import zipfile
 from ast import literal_eval
@@ -7,16 +6,15 @@ from subprocess import Popen
 from time import sleep
 
 from django.conf import settings
-from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
+from django.http import HttpResponse, HttpResponseRedirect
 from django.template import loader
 from django.urls import reverse
 from iotAmak.tool.ssh_client import Cmd
 from paho.mqtt.client import Client as MQTTClient
 
+from .tool import delete_folder, get_ssh_client
 from ..models import Experiment, CurrentExperiment, Metrics
 
-from .network import get_ssh_client
-
 client = MQTTClient(client_id="django-ihm")
 
 def subscribe(mqttclient, topic, fun):
@@ -32,12 +30,10 @@ def agent_log(client, userdata, message) -> None:
 
 
 def agent_metric(client, userdata, message) -> None:
-    result = literal_eval(message.payload.decode("utf-8"))
-    agent_id = result.get("id")
+    results = literal_eval(message.payload.decode("utf-8"))
 
     exp = CurrentExperiment.objects.all()[0]
-
-    metric = Metrics(experiment_name=exp.name, cycle=exp.cycle, agent_id=agent_id, metrics=result)
+    metric = Metrics(cycle=exp.cycle, metrics=results)
     metric.save()
 
 def cycle_done(client, userdata, message) -> None:
@@ -48,26 +44,12 @@ def cycle_done(client, userdata, message) -> None:
 
 def update_nbr_agent(client, userdata, message) -> None:
     exp = CurrentExperiment.objects.all()[0]
-    subscribe(client, "agent/"+str(exp.nbr_agent)+"/metric", agent_metric)
-    subscribe(client, "scheduler/cycledone", cycle_done)
     exp.nbr_agent += 1
     exp.save()
 
-def empty_current_experiment():
-    folder = str(settings.MEDIA_ROOT) + "current_experiment"
-    for filename in os.listdir(folder):
-        file_path = os.path.join(folder, filename)
-        try:
-            if os.path.isfile(file_path) or os.path.islink(file_path):
-                os.unlink(file_path)
-            elif os.path.isdir(file_path):
-                shutil.rmtree(file_path)
-        except Exception as e:
-            print('Failed to delete %s. Reason: %s' % (file_path, e))
-
 def experiment_load(request):
 
-    empty_current_experiment()
+    delete_folder(str(settings.MEDIA_ROOT) + "current_experiment")
 
     exp = Experiment.objects.get(status="Selected")
 
@@ -86,7 +68,7 @@ def experiment_load(request):
 
 def experiment_start(request):
 
-    broker_ip = "192.168.201.209"
+    broker_ip = "192.168.157.209"
     ssh = get_ssh_client()
 
     experiment_path = str(settings.MEDIA_ROOT) + "current_experiment/" + Experiment.objects.get(status="Selected").name
@@ -96,6 +78,8 @@ def experiment_start(request):
     client.connect(host=broker_ip)
     client.loop_start()
     subscribe(client, "amas/agent/new", update_nbr_agent)
+    subscribe(client, "scheduler/cycledone", cycle_done)
+    subscribe(client, "amas/all_metric", agent_metric)
 
     # start subprocess scheduler
     p1 = Popen([sys.executable, experiment_path+'/scheduler.py', broker_ip])
@@ -105,16 +89,26 @@ def experiment_start(request):
     p2 = Popen([sys.executable, experiment_path+'/amas.py', broker_ip, str(send_client)])
     # start subprocess env
     p3 = Popen([sys.executable, experiment_path+'/env.py', broker_ip])
+
+    exp = CurrentExperiment.objects.all()[0]
+    exp.amas_pid = p2.pid
+    exp.scheduler_pid = p1.pid
+    exp.env_pid = p3.pid
+    exp.save()
+
     return HttpResponseRedirect(reverse('ping:play'))
 
 def main_play(request):
-    cycle = CurrentExperiment.objects.all()[0].cycle
+    if len(CurrentExperiment.objects.all()) > 0:
+        cycle = CurrentExperiment.objects.all()[0].cycle
+    else:
+        cycle = 0
     metrics = []
     for i in range(cycle):
         # get all the agent 0 metrics
-        raw_context = Metrics.objects.filter(cycle=i)
+        raw_context = Metrics.objects.filter(cycle=i)[0].metrics
 
-        cycle_metrics = [[metric.metrics.get("x"), metric.metrics.get("y")] for metric in raw_context]
+        cycle_metrics = [[metric.get("x"), metric.get("y")] for metric in raw_context if metric != {}]
 
         metrics.append(cycle_metrics)
 
@@ -162,3 +156,14 @@ def experiment_stop(request):
     client.publish("ihm/exit")
     client.publish("ihm/step")
     return HttpResponseRedirect(reverse('ping:play'))
+
+def experiment_kill(request):
+    exp = CurrentExperiment.objects.all()[0]
+
+    if exp.amas_pid != 0 :
+        os.system("kill "+str(exp.amas_pid))
+    if exp.env_pid != 0 :
+        os.system("kill "+str(exp.env_pid))
+    if exp.scheduler_pid != 0 :
+        os.system("kill "+str(exp.scheduler_pid))
+    return HttpResponseRedirect(reverse('ping:play'))
diff --git a/ping/views/tool.py b/ping/views/tool.py
new file mode 100644
index 0000000000000000000000000000000000000000..172d5f4b0ca30f229fb3b4960340f7e9f3fcc15e
--- /dev/null
+++ b/ping/views/tool.py
@@ -0,0 +1,30 @@
+import os
+import shutil
+
+from iotAmak.tool.remote_client import RemoteClient
+from iotAmak.tool.ssh_client import SSHClient
+
+from ping.models import Client
+
+
+def delete_folder(folder_name):
+    for filename in os.listdir(folder_name):
+        file_path = os.path.join(folder_name, filename)
+        try:
+            if os.path.isfile(file_path) or os.path.islink(file_path):
+                os.unlink(file_path)
+            elif os.path.isdir(file_path):
+                shutil.rmtree(file_path)
+        except Exception as e:
+            print('Failed to delete %s. Reason: %s' % (file_path, e))
+
+def get_remote_client():
+    res = []
+    for client in Client.objects.all():
+        if client.status == "Online" and client.active:
+            res.append(RemoteClient(client.hostname, client.username, client.password))
+
+    return res
+
+def get_ssh_client():
+    return SSHClient(get_remote_client())
\ No newline at end of file
diff --git a/uploads/current_experiment/ant/agent.py b/uploads/current_experiment/ant/agent.py
index 80f5688cfe9fe0dee42baf3c1331b025c19e6c77..b51b4f58367b9db6dd3051406ede66651884cb74 100644
--- a/uploads/current_experiment/ant/agent.py
+++ b/uploads/current_experiment/ant/agent.py
@@ -11,10 +11,24 @@ class Ant(Agent):
         self.y = 250
         super().__init__(identifier, broker_ip)
 
+    def on_initialization(self) -> None:
+        pass
+
+    def on_cycle_begin(self) -> None:
+        pass
+
+    def on_perceive(self) -> None:
+        pass
+
+    def on_decide(self) -> None:
+        pass
+
     def on_act(self) -> None:
         self.x += random.randint(-5, +5)
         self.y += random.randint(-5, +5)
-        self.log("X : "+str(self.x)+" Y  : "+str(self.y))
+
+    def on_cycle_end(self) -> None:
+        pass
 
     def send_metric(self):
         metric = super(Ant, self).send_metric()
diff --git a/uploads/current_experiment/ant/amas.py b/uploads/current_experiment/ant/amas.py
index 99a0586c10c2185bf7ed813e58b6ee83c7934747..f4746a97671a7d400239f6124b5576dc5c0bc6b8 100644
--- a/uploads/current_experiment/ant/amas.py
+++ b/uploads/current_experiment/ant/amas.py
@@ -16,5 +16,5 @@ class AntAmas(Amas):
 
 
 if __name__ == '__main__':
-    s = AntAmas(str(sys.argv[1]), sys.argv[2], 5)
+    s = AntAmas(str(sys.argv[1]), sys.argv[2], 150)
     s.run()
diff --git a/uploads/media/amas.py b/uploads/media/amas.py
deleted file mode 100644
index 1b8e3f306293dc9151a0de60da43dd8a772f3b20..0000000000000000000000000000000000000000
--- a/uploads/media/amas.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import sys
-
-
-from iotAmak.amas import Amas
-
-
-class PhiAmas(Amas):
-
-    def __init__(self, broker_ip: str, clients, nbr_agent):
-        self.agent_to_create = nbr_agent
-        super().__init__(broker_ip, clients)
-
-    def on_initial_agents_creation(self):
-        for _ in range(self.agent_to_create):
-            self.add_agent("philosophers", [str(self.agent_to_create)])
-
-
-if __name__ == '__main__':
-    s = PhiAmas(str(sys.argv[1]), sys.argv[2], 5)
-    s.run()
diff --git a/uploads/media/ant.zip b/uploads/media/ant.zip
index 412da9c2e93f2efd75892236c484c9a8068ba3c3..5deb3014d79ead7187411c6887f88036fad5c716 100644
Binary files a/uploads/media/ant.zip and b/uploads/media/ant.zip differ
diff --git a/uploads/media/ant_XUpI6l7.zip b/uploads/media/ant_XUpI6l7.zip
deleted file mode 100644
index f2376c7643fd1a04ba142f07ab3fdf329abd0224..0000000000000000000000000000000000000000
Binary files a/uploads/media/ant_XUpI6l7.zip and /dev/null differ
diff --git a/uploads/media/config.json b/uploads/media/config.json
deleted file mode 100644
index 56c5b0c82bcd9281d321f063c9d5bcd5237c6b1f..0000000000000000000000000000000000000000
--- a/uploads/media/config.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "broker" : "192.168.30.209",
-  "clients_ssh" : [
-    {
-      "hostname" : "192.168.30.18",
-      "user" : "pi",
-      "password" : "raspberry"
-    },
-    {
-      "hostname" : "192.168.30.227",
-      "user" : "pi",
-      "password" : "raspberry"
-    },
-    {
-      "hostname" : "192.168.30.61",
-      "user" : "pi",
-      "password" : "raspberry"
-    },
-    {
-      "hostname" : "192.168.30.75",
-      "user" : "pi",
-      "password" : "raspberry"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/uploads/media/env.py b/uploads/media/env.py
deleted file mode 100644
index c8a767fd18a98aabce6994c1864789c28a374ee5..0000000000000000000000000000000000000000
--- a/uploads/media/env.py
+++ /dev/null
@@ -1,67 +0,0 @@
-
-import sys
-
-
-from iotAmak.environment import Environment
-from fork import Fork
-
-
-class PhiEnv(Environment):
-
-    def __init__(self, broker_ip, nbr_phil):
-        self.nbr_phil = nbr_phil
-        super().__init__(broker_ip)
-
-    def on_initialization(self):
-        self.forks = []
-        for i in range(self.nbr_phil):
-            self.forks.append(Fork(i))
-            self.subscribe("agent/" + str(i) + "/ask_spoon", self.ask_spoon)
-            self.subscribe("agent/" + str(i) + "/done_eating", self.done_eating)
-
-    def ask_spoon(self, client, userdata, message):
-        res = str(message.payload.decode("utf-8"))
-        agent_id = int(str(message.topic).split("/")[1])
-
-        if res == "left":
-            fork_id = agent_id
-        else:
-            fork_id = (agent_id - 1) % self.nbr_phil
-
-        if self.forks[fork_id].state == 1:
-            message = {
-                "response": "False"
-            }
-        elif self.forks[fork_id].taken_by == -1:
-            message = {
-                "response": "True",
-                "side": res,
-                "state": 0
-            }
-            self.forks[fork_id].taken_by = agent_id
-        else:
-            message = {
-                "response": "True",
-                "side": res,
-                "state": 1
-            }
-            self.forks[fork_id].taken_by = agent_id
-            self.forks[fork_id].state = 1
-
-        self.client.publish("env/agent/" + str(agent_id) + "/ask_spoon", str(message))
-
-    def done_eating(self, client, userdata, message):
-        agent_id = int(str(message.topic).split("/")[1])
-
-        for fork_id in [agent_id, (agent_id - 1) % self.nbr_phil]:
-            self.forks[fork_id].state = 0
-
-    def on_cycle_begin(self) -> None:
-        for fork in self.forks:
-            self.client.publish("env/fork/" + str(fork.identifier), str(fork.to_msg()))
-            print("Fork : ", fork.identifier," taken by ", fork.taken_by, " and is :", fork.state)
-
-
-if __name__ == '__main__':
-    s = PhiEnv(str(sys.argv[1]), 5)
-    s.run()
\ No newline at end of file
diff --git a/uploads/media/philosophers.zip b/uploads/media/philosophers.zip
deleted file mode 100644
index 7c2deb36c8adeb6b9c9f9e60519c28d58b2724f3..0000000000000000000000000000000000000000
Binary files a/uploads/media/philosophers.zip and /dev/null differ
diff --git a/uploads/media/philosophers_7r4Esmi.zip b/uploads/media/philosophers_7r4Esmi.zip
deleted file mode 100644
index 36a06f59b5c16b862e0b44f85cc23505f35b0377..0000000000000000000000000000000000000000
Binary files a/uploads/media/philosophers_7r4Esmi.zip and /dev/null differ