Blame view

src/agent/AgentB.py 4.43 KB
c84ca326   Etienne Pallier   Multi-agents (3 a...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python3


import sys
##import utils.Logger as L

##from .Agent import Agent
from Agent import Agent


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



class AgentB(Agent):

    # FOR TEST ONLY
    # Run this agent in simulator mode
    SIMULATOR_MODE = True
    # Run the assertion tests at the end
    SIMULATOR_WITH_TEST = False
    # Who should I send commands to ?
    #SIMULATOR_COMMANDS_DEST = "myself"
1c18151d   Etienne Pallier   Multi-agents : Ag...
24
    SIMULATOR_COMMANDS_DEST = "AgentA"
c84ca326   Etienne Pallier   Multi-agents (3 a...
25
    # Scenario to be executed
7d679ea0   Etienne Pallier   Commande EVAL ok
26
    SIMULATOR_COMMANDS = [
c84ca326   Etienne Pallier   Multi-agents (3 a...
27
28
        "go_active",
        "go_idle",
7d679ea0   Etienne Pallier   Commande EVAL ok
29
30
    ]
    """
c84ca326   Etienne Pallier   Multi-agents (3 a...
31
32
33
34
35
36
37
        "go_active",
        "abort",
        "abort",
        "go_active",
        "go_idle",
        "exit",
    ]
1c18151d   Etienne Pallier   Multi-agents : Ag...
38
    """
c84ca326   Etienne Pallier   Multi-agents (3 a...
39
40
41
42
43
44
45
46
47
48
49
50
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


    """
    =================================================================
        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
129
    """
c84ca326   Etienne Pallier   Multi-agents (3 a...
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
    # @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
145
        ### autre scenario
c84ca326   Etienne Pallier   Multi-agents (3 a...
146
147
148
149
150
        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
151
152
153
        ###
    """
    
c84ca326   Etienne Pallier   Multi-agents (3 a...
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
    '''
    # @override
    def exec_specific_cmd_end(self, cmd:Command, from_thread=True):
        super().exec_specific_cmd_end(cmd, from_thread)
    '''



if __name__ == "__main__":

    # with thread
    #RUN_IN_THREAD=True
    # with process
    RUN_IN_THREAD=False

    configfile = None

    # arg 1 : config file
    if len(sys.argv) == 2:
        configfile = sys.argv[1]

    #agent = AgentX()
    agent = AgentB("AgentB", configfile, RUN_IN_THREAD)
    print(agent)
    agent.run()