Snej69420 4 月之前
父節點
當前提交
2c0e9af1c5

+ 1 - 1
Flocking/PyPDEVS/benchmark_flocking.py

@@ -90,7 +90,7 @@ def verify_flocking():
 setup = ("from Flocking import Flocking\n"
 setup = ("from Flocking import Flocking\n"
          "from benchmark_flocking import runthemodel")
          "from benchmark_flocking import runthemodel")
 
 
-n_run = 25
+n_run = 100
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
     parser = argparse.ArgumentParser()
     parser = argparse.ArgumentParser()

+ 4 - 1
WolfSheep/PyPDEVS/Animal.py

@@ -50,7 +50,8 @@ class Animal(AtomicDEVS):
     def extTransition(self, inputs):
     def extTransition(self, inputs):
         """Reacts to the Environment's resolution of the turn."""
         """Reacts to the Environment's resolution of the turn."""
         if self.in_response in inputs:
         if self.in_response in inputs:
-            ate_successfully = inputs[self.in_response][0]
+            eaters_list = inputs[self.in_response][0]
+            ate_successfully = self.state.aid in eaters_list
 
 
             self.state.pos = self.state.target_pos
             self.state.pos = self.state.target_pos
             self.state.target_pos = None
             self.state.target_pos = None
@@ -65,6 +66,8 @@ class Animal(AtomicDEVS):
             else:
             else:
                 self.state.phase = Phase.ALIVE
                 self.state.phase = Phase.ALIVE
 
 
+        return self.state
+
     def intTransition(self):
     def intTransition(self):
         if self.state.phase == Phase.JUST_BORN:
         if self.state.phase == Phase.JUST_BORN:
             self.state.phase = Phase.ALIVE
             self.state.phase = Phase.ALIVE

+ 2 - 5
WolfSheep/PyPDEVS/Environment.py

@@ -45,7 +45,7 @@ class Environment(AtomicDEVS):
         self.sheep_move = self.addInPort("Sheep Move")
         self.sheep_move = self.addInPort("Sheep Move")
         self.wolf_move = self.addInPort("Wolf Move")
         self.wolf_move = self.addInPort("Wolf Move")
 
 
-        self.animal_ports = {}
+        self.out_broadcast = self.addOutPort("Animal Broadcast")
 
 
     def extTransition(self, inputs):
     def extTransition(self, inputs):
         if self.animal_born in inputs:
         if self.animal_born in inputs:
@@ -81,10 +81,7 @@ class Environment(AtomicDEVS):
     def outputFnc(self):
     def outputFnc(self):
         out_bag = {}
         out_bag = {}
         if self.state.phase == Phase.RESOLVING:
         if self.state.phase == Phase.RESOLVING:
-            for aid in self.state.animal_positions:
-                port = self.animal_ports.get(aid)
-                if port:
-                    out_bag[port] = [aid in self.state.successful_eaters]
+            out_bag[self.out_broadcast] = [self.state.successful_eaters]
         return out_bag
         return out_bag
 
 
     def modelTransition(self, state):
     def modelTransition(self, state):

+ 1 - 8
WolfSheep/PyPDEVS/WolfSheep.py

@@ -48,10 +48,7 @@ class WolfSheepEcosystem(CoupledDEVS):
         self.connectPorts(agent.out_born, self.environment.animal_born)
         self.connectPorts(agent.out_born, self.environment.animal_born)
         self.connectPorts(agent.out_died, self.environment.animal_died)
         self.connectPorts(agent.out_died, self.environment.animal_died)
 
 
-        out_port = self.environment.addOutPort(f"out_animal_{aid}")
-        self.environment.animal_ports[aid] = out_port
-        self.connectPorts(out_port, agent.in_response)
-
+        self.connectPorts(self.environment.out_broadcast, agent.in_response)
         self.agents[aid] = agent
         self.agents[aid] = agent
 
 
     def modelTransition(self, state):
     def modelTransition(self, state):
@@ -59,10 +56,6 @@ class WolfSheepEcosystem(CoupledDEVS):
             for aid in state["Dead"]:
             for aid in state["Dead"]:
                 if aid in self.agents:
                 if aid in self.agents:
                     agent = self.agents.pop(aid)
                     agent = self.agents.pop(aid)
-                    # if aid in self.environment.animal_ports:
-                    #     env_port = self.environment.animal_ports.pop(aid)
-                    #     # self.disconnectPorts(env_port, agent.in_response)
-                    #     # self.environment.removePort(env_port)
                     self.removeSubModel(agent)
                     self.removeSubModel(agent)
             state["Dead"] = []
             state["Dead"] = []
 
 

+ 1 - 1
WolfSheep/PyPDEVS/benchmark_wolfsheep.py

@@ -25,7 +25,7 @@ def runthemodel(seed: int, dimensions: tuple[int, int], sheep: int, wolves: int,
 setup = ("from WolfSheep import WolfSheepEcosystem\n"
 setup = ("from WolfSheep import WolfSheepEcosystem\n"
          "from benchmark_wolfsheep import runthemodel")
          "from benchmark_wolfsheep import runthemodel")
 
 
-n_run = 10
+n_run = 100
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
     # import cProfile
     # import cProfile