Skip to content
Snippets Groups Projects
Commit 2547401f authored by shined day's avatar shined day
Browse files

Merge branch...

Merge branch '33-amas-when-agent-is-destroyed-it-should-wait-the-end-of-current-cycle' into 'master'

Fix bug 33 : amas-when-agent-is-destroyed-it-should-wait-the-end-of-current-cycle

Closes #33

See merge request be-pyamak/pyamak-noyau!20
parents 67030ad5 850da2ec
No related branches found
No related tags found
No related merge requests found
......@@ -30,6 +30,9 @@ class Amas(Schedulable, Loggable):
Loggable.__init__(self)
self.__environment: Environment = environment
self.__agents: List[Agent] = []
self.__agent_to_add: List[Agent] = []
self.__agent_to_remove: List[Agent] = []
self.__nbrcycle: int = 0
self.__scheduler: Scheduler = Scheduler()
......@@ -40,6 +43,11 @@ class Amas(Schedulable, Loggable):
self.on_initial_agents_creation()
for agent in self.__agent_to_add:
if agent not in self.__agents:
self.__agents.append(agent)
self.__agent_to_add = []
for agent in self.__agents:
agent.compute_criticality()
......@@ -52,9 +60,9 @@ class Amas(Schedulable, Loggable):
"""
add agent in the amas agents list without duplicate
"""
if agent in self.__agents:
if agent in self.__agents or agent in self.__agent_to_add:
return
self.__agents.append(agent)
self.__agent_to_add.append(agent)
def add_agents(self, agents: List[Agent]) -> None:
"""
......@@ -67,9 +75,7 @@ class Amas(Schedulable, Loggable):
"""
remove agent from amas
"""
if agent not in self.__agents:
return
self.__agents.remove(agent)
self.__agent_to_remove.append(agent)
def get_environment(self) -> Environment:
"""
......@@ -120,6 +126,11 @@ class Amas(Schedulable, Loggable):
"""
print("Cycle : ", self.__nbrcycle)
for agent in self.__agent_to_add:
if agent not in self.__agents:
self.__agents.append(agent)
self.__agent_to_add = []
self.on_cycle_begin()
self.synchronization()
......@@ -146,6 +157,12 @@ class Amas(Schedulable, Loggable):
self.synchronization()
self.on_cycle_end()
for agent in self.__agent_to_remove:
if agent in self.__agents:
self.__agents.remove(agent)
self.__agent_to_remove = []
self.to_csv(self.get_cycle(), self.get_agents())
self.__nbrcycle += 1
......
......@@ -8,6 +8,11 @@ from pyAmakCore.classes.amas import Amas
from pyAmakCore.classes.environment import Environment
from pyAmakCore.classes.agent import Agent
class SimplerAmas(Amas):
def synchronization(self):
self._Amas__scheduler.give_amas_token()
super().synchronization()
class TestAmasAgents(TestCase):
"""
......@@ -33,27 +38,31 @@ class TestAmasAgents(TestCase):
"""
environment = Environment()
amas = Amas(environment)
amas = SimplerAmas(environment)
agent1 = Agent(amas)
agent2 = Agent(amas)
agent3 = Agent(amas)
# add 1 agent
amas.add_agent(agent1)
amas.cycle()
self.assertEqual(amas.get_agents(), [agent1])
# don't remove previous agent
amas.add_agent(agent2)
amas.cycle()
self.assertEqual(amas.get_agents(), [agent1, agent2])
# add agent in good order
amas.add_agent(agent3)
amas.cycle()
self.assertEqual(amas.get_agents(), [agent1, agent2, agent3])
# don't add duplicate
amas.add_agent(agent1)
amas.add_agent(agent2)
amas.add_agent(agent3)
amas.cycle()
self.assertEqual(amas.get_agents(), [agent1, agent2, agent3])
def test_add_agents(self) -> None:
......@@ -62,7 +71,7 @@ class TestAmasAgents(TestCase):
"""
environment = Environment()
amas = Amas(environment)
amas = SimplerAmas(environment)
agent1 = Agent(amas)
agent2 = Agent(amas)
......@@ -71,36 +80,43 @@ class TestAmasAgents(TestCase):
agent5 = Agent(amas)
amas.add_agents([agent1, agent2, agent3, agent4, agent5])
amas.cycle()
self.assertEqual(amas.get_agents(), [agent1, agent2, agent3, agent4, agent5])
amas = Amas(environment)
amas = SimplerAmas(environment)
amas.add_agents([agent1, agent2])
amas.cycle()
self.assertEqual(amas.get_agents(), [agent1, agent2])
amas.add_agents([agent1, agent2, agent4, agent2, agent3])
amas.cycle()
self.assertEqual(amas.get_agents(), [agent1, agent2, agent4, agent3])
def test_remove_agent(self) -> None:
environment = Environment()
amas = Amas(environment)
amas = SimplerAmas(environment)
agent1 = Agent(amas)
agent2 = Agent(amas)
agent3 = Agent(amas)
amas.remove_agent(agent2)
amas.cycle()
self.assertEqual(amas.get_agents(), [])
amas.add_agents([agent1, agent2, agent3])
amas.remove_agent(agent2)
amas.cycle()
self.assertEqual(amas.get_agents(), [agent1, agent3])
amas.remove_agent(agent2)
amas.cycle()
self.assertEqual(amas.get_agents(), [agent1, agent3])
amas.remove_agent(agent1)
amas.remove_agent(agent3)
amas.cycle()
self.assertEqual(amas.get_agents(), [])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment