Blame view

src/core/pyros_django/agent/AgentB.py 5.15 KB
c84ca326   Etienne Pallier   Multi-agents (3 a...
1
2
3
4
5
6
#!/usr/bin/env python3


import sys
##import utils.Logger as L

5fd52e37   Etienne Pallier   bugfix import Age...
7
8
sys.path.append("..")
from agent.Agent import Agent, extract_parameters
c84ca326   Etienne Pallier   Multi-agents (3 a...
9
10
11
12
13
14
15
16


##log = L.setupLogger("AgentXTaskLogger", "AgentX")



class AgentB(Agent):

c84ca326   Etienne Pallier   Multi-agents (3 a...
17
18
    # FOR TEST ONLY
    # Run this agent in simulator mode
afafd36f   Etienne Pallier   Début de pyros sh...
19
    SIMULATOR_MODE = False
c84ca326   Etienne Pallier   Multi-agents (3 a...
20
    # Run the assertion tests at the end
31e31f3b   Etienne Pallier   pyros.py peut lan...
21
    SIMULATOR_WITH_TEST = True
c7318a4a   Etienne Pallier   Nouveau mode test...
22
23
    #SIMULATOR_MAX_DURATION_SEC = None
    SIMULATOR_MAX_DURATION_SEC = 120
c84ca326   Etienne Pallier   Multi-agents (3 a...
24
25
    # Who should I send commands to ?
    #SIMULATOR_COMMANDS_DEST = "myself"
1c18151d   Etienne Pallier   Multi-agents : Ag...
26
    SIMULATOR_COMMANDS_DEST = "AgentA"
c84ca326   Etienne Pallier   Multi-agents (3 a...
27
    # Scenario to be executed
31e31f3b   Etienne Pallier   pyros.py peut lan...
28
    SIMULATOR_COMMANDS_LIST = [
db13d8ac   Etienne Pallier   updates: go_idle ...
29
        "flush_commands",
c84ca326   Etienne Pallier   Multi-agents (3 a...
30
        "go_active",
db13d8ac   Etienne Pallier   updates: go_idle ...
31

3a46366b   Etienne Pallier   Ajout infos préci...
32
33
        # Because of this command, the recipient agent
        # should no more send any new specific command
db13d8ac   Etienne Pallier   updates: go_idle ...
34
35
        "go_idle",
        "go_idle",
c84ca326   Etienne Pallier   Multi-agents (3 a...
36
        "go_idle",
db13d8ac   Etienne Pallier   updates: go_idle ...
37
38
39
40

        # Because of this command, the receiver agent
        # will now be able to send new commands
        "go_active",
7d679ea0   Etienne Pallier   Commande EVAL ok
41
42
    ]
    """
c84ca326   Etienne Pallier   Multi-agents (3 a...
43
44
45
46
47
48
49
        "go_active",
        "abort",
        "abort",
        "go_active",
        "go_idle",
        "exit",
    ]
1c18151d   Etienne Pallier   Multi-agents : Ag...
50
    """
c84ca326   Etienne Pallier   Multi-agents (3 a...
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140


    """
    =================================================================
        FUNCTIONS RUN INSIDE MAIN THREAD
    =================================================================
    """

    # @override
    def __init__(self, name:str=None, config_filename=None, RUN_IN_THREAD=True):
        if name is None: name = self.__class__.__name__
        super().__init__(name, config_filename, RUN_IN_THREAD)

    # @override
    def init(self):
        super().init()
        # --- Set the mode according the startmode value
        ##agent_alias = self.__class__.__name__
        ##self.set_mode_from_config(agent_alias)

    '''
    # @override
    def load_config(self):
        super().load_config()
    '''

    '''
    # @override
    def update_survey(self):
        super().update_survey()
    '''

    '''
    # @override
    def get_next_command(self):
        return super().get_next_command()
    '''

    # @override
    def do_log(self):
        super().do_log()



    """
    =================================================================
        FUNCTIONS RUN INSIDE A SUB-THREAD (OR A PROCESS) (thread_*())
    =================================================================
    """

    # Define your own command step(s) here
    def cmd_step1(self, step:int):
        cmd = self._current_specific_cmd
        cmd.result = f"in step #{step}/{self._thread_total_steps_number}"
        cmd.save()
        """
        if self.RUN_IN_THREAD:
            print("(save from thread)")
            cmd.save()
        else:
            #@transaction.atomic
            print("(save from process)")
            with transaction.atomic():
                cmd.save()
                #Command.objects.select_for_update()
        """

    def cmd_step2(self, step:int):
        self.cmd_step1(step)
    def cmd_step3(self, step:int):
        self.cmd_step1(step)
    def cmd_step4(self, step:int):
        self.cmd_step1(step)

    """
    # @override
    def thread_exec_specific_cmd_step(self, step:int, sleep_time:float=1.0):
        self.thread_stop_if_asked()
        cmd = self._current_specific_cmd
        print(f">>>>> Thread (cmd {cmd.name}): step #{step}/5")
        self.sleep(sleep_time)
    """

    '''
    # @override
    def exec_specific_cmd_start(self, cmd:Command, from_thread=True):
        super().exec_specific_cmd_start(cmd, from_thread)
    '''


7d679ea0   Etienne Pallier   Commande EVAL ok
141
    """
c84ca326   Etienne Pallier   Multi-agents (3 a...
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
    # @override
    def thread_exec_specific_cmd_main(self):
        # This is optional
        self.thread_set_total_steps_number(5)

        # HERE, write your own scenario

        # scenario OK
        self.thread_exec_specific_cmd_step(1, self.cmd_step1, 1)
        self.thread_exec_specific_cmd_step(2, self.cmd_step2, 3)
        self.thread_exec_specific_cmd_step(3, self.cmd_step1, 5)
        self.thread_exec_specific_cmd_step(4, self.cmd_step3, 10)
        self.thread_exec_specific_cmd_step(5, self.cmd_step1, 4)
        # ... as many as you need

7d679ea0   Etienne Pallier   Commande EVAL ok
157
        ### autre scenario
c84ca326   Etienne Pallier   Multi-agents (3 a...
158
159
160
161
162
        self.thread_exec_specific_cmd_step(1, self.cmd_step1, 1)
        self.thread_exec_specific_cmd_step(2, self.cmd_step2, 2)
        self.thread_exec_specific_cmd_step(3, self.cmd_step1, 2)
        self.thread_exec_specific_cmd_step(4, self.cmd_step3, 2)
        self.thread_exec_specific_cmd_step(5, self.cmd_step1, 3)
7d679ea0   Etienne Pallier   Commande EVAL ok
163
164
        ###
    """
31e31f3b   Etienne Pallier   pyros.py peut lan...
165

c84ca326   Etienne Pallier   Multi-agents (3 a...
166
167
168
169
170
171
    '''
    # @override
    def exec_specific_cmd_end(self, cmd:Command, from_thread=True):
        super().exec_specific_cmd_end(cmd, from_thread)
    '''

454ecf1f   Etienne Pallier   bugfix flush_comm...
172
    """
31e31f3b   Etienne Pallier   pyros.py peut lan...
173
    # @override
454ecf1f   Etienne Pallier   bugfix flush_comm...
174
    def simulator_test_results_main(self, commands):
31e31f3b   Etienne Pallier   pyros.py peut lan...
175
176
177
178
        nb_asserted = 0
        for cmd in commands:
            assert cmd.is_executed()
            nb_asserted+=1
454ecf1f   Etienne Pallier   bugfix flush_comm...
179
180
        return nb_asserted
    """
31e31f3b   Etienne Pallier   pyros.py peut lan...
181
182
183
184
185
186

"""
=================================================================
    MAIN FUNCTION
=================================================================
"""
c84ca326   Etienne Pallier   Multi-agents (3 a...
187
188
189
if __name__ == "__main__":

    # with thread
c7318a4a   Etienne Pallier   Nouveau mode test...
190
    RUN_IN_THREAD=True
c84ca326   Etienne Pallier   Multi-agents (3 a...
191
    # with process
c7318a4a   Etienne Pallier   Nouveau mode test...
192
    #RUN_IN_THREAD=False
c84ca326   Etienne Pallier   Multi-agents (3 a...
193

c7318a4a   Etienne Pallier   Nouveau mode test...
194
    TEST_MODE, configfile = extract_parameters()
c84ca326   Etienne Pallier   Multi-agents (3 a...
195
    agent = AgentB("AgentB", configfile, RUN_IN_THREAD)
c7318a4a   Etienne Pallier   Nouveau mode test...
196
    agent.setSimulatorMode(TEST_MODE)
c84ca326   Etienne Pallier   Multi-agents (3 a...
197
198
    print(agent)
    agent.run()