(Maybe off topic) Can someone explain what a finite state machine is?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Wed Jul 20 09:29:48 CEST 2011


On Tue, 19 Jul 2011 11:32 pm Matty Sarro wrote:

> Hey everyone. I am currently reading through an RFC, and it mentions
> that a client and server half of a transaction are embodied by finite
> state machines. I am reading through the wikipedia article for finite
> state machines, and sadly it's going a bit above my head. I don't
> really have a background in engineering, and would really love to
> understand what is being said. Does anyone have a simple way to
> explain it?

Consider a heater with a thermostat. That's a finite state machine. It's a
machine, it has a finite number of states, namely, the combinations of
these:

"on" or "off"
"too warm", "too cold" or "in-between"

The machine has transitions between states:

"if too warm, then turn off"
"if too cold, then turn on"
"if in-between, then don't change"


Here's one way to simulate such a simple FSM in Python:


import time

class Heater:
    low = 0
    high = 10
    def __init__(self, starting_temperature=7):
        self.temp = starting_temperature
        self.state = "off"
    def run(self):
        while True:
            if self.state == "on":
                # Heating.
                self.temp += 1
            if self.state == "off":
                # Slowly cooling.
                self.temp -= 1
            if self.temp < self.low:
                print("turning on")
                self.state = "on"
            if self.temp > self.high:
                print("turning off")
                self.state = "off"
            time.sleep(1)



>>> heater = Heater()
>>> heater.run()
turning on
turning off
turning on
turning off
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 9, in run
KeyboardInterrupt



More complex finite state machines can have many different states, and much
more complicated behaviour.


-- 
Steven




More information about the Python-list mailing list