elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python] Diagramación de una máquina de estados fintios (FSM)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Diagramación de una máquina de estados fintios (FSM)  (Leído 3,737 veces)
eenube

Desconectado Desconectado

Mensajes: 2



Ver Perfil WWW
[Python] Diagramación de una máquina de estados fintios (FSM)
« en: 15 Marzo 2016, 01:36 am »

Hola a todos, buenas tardes. Hoy quiero compartir con ustedes un script que crea diagramaciónes de autómoatas de estados finitos en Python. Espero les guste!
# -*- coding:utf-8 -*-
# Author: Jesús Mager
# GPL v.3+
# 2015

import graphviz as gv

# Todos los parámetros son listas o tuplas
# donde:
#  * alfabeto:  es el alfabeto aceptado por el
#               autómata.
#  * estados:   es una lista de estados aceptados
#               por el autómata.
#  * inicio:    Son los estados de inicio del fsm.
#  * trans:     Es una tupla de funciones de transición
#               con tres elementos que son: (a,b,c) donde
#               (a,b) son los estados de partida y llegada;
#               mientras que c es la letra que acepta.
#  * final      Son los estados finales del autómata.

def draw(alfabeto, estados, inicio, trans, final):
    print("inicio:", str(inicio))
    g = gv.Digraph(format='svg')
    g.graph_attr['rankdir'] = 'LR'
    g.node('ini', shape="point")
    for e in estados:
        if e in final:
            g.node(e, shape="doublecircle")
        else:
            g.node(e)
        if e in inicio:
            g.edge('ini',e)

    for t in trans:
        if t[2] not in alfabeto:
            return 0
        g.edge(t[0], t[1], label=str(t[2]))
    g.render(view=True)

# Ejemplo de uso

if __name__ == '__main__':
    estados = ["A","B","C","E","F"]
    trans = [("A","B", 1),("A","E",0),("A","E",1),("A","A",1),("A","D",1),("F","F",1),("D","C",1),("B","A",0), ("E","C",0),("F","D",0), ("C","A",0), ("B","B", 1)]
    inicial = ["A"]
    alf = [0,1]
    terminal = ("C",)

http://eenube.com/index.php/ldp/python/45-como-graficar-automatas-de-estado-finito-fsm-en-python


En línea

Mi blog de programación, software libre, matemáticas y diseño gráfico libre. Espero les guste.
http://eenube.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Que es un ordenador? ¿Una máquina de estados finitos o infinitos?
Electrónica
Shrick 9 7,930 Último mensaje 16 Agosto 2009, 03:00 am
por -Gosw-
publico lector de archivos con maquina de estados.
PHP
bomba1990 5 2,591 Último mensaje 2 Abril 2010, 20:40 pm
por bomba1990
[Python] ¿Por qué Python 2.7.3 admite la sintaxis de Python 3? « 1 2 »
Scripting
Yidu 10 10,529 Último mensaje 10 Febrero 2013, 21:46 pm
por Eleкtro
Pasar maquina real a maquina virtual
Windows
diego2188 5 8,387 Último mensaje 28 Noviembre 2013, 03:02 am
por Saberuneko
[Python/Tkinter](Kyurem v2.0)Consola de comandos hecha en python (Continuación)
Scripting
Príncipe_Azul 5 4,911 Último mensaje 16 Abril 2014, 11:19 am
por AdeLax
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines