lunes, 27 de mayo de 2013

Evidencia 12: Plataformas multiagente

Objetivo
Analizar agentes inteligentes y reactivos, comunicación y cooperación. Documentar la instalación de una plataforma multiagente (ej. JADE).

Introducción
Esta evidencia trata sobre la instalación de plataformas para programar sistemas multiagente.
Y como instalar el sistema multiagente JADE - Remote Agent Management en el Sistema Operativo Windows 7 de 64 Bit.

Desarrollo
  • Significado de JADE Java Agent Development Framework, o JADE, es una plataforma software para el desarrollo de agentes, implementada en Java
  • Para que sirve JADE -  La plataforma JADE soporta y proporciona una implementación estándar del lenguaje de comunicación FIPA-ACL, que facilita la comunicación entre agentes y permite la detección de servicios que se proporcionan en el sistema. 
  • De donde se puede descargar JADE? - En la pagina oficial: http://www.jade.tilab.com/
  • Que otras plataformas existen? - Existen otras como: Breve, Robocup, SPADE, The Tiny Multiagent Platform, JaCaMo, SPADE, Madkit, BESA, JASON, SBSMA.

Conclusiones
En esta practica se conoció más acerca de las plataformas multiagente y en especial de la plataforma JADE. 

Referencias

http://jade.tilab.com/
http://es.wikipedia.org/wiki/Java_Agent_Development_Framework
http://es.wikipedia.org/wiki/Sistema_multi-agente

Evidencia 10: Sistemas caóticos

Objetivo
Diseñar redes complejas y autómatas celulares, sistemas no lineales y analizar la teoría de caos, a través de los cuales se va a poder discernir entre los diseños más convenientes para el desarrollo del sistema.

Introducción
Teoría del caos es un sistemas dinámico muy sensible a las variaciones en las condiciones iniciales. Pequeñas variaciones en dichas condiciones iniciales pueden implicar grandes diferencias en el comportamiento futuro; complicando la predicción a largo plazo.

Descripción
Sistemas Caóticos
  • Sistema - (del latín systēma, proveniente del griego σύστημα) es un objeto complejo cuyos componentes se relacionan con al menos algún otro componente;
  • Propiedades caóticas que exhibe - Atractores, Fractales, Entropía y teoría de la información, Sincronización, Ciclos de retroalimentación o duplicado de periodo, Bifurcación, Auto-similitud, Turbulencia, Sensibilidad a condiciones iniciales.
  • Exhiben esas propiedades - Exhiben esas propiedades por su comportamientro pues con pequeños cambios en la configuración inicial son activados.Y llegan a partir de ciertas condiciones iniciales, a diferentes estados, pues tienen puntos sensibles con los cuales el sistema se va al caos y ya no se puede regresar. 


Conclusiones
Los sistemas caóticos nos pueden ser muy útiles en muchos campos de la ciencia y la tecnología. El estudio de estos a llegado a tener postulados, formulas y parámetros recientemente establecidos con aplicaciones como la meteorología o física cuántica. 



Evidencia 9: Análisis de una red

Esta practica fue realizada en equipo... la información de esta en el blog: http://asa181192.blogspot.mx/

domingo, 26 de mayo de 2013

Evidencia 8: Examen rápido de grafos

En esta practica se realizo un examen dentro del salón de clase el cual era sobre "Redes Complejas y Grafos"...

Evidencia 7: Programación de un Autómata Celular

Objetivo
Diseñar redes complejas y autómatas celulares, sistemas no lineales y analizar la teoría de caos, a través de los cuales se va a poder discernir entre los diseños más convenientes para el desarrollo del sistema.

Introducción
Implementa un autómata celular con la regla especificada (cada quien debe hacer una diferente). El programa debe recibir como entrada los valores de las celdas en t=0 y la cantidad de iteraciones (pasos de tiempo) a realizar.

Desarrollo
  1. Regla con la que se está trabajando: Mi programa lo hice de una manera que se ajusta a la regla que el usuario desea convirtiendo el numero decimal a binario y después los ocho posibles casos son almacenados e impresos para el usuario con el siguiente código:
  2. 01     for(i=0; i<8; i++){REGLA[i]=0;}
    02     printf("REGLA: ");
    03  scanf("%d",&n);
    04 //for(n=1;n<=256;n++){
    05  m=6;
    06  for(bin=1;bin<=n;bin*=2) 
    07   j=bin;
    08  for(j=bin;j>=1;j=(bin/=2)){
    09         for(j=bin;j>=1;j=(bin/=2)){   
    10    n_tem=n;
    11    k=n_temp;
    12    n_temp=n_tem%j;
    13    if(n_tem>=j){
    14        n_temp1=k/j;
    15        REGLA[m]=n_temp1;
    16        m--;}}}
    17        
    18  printf("\n");
    19  printf("XXX  XX0  X0X  X00  0XX  0X0  00X  000 \n");
    20  for(i=0; i<8; i++){if(REGLA[i]==1){printf(" X   ");}
    21          else{printf(" 0   ");}}  
    
Fragmentos de código que muestren lo siguiente:
    1. Determinación del valor de una celda para t=k+1 dado su valor y el de sus vecinos para t=k
    2. Determinación de los valores en t=k+1 para una ristra de celdas (relacionado con lo anterior).
    3. Impresión del resultado final.
  • En el siguiente pedazo de código se observa lo pedido anteriormente. Desde los valores de las celdas y la de sus vecinos hasta la impresión del resultado final
      01  if(/*PASADO*/CLIENTE[x-2][j]==1&&/*PRESENTE*/CLIENTE[x-1][j]==1&&/*FUTURO*/CLIENTE[0][j]==1) {CLIENTE[x-1][j+1]=REGLA[0];}//CASO1    
      02  if(/*PASADO*/CLIENTE[x-2][j]==1&&/*PRESENTE*/CLIENTE[x-1][j]==1&&/*FUTURO*/CLIENTE[0][j]==0) {CLIENTE[x-1][j+1]=REGLA[1];}//CASO2    
      03  if(/*PASADO*/CLIENTE[x-2][j]==1&&/*PRESENTE*/CLIENTE[x-1][j]==0&&/*FUTURO*/CLIENTE[0][j]==1) {CLIENTE[x-1][j+1]=REGLA[2];}//CASO3    
      04  if(/*PASADO*/CLIENTE[x-2][j]==1&&/*PRESENTE*/CLIENTE[x-1][j]==0&&/*FUTURO*/CLIENTE[0][j]==0) {CLIENTE[x-1][j+1]=REGLA[3];}//CASO4    
      05  if(/*PASADO*/CLIENTE[x-2][j]==0&&/*PRESENTE*/CLIENTE[x-1][j]==1&&/*FUTURO*/CLIENTE[0][j]==1) {CLIENTE[x-1][j+1]=REGLA[4];}//CASO5    
      06  if(/*PASADO*/CLIENTE[x-2][j]==0&&/*PRESENTE*/CLIENTE[x-1][j]==1&&/*FUTURO*/CLIENTE[0][j]==0) {CLIENTE[x-1][j+1]=REGLA[5];}//CASO6    
      07  if(/*PASADO*/CLIENTE[x-2][j]==0&&/*PRESENTE*/CLIENTE[x-1][j]==0&&/*FUTURO*/CLIENTE[0][j]==1) {CLIENTE[x-1][j+1]=REGLA[6];}//CASO7    
      08  if(/*PASADO*/CLIENTE[x-2][j]==0&&/*PRESENTE*/CLIENTE[x-1][j]==0&&/*FUTURO*/CLIENTE[0][j]==0) {CLIENTE[x-1][j+1]=REGLA[7];}//CASO8
      09     
      10  printf("\n");
      11  for(i=0; i<x; i++){if(CLIENTE[i][j]==1){printf("X");}
      12          else{printf(" ");}}
      
      
Capturas de pantalla donde se indiquen los resultados utilizando diferentes ristras de inicio y diferente cantidad de iteraciones.







Código





Conclusiones
En esta practica se observo como un autómata celular funciona de una forma dinámica, y va cambiando con el paso del tiempo. Y como distintas reglas cambian dramáticamente el comportamiento de cada caso en particular, y como a partir de algo simple, se obtiene un comportamiento complejo.

Referencias

Aplicación echa en DEV-C++: http://www.bloodshed.net/

Evidencia 6: diagramas de flujo para PSO y ACO

Objetivo
Analizar las técnicas de ajuste y auto-ajuste paramétrico mediante el análisis de algoritmos que requieren ajuste de parámetros y las técnicas más apropiadas para el correcto funcionamiento de las mismas.

Introducción
Se trata de profundizar en los temas de Optimización por Enjambre de Partículas (Particle Swarm Optimization o PSO) y Optimización por Colonia de Hormigas (Ant Colony Optimization o ACO). Para ello, consulta las filminas sobre el tema y el material de apoyo que se proporciona en la página (puedes también buscar información extra). 

Desarrollo
Resuelve las preguntas que se plantean y construye diagramas de flujo para el algoritmo de PSO y el algoritmo de ACO.

Conclusiones
Preguntas:
1.   ¿Qué es "swarm intelligence"? La inteligencia de enjambre (SI) es el comportamiento colectivo de las descentralizadas , autogestionadas sistemas, naturales o artificiales. El concepto se emplea en los trabajos sobre inteligencia artificial. La expresión se introdujo por Gerardo Beni y Jing Wang en 1989, en el contexto de los sistemas robóticos celulares.

2.   ¿Qué significa PSO? En ciencias de la computación, se refiere a la optimización por enjambre de partículas ( particle swarm optimization - PSO)

3.   ¿Cuáles son las características principales de una partícula? Cada partícula evoluciona teniendo en cuenta la mejor solución encontrada en su recorrido y al líder. En cada iteración, las partículas modifican su velocidad hacia la mejor solución de su entorno teniendo en cuenta la información del líder.
Existen dos versiones diferentes de PSO, el algoritmo normal y una versión binaria. En el primero, las partículas pueden tomar valores reales en cada una de las dimensiones. En el algoritmo binario, cada dimensión de las partículas solo pueden tomar el valor 0 o 1.

4.  ¿Cuáles son los dos valores que influyen en la posición de la partícula? La posición de una partícula i cualquiera la denotaremos por Xi, donde Xi es un vector que almacena cada una de las posiciones que tiene la partícula en cada una de las dimensiones que comprende el espacio de búsqueda. Además, denotaremos por Vi a la velocidad de la partícula i, la cual también es un vector, el cual contiene cada una de las velocidades que tiene la partícula en cada dimensión. Esta velocidad es añadida a la posición de la partícula, para mover la partícula desde un tiempo   t-1 a un tiempo t .

5. ¿Qué parámetros involucra el algoritmo de PSO? El espacio de búsqueda; La posición la velocidad de la i-ésima partícula; La mejor posición anterior; La velocidad de la partícula; Posición actual; Coeficiente de inercia.

6. ¿Qué tipo de problemas pueden resolverse con PSO? Las ventajas atribuidas a las técnicas inteligentes de optimización son su paralelismo intrínseco, su capacidad para resolver problemas complejos, de gran tamaño, y con un mínimo conocimiento del sistema que se está identificando.

7. ¿Qué significa ACO? En ciencias de la computación y la investigación de operaciones, la optimización del algoritmo de la colonia de hormigas (ACO) es una técnica probabilística para la solución de problemas computacionales que pueden reducirse a la búsqueda de buenos caminos a través de los gráficos .

8. ¿Qué metáfora es la que se sigue en la ACO? Tal como el comportamiento de una colonia de hormigas. Para la resolución de problemas de optimización y búsqueda.

9.  ¿Qué papel juega la feromona en la ACO? En las hormigas sirve para volver al nido y para tener una forma probabilística en las bifurcaciones para elegir el siguiente camino. En el ACO funciona de una forma similar en la cual se seleccionan los caminos más prometedores en las bifurcaciones para obtener la mejor combinación de caminos.

10.  ¿Qué tipo de problemas pueden resolverse con ACO? Se pueden aplicar a cualquier problema que se pueda modelar como un grafo.

Diagrama PSO

Diagrama ACO





Referencias

http://en.wikipedia.org/wiki/Swarm_intelligence
http://en.wikipedia.org/wiki/Particle_swarm_optimization
http://elisa.dyndns-web.com/~saraelena/material/sistadap/guerra_pso.pdf
http://jaibana.udea.edu.co/grupos/revista/revistas/nro055/Articulo%2012.pdf
http://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms
http://www.slideshare.net/Slidemora/optimizacin-basada-en-colonias-de-hormigas

sábado, 25 de mayo de 2013

Evidencia 5: Algoritmos genéticos para problema de la mochila

Objetivo
Analizar las técnicas de ajuste y auto-ajuste paramétrico mediante el análisis de algoritmos que requieren ajuste de parámetros y las técnicas más apropiadas para el correcto funcionamiento de las mismas.

Introducción
Implementa un algoritmo genético en el lenguaje de tu elección para resolver el problema de la mochila; utiliza como prueba las instancias proporcionadas (vienen más abajo).

Desarrollo
Se utilizaron esta instancia para probar el código. El cual fue desarrollado en C++ y compilado por DEV-C++
Instancia 1
Objetoo1o2o3o4o5
Ganancia1515303010
Peso8715105

Código



Conclusiones
Qué tan lejos quedó tu AG del óptimo?: En algunos casos obtuvo el óptimo, casi en un 70% de las veces

Qué valores funcionaron mejor para la instancia?: Ambos funcionan muy bien, pero opte por usar las del 1 por ser menores datos, y su facilidad de manejo.

Qué diferencia notaste entre resolver las instancias por fuerza bruta y resolverlas mediante un AG?: la rapidez del proceso y la sobre carga de información son muy notorias entre estos 2 métodos.

Qué tan fácil crees que sea resolver por fuerza bruta una instancia de 11 objetos? de 20? de 30? No es nada fácil por que cada vez que compara tiene que cargar un listado completo, y es mucho trabajo inutil para el procesador

Para que sirve un AG? para buscar una solución optima a combinaciones de casos ó objetos.

Qué ventajas tiene un AG? su eficacia al momento de obtener los mejores resultados y compararlos entre ellos para obtener el optimo.

Que desventajas tiene un AG? el inicio en la selección de la primera generación por obtenerlos de manera aleatoria.

Puntos Extra
Para que el usuario defina cuantos objetos con sus valores y pesos solo se crea un arreglo bidimensional de 2x"n" objetos. El cual es llamado en cada asignación de peso/valor de cada renglón.
Y la capacidad de la mochila solo se le pide al usuario que ingrese un numero >"0" el cual es vaciado en la variable: "Capacidad"..... Y así con esto puede ser modificable los parámetros del programa.


Referencias

Aplicación echa en DEV-C++: http://www.bloodshed.net/