From 2c853d175d43f6ceac09a0d04f09a09cd1d12407 Mon Sep 17 00:00:00 2001
From: shinedday <shinedday@gmail.com>
Date: Thu, 19 May 2022 16:12:35 +0200
Subject: [PATCH] update to 0.0.3

---
 ant.zip                   | Bin 0 -> 1946 bytes
 ant/__init__.py           |   0
 ant/agent.py              |  57 ++++++++++++++++++++++++++++++++++++++
 ant/amas.py               |  43 ++++++++++++++++++++++++++++
 ant/config.json           |  13 +++++++++
 ant/env.py                |  15 ++++++++++
 ant/scheduler.py          |   7 +++++
 philosophers.zip          | Bin 0 -> 3181 bytes
 philosophers/config.json  |  10 +++----
 philosophers/scheduler.py |   2 +-
 10 files changed, 141 insertions(+), 6 deletions(-)
 create mode 100644 ant.zip
 create mode 100644 ant/__init__.py
 create mode 100644 ant/agent.py
 create mode 100644 ant/amas.py
 create mode 100644 ant/config.json
 create mode 100644 ant/env.py
 create mode 100644 ant/scheduler.py
 create mode 100644 philosophers.zip

diff --git a/ant.zip b/ant.zip
new file mode 100644
index 0000000000000000000000000000000000000000..7f598ed6dbbf36c137aa684b8571ad27ef2c45db
GIT binary patch
literal 1946
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
LBr`HFD1vzanw<xQ

literal 0
HcmV?d00001

diff --git a/ant/__init__.py b/ant/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/ant/agent.py b/ant/agent.py
new file mode 100644
index 0000000..0d1d88c
--- /dev/null
+++ b/ant/agent.py
@@ -0,0 +1,57 @@
+import random
+import sys
+
+from iotAmak.agent import Agent
+
+
+class Ant(Agent):
+
+    def __init__(self, identifier: int, broker_ip: str):
+        self.x = 250
+        self.y = 250
+        self.color = 0
+        super().__init__(identifier, broker_ip)
+
+    def on_initialization(self) -> None:
+        pass
+
+    def on_cycle_begin(self) -> None:
+        pass
+
+    def on_perceive(self) -> None:
+        self.neighbors = self.next_neighbors
+        self.next_neighbors = []
+
+    def on_decide(self) -> None:
+        pass
+
+    def on_act(self) -> None:
+        self.x += random.randint(-5, +5)
+        self.y += random.randint(-5, +5)
+
+        # count color
+        color = [0 for _ in range(5)]
+        for ant in self.next_neighbors:
+            color[ant.get("color")] += 1
+        # set color
+        if color.index(max(color)) != 0:
+            self.color = color[color.index(max(color))]
+        # low chance to mutate
+        if random.randint(0, 1000) < 10:
+            self.color = random.randint(0, 4)
+
+    def on_cycle_end(self) -> None:
+        pass
+
+    def send_metric(self):
+        metric = super(Ant, self).send_metric()
+
+        metric["x"] = self.x
+        metric["y"] = self.y
+        metric["color"] = self.color
+        return metric
+
+
+if __name__ == '__main__':
+    a = Ant(int(sys.argv[1]), str(sys.argv[2]))
+    a.run()
diff --git a/ant/amas.py b/ant/amas.py
new file mode 100644
index 0000000..267f805
--- /dev/null
+++ b/ant/amas.py
@@ -0,0 +1,43 @@
+import sys
+from math import sqrt
+
+from iotAmak.amas import Amas
+
+
+class AntAmas(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("ant")
+
+    def is_neighbour(self, id_a, id_b):
+        if id_a == id_b:
+            return False
+        if self.agents_metric[id_a] == {}:
+            return False
+        if self.agents_metric[id_b] == {}:
+            return False
+
+        x = self.agents_metric[id_a].get("x") - self.agents_metric[id_b].get("x")
+        y = self.agents_metric[id_a].get("y") - self.agents_metric[id_b].get("y")
+
+        dist = sqrt(x * x + y * y)
+        return dist < 15
+
+    def on_cycle_begin(self) -> None:
+
+        for i in range(self.next_id):
+            for j in range(i, self.next_id):
+                cond = self.is_neighbour(i, j)
+                if cond:
+                    self.agent_neighbour(i, j)
+                    self.agent_neighbour(j, i)
+
+
+if __name__ == '__main__':
+    s = AntAmas(str(sys.argv[1]), sys.argv[2], 50)
+    s.run()
diff --git a/ant/config.json b/ant/config.json
new file mode 100644
index 0000000..d9cf6ab
--- /dev/null
+++ b/ant/config.json
@@ -0,0 +1,13 @@
+{
+  "iotamak_version": "0.0.3",
+
+  "seed" : 0,
+
+  "canvas": {
+    "height" : 500,
+    "width" : 500,
+    "x" : "x",
+    "y": "y"
+  }
+
+}
\ No newline at end of file
diff --git a/ant/env.py b/ant/env.py
new file mode 100644
index 0000000..a4f1c42
--- /dev/null
+++ b/ant/env.py
@@ -0,0 +1,15 @@
+import sys
+
+
+from iotAmak.environment import Environment
+
+
+class AntEnv(Environment):
+
+    def __init__(self, broker_ip):
+        super().__init__(broker_ip)
+
+
+if __name__ == '__main__':
+    s = AntEnv(str(sys.argv[1]))
+    s.run()
\ No newline at end of file
diff --git a/ant/scheduler.py b/ant/scheduler.py
new file mode 100644
index 0000000..9aac6b6
--- /dev/null
+++ b/ant/scheduler.py
@@ -0,0 +1,7 @@
+import sys
+
+from iotAmak.scheduler import Scheduler
+
+if __name__ == '__main__':
+    a = Scheduler(str(sys.argv[1]))
+    a.run()
\ No newline at end of file
diff --git a/philosophers.zip b/philosophers.zip
new file mode 100644
index 0000000000000000000000000000000000000000..36a06f59b5c16b862e0b44f85cc23505f35b0377
GIT binary patch
literal 3181
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
O2ZIa~1A{dehz9_Z1{22s

literal 0
HcmV?d00001

diff --git a/philosophers/config.json b/philosophers/config.json
index 84fb1a9..9d9ff15 100644
--- a/philosophers/config.json
+++ b/philosophers/config.json
@@ -1,23 +1,23 @@
 {
-  "broker" : "192.168.153.209",
+  "broker" : "192.168.71.209",
   "clients_ssh" : [
     {
-      "hostname" : "192.168.153.18",
+      "hostname" : "192.168.71.18",
       "user" : "pi",
       "password" : "raspberry"
     },
     {
-      "hostname" : "192.168.153.227",
+      "hostname" : "192.168.71.227",
       "user" : "pi",
       "password" : "raspberry"
     },
     {
-      "hostname" : "192.168.153.61",
+      "hostname" : "192.168.71.61",
       "user" : "pi",
       "password" : "raspberry"
     },
     {
-      "hostname" : "192.168.153.75",
+      "hostname" : "192.168.71.75",
       "user" : "pi",
       "password" : "raspberry"
     }
diff --git a/philosophers/scheduler.py b/philosophers/scheduler.py
index 05c5b41..9aac6b6 100644
--- a/philosophers/scheduler.py
+++ b/philosophers/scheduler.py
@@ -3,5 +3,5 @@ import sys
 from iotAmak.scheduler import Scheduler
 
 if __name__ == '__main__':
-    a = Scheduler(int(sys.argv[1]), str(sys.argv[2]))
+    a = Scheduler(str(sys.argv[1]))
     a.run()
\ No newline at end of file
-- 
GitLab