Sistemas Adaptativos
martes, 28 de mayo de 2013
evidencia 9
http://cenobiomg-sistemas-adaptativos.blogspot.mx/2013/05/evidencia-9-redes-complejas-cenobio.html
viernes, 24 de mayo de 2013
Evidencia 11
perceprton
INTRODUCCIÓN:
Optimización mediante Ant Colony Optimization (ACO) es una técnica probabilista creada por Marco Doringo en 1992 utilizada para solucionar problemas de cómputo; este algoritmo está inspirado en el comportamiento que presentan las hormigas para encontrar las trayectorias desde la colonia hasta el alimento.
En la naturaleza, las hormigas vagan aleatoriamente en su búsqueda de alimento, y a lo largo de su camino de regreso a la colonia depositan una hormona denominada feromona. Si otras hormigas encuentran este rastro, lo más probable es que sigan este camino para depositar el alimento en la colonia.
Con el paso del tiempo el rastro de la feromona comienza a evaporarse y se reduce su fuerza atractiva. Las hormigas que siguen el rastro aumentan la cantidad de la feromona, con lo que el rastro es más fuerte y dura más tiempo.
Cuantas más hormigas recorran ese camino, más intenso será el olor de la feromona, lo que estimula a más hormigas a seguir esa trayectoria.
Desde el punto de vista algorítmico, la evaporación de la feromona tiene la ventaja de provocar la convergencia a una solución localmente óptima. Si no hubiera evaporación, todas las trayectorias posibles serían igualmente atractivas para las hormigas. Esta situación haría que las trayectorias menos usadas por las hormigas, fueran igual de atractivas que las más utilizadas.
Así, cuando una hormiga encuentra una buena trayectoria de la colonia a una fuente de alimento, es más probable que otras hormigas sigan esa trayectoria, y la regeneración de la feromona provoca que finalmente todas las hormigas sigan una sola trayectoria.
Este comportamiento es la base para el diseño del algoritmo, donde las "hormigas simuladas" caminan alrededor del gráfico que representa el problema que solucionar.
Objetivo: Encontrar la solución más óptima para el problema del Agente Viajero (TSP- Traveling salesman problem) usando el algoritmo de ACO.
Justificación: Se escogió el problema del Agente Viajero porque es un problema que hemos resuelto pero con otros algoritmos heurísticos como el vecino más cercano (Nearest-neighbor algorithm) y queríamos ver como funcionaba el algoritmo de ACO en este tipo de problema.
Desarrollo:
El problema resuelto por medio de dos hormigas se encuentra en archivo pdf del siguiente enlace:
https://docs.google.com/file/d/0BzRiJ_wE61zsOWxScEExWHNLWTQ/edit?usp=sharing
Código:
Optimización mediante Ant Colony Optimization (ACO) es una técnica probabilista creada por Marco Doringo en 1992 utilizada para solucionar problemas de cómputo; este algoritmo está inspirado en el comportamiento que presentan las hormigas para encontrar las trayectorias desde la colonia hasta el alimento.
En la naturaleza, las hormigas vagan aleatoriamente en su búsqueda de alimento, y a lo largo de su camino de regreso a la colonia depositan una hormona denominada feromona. Si otras hormigas encuentran este rastro, lo más probable es que sigan este camino para depositar el alimento en la colonia.
Con el paso del tiempo el rastro de la feromona comienza a evaporarse y se reduce su fuerza atractiva. Las hormigas que siguen el rastro aumentan la cantidad de la feromona, con lo que el rastro es más fuerte y dura más tiempo.
Cuantas más hormigas recorran ese camino, más intenso será el olor de la feromona, lo que estimula a más hormigas a seguir esa trayectoria.
Desde el punto de vista algorítmico, la evaporación de la feromona tiene la ventaja de provocar la convergencia a una solución localmente óptima. Si no hubiera evaporación, todas las trayectorias posibles serían igualmente atractivas para las hormigas. Esta situación haría que las trayectorias menos usadas por las hormigas, fueran igual de atractivas que las más utilizadas.
Así, cuando una hormiga encuentra una buena trayectoria de la colonia a una fuente de alimento, es más probable que otras hormigas sigan esa trayectoria, y la regeneración de la feromona provoca que finalmente todas las hormigas sigan una sola trayectoria.
Este comportamiento es la base para el diseño del algoritmo, donde las "hormigas simuladas" caminan alrededor del gráfico que representa el problema que solucionar.
Objetivo: Encontrar la solución más óptima para el problema del Agente Viajero (TSP- Traveling salesman problem) usando el algoritmo de ACO.
Justificación: Se escogió el problema del Agente Viajero porque es un problema que hemos resuelto pero con otros algoritmos heurísticos como el vecino más cercano (Nearest-neighbor algorithm) y queríamos ver como funcionaba el algoritmo de ACO en este tipo de problema.
Desarrollo:
El problema resuelto por medio de dos hormigas se encuentra en archivo pdf del siguiente enlace:
https://docs.google.com/file/d/0BzRiJ_wE61zsOWxScEExWHNLWTQ/edit?usp=sharing
Código:
https://docs.google.com/file/d/0BzRiJ_wE61zsclFteWJSdHRjdE0/edit?usp=sharing
Resultado: De los caminos hechos por las 8 hormigas a las cuales evaluamos en el programa , observamos que en las primeras 5 hubo variaciones, pero las ultimas 3 tomaron el mismo camino. El camino que tuvo mas repeticiones fue: 0-3-1-2-0 es decir: A-D-B-C-A. Por el cual pasaron las hormigas 4,6,7 y 8.
Video en Youtube:
.
Resultado: De los caminos hechos por las 8 hormigas a las cuales evaluamos en el programa , observamos que en las primeras 5 hubo variaciones, pero las ultimas 3 tomaron el mismo camino. El camino que tuvo mas repeticiones fue: 0-3-1-2-0 es decir: A-D-B-C-A. Por el cual pasaron las hormigas 4,6,7 y 8.
Video en Youtube:
.
h
Conclusiones:
El algoritmo de ACO no es muy exacto porque este depende de la cantidad de hormigas que se usen así como si hay muchas ciudades, el algoritmo cada vez se va haciendo más inexacto y se requieren más operaciones, si hay muchas ciudades en ese caso es necesario más hormigas por lo que el resultado puede variar
En el problema hecho a mano el resultado fue diferente porque la computadora es más exacta a la hora de elegir un número aleatorio esa es una variación ya que no se escoge el camino más corto sino que es por medio de % de probabilidad de que se elija un camino teniendo más probabilidad el que sea más corto sin embargo el camino que se elija no puede ser siempre el más corto variando a veces haciendo que a veces el resultado puede variar por 1 o 2 caminos respecto al más exacto.
Conclusiones:
El algoritmo de ACO no es muy exacto porque este depende de la cantidad de hormigas que se usen así como si hay muchas ciudades, el algoritmo cada vez se va haciendo más inexacto y se requieren más operaciones, si hay muchas ciudades en ese caso es necesario más hormigas por lo que el resultado puede variar
En el problema hecho a mano el resultado fue diferente porque la computadora es más exacta a la hora de elegir un número aleatorio esa es una variación ya que no se escoge el camino más corto sino que es por medio de % de probabilidad de que se elija un camino teniendo más probabilidad el que sea más corto sin embargo el camino que se elija no puede ser siempre el más corto variando a veces haciendo que a veces el resultado puede variar por 1 o 2 caminos respecto al más exacto.
jueves, 16 de mayo de 2013
Evidencia 12
- ¿Qué significa "JADE"?
Java agent development
farmwork
- ¿Para qué sirve JADE?
Simplifica la
implementación de sistemas multi-agente a través de un middleware que cumpla
con las especificaciones FIPA a través de un conjunto de herramientas gráficas
que soporta la depuración y fases de implementación.
3.
¿De dónde se puede descargar?
El software de JADE se
debe descargar del sitio web http//jade.tilab.com. Para poder acceder a la zona
de descargas debe de registrarse.
- ¿Qué otras plataformas existen?
SPADE, MADKit, GAIA,
MASE, Agent UML, ADELFE, INGENIAS, Mas-CommonKADS
Referencias
miércoles, 10 de abril de 2013
Entregable 10
1456371
1455668
Sistemas caóticos
Estos sistemas
son los que privan en la naturaleza. Se caracteriza por el hecho de que una
pequeña variación en las condiciones iniciales puede llegar a hacerlo
impredecible en el curso del tiempo. Debido a las
condiciones iniciales es encontrar el orden en el desorden.
El
agua de un río: si dejamos un trozo de madera en un punto, este será movido río abajo. Pero si dejamos otro trozo de madera en una posición idéntica, este ira
río abajo pero en otro lugar distinto al primero. En conclusión esto siempre dependerá
del movimiento del agua.
El
clima: Solo sabemos que cada año habrá 4 periodos con unas características climáticas
conocidas. No es preciso que algún día se consiga averiguar con precisión matemática
el tiempo que hará al día siguiente. En conclusión: base a ecuaciones se
puede elaborar estudios de su comportamiento pasado y el conocimiento de sus
condiciones iniciales, sin embargo no podemos conocer con exactitud los
parámetros que fijan sus condiciones iniciales y esto provoca que aunque se
conozca el modelo, éste diverja de la realidad pasado un cierto tiempo es un sistema
impredecible que le confiere a cierto orden de las estaciones.
El péndulo de
un reloj en buen estado no se moverá suavemente a veces y violentamente otras
sino que todos los movimientos oscilatorios serán parecidos.
viernes, 1 de marzo de 2013
Evidencia 2
Auto-ajuste.
Vídeo
Código
Este código esta basado en una red en el cual aplicamos el auto-ajuste donde cada monito tiene un nivel de vida por cada mensaje que envié gastara vida entonces aplicaremos el auto ajuste en el nivel de intensidad de la señal y la posibilidad de poder mover el monito para que pueda gastar menos pila y enviar señales pequeñas con las cuales prolongaran su tiempo de vida.
Código
jueves, 28 de febrero de 2013
Evidencia 5
1455668
1491641
1607064
1456371
Instancia
1
Objeto
|
o1
|
o2
|
o3
|
o4
|
o5
|
Ganancia
|
15
|
15
|
30
|
30
|
10
|
Peso
|
8
|
7
|
15
|
10
|
5
|
Capacidad de la mochila: 35
Generación
de la población inicial:
public static void Cruza(){
int
x1=rnd.nextInt(100)+1; //Tomamos cuatro cromosomas de la ruleta
int
x2=rnd.nextInt(100)+1;
int x3=rnd.nextInt(100)+1;
int
x4=rnd.nextInt(100)+1;
Evaluación:
public static void Evaluar(){
int
fact1,fact3,fact2,fact4;
apt1=(matriz[x1][0]*ganancia[0])+(matriz[x1][1]*ganancia[1])+(matriz[x1][2]*ganancia[2])+(matriz[x1][3]*ganancia[3])+(matriz[x1][4]*ganancia[4]);//mutiplicamos los
arreglos para evaluar.
aptacum=aptacum+apt1;
apt2=(matriz[x2][0]*ganancia[0])+(matriz[x2][1]*ganancia[1])+(matriz[x2][2]*ganancia[2])+(matriz[x2][3]*ganancia[3])+(matriz[x2][4]*ganancia[4]);//mutiplicamos los
arreglos para evaluar.
aptacum=aptacum+apt2;
apt3=(matriz[x3][0]*ganancia[0])+(matriz[x3][1]*ganancia[1])+(matriz[x3][2]*ganancia[2])+(matriz[x3][3]*ganancia[3])+(matriz[x3][4]*ganancia[4]);//mutiplicamos los
arreglos para evaluar.
aptacum=aptacum+apt3;
apt4=(matriz[x4][0]*ganancia[0])+(matriz[x4][1]*ganancia[1])+(matriz[x4][2]*ganancia[2])+(matriz[x4][3]*ganancia[3])+(matriz[x4][4]*ganancia[4]);//mutiplicamos los
arreglos para evaluar.
aptacum=aptacum+apt4;
Selección de pareja:
public static void Cruza(){
int
x1=rnd.nextInt(100)+1; //Tomamos cuatro cromosomas de la ruleta
int
x2=rnd.nextInt(100)+1;
int
x3=rnd.nextInt(100)+1;
int
x4=rnd.nextInt(100)+1;
System.out.println("Cromosomas
tomados de la ruleta: "+x1+" "+x2+" "+x3+" "+x4);
System.out.println("Cromosoma 1:
"+ruleta[x1][0]+ruleta[x1][1]+ruleta[x1][2]+ruleta[x1][3]+ruleta[x1][4]);
System.out.println("Cromosoma 2:
"+ruleta[x2][0]+ruleta[x2][1]+ruleta[x2][2]+ruleta[x2][3]+ruleta[x2][4]);
System.out.println("Cromosoma 3:
"+ruleta[x3][0]+ruleta[x3][1]+ruleta[x3][2]+ruleta[x3][3]+ruleta[x3][4]);
System.out.println("Cromosoma 4:
"+ruleta[x4][0]+ruleta[x4][1]+ruleta[x4][2]+ruleta[x4][3]+ruleta[x4][4]);
Cruza:
for(int i=0;i<5;i++){//Cruzamos
int apt1,apt2,apt3,apt4;
cromosoma1[3]=cromosoma2[3];//----->Dejamos
la cabeza del cromosoma 1 y la cola del 2
cromosoma1[4]=cromosoma2[4];
cromosoma2[3]=cromo1clon[3];//----->Dejamos
la cabeza del cromosoma 2 y la cola del 1
cromosoma2[4]=cromo1clon[4];
cromosoma3[3]=cromosoma4[3];//----->Dejamos
la cabeza del cromosoma 3 y la cola del 4
cromosoma3[4]=cromosoma4[4];
cromosoma4[3]=cromo3clon[3];//----->Dejamos
la cabeza del cromosoma 4 y la cola del 3
cromosoma4[4]=cromo3clon[4];
System.out.println("Cromosoma 1
despues de cruza: "+i+":"+cromosoma1[0]+cromosoma1[1]+cromosoma1[2]+cromosoma1[3]+cromosoma1[4]);
System.out.println("Cromosoma 2
despues de cruza: "+i+":"+cromosoma2[0]+cromosoma2[1]+cromosoma2[2]+cromosoma2[3]+cromosoma2[4]);
System.out.println("Cromosoma 3
despues de cruza: "+i+":"+cromosoma3[0]+cromosoma3[1]+cromosoma3[2]+cromosoma3[3]+cromosoma3[4]);
System.out.println("Cromosoma 4
despues de cruza: "+i+":"+cromosoma4[0]+cromosoma4[1]+cromosoma4[2]+cromosoma4[3]+cromosoma4[4]);
apt1=(cromosoma1[0]*ganancia[0])+(cromosoma1[1]*ganancia[1])+(cromosoma1[2]*ganancia[2])+(cromosoma1[3]*ganancia[3])+(cromosoma1[4]*ganancia[4]);//mutiplicamos los
arreglos para evaluar.
apt2=(cromosoma2[0]*ganancia[0])+(cromosoma2[1]*ganancia[1])+(cromosoma2[2]*ganancia[2])+(cromosoma2[3]*ganancia[3])+(cromosoma2[4]*ganancia[4]);//mutiplicamos los
arreglos para evaluar.
apt3=(cromosoma3[0]*ganancia[0])+(cromosoma3[1]*ganancia[1])+(cromosoma3[2]*ganancia[2])+(cromosoma3[3]*ganancia[3])+(cromosoma3[4]*ganancia[4]);//mutiplicamos los
arreglos para evaluar.
apt4=(cromosoma4[0]*ganancia[0])+(cromosoma4[1]*ganancia[1])+(cromosoma4[2]*ganancia[2])+(cromosoma4[3]*ganancia[3])+(cromosoma4[4]*ganancia[4]);//mutiplicamos los
arreglos para evaluar.
System.out.println("\nGanancia
del cromosoma 1 = "+apt1);
System.out.println("Ganancia del
cromosoma 2 = "+apt2);
System.out.println("Ganancia del
cromosoma 3 = "+apt3);
System.out.println("Ganancia del
cromosoma 4 = "+apt4);
Parámetro
|
Valor
|
Tamaño
de las generaciones (poblaciones)
|
4
|
Método
para generar la población inicial
|
Random
|
Probabilidad
de cruza
|
45%
|
Probabilidad
de mutación
|
70%
|
Método
de cruza
|
Método de la ruleta
|
Criterio
de terminación
|
Mayor ganancia menor peso
|
Instancia
2
Objeto
|
o1
|
o2
|
o3
|
o4
|
o5
|
o6
|
o7
|
o8
|
o9
|
o10
|
Ganancia
|
67
|
15
|
33
|
75
|
81
|
44
|
17
|
72
|
91
|
16
|
Peso
|
47
|
43
|
44
|
35
|
33
|
36
|
24
|
49
|
41
|
29
|
Capacidad de la mochila: 150
Generación
de la población inicial:
System.out.println("Cromosomas a
tomar: "+x1+" "+x2+" "+x3+" "+x4);//generamso los numeros de los
cromosomas que tomaremos.
System.out.println("Cromosoma 1:
"+matriz[x1][0]+matriz[x1][1]+matriz[x1][2]+matriz[x1][3]+matriz[x1][4]+matriz[x1][5]
+matriz[x1][6] +matriz[x1][7] +matriz[x1][8] +matriz[x1][9]);//Tomamos los
cromosomas
System.out.println("Cromosoma 2:
"+matriz[x2][0]+matriz[x2][1]+matriz[x2][2]+matriz[x2][3]+matriz[x2][4]+matriz[x2][5]
+matriz[x2][6] +matriz[x2][7] +matriz[x2][8] +matriz[x2][9]);
System.out.println("Cromosoma 3:
"+matriz[x3][0]+matriz[x3][1]+matriz[x3][2]+matriz[x3][3]+matriz[x3][4]+matriz[x3][5]
+matriz[x3][6] +matriz[x3][7] +matriz[x3][8] +matriz[x3][9]);
System.out.println("Cromosoma 4:
"+matriz[x4][0]+matriz[x4][1]+matriz[x4][2]+matriz[x4][3]+matriz[x4][4]+matriz[x4][5]
+matriz[x4][6] +matriz[x4][7] +matriz[x4][8] +matriz[x4][9]);
Evaluación:
if(fact1>35){//Se valida que los
cromosomas sean factbibles sino se toma otro.
x1=rnd.nextInt(1023)+1;
System.out.println("modx1");
}
if(fact2>150){
x2=rnd.nextInt(1023)+1;
System.out.println("modx2");
}
if(fact3>150){
x3=rnd.nextInt(1023)+1;
System.out.println("modx3");
}
if(fact4>150){
x4=rnd.nextInt(1023)+1;
System.out.println("modx4");
}
Selección de pareja:
public static void Cruza(){
int x1=rnd.nextInt(100)+1;
//Tomamos
cuatro cromosomas de la ruleta
int
x2=rnd.nextInt(100)+1;
int
x3=rnd.nextInt(100)+1;
int
x4=rnd.nextInt(100)+1;
System.out.println("Cromosomas
tomados de la ruleta: "+x1+" "+x2+" "+x3+" "+x4);
System.out.println("Cromosoma 1:
"+ruleta[x1][0]+ruleta[x1][1]+ruleta[x1][2]+ruleta[x1][3]+ruleta[x1][4]+ruleta[x1][5]+ruleta[x1][6]+ruleta[x1][7]+ruleta[x1][8]+ruleta[x1][9]);
System.out.println("Cromosoma 2:
"+ruleta[x2][0]+ruleta[x2][1]+ruleta[x2][2]+ruleta[x2][3]+ruleta[x2][4]+ruleta[x2][5]+ruleta[x2][6]+ruleta[x2][7]+ruleta[x2][8]+ruleta[x2][9]);
System.out.println("Cromosoma 3:
"+ruleta[x3][0]+ruleta[x3][1]+ruleta[x3][2]+ruleta[x3][3]+ruleta[x3][4]+ruleta[x3][5]+ruleta[x3][6]+ruleta[x3][7]+ruleta[x3][8]+ruleta[x3][9]);
System.out.println("Cromosoma 4:
"+ruleta[x4][0]+ruleta[x4][1]+ruleta[x4][2]+ruleta[x4][3]+ruleta[x4][4]+ruleta[x4][5]+ruleta[x4][6]+ruleta[x4][7]+ruleta[x4][8]+ruleta[x4][9]);
Cruza:
for(int i=0;i<10;i++){//Cruzamos
int apt1,apt2,apt3,apt4;
cromosoma1[3]=cromosoma2[3];//----->Dejamos
la cabeza del cromosoma 1 y la cola del 2
cromosoma1[4]=cromosoma2[4];
cromosoma2[3]=cromo1clon[3];//----->Dejamos
la cabeza del cromosoma 2 y la cola del 1
cromosoma2[4]=cromo1clon[4];
cromosoma3[3]=cromosoma4[3];//----->Dejamos
la cabeza del cromosoma 3 y la cola del 4
cromosoma3[4]=cromosoma4[4];
cromosoma4[3]=cromo3clon[3];//----->Dejamos
la cabeza del cromosoma 4 y la cola del 3
cromosoma4[4]=cromo3clon[4];
Parámetro
|
Valor
|
Tamaño
de las generaciones (poblaciones)
|
4
|
Método
para generar la población inicial
|
Random
|
Probabilidad
de cruza
|
54%
|
Probabilidad
de mutación
|
78%
|
Método
de cruza
|
Método de la ruleta
|
Criterio
de terminación
|
Mayor ganancia menor peso
|
Reporte
de conclusiones:
- ¿Qué tan lejos quedó tu AG
del óptimo?
Instancia 1: 75
Instancia 2:134
- ¿Qué valores funcionaron
mejor para la instancia?
Valores más pequeños.
- ¿Qué diferencia notaste
entre resolver las instancias por fuerza bruta y resolverlas mediante un
AG?
Con AG es un código
más corto, mayor eficiente y rápido.
- ¿Qué tan fácil crees que sea
resolver por fuerza bruta una instancia de 11 objetos? ¿De 20? ¿De 30?
Difícil, ya que sería
un código aún más largo.
- ¿Para qué sirve un AG?
Para la solución de
problemas de optimización.
- Qué ventajas tiene un AG?
Estos operan de
forma simultánea con varias soluciones, en vez de la manera secuencial. Para
los problemas de optimización son menos afectados por los máximos locales. La
habilidad de manipular muchos parámetros simultáneamente.
- ¿Qué desventajas tiene un AG?
Definir una
representación del problema, pueden tardar en converger dependiendo del tamaño
de los parámetros, pueden converger prematuramente debido a una serie de
problemas.
Instancia 1
Instancia 2
Suscribirse a:
Entradas (Atom)