From 25288f0f5bcd4fc74a3ac072c2495c76f6b9a483 Mon Sep 17 00:00:00 2001 From: shinedday <shinedday@gmail.com> Date: Mon, 10 May 2021 12:45:28 +0200 Subject: [PATCH] Fix ant v1 --- ant_example/antHillExample.py | 3 - ant_example_2_phases/antExample.py | 80 ++++++++++++++++++ ant_example_2_phases/antHillExample.py | 32 +++++++ ant_example_2_phases/antsLaunchExample.py | 32 +++++++ ant_example_2_phases/color.py | 7 ++ ant_example_2_phases/controleurAntsExample.py | 42 +++++++++ ant_example_2_phases/images/blackAnt.png | Bin 0 -> 537 bytes ant_example_2_phases/images/blueAnt.png | Bin 0 -> 630 bytes ant_example_2_phases/images/greenAnt.png | Bin 0 -> 627 bytes ant_example_2_phases/images/redAnt.png | Bin 0 -> 629 bytes ant_example_2_phases/images/yellowAnt.png | Bin 0 -> 630 bytes ant_example_2_phases/worldExample.py | 17 ++++ 12 files changed, 210 insertions(+), 3 deletions(-) create mode 100644 ant_example_2_phases/antExample.py create mode 100644 ant_example_2_phases/antHillExample.py create mode 100644 ant_example_2_phases/antsLaunchExample.py create mode 100644 ant_example_2_phases/color.py create mode 100644 ant_example_2_phases/controleurAntsExample.py create mode 100644 ant_example_2_phases/images/blackAnt.png create mode 100644 ant_example_2_phases/images/blueAnt.png create mode 100644 ant_example_2_phases/images/greenAnt.png create mode 100644 ant_example_2_phases/images/redAnt.png create mode 100644 ant_example_2_phases/images/yellowAnt.png create mode 100644 ant_example_2_phases/worldExample.py diff --git a/ant_example/antHillExample.py b/ant_example/antHillExample.py index fa66261..99bab66 100644 --- a/ant_example/antHillExample.py +++ b/ant_example/antHillExample.py @@ -13,9 +13,6 @@ class AntHillExample(Amas): super().__init__(env) self.__observer = None - def on_initialization(self): - self._Amas__execution_policy = ExecutionPolicy.TWO_PHASES - def get_Agents_Sorted(self): agents = self.get_agents() agents.sort(key=lambda x: x.get_id()) diff --git a/ant_example_2_phases/antExample.py b/ant_example_2_phases/antExample.py new file mode 100644 index 0000000..112a5c2 --- /dev/null +++ b/ant_example_2_phases/antExample.py @@ -0,0 +1,80 @@ +""" +class antExample +""" +from math import * +from random import randint + +from pyAmakCore.classes.agent import Agent + +from color import Color + + +class AntExample(Agent): + + def __init__(self, + amas: 'antHillExample', + startX: float, + startY: float + ) -> None: + super().__init__(amas) + self._dx = startX + self._dy = startY + self._color = Color.BLACK + self._old_color = Color.BLACK + + 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_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: + self.add_neighbour(agent) + + def on_act(self) -> None: + # couleur + color_changed = False + for agent in self.get_neighbour(): + if agent.get_color() != Color.BLACK: + self._color = agent.get_color() + color_changed = True + + if not color_changed: + color = { + 1: Color.BLUE, + 2: Color.BLACK, + 3: Color.RED, + 4: Color.YELLOW, + 5: Color.GREEN + } + if randint(1, 1000) <= 4: + self._color = color.get(randint(1, 5)) + + # déplacement + 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 + + if self._dy > self.get_environment().ymax: + self._dy = self.get_environment().ymax + + def on_cycle_begin(self): + self._old_color = self._color diff --git a/ant_example_2_phases/antHillExample.py b/ant_example_2_phases/antHillExample.py new file mode 100644 index 0000000..d6e66dd --- /dev/null +++ b/ant_example_2_phases/antHillExample.py @@ -0,0 +1,32 @@ +""" +class antHillExample +""" +from pyAmakCore.enumeration.executionPolicy import ExecutionPolicy + +from antExample import AntExample +from pyAmakCore.classes.amas import Amas + + +class AntHillExample(Amas): + + def __init__(self, env): + super().__init__(env) + self.__observer = None + + def on_initialization(self): + self.set_execution_policy(ExecutionPolicy.TWO_PHASES) + + def get_Agents_Sorted(self): + agents = self.get_agents() + agents.sort(key=lambda x: x.get_id()) + return agents + + def on_initial_agents_creation(self) -> None: + for i in range(50): + self.add_agent(AntExample(self, self.get_environment().xmax/2, self.get_environment().ymax/2)) + + def on_cycle_end(self) -> None: + self.__observer.updateCycle(self.get_environment(), self) + + def attach(self, observer: 'Controleur') -> None: + self.__observer = observer diff --git a/ant_example_2_phases/antsLaunchExample.py b/ant_example_2_phases/antsLaunchExample.py new file mode 100644 index 0000000..34ac9b5 --- /dev/null +++ b/ant_example_2_phases/antsLaunchExample.py @@ -0,0 +1,32 @@ +""" +Class antsLaunchExample +""" +from random import seed + +from pyAmakIHM.classes.fenetre import Fenetre +from controleurAntsExample import ControleurAntsExample +from worldExample import WorldExample +from antHillExample import * +from threading import Thread + +fenetre = Fenetre("Prototype Ants") + +seed() + +env = WorldExample(0, fenetre.get_canvas_width(), 0, fenetre.get_canvas_height(), 5, 7) +amas = AntHillExample(env) + +controleur = ControleurAntsExample(fenetre, amas) + + +def run(): + controleur.get_amas().start() + + +def main(): + controleur.initialisation() + Thread(target=run).start() + controleur.get_fenetre().display() + + +main() diff --git a/ant_example_2_phases/color.py b/ant_example_2_phases/color.py new file mode 100644 index 0000000..939b45f --- /dev/null +++ b/ant_example_2_phases/color.py @@ -0,0 +1,7 @@ +from enum import * +class Color(Enum): + BLACK= auto() + RED=auto() + BLUE=auto() + GREEN=auto() + YELLOW=auto() \ No newline at end of file diff --git a/ant_example_2_phases/controleurAntsExample.py b/ant_example_2_phases/controleurAntsExample.py new file mode 100644 index 0000000..8f3252b --- /dev/null +++ b/ant_example_2_phases/controleurAntsExample.py @@ -0,0 +1,42 @@ +from color import Color +from pyAmakIHM.classes.controleur import Controleur + + +class ControleurAntsExample(Controleur): + + def __init__(self, fenetre, amas): + super().__init__(fenetre, amas) + self.__ants = [] + self.__numberAnts = 50 + + def initialisation(self): + + widthCanvas = self.get_fenetre().get_canvas_width() + heightCanvas = self.get_fenetre().get_canvas_height() + + for i in range(self.__numberAnts): + self.__ants.append(self.draw_image(widthCanvas / 2, heightCanvas / 2, 'images/blackAnt.png')) + + def updateCycle(self, env, amas): + ants = amas.get_Agents_Sorted() + + for i in range(len(ants)): + x = ants[i].get_dx() + y = ants[i].get_dy() + color = ants[i].get_color() + + if color != ants[i].get_old_color(): + self.remove_element(self.__ants[i]) + if color == Color.BLUE: + self.__ants[i] = self.draw_image(x, y, 'images/blueAnt.png') + + elif color == Color.GREEN: + self.__ants[i] = self.draw_image(x, y, 'images/greenAnt.png') + + elif color == Color.RED: + self.__ants[i] = self.draw_image(x, y, 'images/redAnt.png') + + elif color == Color.YELLOW: + self.__ants[i] = self.draw_image(x, y, 'images/yellowAnt.png') + + self.move_image(self.__ants[i], x, y) diff --git a/ant_example_2_phases/images/blackAnt.png b/ant_example_2_phases/images/blackAnt.png new file mode 100644 index 0000000000000000000000000000000000000000..ab4c4d0b27b9e43ed2f26f10d7566526363a59ed GIT binary patch literal 537 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_tsA9%VrhE&A8y>+pxDS?4C zvHE{|-bW_^bC0EU>VJ0KK6>|<q`&Hy88$&|a+*>GlNC00I|w)?u_alEDS4c6;5qKZ z(ka>TFrq`jkl9d%TTmrUp)Fal=?Kq}0v(qLGa4oOS~-M_1rBe-qiJX1gy$xIe=mFT zt$cl7r{-_Hb1zyuJ}rCxLc#dl?$A3`s^P3N51%=2dpcfjeO+9<|LKk42KC=dvy>BW zOwMI`Q+dzzUv8N3r>yApiT*ub4V5kXH`RXmF;TtB?1aa${!_M}&%4cgb5r5;@3S*M z|K7P@QZnUdOR3AG?-P`_`N{46x8+IjHMd7ET6gew-j&!D%+D&Ad_4P)sD7mNhIiE+ p3LC#Q5%d9B-ll^l51kY8KX?>V%jF!*85kHCJYD@<);T3K0RWDp&?Eo= literal 0 HcmV?d00001 diff --git a/ant_example_2_phases/images/blueAnt.png b/ant_example_2_phases/images/blueAnt.png new file mode 100644 index 0000000000000000000000000000000000000000..4605bb5fd406aa8ff24943d60949e67e421871bb GIT binary patch literal 630 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCY&~5ZLn`9lPQRTi9Vl|- z4O5WItzySaeb*%oEWbA%IA-Xe+3<3s>t9caguWBi-#-4ilHPUT^A!``&r>FBbe=Gw zrAJUgdO5G>35mvyg}125br=2g_xSqz_VN4vmNLZs{}z_kbA5OJ;yjO_8_TtxNVIQz zbaDF==N6fyzSGwk|JxYn*Y2OU-1zseO~=#U6|06QhBIzYuzF~J=~{-<yQzhu->z<d z^eg^(tIeby=QDdIe6A}#t@=(o#YFMB@HN{DyV~zKzqa3eefiRPoBp+~$n$uwSko1% zxOXK#rzhL#fccy9q?b>rI>}`&?7?9iB+MCDSRCmzW8y52j;`6Kg%0&xad8T{6EjU9 zZHb!DqDRj*wHPRyP81L|pRU>>xw5lm#g3giif250Ra}mqP325<%TiL*%G2{6;zoUB ZzrDF7_0EAU+zbp144$rjF6*2UngFJh5i<Y) literal 0 HcmV?d00001 diff --git a/ant_example_2_phases/images/greenAnt.png b/ant_example_2_phases/images/greenAnt.png new file mode 100644 index 0000000000000000000000000000000000000000..331944103fbebe237d5f9351bf0b8111aa16b20b GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCtUO&DLn`9lPWR0dP84C8 z{ClH<dMoR9=Cesl6kW8WHK+Q;+`E~za{lUl=Jx0PYnO4@`1@Wq@aL4YX5sWaA<?+8 z@YaNu9zhA|<-AnnR)#3vudDh0_x01~@$3)2=I5s#tJwS7;#HeUYwaqhzQPP`xms^K zmlKN5cGSpzIB)#<+V|I$R-4!BSJynV3wIJN5-s3fCj3u1w^!{+oMd=ne69An|D|y! zluue5Im2!F-h6w^qkT?p!bNt8cbV5#pRnEX&$zla>Xqi}_>Na?U*rxgj}W~y``3gC zDI0jcYQEl9=(TeCngZj-76WC|i2|bL(^Xp}S9Z3n*s)Vb@r;MBip$Znsho*!SxSmp zd3xR)#zDfIfrZ79PBSLX^62QAeOl;H&lMM^kUKHc1k#qM2`zf`Y|~ITs-D3*xg~Y$ Tads011_lOCS3j3^P6<r_c>@0c literal 0 HcmV?d00001 diff --git a/ant_example_2_phases/images/redAnt.png b/ant_example_2_phases/images/redAnt.png new file mode 100644 index 0000000000000000000000000000000000000000..23e635766fc329daa4e828a3e56c8d1159b165f1 GIT binary patch literal 629 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCY&=~YLn`9lPCuI~ohWkT zP4z2J=5^M*OXl4Xev{bPo7@n@a5=eqm#0L+yc6%=p8p&?Uz6#4@MV)T!A{5c9G!%W z+!Au;n5ifxvm85?=}bkgT<D4Q)8Fsk|M$nw>x>nDZ%5BGjC*g_w@cA8asH|a$uhUP z-0x4~7cA<q)Qe~T^ZCr4uYarNoqO~8wA}oi=cfj=#<1RLdfD>dBYH9C&hTTQH^T3C zy{?}t{>j6L&+xO;x!-4Xr|(!l;bO}i|A_AnujPvP*Zw~fH-B2ysbAuYb}8;{|DYMx z`em7&ii)I;bM2{JxpRVEscPTxQBXYN;j7|u^lU0;qFa`dqE?=sH-~YMFlS(4air6X ziL*R9x@MmiI@EK;#VO=Y%rt?tC2B&89zEOCVxVj~Q9#sux@wE$%FdP*J9g>}aifmN ZmmF?MZ8~HzgMop8!PC{xWt~$(69BX+1&{y$ literal 0 HcmV?d00001 diff --git a/ant_example_2_phases/images/yellowAnt.png b/ant_example_2_phases/images/yellowAnt.png new file mode 100644 index 0000000000000000000000000000000000000000..24676979b2ced1242739507a5bd5215d6abf94e1 GIT binary patch literal 630 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCY&~5ZLn`9l&bpX&C_sSq z?Em^Ls;v%N4!LZ+yjJr5l;-rgJEfI(#8mYtZRnY`EK!eBvW!D$(u72ow%*HaDk&0; ziI2A^a!R@-+_1>?aB35jF!Ph9Ou8sc@%rnhyL7hypR%X^ZD5+j`gnQwyAzgd@DDv< z#g}{Z=JqH4Eo+jloxaXhZ*AN^@BR79)AsIv^Ks_yc+SuhaR&r_r2iP__NqOJl&nsi zzfaVB{?`+pweHVC71JkutktY%f1~{V<Eja7e?Rj$uAX9|cw6?G@r7S}m2KC$Z~na- zR32%sxJvrcdjY$nt0vT~<QJO6Gi~9$R9WfeQ>spKnG1Vx7zYV+1{M}aI?b3k%cG-f z_GzI*Jy%?uLhi&&6G&U4Cba0$vrR1q%BB+qM9rtGwn(n*Y+12mr;g$o4__6Rqi0h& n6Wy|u6t(j7yob0^A6c81B&S-bum8Znz`)??>gTe~DWM4fti%O! literal 0 HcmV?d00001 diff --git a/ant_example_2_phases/worldExample.py b/ant_example_2_phases/worldExample.py new file mode 100644 index 0000000..838564c --- /dev/null +++ b/ant_example_2_phases/worldExample.py @@ -0,0 +1,17 @@ +""" +Class worldExample +""" +from pyAmakCore.classes.environment import Environment + + +class WorldExample(Environment): + + def __init__(self, xmin, xmax, ymin, ymax, field_of_view, coef_deplacement): + super().__init__() + self.xmin = xmin + self.xmax = xmax + self.ymin = ymin + self.ymax = ymax + + self.field_of_view = field_of_view + self.coef_deplacement = coef_deplacement -- GitLab