Mostrando entradas con la etiqueta Modelado y simulación de Sistemas dinámicos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Modelado y simulación de Sistemas dinámicos. Mostrar todas las entradas

lunes, 28 de mayo de 2012

Simulación de ambientes urbanos

La importancia

Podemos decir que en una ciudad, el número de grandes subterráneos y nuevos rascacielos han ido aumentando rápidamente en los últimos años, por lo que este tipo de instalaciones presentan trayectorias complejas, por ejemplo en el flujo de aire o en los rayos solares, muchos de los cuales afectan considerablemente en las áreas de la actividad humana y las rutas de evacuación, por lo que existen riesgos crecientes de que las diversas condiciones que cambian a través de los años, así como prevención de desastres que se pueden agravar si hay un desastre mayor en caso de un incendio o terrorismo bioquímico, debido a que la complejidad de las trayectorias de flujo de aire no son lineales.

Simulación de radiofrecuencias en ambientes urbanos, observando el flujo de aire,
el cual es no lineal en este tipo de ambientes. 


Con el fin de prevenir o reducir al mínimo esta catástrofe, los sistemas de prevención de desastres deben de ser instaladas correctamente con una consideración previa teniendo fiabilidad y robustez, por lo que es esencial para desarrollar un simulador de ambientes urbanos permitiendo una predicción exacta y la evaluación de medios ambientes en conjunto con la seguridad.


Por ejemplo, podemos decir que si tenemos una base de datos para describir los complejos subterráneos y edificios, llamados edificios virtuales, podemos hacer objeto de modificación mediante funciones y datos de salida para desarrollar un edificio virtual con sistemas de diseño eficiente para el medio ambiente, seguridad con la creación de sistemas de gestión de energia, modelos de simulación de construcción de aire acondicionado, dinámica de fluidos computacional, incendios y evacuación de este, a medida de que en la población se le presta atención a un ambiente urbano más verde, existe la necesidad de que tengamos simulaciones de medios ambientes para la planifiación empresarial, paisajes urbanos completos y los efectos solares teniendo una repercución a los seres humanos.

¿Qué tipo de simulaciones se pueden desarrollar?

Las simulaciones de ambientes urbanos que podemos encontrar utilizan para su buen funcionamiento y resultados óptimos modelación de diferentes aspectos urbanos, entre los cuales podemos nombrar:


  • Flujos de aire en situaciones de emergencia.
  • Transporte de sustancias peligrosas
  • Crecimiento del fuego
  • Evaluación de una actividad de subterráneos
  • Actividades de edificios.
  • Efectos solares
  • Energía eléctrica de edificios.
  • Impacto ambiental
  • Impacto visual

Midtown Zoning, desarrollado por simcenter para planificar un rascacielos en Nueva York 

Simulación de edificios solares desarrollado por Solarlux

Las herramientas


Existen herramientas que podemos utilizar nosotros como desarrolladores de software para implementar simulaciones de ambientes urbanos, solo para mencionar algunos:

Simulación de ecosistemas.

La importancia

La simulación de ecosistemas y modelaciones ecológicas son campos que están creciendo, teniendo diferentes aplicaciónes entre la ecología teórica, las matemáticas y la computación, las simulaciones de ecosistemas tienen como objetivo de modelar la dinámica de los ecosistemas principales con el fin de sintetizar la comprensión de estos sistemas, para poder permitir predicciones de como va a cambiar su comportamiento en un futuro.

Arbol de la vida generado por simulación de EcoSim


Debido a que los ecosistemas naturales son muy complejos, por ejemplo en cuanto a el número de especies de un cierto animal o interacciones ecológicas, los modelos de ecosistemas suelen simplificar los sistemas con un número limitado de componentes, permitiendo el desarrollo de simulaciones por computadora de estos ecosistemas.

Uno de los principales intereses de las simulaciones de ecosistemas es que ofrecen una visión global de la evolución de un sistema, lo cual es difícil de observar en la naturaleza, sin embargo, el alcance de las simulaciones de ecosistemas siempre ha sido limitado por las posibilidades de cálculo, hoy en dia es posible hacer simulaciones mucho más complejas.

En el área de simulación de ecosistemas, proporciona un enfoque a las características y el comportamiento de organismos individuales, se trata de modelar individuos como entidades singulares y discretos, por lo que los organismos con diferentes características ya sea la edad, sexuales y su papel en el ecosistema y las propiedades de este representan los individuos, para observar un mecanismo evolutivo, aunque muchas veces estos son muy simples o limitaciones como que los individuos no se mueven o limitados en número.

Existen modelos como Polyworld que han propuesto agentes complejos y modelos de comportamiento usando redes neuronales artificiales y sistemas de reglas aprendidas para desarrollar modelos de comportamiento de agentes durante su vida y por un proceso evolutivo, este tipo de sistemas han dado lugar a varias conlusiones interesantes sobre la complejidad y la estructura de la red del sistema, sin embargo son costosos computacionalmente y solo permiten ejecuciones de poblaciones pequeñas.


¿Qué tipo de simulaciones se pueden desarrollar?




Con este tipo de simulaciones se pueden estudiar tópicos como:

  • Comportamiento global como un proceso caótico.
  • Patrones de especies
  • Mecanismos de especies
  • Predicción de especies en extinción
  • Distribuciones de población
  • Corelaciones entre la diversidad genética y el estado físico.
  • Entre otros.
Las herramientas

Existen herramientas que podemos utilizar nosotros como desarrolladores de software para implementar simulaciones de ecosistemas, solo para mencionar algunos:


viernes, 20 de abril de 2012

Sistema caótico: Evolución humana

¿Qué es un Sistema Caótico?
Podemos decir que en términos simples, la teoría del caos nos dice que un sistema dinámico cuya naturaleza es determinista, (como lo hemos visto en clases anteriores, que se tiene un numero finito de estados y depende solamente del estado inicial), pero en este caso no es predecible en la naturaleza.

Aplicado en el mundo real, tenemos diversos sistemas que son caóticos ya que son demasiado sensibles a las condiciones iniciales, por ejemplo podemos decir el clima en la ciudad, el mercado económico de un país, reacciones químicas, etc, lo que hace que es difícil de controlar y predecir.

Bifurcación y atractores extraños
 Algunas de las caracteristicas importantes del estudio de sistemas caóticos es que existen diferentes fenómentos, tales como los atractores extraños, el cual las trayectorias cercas convergen y es extraño ya que exhibe sensibilidad respecto a las condiciones iniciales.

Atractor de lorenz


Algunas veces, otros sistemas tienen un proceso que hace otros dos atractores, llamado bifurcación


Diagrama de una bifurcación total

Durante algunos dias he estado investigando acerca de como realizar una metodología para proponer la hipótesis de que la evolución humana tiene aspectos que se comportan como sistemas caóticos, partiendo de la idea que la teoría del caos se puede considerar para muchos científicos modernos como pilar en la ciencia, este estudia el comportamiento de sistemas dinámicos, que pueden ser muy sensibles al momento de tener ciertas condiciones iniciales, por ejemplo, uno de los efectos que se conoce sobre esta teoria es el efecto mariposa. La teoría del caos viene a aplicarse en diferentes ciencias como las matemáticas, biología, computación, meteorología, etc...
 
La evolución humana.
Considero que la evolución humana puede considerarse un sistema caótico por diversas circustancias, entre las cuales por ejemplo tenemos el ADN, el cual, desde el punto de vista de las ciencias de la computación lo podemos considerar como una cadena de caracteres de cuatro letras, las cuales son C = Citosina, A = adenina, T = timina, G = guanina, en donde la combinación de triatas, o sea de tres letras cada una, grupos que forman las bases nitrogenadas, que a su vez forman aminoacidos, para que el conjunto de x cantidad de aminoácidos forme las proteinas, fundamentales para el ser humano, entonces, cada organismo humano, tiene un ADN con información que se relaciona con nuestra historia evolutiva antigua y reciente, por lo que considero que estudiando los cambios y mutaciónes en las secuencias del ADN, podriamos decir que poodemos tener un sistema caótico, entonces es común que entre los humanos tengamos alteraciones o cambios en la información genética.

Entonces tenemos algunos puntos relevantes en donde considero que el caós esta presente en la evolución.
  • Nuestro sistema biológico, de cualquier organismo, incluyendonos a nosotros, son sistemas dinámicas.
  • Cualquier proceso evolutivo interviene en el ADN.
  • Podemos decir que los organismos tienen sensibilidad al inicio de condiciones, cuando se crea un nuevo organismo.
  • Poblaciones tienen presión de selección, esto es por ejemplo si hay mucho sol en una ciudad, algunos elementos de la población se adaptan, por ejemplo con un color de piel más oscuro.

Representando el cáos en el ADN

Existen cadenas de ADN muy largas, de las cuales se han hecho investigaciones, estas se pueden representar de una manera gráfica, podemos convertir estas cadenas en imagenes similares utilizando la teoria del caos, a pesar de que tenemos cadenas que tienen muchos genes y regiones no codificadas, este tipo de imagenes que se generan, son utilizadas para identificar especies. 

Para este caso, seleccioné una bacteria, la Helicobacter pylori, la cual según wikipedia
Helicobacter pylori es una bacteria que infecta la mucosa del epitelio gástrico humano. Muchas úlceras y algunos tipos de gastritis se deben a infecciones por H. pylori.
Para poder consultar su ADN, existen páginas de bancos de datos para obtener la secuencia, para este caso ingresé a la página de National Center for Biotechnology, en la parte de genbank [aquí] se pueden buscar los reportes.

Estos fueron los reportes que calculé.


Ahora, para realizar el programa, el cual hice en python, me basé en el libro en uno de los libros de Biomedial Informatics en Python de Jones and Bartlett Series [aquí], utilizando un algoritmo de chaos game para obtener una representación gráfica del ADN y creando matrices para ir contando para colorear puntos.

#!/usr/bin/python
from numpy import arange, array, take, ravel, zeros, transpose
import copy
import Image

#Crea las combinaciones posibles para contar las proteinas simuladas
#base = son las bases nitrogenadas
#A = adenina, G = guanina, C = citosina y T = timina
#Iteraciones, en este caso 8, resultado matriz de 256x256
def combinaciones(base, iter = 8):
    
    #Hacemos la matriz inicial con bases
    a = array([[base[0],base[1]],[base[2],base[3]]]) 
    
    #iteraciones para incrementar matriz
    for n in range(iter-1):
        N = len(a)
        agran = arange(2*N)/2
        b = zeros((2*N, 2*N), 'S8')
        
 #Incrementa la matriz x 4 replicas
        for i in range(N):
            b[2*i] = take(a[i], agran)
            b[2*i+1] = take(a[i], agran)
        
        #Agregamos la letra apropiada
        for i in range(2*N):
            for j in range(2*N):
                k, l = i%2, j%2
                m = k*2+l
                b[i, j] = base[m] + b[i, j]

        a = copy.copy(b)
    return b

#Abro la base del la secuencia de genoma.
def LeerADN(nombre):
    fp = file(nombre)
    datos = fp.read()
    fp.close()
    return datos

#Dibuja en una imagen de 8-bit pixeles en blanco y negro
def dibuja(datos):
    mg = Image.new('L', transpose(datos).shape) #Imagen de 8-bit pixeles en blanco y negro
    mn = datos.min()
    a = datos - mn
    mx = a.max()
    a = a*256./mx
    mg.putdata(ravel(a))
    return mg

#De la base del genoma, solamente agarra la secuencia de ADN.
def SepararADN(datos):
    origen = datos.find('ORIGIN')
    inicio = datos.find('1', origen)
    final = datos.find('//', origen)
    a = datos[inicio:final].split('\n')
    adn = ''
    for i in a:
        spl = i.split()
        adn += ''.join(spl[1:])
    return adn

#Cuenta cuantas veces se repite la cadena en base a las diferentes formas
#que tenemos en la matriz que generamos.
#Devuelve una matriz que puede ser dibujada
def contar(matriz, adn):
    N = len(matriz)
    ctr = zeros((N,N), int)
    for i in range(N):
        if i%50==0:
            print i
        for j in range(N):
            ctr[i, j] = adn.count(matriz[i, j])
    return ctr

#Llamo a todos los metodos
def main():
    datos = LeerADN('Helicobacter_pylori_HUP-B14.gb.txt')
    adn = SepararADN(datos)
    matriz = combinaciones('gatc')
    cuenta = contar(matriz, adn)
    dibuja(cuenta).save('Helico-1.gif')

main()

En donde genero las siguientes imagenes de los 3 diferentes imágenes.




Entonces, considero que podemos relacionar por medio de un sistema dinámico a la representación gráfica del ADN, obteniendo resultados con información del ADN, teniendo como información conjunta u homogenia, abria que estudiar el comportamiento con más informaciones de la cadena de ADN, pero pienso que las propiedades de los genomas, luego de miles de años de evolución teniendo mutaciones, genes que se codifican y genes que no se codifican, podemos concluir que son el resultado de un sistema caótico.

Bibliografía
Genomic signature, Deschavanne [Aquí]
Python for Bioinformatics (Jones and Bartlett Series in Biomedial Informatics). [Aquí]
Genbank de National Center for Biotechnology information [Aquí]
Ecuaciones Diferenciales y problemas con valores en la frontera, Edwards y Penny [Aquí]
Fractal seed, Chaos Theory [Aquí]
Diapositivas de curso "Caos y sistemas complejos" Universidad de Zaragoza [Aquí]

jueves, 29 de marzo de 2012

Tarea 3: Pruebas estadísticas para los números pseudoaleatorios

Librería de generación de números pseudoaleatorios
Para realizar esta parte, lo primero que hice es generar numeros pseudo-aleatorios de manera teórica con octave para generar una gráfica en donde pudiera ver como varia la distriución de forma visual, en mi caso estoy utilizando la distribución de possion que utiliza la siguiente formula.



Por lo que hice esta función en octave:



En gnuplot genero esta gráfica.


Luego para generar la estadística, como sabemos debemos de generar mediante una unidad de tiempo saber cuando es mayor a uno y que esto regrese un numero aleatorio por medio de un random uniforme, por lo que generé otra función la cual da este numero.





Para luego, generar esta gráfica en gnuplot


Luego necesitamos un programa que genere y hacer "canastas" para normalizar los numeros.



Generando los siguientes resultados los cuales voy a utilizar para las pruebas.




Luego si comparamos las dos versiones de numeros pseudo-aleatorios, tenemos que una gráfica comprobando que pertenecen a la misma distribución


Pruebas estadísticas
Ahora, para verificar que lo que estoy generando, se apegan a la distribución de poisson, por lo que mediante una investigación en internet por lo que decidí hacer la prueba de chi cuadrado.


La prueba de chi cuadrado,sigue una distribución de chi cuadrada de Pearson, en donde mido la discrepancia entre una distribución observada y otra teórica, por lo que genere en una lista numeros desde la libreria de numpy con numeros de distribución de poission, comparados los numeros teóricos que generé, al igual que los numeros experimentales y para verificar que esto funciona, lo que hice fue compararlo con numeros que utilicen otra distribución, en donde tuvimos resultados satisfactorios teniendo Hipotesis contrarias.


Expongo el código.



Teniendo los siguientes resultados.

Por lo que podemos comprobar que al comparar con la distribución de poisson, tenemos un resultado satisfactorio pero al momento de comparar con una distribución normal, se rechaza.

Podemos concluir que los numeros generados si pertenecen a la distribución de poisson.

miércoles, 22 de febrero de 2012

Tarea 2: Procesos estocásticos discretos y contínuos

Podemos decir que, cuando en una X empresa se generan diferentes productos, por ejemplo, zapatos en una máquina constructora, es normal pensar que podríamos tener productos de los cuales tengan fallas y si en un futuro se nos llega a presentar este tipo de problema, podemos argumentar que este es modelo escolástico ya que  es tomado como un dato al azar y se relacionan las variables por funciones probabilisticas en donde consideramos que si tenemos un fallo seria un éxito y un fracaso el no tenerlo, si el interés de esta empresa es saber de una cierta cantidad de productos encontrar el numero de productos con fallos, tenemos que realizar un análisis de distribución binomial  

Como lo vimos en clase, el experimento de Bernoulli es un experimento que se hace aleatoriamente con solamente dos resultados, esto es si tenemos éxito o tenemos fracaso, por lo que la probabilidad del éxito le podemos decir p y la probabilidad seria un 1 - p, al cual podemos decir que es un binario en el cual 1 es éxito y 0 es fracaso, por lo que cuando realizamos el experimento de Bernoulli, se cuenta el numero de éxitos que tenemos en solamente un experimento.

Aplicado en el ejemplo que he propuesto, si se nos pide que tomemos solamente un zapato al azar y examinarlo para decidir si este producto tiene falla o no, por lo que este es un experimento de Bernoulli, pero tengo bien definido que únicamente voy a escoger un solo zapato de estos, en el caso del uso de la distribución binomial tenemos que tener en cuenta cuantos éxitos tenemos en repitiendo varias veces el experimentos de Bernoulli, en donde entonces podemos argumentar que el experimento viene siendo base para el binomial.

Proponiendo que, si el 17% de los zapatos hechos en la empresa tienen fallas, podemos decir que X es el número de zapatos con falla de una caja con 6 pares (o sea, 12 zapatos o productos). Considerando que X es el número de éxitos en 12 experimentos de Bernoulli separados con un parámetro de 0.17.

En una variable binomial, tenemos dos parámetros base los cuales son n, que es el número de experimentos que vamos a necesitar y p que es la probabilidad que tenemos de una respuesta favorable o éxito. Por lo que en el ejemplo propuesto podemos decir que X es una binomial con n = 17 y p = 0.17



Entonces en esta imagen, podemos ver que, como la probabilidad de P[X = 0] = 1 - p, P[X = 0] = 0.83 y como tenemos 12 zapatos y que cada uno tiene su probabilidad de que sea bueno de 0.83 por lo que la probabilidad es 0.83 12 = 0.1068


Si por ejemplo se nos pide encontrar la probabilidad de que tengamos solamente un zapato con fallo, podemos decir que P[X = 1] es de 12 * 0.17 * 0.83 11 = 0.262, en donde el 12 es el numero de veces que vamos a hacer el experimento porque son 12 zapatos, el 0.17 la probabilidad de que haya un fallo y el 0.8311 los zapatos restantes.


Si P[X = 2] entonces es cuando la probabilidad de que haya solamente dos fallas, por lo que podemos ver que P[X = 2] es de 0.172 * 0.8310 pero ahora multiplicado por el número que se necesita para que los zapatos se cambien en diferentes posiciones con fallas, por lo que este numero lo podemos sacar con el coeficiente binomial, en donde tenemos el numero de subconjuntos que hay en un conjunto, en este caso bincoeff(12, 2) = 66, el cual utiliza la formula


Por lo que al ver estos casos podemos argumentar la formula.

  • P[X = 0] = bincoeff( 12, 0) * 0.83 12
  • P[X = 1] = bincoeff( 12, 1) * 0.17 * 0.83 11
  • P[X = 2] = bincoeff(12, 2) * 0.172 * 0.8310
  • ….. etc….

Por lo que en general tenemos que.
P[X = k] = bincoeff(12, k)* 0.17k * 0.08312-k

en donde k = 0, 1, 2, 3, 4 …. 12.

Por lo que decimos que la función probabilidad de la distribución binomial


en donde k = 0, 1, 2, …., n.

Entonces vemos que este cuenta el número de éxitos que tenemos en n repeticiones que se hacen en un experimento de Bernoulli con probabilidad de éxito p.

Con el problema dado, he generado con el código que vimos en la clase (aquí) una gráfica.


En esta gráfica vemos la comparación con las diferentes probabilidades en la distribución binomial.


Version continua.
Podemos decir que la version continua de la distribución binomial es la distribución normal puede ser por ejemplo si se nos pide sacar el plastico del zapato tiene una distribución normal con una media de 72 y desviación tipica de 3 (medidas en micras), y si el plastico se consdera "garantizado" si el espesor del plastico esta entre 60 y 75 ¿Cual es el porcentaje de plastico de zapato que cumple con este requisito?.

Para poder realizar esto podemos utilizar octave con la función normcdf normalizando el calculo y obtener el resultado.


Entonces tenemos un resultado de 0.84 entonces el porcentaje del problema descrito con version de distribución normal es de 84.1%

Según esto, lo que modifiqué del código es que la k estuviera modificandose cada 0.1 para obtener una grafica mas definida, la verdad no estoy seguro que esté bien y espero que mis compañeros que enrealidad entendieron me puedan ayudar.

Expongo mi código.


  
Y genero esta gráfica.


Referencias
Notas de clase - Estadística - Universidad de Coruña

jueves, 16 de febrero de 2012

Pagerank [Tarea extra]

¿Qué es PageRank?
PageRank o PR, es un algoritmo para analizar las conexiones simultáneas que existen sobre un sistema de clasificación de páginas Web, el cual es utilizado como el motor de búsqueda de Google, para así poder medir cuantitativamente la popularidad de una página web y clasificar los resultados de la búsqueda.

Podemos decir, que los nodos que tenemos en el siguiente grafo son los estados de las páginas web y que suponiendo que cada nodo tiene k ligas que salen de estas, tenemos que la probabilidad de transición de una página a otra, va a ser de 1/k para cada uno, esto sería como cuando una persona solamente navega dando clicks al azar, solamente siguiendo de una página a otra.

Si suponemos que todas las páginas web estan conectadas entre ellos, nos proporciona una probabilidad de que cada cierto tiempo que nosotros llegamos a ésa página, esto quiere decir que, el pagerank nos dice que tan fácil es llegar a esta página, por lo que si ésta es importante, muchas otras páginas van a estar apuntando a ti, entonces si una persona navega al azar, frecuentemente va a llegar a una página que esta apuntado a ti y con esta mayor probabilidad, va a llegar a ver ésa página importante.

Ejemplo:
Para hacer este procedimiento, he dibujado un grafo simulando una mini red de 10 páginas, las cuales están todas conectadas entre si, pero algunas tienen mas ligas que otras, en este caso, podemos ver que las que están en rojo solamente tienen una liga a ellas, las amarillas tienen dos ligas y la verde es la que tiene mas ligas en la red, por lo tanto es la que se considera más importante.
Dibujo grafo

Representación gráfica




Aquí podemos ver la matriz de adyacencia, que es la que dice si hay o no liga, si tenemos un 1 quiere decir que esta tiene liga con la coordenada correspondiente, si tiene un 0 no tiene liga, haciendo una matriz binaria, luego para poder obtener el pagerank, tenemos que convertir esta matriz de adyacencia en una matriz estocástica, según sus transciones, por lo que cada uno sumará un total de k ligas y dividimos entre cada uno de estos elementos para obtener que la suma sea un uno y sea estocástica, luego con esto sacamos el eigenvector valor izquierdo, obteniendo el vector que nos va a decir cuales son las páginas más importantes.




Luego de esto, vemos que los valores grandes son los más importantes, para luego ligar este  que en su caso es página 2, que comparado con otras, tiene que ser mayor.






Obtenemos como resultado en el vector, la importancia de cada una de las páginas, en donde tenemos por muy superior a la página 2.




Por medio del comando spy, podemos obtener una gráfica sobre como está la matriz y cuales son sus ligas.


Referencias.
¿Qué es un eigenvector?
¿Qué es pagerank?
Algoritmo de pagerank
Octave

miércoles, 8 de febrero de 2012

Tarea 1: Sistema determinista.


Sistema determinista.
Un sistema, es una sucesión de componentes que forman una función, un proceso o un diseño de procedimientos para llegar a un objetivo o meta, mediante el manejo de cuerpos, datos o energía, por lo tanto un sistema tiene elementos integrados que trabajan en conjunto para formar un todo organizado cumpliendo un propósito.

Un sistema determinista, es una de las diferentes clasificaciones que se pueden dar de los sistemas, en particular, este tipo es aquél que sus elementos se relacionan de una forma totalmente predecible, entonces tiene componentes que presentan comportamiento dinámico, el cual es predecible ya que este tipo de sistema, realizará solamente lo que nosotros le digamos que haga.  

Podemos decir, que un candado cumple con los requisitos de un sistema determinista, por lo tanto, haré una explicación de como considero a éste como un sistema determinista.

El Candado.



Se puede decir que un candado, es un objeto que se utiliza para bloquear el acceso cuando cierto tipo de puertas, que regularmente no tienen una cerradura integrada, el cual se compone de una carcaza, en la que tiene un mecanismo de bloqueo y un anillo de metal, que puede estar abierto o cerrado, siendo controlado casi siempre por una llave.

Su funcionamiento.



Como podemos ver en el video, el anillo se va a subir o bajar cuando el candado se abra o se cierre, por dentro de la carcaza, lo que se hace es un mecanismo de bloqueo, el cual verifica mediante cilindros con resortes o clavijas, si la forma de la llave es igual al patrón que tienen, para después de darle vuelta a la llave este pueda mover el anillo, dejándolo libre para abrir.


Pseudocódigo



El pseudocódigo es muy simple, pero considero que es una forma de como representar este sistema de bloqueo en código, simplemente son estructuras selectivas comparando si se encaja con las clavijas.


Diagrama de estados.
Por lo tanto, para demostrar que este sistema es un determinista, he realizado un diagrama de estados en donde tenemos:


 * El estado inicial, no proviene de ningún otro nodo y en este caso es la entrada de la llave.
 * Los estados son los nodos, en el cual considero que es el que los cilindros encajen en la clavija, que se encuentran adentro de la carcaza, al igual que al no encajar pase al estado cerrado o cuando todos encajen pase el estado abierto.
 * La transición, en este caso es cuando un solo cilindro ya encajó en la clavija, para pasar al siguiente estado, este esta representado mediante una arista dirigida uniendo los nodos.
 * Los estados finales están en verde o rojo, el cual corresponde a abierto o cerrado.

Podemos decir, que el candado es un sistema determinista, cumple con todas sus características y se puede considerar como un sistema simple.

Referencias.
Imágenes -  The lock smith training company
Video - Animated: How locks works
Diagrama de estados - Wikipedia