Blame view

src/core/pyros_django/agent/AgentB.py 5.16 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
sys.path.append("..")
71b8533d   Etienne Pallier   update agentA, ag...
8
from agent.Agent import Agent, build_agent
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
71b8533d   Etienne Pallier   update agentA, ag...
19
    TEST_MODE = False
c84ca326   Etienne Pallier   Multi-agents (3 a...
20
    # Run the assertion tests at the end
71b8533d   Etienne Pallier   update agentA, ag...
21
22
23
    TEST_WITH_FINAL_TEST = True
    #TEST_MAX_DURATION_SEC = None
    TEST_MAX_DURATION_SEC = 120
c84ca326   Etienne Pallier   Multi-agents (3 a...
24
    # Who should I send commands to ?
71b8533d   Etienne Pallier   update agentA, ag...
25
26
    #TEST_COMMANDS_DEST = "myself"
    TEST_COMMANDS_DEST = "AgentA"
c84ca326   Etienne Pallier   Multi-agents (3 a...
27
    # Scenario to be executed
71b8533d   Etienne Pallier   update agentA, ag...
28
    TEST_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


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

    # @override
71b8533d   Etienne Pallier   update agentA, ag...
60
61
62
    def __init__(self, config_filename=None, RUN_IN_THREAD=True):
        super().__init__(config_filename, RUN_IN_THREAD)
        self._log.print("init done")        
c84ca326   Etienne Pallier   Multi-agents (3 a...
63
64

    # @override
8902a770   Etienne Pallier   ctrl-c available ...
65
66
    def _init(self):
        super()._init()
c84ca326   Etienne Pallier   Multi-agents (3 a...
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
        # --- 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

71b8533d   Etienne Pallier   update agentA, ag...
194
195
    agent = build_agent(AgentB, RUN_IN_THREAD=RUN_IN_THREAD)
    '''
c7318a4a   Etienne Pallier   Nouveau mode test...
196
    TEST_MODE, configfile = extract_parameters()
c84ca326   Etienne Pallier   Multi-agents (3 a...
197
    agent = AgentB("AgentB", configfile, RUN_IN_THREAD)
c7318a4a   Etienne Pallier   Nouveau mode test...
198
    agent.setSimulatorMode(TEST_MODE)
c84ca326   Etienne Pallier   Multi-agents (3 a...
199
    print(agent)
71b8533d   Etienne Pallier   update agentA, ag...
200
    '''
c84ca326   Etienne Pallier   Multi-agents (3 a...
201
    agent.run()