ENTREGA FINAL
Objetivo.
Por medio de esta práctica el alumno implementará algunas de las técnicas vistas en el curso de la materia de Programación de Sistemas Adaptativos. Se programará un Sistema Adaptativo con cómputo evolutivo o sistemas complejos.
Diseño del Sistema.
Para la siguiente práctica se estudia el comportamiento de un Autómata Celular que con el paso del tiempo se ha ido estudiando marcando 3 etapas importantes con científicos que hicieron aportes importantes.
Diseño de la Solución.
Se considera un vector con valores binarios dependiendo de la regla escogida por el usuario para establecer la Regla a mostrar y poder entender el proceso de obtención de cada regla.
- La era de Von Neumann (Máquina de Turing).
- La era de John Horton COnway (Juego de la Vida).
- La era de Stephen Wolfram(Sistema caótico en la evolución al establecer condiciones alteatorias).
Diseño de la Solución.
Se considera un vector con valores binarios dependiendo de la regla escogida por el usuario para establecer la Regla a mostrar y poder entender el proceso de obtención de cada regla.
Se realiza la conversión de entero a binario en la clase MainCelular.java y se manda a la clase Regla.java el vector del número binario obtenido de la conversión del numero escogido por el usuario para establecer la regla a mostrar en el Frame.
do { do { numRegla = JOptionPane.showInputDialog("Inserta el numero de regla a mostrar:","90"); }while(numRegla.equals("")); regla = Integer.parseInt(numRegla); }while( regla < 0 || regla > 255); int pregunta = JOptionPane.showConfirmDialog(null, "¿Desea generar un vector inicial aleatorio?", "Inicializacion", JOptionPane.YES_NO_OPTION); if (pregunta == 0) { R.Random(); } /* Se hace la conversion de Entero a Binario */ for(int i=7;i>=0;i--) { NumBinario[i]=regla%2; System.out.println("El elemento ["+i+"] -> "+NumBinario[i]); regla/=2; } R.getRegla(NumBinario[0],NumBinario[1],NumBinario[2],NumBinario[3],NumBinario[4], NumBinario[5],NumBinario[6],NumBinario[7]);
Se establece como Valor inicial un pixel en el centro cuyo valor booleano es true para la visualización en el Panel donde se va a dibujar el fractal simple indicado por el usuario.
Ya dentro de la clase Regla.java se recibe el vector binario y se 'crea' la regla. Dentro del método getCasilla se va siguiendo la regla y regresa el nuevo valor que la célula tendrá en la siguiente etapa del tiempo (k+1).
public int getCasilla(int A,int B ,int C) { int r=0; if(A==0 && B==0 && C==0){r=a; }else if(A==0 && B==0 && C==1){r=b; }else if(A==0 && B==1 && C==0){r=c; }else if(A==0 && B==1 && C==1){r=d; }else if(A==1 && B==0 && C==0){r=e; }else if(A==1 && B==0 && C==1){r=f; }else if(A==1 && B==1 && C==0){r=g; }else if(A==1 && B==1 && C==1){r=h; } return r; }
En el método Regla se expone que al cambiar el vector inicial, que mostraba solamente un pixel encendido (true), por uno aleatorio se genera un fractal mas complejo. ('Sistema Caotico')
public void Reglas(){ for(int i=0;i<1000;i++){ A[0][i]=0; } if (rand == true) { Random r = new Random(); for(int j=0; j<=500; j++) { boolean truefalse = r.nextBoolean(); A[0][j] = (truefalse == true)?1:0; /*Se genera un vector inicial aleatorio*/ } } else { A[0][100]=1; } }
Para ver el código completo del programa:
https://gist.github.com/3762974
Una vez visto los resultados de la aplicación se observa que el estudio de los autómatas celulares requiere mayor estudio debido a que si se selecciona una regla y una configuración inicial y se sigue la evolución temporal se observará un cambio considerable en el curso del tiempo.
Cabe mencionar que un autómata celular puede ser imprescindible con configuraciones iniciales aleatorias ya que es considerado un ejemplo común de un Sistema Caótico.
Referencias:
http://delta.cs.cinvestav.mx/~mcintosh/comun/tesismaestria/rene/tesisReneHtml/node14.html
http://www.ejournal.unam.mx/cns/no24/CNS02405.pdf
!!!!!!!! queeeeeeeeee !! y la 99 ?? :(
ResponderEliminarSe veía mas padre la 185 (:
Eliminar