Mostrando las entradas con la etiqueta Ciencia. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Ciencia. Mostrar todas las entradas

sábado, 23 de junio de 2012

En homenaje a Alan Turing, una máquina en Python

En homenaje a Alan Turing, en el centenario de su nacimiento, una máquina universal de Turing, implementada en Python.

El ejemplo toma una cadena de A's y B's arbitrarias y sustituye todo por A's. Cambiando las reglas de las transiciones y los símbolos usados se podría cargar cualquier máquina... Al final se produce una respuesta: Accept o Crash.

Tomada de: http://code.activestate.com/recipes/252486-turing-machine-simulator/

## {{{ http://code.activestate.com/recipes/252486/ (r1)
#!/usr/bin/env python
# (C) 2003 Ryan Phillips 
# Uses Python 3 
 
import sys

pr = sys.stdout.write

class MachineTapeException(Exception):
 """ Turing Exception Exception """
 def __init__(self, value):
  Exception.__init__(self)
  self.value = value
 def __str__(self):
  return self.value

class TuringErrorException(Exception):
 """ Turing Exception Exception """
 def __str__(self):
  return "Crash"

class TuringAcceptException(Exception):
 """ Turing Accept Exception """
 def __str__(self):
  return "Accept"

class MachineTape:
 def __init__(self, initialString=[], initialPos=0, blank="_"):
  """ The Tape uses a simple list.  It could easily be changed into a string if
      need be """
  self.tape = []
  self.pos = initialPos
  self.blank = blank
  self.initialString = initialString
  if len(initialString) > 0:
      for ch in initialString:
       self.tape.append(ch)
  else:
      self.tape.append(blank)

 def reinit(self):
  self.__init__(self.initialString)

 def move(self, check_char, changeto_char, direction):
  """ Only R, L directions are supported """
  # check to see if the character under the head is what we need
  if check_char != self.tape[self.pos]:
   raise MachineTapeException ("Tape head doesn't match head character")
  
  # at this point the head is over the same character we are looking for
  #  change the head character to the new character
  self.tape[self.pos] = changeto_char
  
  if direction == "L":
   self.move_left()
  elif direction == "R":
   self.move_right()
  else: raise MachineTapeException ("Direction is invalid")
 
 def read(self):
  """ return the character over the head """
  return self.tape[self.pos]
 
 def move_left(self):
  if self.pos <= 0: 
   self.tape.insert(-1, self.blank)
   self.pos = 0
  else:
   self.pos += -1

 def move_right(self):
  self.pos += 1
  if self.pos >= len(self.tape): self.tape.append(self.blank)
 
 def show(self):
  """ print the tape """
  for ch in self.tape:
   pr(ch)
  pr("\n"); pr(" "*self.pos + "^"); pr("\n")

"""
The program structure for the TM is created with a dictionary.
    To step algorithm:
 1. Check to see if the length of the string is zero and if we
     are in a final state
 2. If the currentstate is in the final states then raise an Accept
 3. If the currentstate is not in the program then raise an Error
 4. Check the head character
 5. If the head character is not in the program and in the current state then
     raise an Error
 6. Retrieve from the dictionary the dest_state, char_out, and movement
 7. set the current state to the new state
 8. write the tape, and move the head

Program Layout:
    [state][char_in] --> [(dest_state, char_out, movement)]
"""

class TuringMachine:
 def __init__(self, initialString, finalStates=[], blank="_"):
  self.blank = blank
  self.tape = MachineTape(initialString)
  self.fstates = finalStates
  self.program = {}
  self.initState = 0
  self.state = self.initState
  self.lenStr = len(initialString)
 
 def reinit(self):
  self.state = self.initState
  self.tape.reinit()
 
 def addTransition(self, state, char_in, dest_state, char_out, movement):
  if not self.program.has_key(state):
   self.program[state] = {}

  tup = (dest_state, char_out, movement)
  self.program[state][char_in] = tup

 def step(self):
  """ Steps 1 - 3 """
  if self.lenStr == 0 and self.state in self.fstates: raise TuringAcceptException
  if self.state in self.fstates: raise TuringAcceptException 
  if self.state not in self.program.keys(): raise TuringErrorException
  
  """ Steps 4 and 5 """
  head = self.tape.read()
  if head not in self.program[self.state].keys(): raise TuringErrorException
   
  """ Steps 6 and 7 """
  # execute transition
  (dest_state, char_out, movement) = self.program[self.state][head]
  self.state = dest_state
  try:
   """ Step 8 """
   self.tape.move(head, char_out, movement)
  except MachineTapeException, s:
   print s

 def execute(self):
  """ The TM will keep stepping forever until the TM accepts or rejects.
      This does allow for looping TM's """
  try:
   while 1:
    m.tape.show()
    m.step()
  except (TuringErrorException, TuringAcceptException), s:
   print s

if __name__ == "__main__":
    # machine to convert a string of A's and B's to
    # all A's and accept
    m = TuringMachine("ABBABB", [1])

    m.addTransition(0,'A',0,'A','R')
    m.addTransition(0,'B',0,'A','R')
    m.addTransition(0,'_',1,'_','L')

    # run the TM
    m.execute()
## end of http://code.activestate.com/recipes/252486/ }}}

jueves, 3 de noviembre de 2005

Criticalidad Auto-organizada en el Juego de la Vida (parte 3)

Para encontrar las pistas que nos dijeran si el Juego de la Vida puede o no presentar CAO, realizamos una serie de experimentos, basándonos en lo que ya antes habían hecho otros autores:
  1. Realizamos el mismo experimento con distintos tamaños de rejilla del Juego de la Vida: 64x64, 128x128, 256x256, 512x512, 1024x1024 y 2048x2048 (este último no lo habían hecho antes los demás). En realidad se podría hacer con cualquier tamaño. El chiste es que si se observa cierto exponente crítico para uno de los tamaños, este debe ser el mismo para cualquier tamaño (buscamos entonces la invarianza en tamaño del exponente crítico).
  2. Por cada rejilla, vamos a buscar si existe una ley de potencias inversa (ver gráfica), y determinaremos el exponente, para buscar si se conserva como ya se dijo en el punto 1.
  3. Al inico, cada rejilla se inicializa aleatoriamente, con una probabilidad de 50% de células vivas en toda la rejilla.
  4. Dejamos correr el Juego de la Vida cuantos pasos sea necesario hasta llegar al primer estado de reposo (como ya se describió en el post anterior).
  5. Una vez en un estado de reposo, vamos a provocar una avalancha de la siguiente manera: buscamos una célula que esté muerta, y la volvemos viva. Esto puede o no provocar una alteración en el Juego de la Vida conforme continúe corriendo. No habrá alteración si la nueva célula viva está localizada en una región donde en sus alrededores no haya ninguna célula viva, por lo que al siguiente paso de tiempo esta nueva célula moriría y no habría una avalancha digna de considerar. Por esto, para asegurar con mayor probabilidad que la avalancha alterará el sistema, elegimos como células muertas candidato a volverse vivas, aquellas que tuvieran en su alrededor una célula viva, o si no la tenían, que las de este alrededor tuvieran a su vez al menos una célula viva en su propio alrededor, es decir, que en una vecindad de Moore de 20 células alrededor de la célula muerta, hubiera al menos una célula viva. Con esta condición, se reducen en gran cantidad las avalanchas que sólo duran un paso de tiempo. Aún cuando siguieran ocurriendo estas, no las consideraremos en las mediciones, sólo las que duren dos o más pasos de tiempo. Igualmente se reducen en gran cantidad las células muertas candidato a provocar la avalancha, pues hay que recordar que cuando el Juego de la Vida está en un estado de reposo, sólo 3% aprox. de células estarán vivas, el resto estarán muertas.
  6. Una vez alterado el sistema, el Juego de la Vida sigue corriendo, hasta detectar un nuevo estado de reposo. Entonces se mide la cantidad de pasos de tiempo ocurridos desde la alteración hasta la llegada al nuevo estado de reposo. Esta medición es almacenada, y entonces se continúa el experimento en el paso 5.
  7. Se guardan suficientes mediciones para poder hacer una estadística razonable. (Aquí, suficiente simplemente significa una cantidad de datos grande, que nosotros acotamos en al menos 10000, dependiendo del tamaño de la rejilla, pues para tamaños mayores, el tiempo de ejecución es muy lento y no siemrpe se pudo conseguir una cantidad de datos de este orden de magnitud).
  8. Una vez con las mediciones, se les aplica un tratamiento estadístico para poder ver realmente el comportamiento de ley de potencias, si es que existe, y filtrar características de los datos que no necesitamos.
  9. Hecho esto, se graficaron los datos en un papel log-log y se encontró la pendiente de la recta que, de existir, es el valor del exponente de la ley de potencias buscado.
¿Qué encontramos?
En primer lugar, para todas las rejillas analizadas, encontramos un comportamiento de ley de potencias, como podría esperarse de un sistema con CAO.
En segundo lugar, todos los exponentes de la ley de potencias resultaron ser aproximadamente el mismo (b=1.41). De nuevo, esto es evidencia de la existencia de CAO en el sistema.
Todo esto concuerda con lo que ya se había realizado en investigaciones anteriores por parte de otras personas (aunque no tengo las referencias aquí, puede consultarse el paper).
Esto, sin embargo, no es la evidencia irrefutable de la existencia de CAO en el Juego de la Vida, pero si evidencia suficiente para decir que es muy probable que la haya, o, como otro autor concluye también, para que al menos haya algo conocido como sub-criticalidad.
Esto, en fin, resulta interesante desde muchos puntos de vista. El Juego de la Vida no es un sistema natural, no tiene aparentes fuentes externas de energia, y sin embargo, de presentar CAO, estaría dándose un giro relevante a estas nociones físicas. Por otra parte, sabiendo que el Juego de la Vida, y los AC tienen muchísimas aplicaciones en modelación de sistemas reales y en matemáticas y teoría de la computación, como por ejemplo el hecho de que le Juego de la Vida pueda realizar cómputo universal, por lo que la existencia de una propiedad también muy interesante de sistemas físicos dentro de los AC puede servir para realizar estudios y modelos de sistemas naturales complejos.

Y con esto, termino el relato de lo que expuse el 9 de septiembre de 2005 en el Congreso Internacional de Computación, CIC-2005.

Para más información, puedes consultar el paper (PDF) y la presentación que realizamos (PPT).

[AÚN NO ESTÁN DISPONIBLES LOS ARCHIVOS...]



--
Eru kaluva tielyanna (Dios iluminará tu camino)
Visita la página de la Casa de la Juventud, TOR: www.torcasajuv.com
"Ama y haz lo que quieras. Si callas, callarás con amor; si gritas, gritarás con amor; si corriges, corregirás con amor; si perdonas, perdonarás con amor. Si tienes el amor arraigado en ti, ninguna otra cosa sino amor serán tus frutos." (San Agustín) Solamente asegúrate que en realidad sea AMOR...

miércoles, 12 de octubre de 2005

Criticalidad Auto-organizada en el Juego de la Vida (parte 2)

Un autómata celular (AC) consiste de una lattice (un enrejado, un arreglo, ...) en donde cada celda tiene cierto valor, o estado. Lo importante en un AC es que a cada lapso de tiempo los estados de cada celda van cambiando de una manera particular: toman en cuenta los valores de las celdas próximas (la vecindad de la celda) y en base a estos, se da el nuevo valor de la celda en cuestión. Esto se hace así para TODAS las celdas de la lattice (al menos así sucede en una versión de AC sencilla). En realidad, un AC ideal tiene una lattice infinita, pero como implementar esto en una computadora es imposible, se asume por lo general una lattice finita, y para subsanar esto de alguna manera, se implementan también condiciones de frontera, que simplemente indican qué sucedera con las celdas de la lattice que se encuentren en los bordes de la misma.

Aunque todo esto en sí no representa gran complejidad, ni un trabajo arduo para programar, lo curioso es que, a nivel global, el AC irá generando por sí mismo comportamientos que el programador (o el matemático) tal vez no se había imaginado que surgirían, no a partir del código programado por lo menos.

Pues bien, el Juego de la Vida es un tipo particular de AC. Consiste de una lattice de 2 dimensiones, donde a cada celda se le conoce como célula. Una célula puede estar viva o muerta. A cada paso de tiempo, para todas las células, se debe considerar cuántos vecinos vivos tiene (en una vecindad conocida como de Moore, que considera solamente los 8 vecinos más próximos a la célula: los 2 de los lados, arriba y abajo y los 4 en las diagonales):
  • Si la célula está viva, y la cantidad de vecinos vivos es 2 o 3, entonces la célula permanecerá viva al siguiente paso de tiempo. En cualquier otro caso, morirá (por 'aislamiento' si tenía menos de 2 vecinos vivos, o por 'sobrepoblación' si tenía mas de 3 vecinos vivos).
  • Si por otra parte la célula está muerta, y la cantidad de vecinos vivos es de exactamente 3, entonces al siguiente paso de tiempo, una nueva célula viva nacerá ahí.
Así de sencillo... ¿o no? Cuando John Horton Conway ideó el Juego de la Vida en 1970, planeaba solamente hacer un juego o reto matemático en el cual los lectores (el Juego de la Vida apareció por primera vez en una revista) no pudieran fácilmente predecir qué sucedería en la rejilla a partir de cualquier configuración inicial dada. Pero a partir de ello, mucha gente comenzó a interesarse en este Juego, y cada vez más cosas nuevas eran publicadas como curiosidades, propiedades y descubrimientos que el juego de Conway tenía. Así, se comenzó por clasificar a los 'seres vivos' que podían residir en el juego: siguiendo sus reglas, suceden ocasiones en que las células quedan agrupadas de tal forma que juntas forman organismos más complejos, con distintas propiedades: algunos solamente permanecen estáticos sin importar cuanto tiempo pase; otros tienen formas que ciclan con un período dado, pasando por otras formas hasta regresar a la original (pero quedándose quietos en un lugar de la rejilla); otros incluso se mueven, diagonal u ortogonalmente; y hay los que también generan y se 'comen' a otros tipos de organismos. El Juego de la Vida parecería tener 'vida' en sí mismo.

Desde entonces muchas cosas se han dicho ya sobre el tema. Luego de descubrir y clasificar a los organismos más comunes que suelen aparecer en un Juego de la Vida cualquiera, se comenzaron a descubrir más propiedades, por ejemplo aquella que dice que, a partir de una configuración inicial aleatoria, si se deja correr el Juego de la Vida por mucho tiempo, la población de células vivas con respecto a la cantidad total de células, tiende al 3%. O aquella en donde se demuestra que el Juego de la Vida tiene la capacidad de simular una máquina de Turing, dándole entonces propiedades de cómputo universal.

Todo esto, aunque aparentemente ajeno al fenómeno de CAO previamente mencionado, es en realidad muy importante para unificar conceptos. Resulta que podemos decir que una configuración dada de Juego de la Vida se encuentra o no en un estado de reposo (recordemos que un sistema con CAO tiende de manera natural a un estado crítico donde hay un aparente reposo). ¿Cómo saber cuándo el Juego de la Vida llega a un estado de reposo? Primero que nada, el Juego de la Vida no está en estado de reposo si las células están cambiando constantemente de posición y número, sino que hay ciera repetición en los patrones del juego, pero como esto es bastante ambiguo, aprovechemos lo que hasta ahora hemos observado sobre el Juego de la Vida.

Una forma 'obvia' de intentar definir un estado de reposo en el Juego de la Vida podría ser esperar hasta que todos los organismos que residan en un momento en la rejilla se conviertan en organismos estáticos, que no se muevan ni cambien no importa cuanto tiempo transcurra. Sin embargo, esta respuesta 'obvia', está equivocada: muchas veces sucederá que nunca se pueda llegar a un estado así. (Otra respuesta trivial sería esperar a que todas las células mueran, situación en la que se cae de nuevo en una rejilla estática, pero una rejilla completamente vacía es improbable (y más improbable entre más grande sea la rejilla), y es poco interesante también...). Tomemos pues, un camino alternativo:

Si tomáramos una fotografía a una configuración de la rejilla del juego en un momento dado, y continuáramos tomando fotos y las fuéramos comparando conforme las sacamos con las previamente realizadas, nos podríamos ir dando una idea de cómo evoluciona el juego. Pues bien, si en un caso particular resultara que una fotografía es idéntica a otra previamente tomada, podremos saber entonces que el juego ha entrado en un estado tal que volverá a repetirse después de cierto período de tiempo, el Juego de la Vida se ha estabilizado. ¿Es posible que esto suceda? ¡Por supuesto! es lo que más comúnmente sucederá: como dijimos ya, el juego de la vida tiende a tener un 3% de población viva luego de mucho tiempo. Este 3% de población viva consistirá de células agrupadas de tal forma que, o se caiga en el caso 'obvio' mencionado anteriormente (en el que todas las células no cambian su estado nunca más), o se llegue a un estado en el que los organismos estén ciclando constantemente su forma y repitiendo los patrones hasta repetir de nuevo toda la configuración de la rejilla (si no sucediera así, y constantemente se estuviera generando nueva vida, o se estuviera muriendo la existente, no podríamos hablar ni siquiera de que el Juego llega a 3% de células vivas, pues seguiría habiendo cambios que evitarían llegar a esto). De esta forma, el Juego de la Vida, habrá llegado a un estado de reposo.

Pudiera ser que también se considerara estado de reposo cuando además de los organismos mencionados, también vivieran por ahí organismos móviles que no afectaran al resto, pero esto depende sobre todo de las condiciones de frontera que tenga nuestra rejilla, y no fue considerado por nosotros de todas formas.

Ahora bien, ¿cuántas fotografías hay que tomar para comparar entre sí y determinar que el Juego de la Vida se encuentra en estado de reposo? Por lógica, podría parecer que hay que estar tomando y comparando fotografías constantemente, desde que inicia el Juego y hasta siempre: uno nunca sabe con el comportamiento complejo cuándo sucederá que una configuración cíclica será alcanzada, aunque su período fuera extremadamente largo. Es cierto, pero para fines prácticos, diremos que SEIS fotografías bastan. ¿Porqué? Pues debido a que los organismos que surgirán en un Juego de la Vida estable (con 3% de células vivas) serán por lo general, u organismos estáticos, u organismos cíclicos con 2 o 3 períodos. Es sólo cuestión de matemáticas darse cuenta que si existe por ahí un organismo cíclico de período 2, y otro por allá de periódo 3, la configuración global del Juego de la Vida tendrá un ciclo igual a 6, combinando todas las posibles configuraciones de cada organismo particular. Por supuesto que organismos cíclicos de mayor período pueden aparecer, pero que esto suceda en un Juego estable, con sólo 3% de células vivas, es verdaderamente muy improbable. (Al menos así lo constatamos nosotros, luego de muchísimos experimentos jamás nos topamos con un caso así. Si hubiera sucedido, nos hubiéramos dado cuenta porque nuestro programa habría entrado en un ciclo infinito y nunca hubiera arrojado un resultado en ese caso).

En la historia del Juego de la Vida, todas estas propiedades se fueron descubriendo poco a poco. Es así como llegamos al momento en que Bak y otros plantearon la posibilidad de que el Juego de la Vida presentara CAO a finales de la década de los ochentas. Muchas discusiones siguieron al tema, por ejemplo: siendo el Juego de la Vida un ente puramente artificial, sin 'fuentes externas de energía', ¿podía en realidad presentar CAO? ¿o no sería que en realidad para que un sistema presente CAO no requiere de esas 'fuentes externas' y el concepto actual de CAO está mal definido? (recuérdese que al ser auto-organizado, un sistema con CAO no requiere de agentes externos que lo hagan caer en el estado crítico, sin embargo, hasta antes de plantear la cuestión de si el Juego de la Vida presenta CAO o no se pensaba solamente que aún así, un sistema con CAO tiene una fuente de energía externa, que aunque no influyera en el proceso auto-organizativo para llegar al estado crítico, si sería importante para que el sistema continuara 'funcionando') o incluso hubo quienes se atrevieron a postular que el fenómeno de CAO no requiere necesariamente ser exclusivo de fenómenos naturales, y que podría tratarse de un fenómeno mucho más general, propio simplemente de sistemas que presenten algún tipo de características complejas.

Pues bien, siendo así, llegamos al núcleo del asunto: ¿presenta el Juego de la Vida CAO?, que expondré en el siguiente post...

¡Hasta la próxima!

Javier



--
Eru kaluva tielyanna (Dios iluminará tu camino)
¡Visita la página de la Casa de la Juventud!
http://www.torcasajuv.com
"Ama y haz lo que quieras. Si callas, callarás con amor; si gritas, gritarás con amor; si corriges, corregirás con amor; si perdonas, perdonarás con amor. Si tienes el amor arraigado en ti, ninguna otra cosa sino amor serán tus frutos." Claro está, asegúrate que en realidad es AMOR...

lunes, 26 de septiembre de 2005

Criticalidad Auto-organizada en el Juego de la Vida

El pasado 9 de septiembre participé en lo que fue el primer congreso científico de mi vida. Se trató del XIV Congreso Internacional de Computación, CIC-2005, organizado por el centro de investigación en donde realizo mis estudios de maestría en Ciencias de la Computación.
La plática que di (junto con otro compañero) trató del tema que en estos días llama mi interés: Autómatas Celulares (junto con otro tema que también estoy estudiando: Sistemas Complejos).
En particular, uno llamado 'Juego de la Vida' (si quieres saber más, ve aquí: http://es.wikipedia.org/wiki/Juego_de_la_vida)
De él, hablamos de una asombrante característica que parece ser que presenta: Criticalidad Auto-organizada (http://en.wikipedia.org/wiki/Self-organized_criticality , lo siento aquí, no encontré una buena referencia en español)

En palabras sencillas, la Criticalidad Auto-organizada (o CAO) se refiere a un fenómeno que incluye a dos fenómenos físicos: la presencia de un estado crítico, y la auto-organización. Esta última la podemos encontrar por ejemplo en las neuronas del cerebro: cuando una de ellas muere (por un golpe por ejemplo, sabiendo de antemano que las neuronas no se reproducen y que por lo tanto no habrá de nuevo una neurona que sustituya a la muerta), la red de neuronas del cerebro tiene la capacidad de auto-organizarse y suplir las funciones de la neurona muerta, reconectando por otros lados para evitar que las conexiones que esa neurona ahora muerta posibilitaba, se pierdan. (Claro está, cuando la pérdida es muy grande, las neuronas ya no tienen la suficiente capacidad de auto-organización, como lo que pasa con el mal de Alzheimer, pero ese tema ya no tiene que ver con CAO ;)

Ahora bien, los estados críticos se presentan en muchos sistemas físicos también: por ejemplo cuando hay transiciones de fase de la materia (de líquido a gas en el agua a 100 °C p.ej., el estado crítico se presenta justo a 100 °, cuando la transición de fase sucede).

Un sistema con CAO simplemente es aquel que tiende a moverse hacia un estado crítico en particular pero de manera auto-organizada, sin que nada ni nadie intervenga de forma externa (en el caso del agua a 100°, la regulación de temperatura (un parámetro que puede ajustarse de forma externa) es lo que permite llegar al estado crítico, por lo que ese no sería un sistema con CAO).

Supongamos que una montaña de nieve presenta CAO. Le hemos estado colocando copo a copo de nieve hasta llegar a un estado en el cual sabemos (teóricamente) que si le agregamos un copo más, provocaremos una avalancha. Ese es el estado crítico: un estado entre el 'orden' de la montaña en reposo y el 'caos' que la avalancha provocaria. Bueno, pues provoquemos entonces la avalancha: puede ser sólo un par de copos de nieve desplazándose y ya, o toda una catástrofe que derrumbe la montaña. La cuestión del CAO está en que, una vez terminada la avalancha, el sistema quedará de nuevo en reposo, en el estado crítico, de manera que una perturbación nueva (otro copo de nieve) provocará otra avalancha (de magnitud X). Además, un dato curioso pero importante: por cada avalancha provocada, vamos a medir su intensidad. La intensidad la podemos medir ya sea (teóricamente) contando cuantos copos de nieve se desplazaron de su lugar en reposo debido a la avalancha, o midiendo el tiempo que duró la avalancha, desde que fue provocada hasta que el sistema se auto-organizó de nuevo en el estado crítico. Algunas veces serán avalanchas diminutas (de unos cuantos copos de nieve), y algunas veces grandes catástrofes. Pues bien, si provocamos y provocamos avalanchas, y graficamos los resultados, obtendremos algo como lo que sigue:



Una gráfica exponencial, donde es evidente lo que también podemos inferir por lógica: la cantidad de avalanchas de menor intensidad (unos cuantos copos, o de duraciones muy pequeñas) serán las más comunes, mientras que las de mayor intensidad (prácticamente toda la montaña desplomándose, o de duraciones largas) serán menos comunes, de manera exponencial. Esta es una característica inherente de un sistema con CAO: los tiempos de 'relajación' (desde que se provoca la avalancha hasta su auto-organización en el estado crítico) presentan esa característica exponencial .

¡Pero no sólo eso! Si repitiéramos nuestro experimento, esta vez en otra montaña (si empezamos por ejemplo en el Popocatépetl, ahora vamos al Iztlaccihuatl, luego al Pico de Orizaba, luego al cerro del Chiquihuite, al de la Malinche, etc.) de distinto tamaño, notaríamos no sólo una gráfica similar de las intensidades de las avalanchas, sino que ¡serían exactamente las mismas! Es decir, el coeficiente exponencial (b en la gráfica de arriba) que caracteriza a las gráficas, sería constante. Esa es otra característica inherente de un sistema con CAO: la independencia en escalas, ya sea de tamaño o de tiempo.

¿Y todo esto que tiene que ver con el Juego de la Vida o siquiera con los Autómatas Celulares?

Bueno, en el siguiente post lo explicaré...

¡Saludos!

Javier


--
Eru kaluva tielyanna (Dios iluminará tu camino)
Visita la página de la Casa de la Juventud, TOR: www.torcasajuv.com
"Ama y haz lo que quieras. Si callas, callarás con amor; si gritas, gritarás con amor; si corriges, corregirás con amor; si perdonas, perdonarás con amor. Si tienes el amor arraigado en ti, ninguna otra cosa sino amor serán tus frutos." (San Agustín) Solamente asegúrate que en realidad sea AMOR...