viernes, 27 de abril de 2012



Sistemas Inteligentes
Sistema Experto
Arturo Ramírez A01165819
Jorge Corona A01164397
Salvador Aguilar A00967057

Documentación
Dominio del conocimiento
Una de las partes más fundamentales de este proyecto fue lograr que todas las reglas que se conocen del juego como son los marcadores, equipos, tiempos, jugadas ofensivas, jugadas defensivas, yardas, etc. Se pudieran introducir al sistema y la forma en que lo realizamos para que el sistema tuviera este conocimiento fue por medio de los hechos y de las reglas que nos permitieron lograr que con las premisas que se nos brindaran pudiéramos generar la respuesta más cercana a la realidad.
Hechos
1)      Para todo equipo ‘x’, existe un rival ‘y’ que está a la defensiva
2)      Para todo equipo ‘x’, tiene un terreno propio de ‘x’
3)      Para todo equipo rival ‘y’, tiene un terreno propio ‘y’
4)      Para todo equipo ‘x’, pertenece a una conferencia ‘z’
5)      Para todo equipo rival ‘y’, pertenece a una conferencia ‘z’
6)      Para todo equipo ‘x’, pertenece a una división ‘v’
7)      Para todo equipo rival ‘y’, pertenece a una división ‘v’
8)      Para todo equipo ‘x’, tiene una estrategia ‘r’
9)      Para todo equipo rival ‘y’, tiene una estrategia ‘r’
10)   Para todo equipo rival ‘y’, tiene una formación de defensa ‘f’
Reglas
1)      Todos los partidos están compuestos por 4 cuartos.
2)      Todos los cuartos están compuestos de 15 min.
3)      Cada jugada tiene 4 downs.
4)      Los avances se miden por yardas.
5)      En cada partido debe de existir un local.
6)      Encada partido debe de existir un visitante.
7)       Cada anotación vale 6 puntos.
8)      Cada patada para puntos extra después de una anotación vale 1 punto.
9)      Cada anotación de patada vale 3 puntos.
10)   El marcador del juego empieza en cero para los dos equipos.
Lenguaje de programación que se utilizó:
PHP (Hypertext Pre-processor).- Es un lenguaje de programación interpretado (Lenguaje de alto rendimiento), diseñado originalmente para la creación de páginas web dinámicas. Se usa principalmente para la programación del lado del servidor (server-side scripting) pero actualmente puede ser utilizado desde una interfaz de línea de comandos o en la creación de otros tipos de programas incluyendo aplicaciones con interfaz gráfica

Lenguaje de etiquetas:
HTML ( HyperText Markup Language) (lenguaje de marcado de hipertexto). Es el lenguaje de marcado predominante para la elaboración de páginas web. Es usado para describir la estructura y el contenido en forma de texto, así como para complementar el texto con objetos tales como imágenes. El HTML se escribe en forma de etiquetas, rodeadas por corchetes angulares (<,>).

Lenguaje de estilos:
CSS (Cascading Style Sheets ) (hojas de estilo en cascada).- Es un lenguaje usado para definir la presentación de un documento estructurado escrito en HTML o XML (y por extensión en XHTML). El W3C (World Wide Web Consortium) es el encargado de formular la especificación de las hojas de estilo que servirán de estándar para los agentes de usuario o navegadores.
La idea que se encuentra detrás del desarrollo de CSS es separar la estructura de un documento de su presentación.

Ventajas y limitantes de l lenguaje utilizado:
Consideramos que PHP es un muy lenguaje ya que tiene un gran potencial que nos permite realizar cualquier ciclo y función que se necesitó para el desarrollo del sistema dándonos la facilidad también de combinarlo con HTML y CSS que nos facilitó el diseño de las interfaces para poder interactuar de una mejor forma con el usuario.
Una de las desventajas que encontramos es que en ocasiones es demasiado flexible permitiéndote cometer muchos errores sin que te des cuenta, y que como funciona del lado del servidor en ocasiones es un poco difícil detectar exactamente cuáles son los errores del código.

Sistema Experto: Recommended film


   Shell/lenguaje en el que se desarrolló el mini-proyecto: HTML, javascript


   El dominio de conocimiento.- Gustos que la gente tiene para seleccionar una película,  al ofrecer una selección de géneros, clasificaciones, actores, rango de fechas, etc. de una pequeña base de datos de películas.

   Reglas y hechos:
               
Hechos
Reglas
clasificación
"G"
"PG"
"PG-13"
"R"
Genero
"Accion"
"Drama"
"Horror"
"Guerra"
"Comedia"
"Romance"
"Sci-Fi"
Año
< 1990
Animadas
Yes/no
Actor
"Leonardo DiCaprio"
"Johnny Depp"
"Tom Hanks"
"Will Smith"
"Bruce Willis"
"Keanu Reeves"


   Comentarios sobre ventajas y limitantes que observaron al construir su SE usando el Shell o el lenguaje seleccionado:

Mencionando en primer lugar las limitantes, implementando un sistema para recomendar películas desacuerdo a varios hechos y reglas genera muchas posibilidades de resultados. Ya que una base de datos de películas es muy extensa y tomamos una pequeña muestra de 50 reglas. Asi que la recomendación que regresa como resultado es efectivamente correcta anunque no se exploran todas las posibilidades.
Las ventajas de utilizar el Shell que usamos para nuestro SE esque la sintaxis que se tenia que utilizar es muy sencilla y nos ofrecio una interfaz muy amigable para el usuario. Procesa las consultas muy rápidamente y nos ofrece una explicaion de porqué ese resultado.


Pruebas de usuario

Prueba 1

Está sencillo y es fácil de usar; sin embargo podría incluir una pregunta menos específica que

el actor, pues quizás no recuerde el actor o alguna otra característica importante que pueda

tener la película como la época en la que se desarrolla la trama o algo por el estilo.

Prueba 2

Es una muy buena idea, pues hay sitios que utilizan un rating basado en la opinión general

de la gente de si le gustó o no le gustó una película, entonces si tuvieras una aplicación que

diciéndole más o menos lo que te gusta te pueda sugerir una película de la cartelera estaría

muy padre.

Prueba 3

Está bien hecho, es correcto el resultado de la búsqueda, pero la base de datos tiene que ser

más amplia para darte una mejor sugerencia.

Prueba 4

Da respuestas en poco tiempo, eso es muy bueno. La interfaz gráfica es intuitiva y amigable,

podría mejorar los colores y a lo mejor cambiar de fondo cuando selecciones un género

película para ir ambientándote con la película que quieres ver.

Prueba 5

Es buena idea que haya un sistema que te pueda hacer recomendaciones en base a entradas

que tú le das y que estaría padre que se pudiera aplicar en otros tipos de tema como la

medicina para diagnósticos médicos.





Sistema Experto: Language Picker

Para nuestro proyecto decidimos que era realmente mucha lata el aprender uno de los shells ya existentes, por lo que decidimos que la mejor opción era montar nuestro proyecto en Rubí sobre Rieles, más conocido como Ruby on Rails. También decidimos que sería una buena idea que el dominio de conocimiento que usaríamos serían “lenguajes de programación” porque estaba chido.

Empezamos obteniendo la mayor cantidad de información de los lenguajes. Para esto nos pirateamos la base de datos de Wikipedia y del TIOBE Index. Basándonos en los lenguajes más populares, obtuvimos las características que consideramos más importantes de cada uno y alimentamos un modelo de Rails usando Active Record con dicha información.

Después hicimos una serie de hechos para ser evaluados por las reglas. Los hechos los armamos basándonos en los atributos que ya teníamos cargados.

Hechos:
- Java es un lenguaje con un paradigma orientado a objetos
- C es un lenguaje con un typing estático
- Visual Básic es un lenguaje con frameworks disponibles
- Pascal no es un lenguaje de bases de datos
- Erlang es un lenguaje con opciones de desarrollo para móviles
- Python es un lenguaje con una facilidad de uso de 1
- C# es un lenguaje en el que se facilita el trabajo en equipo
- Assembly es un lenguaje de bajo nivel
- Actionscript es un lenguaje con opciones de desarrollo para aplicaciones web
- Scratch es un lenguaje con opciones de uso educativas

Por otra parte, una vez que tuvimos los hechos pudimos hacer diferentes combinaciones de hechos para tener reglas.

Reglas:
- If C(Dinámico) then not C(Estático)
- If Cp(Benchmark) then Ct = L(HP) - (20*(L(Benchmark)-Cp(Benchmark)))
- If Cp(Memory) then Ct = L(HP) - (20*(L(Memory)-Cp(Memory)))
- If C1(low_level) then not C1(high_level)
- If C(DB) then not C(not DB)
- If C(Esoteric) then C(Benchmark) = 0
- If Cp(Learning) then Ct = L(HP) - (20*(L(Learning)-Cp(Learning)))-
- If C(Team) then not C(not Team)
- If Cp(Mobile) and L(not Mobile) then Cf = 0

Encontramos que Ruby on Rails fue una plataforma muy útil que nos permitió tener mucha libertad y que nos facilitó escribir tanto las reglas como los hechos, sin embargo nos encontramos con algunas limitantes; principalmente por que la cantidad de datos que manejamos era de un tamaño considerable y tuvimos algunos problemas trasportándolos.

Empezamos a hacer pruebas con usuarios, les pedimos que usaran el sistema para observar qué resultados les entregaba el sistema. Tuvimos opiniones variadas.

Opiniones:

Usuario 1: Andrés: “Está chido, hay muchas opciones sólo que sí le hacen falta más lenguajes”
Usuario 2: Rafa: “Si buscas más o menos una asesoría de qué lenguajes quieres aprender podría servir mucho, es buena idea”
Usuario 3: Daniel “Pues yo pienso que está padre aunque tal vez podría tener más características por lenguaje”
Usuario 4: Alberto “Me agrada para escoger lenguajes nuevos”
Usuario 5: Adriana “No conozco muchos lenguajes de programación pero creo que esto podría servir para aprender algunos nuevos.”

Con estas opiniones concluimos que a pesar de que hicimos una base de conocimientos que consideramos grande, los datos que tenemos de los lenguajes resultan insuficientes para cierto tipo de reglas. Además, hacen que las reglas pierdan precisión. A mayor precisión de datos, mayor precisión de reglas lo cuál entrega una mayor precisión en la inferencia.

Como trabajo futuro, nos gustaría darle más precisión a los datos de las reglas y posiblemente implementar un sistema más complicado de inferencias que pueda actualizar a los lenguajes basado en feedback del usuario. Esto sería muy útil para ciertos parametros, por ejemplo qué tan rápido un usuario considera que un lenguaje es, cuanta memoria considera que es poca o mucha o qué tan fácil es un lenguaje u otro.




Sistema Experto: Adivina Quién!

Buen día, Profesora. Le dejamos la liga de nuestro blog para que pueda ver nuestro reporte y video:

http://qkifree.blogspot.mx/

Equipo: Qki-Free

Melissa Moya Pérez
Jorge de Jesús Tinoco Huesca
Arturo Ayala Tello