lunes 19 de marzo de 2007

Visualización de algoritmos bioinspirados y evolutivos

A menudo es dificil tener una buena visualización de la evolución de un algoritmo evolutivo, debido a la gran cantidad de datos que se manejan en cada evolución.

Normalmente estos algoritmos trabajan con vectores solución n-dimensionales, a partir de 3 dimensiones su representación espacial se hace imposible, entonces ¿Como vemos la evolución espacial de un algoritmo n-dimensional?, hay posibles representaciones gráficas que nos posibilitan esto.

La opción más adecuada es representar el valor de cada dimensión por separado, de forma que cada dimensión toma valores en una línea, y todas las líneas son paralelas. Así podríamos unir todos los puntos y obtener una figura gráfica que no ayuda a ver el estado de una solución. En esta imagen podemos ver la representación de varias soluciones que evolucionan en paralelo, cada solución es una línea y cada punto por los que pasa esa línea es el valor de la solución en esa dimensión.

Así que para poder ver una evolución de nuestro algoritmo, necesitamos un elemento software que vaya extrayendo datos del algoritmo, para después poder procesar esos datos y generar estos gráficos tan ilustrativos.

Y como siempre surge otra pregunta, ¿esto lo habrá echo alguién para que yo lo pueda usar?, pues la respuesta es que seguro que sí, hay muchas opciones disponibles. Yo os voy a proponer la que implementé cuando me hizo falta.

Al elemento software que extrae datos del algoritmo, lo llamé Trazador, y simplemente hay que utilizar ese objeto cada vez que la población se modifique. Ese elemento lo hice en C++ como un objeto y en C como un par de funciones (si quereis os lo paso), pero lo interesante no es esa implementación, ya que cada uno puede programar en el lenguaje que quiera y entonces ya no le valdría nada de lo que digo. Lo interesante es el formato de los datos que hay que generar, así que cada cual introduzca el elemento software que crea que encaja mejor en su aplicación, y mientras que se preocupe de que la salida esté en el formato adecuado, podrá usar la herramienta de análisis de datos para generar gráficos, evoluciones, vídeos de evolucion,...

El formato de salida es un formato XML, así hacemos que sea más estandar y más facil de conocer por todos. De forma que tenemos un programa que genera una salida en cierto formato XML.

La herramienta de análisis de datos necesita ese XML, y una vez se lo introducimos tenemos varias posibilidades de ver los datos. La interfaz es muy cómoda como podeis ver en la captura de pantalla.

Permite visualizar soluciones, evoluciones, ver gráficos de evolución, incluso si generamos con cierto conocimiento el XML podemos obtener representaciones de la solución mucho más útiles, por ejemplo si estamos haciendo un viajante de comercio, simplemente jugando con el XML podemos conseguir que nos genere la representación espacial de esa solución, como podeis ver en la figura.

La aplicación también permite ver gráficas de evolución multiobjetivo entre otras muchas cosas.

Os pongo algunos ejemplos de visualización, todos tienen algo interesante que los diferencia:

Video 1: Problema "Viajante de Comercio", lo soluciona un algoritmo bioinspirado en una colonia de hormigas, el video muestra la evolución de la feromona que depositan las hormigas en el camino, este vídeo es muy curioso.

Video 2: Problema "Optimización funcional", lo soluciona un algoritmo genético, en el vídeo podemos ver la evolución paralela de toda la población.

Video 3: Problema "Optimización funcional", lo soluciona un algoritmo basado en una colonia de aves, en el vídeo podemos ver la evolución paralela de toda la población.

Video 4: Problema "Optimización funcional multiobjetivo", lo soluciona un algoritmo multiobjetivo, en el vídeo podemos ver la evolución paralela de toda la población desde el punto de vista del Pareto.

Por último decir que si alguien necesita o le viene bien tener esta aplicación y cómo usarla, que no dude en pedirla y se la doy sin problema alguno

Jose Carlos Calvo Tudela

miércoles 14 de marzo de 2007

Dando pasos

Ya hemos conseguido una oficina en el BIC, Parque Tecnológico de la Salud. Así que si alguien quiere vernos, tiene las puertas abiertas :)

Jose Carlos Calvo Tudela

Reutilización, parametrización y patrones de diseño

Muchas veces estamos reinventando la rueda debido a la falta de información, o simplemente a la vagueza de buscar dicha información. Otras veces la reinventamos porque aunque la arquitectura teórica existe, no somos capaces de ver qué arquitectura existente le viene mejor a nuestro problema.

En este documento voy a intentar mostrar un ejemplo práctico de reutilización, parametrización y patrones de diseño. Lo voy a orientar a crear aplicaciones con cualquier interfaz de comunicación, pero me centraré un poco más en las interfaces web

Aquí os pongo el enlace al documento completo: Reutilización, parametrización y patrones de diseño

En vuestros diseños de software:

  • ¿Soleis separar claramente la capa de presentación de la capa de lógica de negocio?
  • ¿Seríais capaces de cambiar la presentación de vuestra aplicación sin tener que tocar nada de la lógica de la aplicación? (con cambiar la presentación no me refiero al estilo, sino un cambio radical, pasar de aplicación de escritorio a aplicación web o de aplicacion web a servicio web)
  • ¿Y seríais capaces de añadir más presentaciones manteniendo las anteriores sin tener que tirar la mayor parte de la aplicación a la basura?
Pues ahí van unas preguntas que sería interesante que las meditaseis y respondais para que entre todos veamos un poco lo que la gente suele hacer, y como podríamos mejorarlo.

Hasta pronto

Jose Carlos Calvo Tudela

martes 6 de marzo de 2007

Tarjetas inteligentes (smartCards)


Las tarjetas inteligentes o SmartCards son pequeños dispositivos de las dimensiones de una tarjeta de crédito que contienen una memoria electrónica y posiblemente in circuito integrado (IC).

A pesar de su reducido tamaño estas tarjetas permiten almacenar información, encriptarla y así evitar su lectura por parte de personas no autorizadas. Otra característica destacable es que para poder utilizarse es necesaria una clave de acceso o PIN. Esto las hace ideales para almacenamiento y procesamiento de datos confidenciales.



Estos pequeños dispositivos están en auge en la actualidad, por el alto rendimiento que ofrecen tanto en fiabilidad como seguridad y su uso esta muy extendido en varias aplicaciones: instituciones médicas, bancos, DNI electrónico...

Precisamente debido a este auge, han surgido estándares como el PC/SC que facilitan el desarrollo con estos dispositivos ya que permite abstraerse del diseño físico de los mismos. Incluso podemos ir más alla, y encontramos bibliotecas software que permiten escribir código que funcione con cualquier tipo de tarjeta y de lector. Por ejemplo el Open Card Framework.
Un par de ejemplos en JAVA que demuestran lo fácil que es trabajar con la OCF:

//Para obtener el ID de la tarjeta:
CardID cardID = smartCard.getCardID();

//Para enviar un comendo a la tarjeta:
PassThruCardService ptcs = (PassThruCardService) smartCard.getCardService(PassThruCardService.class, true);
CommandAPDU command = new CommandAPDU(5+numDatos);
ResponseAPDU response;
//Creamos el comando
command.setLength(0);
command.append(LECTURA_MEMORIA_PRINCIPAL);
command.append((byte) comienzo);
command.append((byte) numDatos);
//Enviamos el comando y obtenemos la respuesta del dispositivo
try{
response = ptcs.sendCommandAPDU(command);
return response.getBytes();
} catch (CardTerminalException e) {
System.err.println("Excepcion: '" + e.getClass() + "' - " + e.getMessage() );
return null;
}


viernes 2 de marzo de 2007

Programación Web 2.0: Desarrollo Rapido de Aplicaciones con Python y Django

Ya está aprobada la realización de este curso por el Centro de Formación Continua de la Universidad de Granada.

Si quereis tener un contacto práctico en aplicaciones Web 2.0, esta es una de las mejores oportunidades, ya que aunque el título habla de Python y Django, en realidad también se ven cosas de AJAX, dojo, aplicaciones interactivas,... y todo ello bajo el enfoque de crear aplicaciones rápidas.

Digamos que en una semana y media que dura el curso, vais a salir de él con las ideas bien claras de como hacer una aplicación web 2.0 de forma eficaz, profesional y rápida. Además de salir con la capacidad de entender mejor este mundo de la 2.0 y por tanto avanzar mucho en las tecnologías que hay cerca de él.

Yo hice ese curso en la edición anterior, y aunque ya tenía muchas cosas claras tras varios meses investigando la 2.0, la verdad es que en la semana y media que duró me enseñaron todo lo que ya sabía y muchas más cosas que me han ayudado a enfocar mejor la investigación de más tecnología de este entorno, si lo hubiese dado antes de empezar por mi cuenta me hubiese ahorrado un montonazo de rompederos de cabeza, jejeje

Bueno espero que el curso os sea útil, y ya os lo volveré a recordar más adelante para que no se os olvide :), ya que el curso es en septiembre, y también os daré un enlace con la información del contenido.

Además creo que dan unos 2.5 créditos de libre, que siempre vienen bian para los que esté terminando la carrera.

Hasta pronto

Jose Carlos Calvo Tudela