123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import random
-
- from synergine2.config import Config
- from synergine2.share import shared
- from synergine2.simulation import SubjectMechanism, SubjectBehaviour, Event, Subject
-
-
- def compute(complexity: int):
- random_floats = []
- result = 0.0
-
- for i in range(complexity):
- random_floats.append(random.uniform(0, 100))
-
- for j, random_float in enumerate(random_floats):
- if not j % 2:
- result += random_float
- else:
- result -= random_float
-
- return result
-
-
- class ComputeMechanism(SubjectMechanism):
- def run(self):
- complexity = self.config.get('complexity')
- value = compute(complexity)
-
- return {
- 'mechanism_value': value,
- 'complexity': complexity,
- }
-
-
- class ComplexityEvent(Event):
- def __init__(self, complexity, *args, **kwargs):
- self.complexity = complexity
-
-
- class ComputeBehaviour(SubjectBehaviour):
- use = [ComputeMechanism]
-
- def run(self, data):
- return not data.get('ComputeMechanism').get('mechanism_value') % 2
-
- def action(self, data):
- mechanism_value = data.get('ComputeMechanism').get('mechanism_value')
- complexity = data.get('ComputeMechanism').get('complexity')
-
- if not int(str(mechanism_value)[-1]) % 2:
- compute(complexity)
-
- return [Event(complexity)]
-
-
- class ComputeSubject(Subject):
- behaviours_classes = [ComputeBehaviour]
- data = shared.create_self('data', lambda: [])
-
- def __init__(
- self,
- config: Config,
- simulation: 'Simulation',
- ):
- super().__init__(config, simulation)
|