Exemplo n.º 1
0
class FSM(AbstractBehaviour):
    def __init__(self,
                 states=[],
                 transitions=[],
                 initial='',
                 graph=False,
                 title=''):
        AbstractBehaviour.__init__(self)
        threading.Thread.__init__(self)
        self.setDaemon(False)
        self.my_owner = None
        self._force_kill = threading.Event()
        self.name = self.__class__.__name__
        self._exit_code = 0
        self._states = states
        self._transitions = transitions
        if not graph:
            self._fsm = Machine(model=self,
                                states=states,
                                transitions=transitions,
                                initial=initial)
        else:
            self._fsm = GraphMachine(model=self,
                                     states=states,
                                     transitions=transitions,
                                     initial=initial,
                                     title='title',
                                     show_conditions=True)

        logging.info('Behavior -FSM.{}- created successfully!'.format(
            self.__class__.__name__))
        self.fsmActive = True

    #Report fsm stares and transitions
    def fsm_configuration(self):
        print(self._states)
        print(self._transitions)

    #Return actual state and action of the fsm
    def fsm_action(self):
        return self.state

    def _behave(self):
        self.fsm_action()
        return self._exit_code

    def done(self):
        if self.fsmActive is True:
            self.fsmActive = False
            return False
        return True

    def add_transition(self):
        pass

    #Add one or more states to fsm and return the new list of states
    def add_states(self, states):
        self._fsm.add_states(states)
        return self._fsm.states

    def remove_transition(self):
        pass

    def remove_states(self):
        pass

    def graph(self):
        pass

    # Define order on automatic transitions
    def ordered_transitions(self, ordered_transitions=[]):
        if ordered_transitions:
            self._fsm.add_ordered_transitions(ordered_transitions)
        else:
            self._fsm.add_ordered_transitions()

    # Make transitions between states automatically every so often
    def run_with_timer(self, timeTransition=0, timeRunning=0):
        initial_time = time.time()
        total_time = 0
        while total_time < timeRunning:
            if time.time() - initial_time > timeTransition:
                self.next_state()
                print(self.state)
                initial_time = time.time()
                total_time += timeTransition

    # The agent percieve keyboar input until end string is send
    def perceive_text_input(self):
        txt_input = open("reflex_agents_input.txt", "r")
        for line in txt_input:
            line = line.strip()
            print(line)
            eval(line)
Exemplo n.º 2
0
                  states=states,
                  transitions=transitions,
                  initial="first")

# method to do transition
print(life_bot.state)

life_bot.go_to_second()
life_bot.go_to_third()

print(life_bot.state)

life_bot.to_first()
print(life_bot.state)

life_bot.trigger("go_to_second")
print(life_bot.state)
life_bot.trigger("go_to_third")
print(life_bot.state)

machine.set_state("first")
print(life_bot.state)

# add state and transitions
machine.add_state("red")
machine.add_states(["green", "blue"])

# alternate machine.add_transition(trigger= ?, source=?, dest=?)
# machine.add_transition("r_to_b", "red", "blue")
machine.add_transition("other_to_r", ["blue", "green"], "red")