jueves, 9 de febrero de 2012

[MODELADO Y SIMULACIÓN] Sistemas deterministas

Un sistema determinista es aquel que si se conoce su comportamiento y que cambios o acciones conllevan a un estado, se sabrá cuales serán sus futuros estados.

Ésto es que si despues de un determinado tiempo o mediante las acciones del entorno un objeto cambia de estado, este es determinista, siempre y cuando sus tareas se hayan cumplido.

Desde mi punto de vista cualquier cosa que esté hecha para seguir una serie de reglas es un sistema determinista, así sea un foco o bien un sistema más complejo como un circuito que haga determinada tarea.

Un ejemplo sería un cruce peatonal con semáforos para peatones.

Algunos cruces peatonales tienen estos semáforos con un botón para pasar. Éstos están programados para cambiar cada cierto tiempo, o bien, cambian dependiendo de cuantas veces se pulsó el botón de cruce.


Es determinista porque si dado el tiempo determinado nadie oprime el botón, este cambiara a verde para los peatones y rojo para el tráfico. Además e que si el botón es oprimido un número dado de veces, este cambiara a verde en un tiempo determinado, o bien si el tiempo dado se termina.


Si bien, el número de personas es una variable aleatoria, el semaforo está listo para cambiar ante un número definido de pulsaciones del botón. Quiere decir que su tarea no se ve afectada por esta variable, su estado cambiara ante el tiempo determinado sin fijarse en que momento llegan las personas ni el orden en que llegaron. Es solo una condicion que le da preferencia a un numero dado de personas o mayor a éste.



Como se ve en las imágenes anteriores, iniciando con el rojo, se dará un tiempo determinado dependiendo de las veces que se pulsó el botón, o bien este sera el tiempo total por defecto, y cambiara su estado a verde.

El siguiente pseudocódigo dará una idea de la forma que funcionan:

estado = verde
tiempo = 1 minuto

def cronometro():
    while x = true:
        tiempo -= 1 segundo
        if tiempo == 1 minuto:
            x = false
            return false

def semaforo():
    if cronometro == false:
        estado = rojo
    elif boton() == false:
        if tiempo <= 45 segudos:
            estado = rojo
        else:
            tiempo -= 45 segundos

def boton():
    while x = true:
        if se presiona boton:
            contador += 1
        if contador == 10:
            x = false
            return false

while true:
    semaforo()

Éste es el diagrama de estados ligeramente distinto al pseudocódigo para verse más simple:


3 comentarios: