Skip to content
Snippets Groups Projects
Commit 3caef389 authored by shinedday's avatar shinedday
Browse files

Ant example now have better import

parent e60b7fa8
No related branches found
No related tags found
No related merge requests found
from random import randint
from math import sqrt
import sys
import pathlib
sys.path.insert(0, str(pathlib.Path(__file__).parent))
from antExample import AntExample
from color import Color
class AntExampleV1(AntExample):
def __init__(self,
amas: 'antHillExample',
startX: float,
startY: float
) -> None:
super().__init__(amas, startX, startY)
self.majority_color = Color.BLACK
def on_perceive(self) -> None:
self.reset_neighbour()
for agent in self.get_amas().get_agents():
length = sqrt(pow(self._dx - agent.get_dx(), 2) + pow(self._dy - agent.get_dy(), 2))
if length < self.get_environment().field_of_view and self != agent:
self.add_neighbour(agent)
self.find_the_majority_color()
def on_act(self) -> None:
# couleur
if self.majority_color != self._color:
self._color = self.majority_color
elif randint(1, 1000) <= 4:
self._color = AntExample.int_to_color.get(randint(0, 4))
# déplacement
self.make_random_move()
def find_the_majority_color(self) -> Color:
couleurs_voisin = [0, 0, 0, 0, 0]
for agent in self.get_neighbour():
couleurs_voisin[AntExample.color_to_int.get(agent.get_color())] += 1
self.majority_color = AntExample.int_to_color.get(couleurs_voisin.index(max(couleurs_voisin)))
\ No newline at end of file
""" """
class antExample class antExample
this is the most basic version of ants
""" """
from math import sqrt
from random import randint from random import randint
from pyAmakCore.classes.agent import Agent from pyAmakCore.classes.agent import Agent
...@@ -8,7 +11,7 @@ from pyAmakCore.classes.agent import Agent ...@@ -8,7 +11,7 @@ from pyAmakCore.classes.agent import Agent
from color import Color from color import Color
class AntExample(Agent): class AntExampleV1(Agent):
int_to_color = { int_to_color = {
0: Color.BLUE, 0: Color.BLUE,
1: Color.BLACK, 1: Color.BLACK,
...@@ -35,6 +38,7 @@ class AntExample(Agent): ...@@ -35,6 +38,7 @@ class AntExample(Agent):
self._dy = startY self._dy = startY
self._color = Color.BLACK self._color = Color.BLACK
self._old_color = Color.BLACK self._old_color = Color.BLACK
self.majority_color = Color.BLACK
def get_color(self): def get_color(self):
return self._color return self._color
...@@ -66,3 +70,28 @@ class AntExample(Agent): ...@@ -66,3 +70,28 @@ class AntExample(Agent):
if self._dy > self.get_environment().ymax: if self._dy > self.get_environment().ymax:
self._dy = self.get_environment().ymax self._dy = self.get_environment().ymax
def on_perceive(self) -> None:
self.reset_neighbour()
for agent in self.get_amas().get_agents():
length = sqrt(pow(self._dx - agent.get_dx(), 2) + pow(self._dy - agent.get_dy(), 2))
if length < self.get_environment().field_of_view and self != agent:
self.add_neighbour(agent)
self.find_the_majority_color()
def on_act(self) -> None:
# couleur
if self.majority_color != self._color:
self._color = self.majority_color
elif randint(1, 1000) <= 4:
self._color = AntExampleV1.int_to_color.get(randint(0, 4))
# déplacement
self.make_random_move()
def find_the_majority_color(self) -> Color:
couleurs_voisin = [0, 0, 0, 0, 0]
for agent in self.get_neighbour():
couleurs_voisin[AntExampleV1.color_to_int.get(agent.get_color())] += 1
self.majority_color = AntExampleV1.int_to_color.get(couleurs_voisin.index(max(couleurs_voisin)))
\ No newline at end of file
""" """
class antExample
Init : Init :
* Les fourmis partent toutes du centre de l'écran * Les fourmis partent toutes du centre de l'écran
...@@ -13,25 +15,41 @@ Cycle : ...@@ -13,25 +15,41 @@ Cycle :
* Si il n'y a pas de couleur majoritaire elle a 1% de chance de prendre une couleur aléatoire * Si il n'y a pas de couleur majoritaire elle a 1% de chance de prendre une couleur aléatoire
* si TOUT les voisins on la meme couleur qu'elle, elle meurt (hors noir) * si TOUT les voisins on la meme couleur qu'elle, elle meurt (hors noir)
""" """
from math import sqrt
from random import randint from random import randint
from math import sqrt from pyAmakCore.classes.agent import Agent
from color import Color
import sys
import pathlib
sys.path.insert(0, str(pathlib.Path(__file__).parent)) class AntExampleV2(Agent):
int_to_color = {
0: Color.BLUE,
1: Color.BLACK,
2: Color.RED,
3: Color.YELLOW,
4: Color.GREEN
}
from antExample import AntExample color_to_int = {
from color import Color Color.BLUE: 0,
Color.BLACK: 1,
Color.RED: 2,
Color.YELLOW: 3,
Color.GREEN: 4
}
class AntExampleV2(AntExample):
def __init__(self, def __init__(self,
amas: 'antHillExample', amas: 'antHillExample',
startX: float, startX: float,
startY: float startY: float
) -> None: ) -> None:
super().__init__(amas, startX, startY) super().__init__(amas)
self._dx = startX
self._dy = startY
self._color = Color.BLACK
self._old_color = Color.BLACK
self.majority_color = Color.BLACK self.majority_color = Color.BLACK
self.couleurs_voisin = [0, 0, 0, 0, 0] self.couleurs_voisin = [0, 0, 0, 0, 0]
...@@ -58,7 +76,7 @@ class AntExampleV2(AntExample): ...@@ -58,7 +76,7 @@ class AntExampleV2(AntExample):
if self.couleurs_voisin.index(max(self.couleurs_voisin)) >= 3 and self._color == Color.BLACK: if self.couleurs_voisin.index(max(self.couleurs_voisin)) >= 3 and self._color == Color.BLACK:
self._color = self.majority_color self._color = self.majority_color
elif randint(1, 1000) <= 4: elif randint(1, 1000) <= 4:
self._color = AntExample.int_to_color.get(randint(0, 4)) self._color = AntExampleV2.int_to_color.get(randint(0, 4))
# déplacement # déplacement
self.make_random_move() self.make_random_move()
...@@ -66,7 +84,37 @@ class AntExampleV2(AntExample): ...@@ -66,7 +84,37 @@ class AntExampleV2(AntExample):
def find_the_majority_color(self) -> Color: def find_the_majority_color(self) -> Color:
self.couleurs_voisin = [0, 0, 0, 0, 0] self.couleurs_voisin = [0, 0, 0, 0, 0]
for agent in self.get_neighbour(): for agent in self.get_neighbour():
self.couleurs_voisin[AntExample.color_to_int.get(agent.get_color())] += 1 self.couleurs_voisin[AntExampleV2.color_to_int.get(agent.get_color())] += 1
self.majority_color = AntExampleV2.int_to_color.get(self.couleurs_voisin.index(max(self.couleurs_voisin)))
def get_color(self):
return self._color
def get_dx(self):
return self._dx
def get_dy(self):
return self._dy
def get_old_color(self):
return self._old_color
def on_cycle_begin(self):
self._old_color = self._color
def make_random_move(self):
self._dx += (randint(-1, 1) * self.get_environment().coef_deplacement)
self._dy += (randint(-1, 1) * self.get_environment().coef_deplacement)
if self._dx < self.get_environment().xmin:
self._dx = self.get_environment().xmin
if self._dx > self.get_environment().xmax:
self._dx = self.get_environment().xmax
self.majority_color = AntExample.int_to_color.get(self.couleurs_voisin.index(max(self.couleurs_voisin))) if self._dy < self.get_environment().ymin:
self._dy = self.get_environment().ymin
if self._dy > self.get_environment().ymax:
self._dy = self.get_environment().ymax
""" """
class antExample class antExample
this one use communicating agent
""" """
from math import * from math import *
from random import randint from random import randint
......
from random import randint """
class antExample
this example is just like v1, but it use simpler rule to show that 1 phase and 2 phase work as expected
import sys """
import pathlib from random import randint
sys.path.insert(0, str(pathlib.Path(__file__).parent)) from pyAmakCore.classes.agent import Agent
from antExample import AntExample
from color import Color from color import Color
class TestAnt(Agent):
int_to_color = {
0: Color.BLUE,
1: Color.BLACK,
2: Color.RED,
3: Color.YELLOW,
4: Color.GREEN
}
class AntTest(AntExample): color_to_int = {
Color.BLUE: 0,
Color.BLACK: 1,
Color.RED: 2,
Color.YELLOW: 3,
Color.GREEN: 4
}
def __init__(self, def __init__(self,
amas: 'antHillExample', amas: 'antHillExample',
startX: float, startX: float,
startY: float startY: float
) -> None: ) -> None:
super().__init__(amas, startX, startY) super().__init__(amas)
self._dx = startX
self._dy = startY
self._color = Color.BLACK
self._old_color = Color.BLACK
self.majority_color = Color.BLACK self.majority_color = Color.BLACK
def on_perceive(self) -> None: def on_perceive(self) -> None:
...@@ -32,7 +52,7 @@ class AntTest(AntExample): ...@@ -32,7 +52,7 @@ class AntTest(AntExample):
if self.majority_color != self._color: if self.majority_color != self._color:
self._color = self.majority_color self._color = self.majority_color
elif randint(1, 50) <= 4: elif randint(1, 50) <= 4:
self._color = AntExample.int_to_color.get(randint(0, 4)) self._color = TestAnt.int_to_color.get(randint(0, 4))
# déplacement # déplacement
self.make_random_move() self.make_random_move()
...@@ -40,6 +60,37 @@ class AntTest(AntExample): ...@@ -40,6 +60,37 @@ class AntTest(AntExample):
def find_the_majority_color(self) -> Color: def find_the_majority_color(self) -> Color:
couleurs_voisin = [0, 0, 0, 0, 0] couleurs_voisin = [0, 0, 0, 0, 0]
for agent in self.get_neighbour(): for agent in self.get_neighbour():
couleurs_voisin[AntExample.color_to_int.get(agent.get_color())] += 1 couleurs_voisin[TestAnt.color_to_int.get(agent.get_color())] += 1
self.majority_color = TestAnt.int_to_color.get(couleurs_voisin.index(max(couleurs_voisin)))
def get_color(self):
return self._color
def get_dx(self):
return self._dx
def get_dy(self):
return self._dy
def get_old_color(self):
return self._old_color
def on_cycle_begin(self):
self._old_color = self._color
def make_random_move(self):
self._dx += (randint(-1, 1) * self.get_environment().coef_deplacement)
self._dy += (randint(-1, 1) * self.get_environment().coef_deplacement)
if self._dx < self.get_environment().xmin:
self._dx = self.get_environment().xmin
if self._dx > self.get_environment().xmax:
self._dx = self.get_environment().xmax
if self._dy < self.get_environment().ymin:
self._dy = self.get_environment().ymin
self.majority_color = AntExample.int_to_color.get(couleurs_voisin.index(max(couleurs_voisin))) if self._dy > self.get_environment().ymax:
\ No newline at end of file self._dy = self.get_environment().ymax
""" """
class antHillExample class antHillExample
""" """
import pathlib
import sys
from pyAmakCore.classes.tools.amasIHM import AmasIHM from pyAmakCore.classes.tools.amasIHM import AmasIHM
from pyAmakCore.enumeration.executionPolicy import ExecutionPolicy from pyAmakCore.enumeration.executionPolicy import ExecutionPolicy
sys.path.insert(0, str(pathlib.Path(__file__).parent))
from ant_example.agent.communicating import CommunicatingAnt from antExample import AntExampleV1
from ant_example.agent.proof_of_concept import AntTest from antExample2 import AntExampleV2
from ant_example.agent.v1 import AntExampleV1 from antExample3 import CommunicatingAnt
from ant_example.agent.v2 import AntExampleV2 from antExample4 import TestAnt
class AntHillExample(AmasIHM): class AntHillExample(AmasIHM):
...@@ -26,7 +22,7 @@ class AntHillExample(AmasIHM): ...@@ -26,7 +22,7 @@ class AntHillExample(AmasIHM):
# self.set_execution_policy(ExecutionPolicy.ONE_PHASE) # self.set_execution_policy(ExecutionPolicy.ONE_PHASE)
self.set_execution_policy(ExecutionPolicy.TWO_PHASES) self.set_execution_policy(ExecutionPolicy.TWO_PHASES)
self.set_do_log(True) # self.set_do_log(True)
self.add_ignore_attribute("_CommunicatingAgent__mailbox") self.add_ignore_attribute("_CommunicatingAgent__mailbox")
self.add_ignore_attribute("_Agent__criticality") self.add_ignore_attribute("_Agent__criticality")
self.add_ignore_attribute("_Agent__phase") self.add_ignore_attribute("_Agent__phase")
...@@ -37,4 +33,4 @@ class AntHillExample(AmasIHM): ...@@ -37,4 +33,4 @@ class AntHillExample(AmasIHM):
# self.add_agent(AntExampleV1(self, self.get_environment().xmax/2, self.get_environment().ymax/2)) # self.add_agent(AntExampleV1(self, self.get_environment().xmax/2, self.get_environment().ymax/2))
self.add_agent(AntExampleV2(self, self.get_environment().xmax/2, self.get_environment().ymax/2)) self.add_agent(AntExampleV2(self, self.get_environment().xmax/2, self.get_environment().ymax/2))
# self.add_agent(CommunicatingAnt(self, self.get_environment().xmax / 2, self.get_environment().ymax / 2)) # self.add_agent(CommunicatingAnt(self, self.get_environment().xmax / 2, self.get_environment().ymax / 2))
# self.add_agent(AntTest(self, self.get_environment().xmax / 2, self.get_environment().ymax / 2)) # self.add_agent(TestAnt(self, self.get_environment().xmax / 2, self.get_environment().ymax / 2))
from enum import * from enum import *
class State(Enum): class State(Enum):
""" """
The scheduler is running The scheduler_tool is running
""" """
THINK = auto() THINK = auto()
""" """
The scheduler is paused The scheduler_tool is paused
""" """
HUNGRY = auto() HUNGRY = auto()
""" """
The scheduler is expected to stop at the end at the current cycle The scheduler_tool is expected to stop at the end at the current cycle
""" """
EATING = auto() EATING = auto()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment