lunes, 26 de septiembre de 2016

Automatas celulares

 
Un autómata celular unidimensional consiste en una sucesión o secuencia de celdad que contiene un valor numérico, dichos valores evolucionan a través de una serie de reglas en pasos de tiempo discreto.
 
Existen muchos sistemas naturales cotidianos cuya conducta y estructura compleja ha desa ado, hasta ahora, incluso el an alisis cualitativo. En algunos casos esta conducta puede simularse mediante los llamados sistemas din amicos, donde se pretende capturar el ser del proceso. Algunos de los sistemas pueden ser modelados num ericamente, e incluso analiticamente, con solo unas variables; pero en la mayor a de los casos la simulaci on comprende demasiados factores y hace falta un mayor acercamiento al problema.
 
  
Los Aut omatas Celulares son una clase de sistemas din amicos discretos cuyas caracteristicas los hacen un candidato idoneo para el estudio de sistemas con un nivel alto de complejidad, ya que estos pueden emplearse en una gran variedad de campos, por ejemplo en f sica, biolog a y sistemas de c ómputo

Una familia de reglas para la evoluci on del aut omata celular se obtiene a trav es de funci ones cuyo valor en un sitio determinado es obtenido de los valores del propio sitio y de sus vecinos m as cercanos en el paso de tiempo anterior. Cada regla lleva a modelos que di eren en detalles, sin embargo parece que entran en solo cuatro clases cualitativas, las cuales por su conducta pueden caracterizarse de la siguiente manera:

Clase 1: La evoluci on lleva a un estado homog eneo. Sin tener en cuenta el estado inicial, el sistema evoluciona siempre a un unico estado homog eneo o punto jo. Por ejemplo, despu es de un periodo de \transici on," todos los sitios tendr an valor 0.
Clase 2: La evoluci on lleva a estructuras peri odicas que est an separadas (temporalmente) y son simples. En este caso, los efectos de las reglas en los sitios tienen un rango nito. Esto es: un cambio en el valor de un solo sitio afecta solo una regi on nita de sitios alrededor de el, incluso despu es de un
n umero in nito de pasos de tiempo.
Clase 3: La evoluci on lleva a estructuras que siguen un modelo ca otico. Aqu í los efectos de las reglas se propagan a los sitios vecinos a una velocidad ja pero con un rango inde nido. Si el estado inicial se desordena, estadependencia puede llevar a una sucesi on aparentemente ca otica de valores
para un sitio particular
Clase 4: La evoluci on lleva a estructuras complejas, que no se explican por lasclases anteriores. Los efectos de las reglas tambi en se propagan inde nidamentea los sitios vecinos, pero a diferencia de los de clase 3, a varias velocidades.

Aplicación en Inteligencia Artificial
En la Inteligencia Artificial (IA) podemos observar dos enfoques distintos, según el objetivo perseguido:
  • El intento de desarrollar una tecnología capaz de crear máquinas con capacidades de razonamiento similares, o aparentemente similares a las de la inteligencia humana.
  • La investigación relativa a los mecanismos de inteligencia, que emplea el ordenador como herramienta de simulación para la validación de teorías.
El segundo enfoque no pretende obtener programas inteligentes, sino descubrir en qué consiste la inteligencia. Ya que la actividad inteligente surge inicialmente en animales vivos, una parte de los esfuerzos orientados en este sentido pretenden no sólo descubir en qué consiste la inteligencia, sino también en qué consiste la vida.
La Vida Artificial es el intento por parte del hombre, de crear vida, o algo parecido a la vida, mediante la combinación de símbolos (datos) y procesos de símbolos (programas) independientemente del soporte físico de estos símbolos y procesos.
La Vida Artificial, en parte, trata de recrear los procesos propios de la vida, partiendo de la suposición de que la vida o los procesos propios de la vida, si no son imprescindibles para la aparición de la inteligencia, al menos son una buena idea para crear inteligencia, ya que evolutivamente los seres inteligentes siempre han sido seres vivos.
Por otra parte, la Vida Artificial trata de descubrir que es la vida. Fundamentalmente, trata de descubrir si la vida depende de un soporte (físico, energético, metafísico o como se quiera llamar) o se trata de procesos, datos, configuraciones, esquemas, es decir, de objetos lógicos y sus relaciones, independientes del soporte. Este enfoque de la Vida Artificial se aleja tanto de la búsqueda de la inteligencia que parece difícil clasificarlo dentro de la Inteligencia Artificial si no se toman en cuenta las reflexiones anteriores, y perfectamente se podría clasificar como un campo de estudio independiente de la Inteligencia Artificial.
Dentro de la Vida Artificial, los Autómatas Celulares son el más claro ejemplo de este rodeo en la búsqueda de la inteligencia. Es bastante extraño decir que los Autómatas Celulares son inteligentes, no lo parecen en absoluto. En cambio, poseen muchos de los aspectos fundamentales de la vida en cuanto a procesos. Además, esto se intenta conseguir con la máxima simplicidad posible, por lo que podrían ser el fundamento, al menos teórico, de la vida, y por extensión, de la inteligencia. 

 El juego de la vida de Conway

Uno de los autómatas celulares más conocidos es el que John Horton Conway llamó el juego de la vida. El juego de la vida es un autómata celular bidimensional en cuadrícula con dos estados por celda. Cada celda o célula puede estar viva o muerta y en cada generación se aplica un algoritmo que sigue estas tres reglas:
1.- Cada célula viva con dos o tres células vecinas vivas sobrevive a la siguiente generación.
2.- Cada célula viva con ninguna, una, o más de tres células vivas a su alrededor pasa a estar muerta.
3.- Cada célula muerta con tres células vecinas vivas resucita en la siguiente generación.
El marco en el se desarrolla esta juego es una matriz bidimensional cuadrada, es decir con el mísmo número de filas que de columnas

 


Ejemplo del autómata de Conway



 Este texto no es mío, por lo que en justicia indico las fuentes:

 Autómatas Celulares, la regla 150
 http://www.redcientifica.com/gaia/ac/auto_c.htm
http://paginaspersonales.deusto.es/ivazquez/ponencias/evolucion99.pdf



jueves, 8 de septiembre de 2016

Código en C del test de primalidad basado en la división

En un post anterior https://mathengineering.blogspot.com.es/2016/08/test-de-primalidad-i-primeros-metodos.html
Se comentaron los test de primalidad elementales, uno de ellos el más fiable y a la vez más costoso computacionalmente es el denominado Test de la división.

Pues bien aqui os dejo el código en C  se han usado sólo las funciones de las API's estandar de ANSI C , por lo que el programa en C tiene menor alcance para realizar test que si usaramos la biblioteca GMP. con la que es posible manejar enteros de precisión arbitraria.
Pues bien el código en C es :

// programa para aplicar test de primalidad elementales
// limitado a un valor de tipo unsigned long

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#define MAX_LONG 429467295

int main(void)
{
    unsigned long numero_test;
    unsigned long raiz;
    unsigned int i;
    unsigned int contador_compuesto=0;

    do
    {
        printf("Introduce el numero "); // control del máximo valor a introducir
        scanf("%li", &numero_test);
    } while (numero_test>=MAX_LONG);

    raiz=(int) sqrt(numero_test); // valor limite de los valores a usa

    for (i=3;i<=raiz;i=i+2)
    {
        if ((numero_test%2)==0 ||(numero_test%i)==0)
        {
            contador_compuesto++; // solo con que aparezca un compuesto paramos la busqueda
            break;
        }
    }
    if (contador_compuesto>=1)
        {
            printf("El numero %u es compuesto\n ",numero_test);
            printf("El divisor menor es el %u ",i);
        }
    else
    {
        printf("El numero %u es primo ",numero_test);
    }

}

Java implementa la clase BigInteger, de serie, pero eso lo vemos otro día