viernes, 22 de noviembre de 2013

Proyecto Final

Introduccion

Uno de los problemas que enfrenta el automovilista hoy en día es el espacio para estacionarse y si le agregamos que este ciudadano es discapacitado aumenta el problema ya que la mayoría de las personas se ve limitado en sus capacidades físicas que lo imposibilita a él o a sus familiares acceder fácilmente a un lugar deseado

Descripción del proyecto 

Es un programa el cual consiste en registrar los datos del discapacitados o del que porte con una placa que lo identifique como tal expedido por el servicio de tránsito los cuales consisten en: nombre, apellido matricula del vehículo y tiempo de estancia los cuales se introducen utilizando el lenguaje c con el objetivo de tener mayor referencia a que tienda se dirige y así proporcionarle un acceso distancia exacta del cajón vacío de estacionamiento más cercano al mismo

El contexto del proyecto es publico ya que va a ser usado por cualquier persona que tenga alguna discapacidad.

El propósito de nuestro proyecto es que las personas con alguna discapacidad tenga una forma mas fácil, rápida y cómoda de ir a algún lugar o centro comercial sin la necesidad de que este buscando en otros lugares ya que en estos tiempos no se respeta mucho.

La parte en la cual el sistema se adapta es que siempre se va a dejar al usuario en el lugar mas cercano a la tienda que va ir  de acuerdo a las ocasiones visitadas anteriormente y a las distancias de las entradas a los centros comerciales.


Módulos mas relevantes y demo

El programa lo que realiza es registrar un usuario y asignarle el cajón mas cercano a la tienda que va a visitar, a continuación se muestra el vídeo de la explicación del programa y de las partes mas importantes del código. 

.

Herramientas y técnicas

Para este programa utilizamos la técnica de autoajuste con los parámetros de la distancia y el numero de veces que a asistido a una determinada tienda esto para que a la próxima que visite se le asigne automáticamente el mas cercano.

El software utilizado para realizar el proyecto fue el Dev-c++ en el lenguaje de programación C con as librerías:

- Stdio.h que contiene tipos, macros y funciones para la realización de tareas de E/S.
- Stdlib.h que contiene tipos, macros y funciones para la conversión numérica, generación de números aleatorios, búsquedas y ordenación, gestión de memoria y tareas similares.

Organización del equipo

El equipo se reunio varios días en la facultad para trabajar juntos en el proyecto y mientras unos hacían algo otros hacían otra cosa y si alguien no sabia algo del equipo se le trataba de ayudar.
Victor Ríos: codifico el programa
Eduardo Briones: ayudo en la codificación
Carolina Reyna: realizo la documentación
Carlos Guzmán: investigación de diferentes cuestiones
Ricardo Morales: realizo el demo en un video y explico el programa
Algunos de los problemas que nos enfrentamos eran en el código pero investigamos y los resolvíamos o buscamos la manera de solventarlo.

miércoles, 20 de noviembre de 2013

Segundo avance Práctica 3 (Fractales)



Resumen Robocup

RoboCup 2D es el simulador más antiguo de Soccer. Consiste en dos equipos de n número de robots como jugadores.
Se utiliza principalmente con motivos de educación e investigación, los robots jugadores aplica la inteligencia artificial y sistemas multiagentes para realizar la simulación.

Este simulador puede descargarse en http://sourceforge.net/projects/sserver/
Funciona en los sistemas operativos Windows, Linux y Mac, este puede ser programado en los lenguajes Java, C/C++, URBI y Python.

El simulador debe interactuar con el sistema forrest que cuenta con 3 PCs para distribuir la carga de sus 12 procesos, cada una de las PCs deben de contar con un procesador Xeon 3.4Ghz y 1Gb de memoria RAM como mínimo.

Los archivos contenidos en el programa son:
rcssserver
rcssmonitor
rcsslogplayer
rcssmanual
rcssbase
rcssserver3D
rcssmonitor_classic

Herramientas y librerías
flex/bison
Boost 1.32 o superior
Librerías y archivos de cabecera Qt4 gui/net/opengl
Librerías y archivos de cabecera zlib (opcional pero recomendado)

Tutorial de instalación
http://www.youtube.com/watch?v=bQTQpatwJaY

miércoles, 13 de noviembre de 2013

Segundo entregable del proyecto

Avance


¿Qué se ha hecho?

Hemos tratado de visualizar algunos escenarios en los cuales las personas que usarían con o sin conciencia nuestro proyecto se llegarían a topar, sus reacciones y la forma de uso que emplearían, también cual sería la forma más cómoda de implementarlo para que los usuarios tomen conciencia y sepan que si no cumplen con el permiso necesario que el sensor buscara ya sea por matricula o el dispositivo que se utilice este no le dejara estar del todo cómodo en el lugar estacionado.
Además el escoger las herramientas adecuadas que se utilizaran en el prototipo trataremos de implementarlo a nivel hardware para a serlo algo real


¿Qué falta?

Empezar a implementarlo tenemos la idea pero aun no sabemos qué tipo de técnica inteligente será la que utilizaremos ya que solo teníamos la idea del proyecto no contemplábamos eso pero se está resolviendo y veremos cuál será la más adecuada en el.

¿Qué problemas se han presentado y cómo los has resuelto / piensas resolverlos?

Como ya lo he mencionado el uso de técnica inteligente lo cual estamos en pláticas y esperamos resolver para llenar los requisitos del proyecto.

Lista de recursos y herramientas

La herramienta principal será dev- C++ que es un lenguaje de programación orientado a objetos para utilizar el lenguaje c y hasta ahora su librería principal stdio.h
Isplever que nos ayudara a poner en hardware algún tipo de gal el programa en lenguaje Abel para la salida de respuesta en leds, además de switch,timer, resistencias.

Bosquejo de solución

Inicio
Estacionarse.- que sería donde comience el proceso
Escaneo.- verificación del código o chequeo de la localización de este
Salida.-  el programa dará respuesta de si el vehículo está autorizado o no para estacionarse en el lugar.
If.-  implementando una condición de permisos especiales o personas con discapacidades temporales (lo tiene o no) aquí es donde posiblemente se acomode un autoajuste para lo cual estaremos asiendo uso de la técnica inteligente veremos si es lo más conveniente.
Salida.- el programa dará respuesta de si el vehículo está autorizado o no para estacionarse en el lugar (después de la secuencia if).
Fin.- el proceso habrá finalizado.



martes, 5 de noviembre de 2013

Fractales Primer avance






Resumen Robocup

Robocup internacionalmente fundado en 1997 es un proyecto para promover, por medio de competencias echas por robots autonomos, los principio de una ardua investigacion y educacion sobre la inteligencia artificial.
El objetivo que se tiene acerca de este proyecto es desarrollar robots humanoides para la robocup 2050 que sean capases de ganarles al equipo humano campeón del mundo de futbol.
Las modalidades de la Robocup son 4 separadas en diferentes categorias:

Robocup Futbol.- liga en simuladores, liga en tamaña pequeño, liga en tamaño medio, liga con plataforma estandar y liga humanoide.

Robocup Rescate.- liga en simulador y liga de robots

Robocup@home.- proyecto educativo dirigido a jóvenes con retos diferentes
como futbol, rescate y danza 

En que consiste la liga se simulacion de soccer en 2D Robocup se trata de usar agentes en un mundo vitual 2D, en dos dimensiones.




jueves, 24 de octubre de 2013

Practica 2 de laboratorio k-means

Introducción

Comencemos por hablar que significa agrupamiento podría decirse que es unir o juntar elementos para hacer o formar grupos. Por lo general los grupos generados  tienen una serie de características en común lo cual los enlazan aun sin necesariamente conocerse.
El algoritmo de agrupamiento k-means  se basa en un conjunto de puntos de datos, que  utiliza un enfoque de búsqueda local para dividir los puntos en grupos.
Para esta tarea escogimos el agrupar   pokemones; que es un pokemon se explica en el siguiente enlace  (http://frentebatalla.com/teoria/queesunpokemon.html ) teniendo sus tipos y enlazándolos en ciertos grupos ya sea por sus similitudes y características en común.

Las secciones se dividirán en introducción que fue esta, marco teórico, desarrollo (contexto de agrupamiento, vectores de características, medida de similitud, algoritmo K-means y Parametros)

Marco Teórico

El agrupamiento es un concepto que se refiere a juntar una serie de vectores de acuerdo a un criterio establecido como por ejemplo agrupar en un criterio de medicina para clasificar enfermedades u otra cosa.

Los grupos que se generan mediante el agrupamiento deben de tener características similares y así que de esa forma en el grupo estén objetos similares.

Los tipos de grupos que se pueden formar son: disjuntos (particicones), traslape, traslape jerárquico y difuso.

Disjuntos: Es la descomposición de un conjunto de objetos en k particiones o grupos sin poner una jerarquía como lo es el k means

Difuso: genera un número específico de particiones con límites difusos.

Traslape jerarquico: son aquellos que partes considerando a cada objeto como un grupo y construyen una jerarquía uniendo recursivamente al par de grupos más semejantes hasta formar un grupo que contiene a todos los objetos.

Traslape: es cuando los objetos se cubren con características similares.

Un vector de características es donde se almacenan las características del objeto de los cuales se toman para la clasificación y agrupación. Sirve en el contexto de agrupamiento para saber en dónde se va agrupar el objeto y no quede en un grupo donde no le corresponde.

Las medidas que pueden utilizarse para calcular la distancia entre vectores son los puntos donde s e sitúan los vectores y para calcular la distancia se utiliza la fórmula de la distancia euclidiana.

El k means es un algoritmo de agrupamiento particional que dado un conjunto de datos tiene como objetivo agruparlos en k grupos de acuerdo a sus características.


1. Inicio
2. inicializar vectores
3. inicializar centroides
4. para cada vector: centroide más cercano
5. calcular nuevos centroides
6. repetir hasta que el error sea menor a un umbral
7. fin


Desarrollo

Contexto de agrupamiento

Los pokémon son una clase de criaturas basadas en muchos casos en animales reales o criaturas míticas y mitológicas orientales. Otros se inspiran en cosas inanimadas y legendarias.
Existen 18 tipos en los que se organiza a los pokémon (de los cuales utilizaremos los primeros 16).

Vectores de características

Vector 0 tipo primario (representados en la tabla 1)

Vector 1 tipo secundario (representados en la tabla 1)

Vector 2 número de evolución (representados en la tabla 2)

Vector 3 genero (representados en la tabla 3)

Vector 4 versión (representados en la tabla 4)

Vector 5 color (representados en la tabla 5)

Vector 6 legendario (representados en la tabla 6)

Vector 7 tipo de evolución (representados en la tabla 7)


Tabal 1
normal
0
lucha
1
Roca
2
Tierra
3
planta
4
Bicho
5
veneno
6
fantasma
7
Psíquico
8
Hielo
9
Agua
10
Volador
11
dragón
12
fuego
13
eléctrico
14


Tabal 2
Primera
0
Segunda
1
Tercera
2

Tabal 3
Masculino
0
Indefinido
1
Femenino
2

Tabal 4
Azul
0
Amarilla
1
Roja
2

Tabal 5
blanco
0
gris
1
amarillo
2
verde
3
azul
4
morado
5
marrón
6
rosa
7
rojo
8
negro
9

Tabal 6
No
0
Si
1

Tabal 7
Nivel
0
Piedra
1
Intercambia
2

Generacion de centroides

Nuestros centroides fueron generados aleatoria mente dentro de los parámetros de los valores seleccionados.



Calculo de similitud entre vectores

A continuación utilizamos la fórmula de la distancia euclidiana e imprimiremos los valores para cada uno de los vectores con cada uno de los centroides.







Asignación de grupos

Aquí a través de unos if se compara cada resultado de un punto a un centroide y se selecciona el menor de estos.





Resultados



















Conclusiones

El algoritmo k-means es una manera óptima de obtener los puntos similares entre si, pero existe un problemas si las similitudes buscadas no son bien representadas en valores, ya que si se habla por ejemplo de color este puede variar mucho al darle valores a cada uno de estos, el resultado es más exacto si se utilizan valores que pueden ser medidos mediante números.

viernes, 20 de septiembre de 2013

Practica 1 ACO

Algoritmo ACO

Introducción

El problema del viajero consiste en una persona que tiene como objetivo pasar por “n” lugares sin repetir alguno y regresar a su origen además de encontrar la ruta óptima ya sea en tiempo, recorrido y dinero sea cual sea su situación.

Es muy importante para conseguir rutas de optimización y  obtener la solución a problemas donde se tenga que encontrar los caminos mas adecuados.

Algunas aplicaciones que podría tener serian en el traslado de mercancía a ciertas rutas de entrega que tienen que seguir para dejar su producto. El problema del viajero es difícil debido que se tienen muchas series de opciones o rutas que pueden ser elegidas.

ACO es un algoritmo de optimización basado en la colonia de hormigas, esto se trata de que cierta cantidad de hormigas salen a buscar alimento dejando una feromona ya que son ciegas las hormigas rastrean esta feromona optan por tomar la que esta impregnada con mas fuerza ya que esta ya siguió un recorrido y volvió a su origen. ACO sirve para resolver problemas de este tipo es decir en donde se tenga cierta cantidad de caminos opcionales y sean los más factibles y fáciles a usar.

Se puede usar para darte una ruta de acceso especifica optimizada  y dejando atrás la fuerza bruta.
Las secciones en las que se dividirá la entrada serán Introducción, Marco teórico, Desarrollo y Conclusión.

Marco Teórico

El problema del viajero es un problema NP-completo ya que cuenta con muchas combinaciones de caminos y se tiene que encontrar el más óptimo o el más corto.

Este problema se trata de encontrar el camino más corto en un mapa con diferentes ciudades conectadas entre sí y el viajero tiene que comenzar y terminar en la misma ciudad. EL mapa se representa mediante un grafo.

Las instancias de este problema consisten en darle pesos o valores a las aristas y encontrar el más óptimo por ejemplo:
Debe pasar por 4 ciudades diferentes y regresar a la misma.


Por fuerza bruta:
MTGCM= 29                                                     
MCGTM= 29                                                     
MGCTM= 28*                                                   
MGTCM= 39
MTCGM= 28*
MCTGM= 39
CMTGC=  29
CGTMC= 29
CTGMC= 39
CTMGC= 28*
CGMTC= 28*
CMGTC= 39
GTMCG= 28*   
GCMTG= 28*
GMTCG= 28*
GMCTG= 39
GTCMG= 39
GCTMG= 28*
TMCGT= 29
TGCMT= 29
TCMGT= 39
TCGMT= 28*
TGMCT= 39
TMGCT= 28*

ACO significa optimización basado en colonia de hormigas, es un tipo de técnica metauristica que se basa en el comportamiento natural de las hormigas para resolver un problema de optimización, esta técnica fue inventada por Dorigo etal en 1991, esta técnica se inspiró en el comportamiento de las colonias de hormigas.

El proceso a seguir en esta técnica es la siguiente como se muestra en el siguiente pseudocódigo:

1.       Inicio
Hacer (Do)
2.       Comienzo de recorrido de hormigas
3.       Camino más corto para el regreso
4.       Búsqueda de objetivo
5.       Si se encontró el objetivo(if)
6.       Dejar rastro de feromona
7.       Regresar al origen
8.       Hormigas escogen camino con más feromona
9.       Se eliminan rastros de feromona
10.   Se cumple el objetivo(while)
11.   Fin

Las fórmulas más importantes para esta técnica son:

Selección de camino






Donde Ti es la cantidad de feromona y n es la distancia o costo
Actualización de feromona:






En donde p es el coeficiente de evaporación de feromonas.


Código



Conclusión

De la práctica desarrollada nos dejó de aprendizaje que el algoritmo basado en colonias de hormigas (ACO) puede tener diferentes aplicaciones como optimizar algún proceso, en la teoría y explicación de cómo funcionaba el algoritmo lo entendimos bien pero en lo que se batallo fue en el comprender las formulas y también un poco en la codificación, para entender mejor el algoritmo se pueden buscar libros o videos para poder tener más en claro y afianzar lo hecho en esta practica.

Referencias