jueves, 23 de octubre de 2008

RecogTheme (Construcción)

Ya con esta fase tenemos los casos de uso que nos faltaba por implementar
- Grabar conocimiento
- Recuperar conocimiento
¿Problemas?
La red neuronal solo reconoce el texto que tiene casi las mismas palabras y el mismo orden, que los textos con los cuales ha sido entrenada. Por ejemplo:

"El niño está en casa" (frase de entrenamiento)

"En casa está el niño" (frase a analizar)
La frase a analizar no la reconocería, ya que las palabras están en otro orden. Se intento entrenar a la red neuronal con todas las palabras por orden alfabético, pero, pero no se alcanzaba un error minimo en la red de 0.05.


Con lo cual, el componente queda para el reconomiento de texto muy parecido. Habría que hacer más pruebas y ver hasta que punto es capaz de reconocer.
Para quien quiera usarlo, y hacer alguna modificación en el programa de test. El código fuente está aquí.

Y con esto, dejamos ahí este proyecto.

Movimiento Tanques

Movimiento Tanques

Con este programa, quería implementar el algoritmo de “Flocking”. Con este algoritmo se pueden simular movimiento de banco de peces, el tráfico, ...pero yo he supuesto que se movian tanques.

¿Aspectos a destacar en este desarrollo?

Lo he implementado como si fuese un prototipo, y para aprender dicho algoritmo. Y como no, he caido en algunos de los anti-patterns (pero siendo un prototipo, están más o menos justificados estos anti-patterns). Como el anti-pattern Blod. Donde casi todo el código está en la clase Form1. Y también otro anti-pattern es el Cut-and-Paste. Esto sobre todo al inicializar las varibles. ¿Solución? re-factorizar.

miércoles, 15 de octubre de 2008

RecogTheme (Elaboración)

Hemos pasado ya la fase de Elaboración y ya tenemos los dos casos de uso principales. Que erán:
- Entrenar el componente
- Reconocer un texto a través del componente
Asi que, con estos dos casos de uso tenemos la base de arquitectura de la aplicación. El cual es uno de los objetivos de la fase de Elaboración.
¿Qué ha pasado en esta fase? problemas....como en todo proyecto...
Tecnologico: como se ha usado c++/cli, había que pasar una función de callback desde c++/cli a c++ puro y duro. Y claro, en debug no pasada nada con ese tipo de formato, no casca, y el relase si casca si no se dice explicitamente el tipo de formato (stdcall o cdecl).
Otro asunto, fue el entrenamiento de la red neuronal. No bajaba el error de la red de 0.18. ¿No aprendía la red?. Al final, hubo que normalizar las entradas a la red a valores en el rango [-0.1 y 1.0]. Y claro, todo esto, ha aumentado mis estimaciones sobre sobre la finalización de esta fase.
Y claro, ya lo dicen los textos, cuando la tecnología es nueva y el campo de trabajo es nuevo, el tiempo se dispara.

¿Riesgos detectados?

La red neurnal, solamente reconoce aquellos textos que las palabras estén en orden. Por ejemplo, si entrenamos la red con un texto, y luego invertimos las palabras de orden, la red no reconocera el texto. Con lo cual, es un problema. Ya que un texto puedo estar en distinto orden y significar los mismo, y sin embarlo la red necesita que esten en orden.



¿Posibles soluciones para mitigar el riesgo? Idear algo para que las palabras entren a la red de forma ordenada. Una forma sería ordenar las palabras por su longitud. Es decir, contando el número de letras de cada palabra, asi, las de longitud 1 entrarían en la neurona de entrada 1, las de longitud 2 a la neurona segunda. Esto reduciria de 50 neuronas de entrada a 10 como mucho. Habría que hacer pruebas. O idear otra forma.

Aquí está el fichero de Rational Rose donde se diseño primeramente los casos de uso, realización de casos de uso, diagramas de secuencia,...

Y como manda, la fase de Elaboración, aquí está un ejecutable de la arquitectura. Solo hay que pulsar el botón "Iniciar Entrenamiento" y pasar a la otra pestaña para que el componente reconozca los temas.

Un pantallazo se puede ver aquí.



martes, 7 de octubre de 2008

RecogTheme (Concepción)

Supongamos que estamos en la empresa Acme y nos comentan un jefe que tenemos que desarrollar un componente inteligente que reconozca los temas de cada texto, ya que este, se podría usar en distintos proyectos del grupo y dar a cada aplicación, algo de inteligencia.

Asi, con esta descripción, nos ponemos manos a la obra y generemos un documento de Visión, donde ya le añadimos las funciones básicas del componente y un documento con la arquitectura candidata y prototipo de interfaz de usuario.

Asi de esta manera pasamos la Fase de Concepción en RUP para este proyecto. Ha sido corta y hemos generado poca liturgia (como lo llaman en el libro The Rational Unified Process Made Easy - A Practitioner's Guide To The Rup), pero solo era eso lo que necesitabamos.

miércoles, 16 de julio de 2008

ISemaphoresComplutum Fase Concepción (3)

Seguimos pensando en este supuesto proyecto.
Me pongo la gorra de analista de dominio y me entrevisto con el cliente (el ayuntamiento de Alcalá de Henares) y establecemos un Dominio del Problema.

Con el Dominio del Problema vamos a pretende establecer contribuir más a la comprensión del problema. Determinar un lenguaje común entre los desarrolladores y los clientes.

Dominio del Problema de ISemaphoresComplutum

La ciudad de Alcalá de Henares ha crecido bastante en los ultimos años, generandose atascos en las horas puntas en las vias principales. Los coches a la entrada de la carretera principal por la vía complutense se van a cumulando y los semaforos no regulan está densidad de tráfico.

Entonces, el sistema ISemaphoresComplutum, detectará a través de sensores instalados en las vías, la velocidad de los coches y el número. De esta forma, a través de estos datos, controlará los semáforos para permitir disminuir está densidad de tráfico.

Debido a que para permitir un tráfico menos denso, los semaforos tienen que estar en verde más tiempo, y los contrarios en rojo, es posible que mientras se está impidiendo que aumente la densidad del tráfico en un tramo, aumente la densidad del tráfico en otro tramo. El sistema debe de balancear este problema y permitir que ningún trámo hay mucha densidad. Pero si el sistema no puede, por exceso de tráfico, dará prioridad a un tramo (normalmente el principal).

Los semaforos deberán prevenir un flujo importante de coches. Si en un tramo están entrando muchos coches, de forma que haya un posible atasco, el sistema deberá poner este semáforo en verde para que el flujo grande de coches no forme un atasco. Esto es posible si en el cruze hay poco tráfico. Si hay tráfico, el sistema deberá balancear y permitir que hay un minimo de atasco. De nuevo, el tramo tendrá su prioridad con respecto a otros.

Si por ejemplo, en un cruze, todos los tramos están con una alta densidad, el sistema deberá balancear los tiempos de verde y rojo de cada semaforo de forma se reduzca la densidad en cada tramo dependiendo de la prioridad de cada uno.

Si hay una alta densidad en tramos consecutimos, el sistema dará a estos la máxima prioridad para minimizar la densidad del tráfico, siempre y cuendo en los demás tramos no alcanze la misma densidad de tráfico.


Hasta aquí, establecemos el dominio del problema que como siempre es posible añadir o moficiar en el futuro (proceso iterativo).

Como RUP va dirigido principalmente a reducir el RIESGO del proyecto. Un primer riesgo identificado es ¿COMO el sistema controlará los semáforos? es decir ¿qué algoritmo se usará para que el tráfico de Alcalá sea más fluido?. Este es un riesgo crítico. Si no se resuelve este riesgo, el proyecto se va traste.

Acciones a tomar para minimizar el riesgo anterior.

- Indagar por los métodos de inteligencia artificial sobre temas de control de tráfico (lógica difusa?)
- Crear un prototipo rápido donde se vea que el sistema inteligente de ISemaphoresComplutum es capaz de regular el tráfico. Para esto supondremos que:
* Un calle recta donde se cruzan dos calles.
* Los coches se moveran a una velocidad constante en un tramo. Es decir, o a V1 o a 0 km/h. Cambiaran la velocidad según este el semaforo en verde o en rojo. El comportamiento de los coches ya se mejorará en la próxima iteración.
* Las calles serán de un solo sentido.

Con lo anterior queda definida la primera iteración y los objetivos a alcanzar en la primera iteración en la fase de Concepción.

lunes, 7 de julio de 2008

ISemaphoresComplutum Fase Concepción (2)

Después de unos días, tenemos preparado un primer borrador del Documento de Visión. A si que con esto, vamos a una entrevista con los técnicos del Alcalde de Alcalá de Henares y estamos de acuerdo en este documento.

Con este documento, las dos partes tenemos un visión común del producto a desarrollar. Así de tal forma, que nos servirá a la hora de la entrega si cumple o no las espectativas del cliente.

Por supuesto, este documento será siempre revisado, y cuando el documento Visión, permanezca estable, es un sintoma de que casi todos los requisitos de usuario han sido reocogidos.

Ahora, uno de los siguientes pasos, es identificar los riesgos asociados, e intentar mitigarlos.



Visión de ISemaphoresComplutum

Roles afectados


Los operadores de la policía local.
Restricciones
- El sistema ISemaphoreComplutum se tendrá que comunicar con el sistema de señalamiento actual de semáforos. Es decir, con el sistema que controla el funcionamiento de los semáforos.
- El sistema leerá el tráfico a través del Sistema de lectura del tráfico en Alcalá.

Enunciado del problema


El problema del tráfico en Alcalá se está agravando, y más aún cuando se construyan más viviendas y se entierren las vías del tren. Todo esto ocasionará más contaminación, ya que los vehículos estarán más tiempo parados y disminuirá la calidad de vida en Alcalá.
Todo esto afecta tanto al gobierno municipal como al ciudadano de a pie y el impacto sería una sensación de pérdida de calidad de vida en Alcalá. Desviándose así el gobierno municipal de sus objetivos.
Una solución exitosa sería instalar un sistema de control de semáforos inteligente. Este sistema leerá en tiempo real el tráfico en Alcalá y en función de esta lectura controlaría los semáforos para permitir un tráfico fluido.

Lista de características


-Leer el tráfico de Alcalá y en base a esto, controlar los semáforos para permitir un tráfico fluido.
- Permitir la edición de calles y semáforos para las actuales y futuras construcciones de calles.
- Crear simulaciones de tráfico para ver como ISemaphoresComplutum controla el tráfico.

- Ser muy seguro contra ataques, muy estable y de recuperación rápida.

miércoles, 2 de julio de 2008

Primer Encuentro (ISemaphoresComplutum)

Vamos a imaginar (por hacer los post más amenos) que un día me encuentro con el alcalde de mi ciudad, y charlando y charlando, me propone la creación de un sistema de control de semáforos inteligente, para que el sistema, dependiendo del tráfico que haya en Alcalá de Henares, se auto regulen los semáforos de forma que el tráfico sea más fluido, se reduzca la contaminación de la ciudad y los alcalaínos ganen en calidad de vida.

Seguimos charlando sobre el sistema y tomando unas cervezas en el Indalo, se nos ocurrio ponerle a la criatura el nombre de "ISemaphoresComplutum", pero luego al final, lo dejamos en S.C.S.I.A (Sistema de Control de Semaforos Inteligente de Alcalá), pero el nombre en clave se queda en ISemaphoresComplutum.

A si que con esto, quedamos en vernos otro día con sus técnicos para preparar un Documento de Visión para tener una base por donde empezar a trabajar y tener las dos partes una visión conjunta e igual del proyecto. Con lo cual, nos metemos en la Fase de Concepción del RUP. Este documento contendrá:

- Una lista de los roles afectados por el sistema (stakeholders).
- Restricciones
- Enunciado del problema a resolver
- Lista de caracteristicas principales del sistema.
 
Free counter and web stats