jueves, 16 de diciembre de 2010

Proyecto Final

Como proyecto final, seleccione algunos de los temas del curso y los aplique en un escenario real, el escenario es el CIATI, que es el Centro Institucional de Atención en Tecnología de Información de la UANL, los temas que se utilizaron fueron:

·         Visualización de Información
·         Pronósticos
·         Sistemas Expertos

Cada uno de estos temas contribuyen a mejorar y ayudar en el CIATI. A continuación agrego un video donde pueden ver la presentación y la explicación del proyecto.



Gracias.

viernes, 10 de diciembre de 2010

Visualización de información

Ante el crecimiento tan vertiginoso en la cantidad de información, se hace prácticamente imposible para una persona poder extraer conclusiones, tendencias y patrones a partir de los datos crudos. Es aquí donde la visualización hace su aporte significativo y la exploración de distintos conjuntos de datos se beneficia enormemente si cuenta con un soporte adecuado de visualización.
El principal objetivo de la Visualización es la representación perceptual adecuada tanto de los datos con parámetros múltiples como de las tendencias y las relaciones subyacentes que existen entre ellos. Su propósito no es la creación de las imágenes en sí mismas sino el insigth, es decir, la asimilación rápida de información o monitoreo de grandes cantidades de datos. La Visualización es parte de los nuevos medios hechos posible debido al desarrollo de la visualización en computadoras en tiempo real.
La cantidad de aplicaciones en Visualización es grande y crece constantemente siendo actualmente un área de activo desarrollo. En muchas aplicaciones, los conjuntos de datos que deben manejarse son miles de veces más numerosos que la cantidad de pixeles en un display y las técnicas de visualización que inicialmente estaban motivadas solamente por percepciones visuales se han diversificado. Así como los usuarios creativos empujan los límites de las herramientas actuales, los diseñadores serán presionados para proveer aún mayor funcionalidad. También cabe señalar que un requerimiento fundamental de la visualización, es que nos dé una respuesta en tiempos interactivos.

En esta ocasión utilice para hacer unos ejemplos Tableau que es una herramienta muy interesante donde se pueden hacer diferentes tipos de visualizaciones, desde las clásicas de barras, pastel y tablas hasta mapas.

A continuación muestro unas imágenes de dichas visualizaciones. En una se muestran un mapa con  códigos postales de Estados Unidos, en otra se muestran con puntos en un cuadrante.







Por ultimo les dejo el link al sitio de Tableau donde  podrán encontrar unos videos demostrativos muy interesantes videos.

miércoles, 8 de diciembre de 2010

Algoritmos en Línea

Se dice que un algoritmo es en línea (en inglés on line) cuando es capaz de ponerse a trabajar en el problema para el que fue diseñado sin necesidad de disponer de todos los datos de entrada antes de empezar, es decir, que puede trabajar a medida que va recibiendo los datos de entrada.
Por ejemplo, el algoritmo de ordenación BubbleSort no es un algoritmo en línea (podría decirse que es fuera de línea u offline), porque si tiene que trabajar sobre 10 valores, necesita que los diez valores estén disponibles al comienzo del algoritmo. Sin embargo, el algoritmo de ordenación InsertionSort sí es un algoritmo en línea, porque si tiene que trabajar sobre 10 valores, puede leer el primero y procesarlo, y luego el segundo y procesarlo, y luego el tercero y procesarlo... ý así hasta el último. Puede realizar parte de su trabajo con una entrada parcial de los datos, ya que el procesamiento de los datos sólo depende de los datos de entrada leídos hasta el momento, y no de la totalidad.

Spam
Cuando un correo electrónico no  ha sido solicitado por el destinatario, nace el término de spam, junk mail o más formalmente “correo electrónico comercial no solicitado”.
El contenido de un mensaje spam es variado, pero siempre dentro de los mismos márgenes: ofertas de cualquier tipo de producto, ofertas para hacerse ricos en poco tiempo y sobre todo, contenido pornográfico, siendo los receptores de spam los grandes perjudicados por la obligación a utilizar las líneas de comunicación para descargar los correos, aparte de la pérdida de tiempo que se invierte en eliminar los correos no deseados.
En este punto, es donde entran en juego los dos tipos de medidas anti-spam que existen actualmente: medidas legales y medidas técnicas. En este espacio hablaremos de las medidas técnicas orientada al tema que estamos tratando.
Una de las medidas técnicas que se están estudiando son  las máquinas de soporte vectorial (SVM, Support Vector Machines), que son construcciones matemáticas que buscan hiperplanos no lineales en el espacio utilizando transformaciones de Lagrange. Son muy populares en los campos de aprendizaje automático y la minería de datos debido a su capacidad de generalizar y de manejar grandes dimensiones de datos a través del uso de núcleos (kernels). La idea básica de un kernel es que proporciona una función que permite la transformación de un espacio de características, a priori no separables linealmente, en un espacio de características con varias dimensiones que sí son separables linealmente.
Las principales ventajas derivadas de la utilización de este método son su rápida velocidad en tiempo de ejecución y el hecho de que no son influenciadas por la distribución de clase en los ficheros de entrenamiento. Como desventaja más importante está el hecho de que consumen mucho tiempo de entrenamiento si el fichero contiene muchos correos.
Un requerimiento importante para cualquier algoritmo en línea es que su complejidad paso a paso este acotada por una constante independiente del tiempo t, para lo cual se asume que los datos se obtienen de manera constante. Y dado que la complejidad de SVM es dependiente del número de datos de entrenamiento, obtener una solución sparse es esencial para el aprendizaje. Mientras que se puede utilizar el algoritmo por lotes utilizando un buffer deslizante para aplicaciones en línea, es mucho mejor desarrollar un algoritmo que trabaje en línea.

En conclusión tenemos que los algoritmos en línea procesan información al momento que la reciben, una aplicación importarte e interesante es en la detención del spam, para esto se está trabajando con las máquinas de soporte vectorial, pero aún sigue en investigación.
Para mayor información pueden consultar la tesis Las máquinas de vectores de soporte para identificación en línea del Ing. Juan Angel Resendiz Trejo.

martes, 7 de diciembre de 2010

Algoritmo de colonia de hormigas

La observación de la naturaleza ha sido una de las principales fuentes de inspiración para la propuesta de nuevos paradigmas computacionales. Así nacieron diversas técnicas de Inteligencia Artificial como: los Algoritmos Genéticos (Genetic Algorithms), Templado Simulado (Simulated Annealing), Redes Neuronales (Neural Networks), y entre estas técnicas, el sistema basado en Colonias de Hormigas (Ant Colony System)

Resulta realmente interesante analizar como las hormigas buscan su alimento y logran establecer el camino más corto para luego regresar a su nido. Para esto, al moverse una hormiga, deposita una sustancia química denominada feromona como una señal odorífera para que las demás puedan seguirla.
Las feromonas son un sistema indirecto de comunicación química entre animales de una misma especie, las cuales son recibidas en el sistema olfativo del animal receptor, quien interpreta esas señales, jugando un papel importante en la organización y la supervivencia de muchas especies

Al iniciar la búsqueda de alimento, una hormiga aislada se mueve a ciegas, es decir, sin ninguna señal que pueda guiarla, pero las que le siguen deciden con buena probabilidad seguir el camino con mayor cantidad de feromonas. Considere la siguiente figura en donde se observa como las hormigas establecen el camino más corto. En la figura (a) las hormigas llegan a un punto donde tienen que decidir por uno de los caminos que se les presenta, lo que resuelven de manera aleatoria. En consecuencia, la mitad de las hormigas de dirigirán hacia un extremo y la otra mitad hacia el otro extremo, como ilustra la figura (b).
Como las hormigas se mueven aproximadamente a una velocidad constante, las que eligieron el camino más corto alcanzarán el otro extremo más rápido que las que tomaron el camino más largo, quedando depositado mayor cantidad de feromona por unidad de longitud, como ilustra la figura (c). La mayor densidad de feromonas depositadas en el trayecto más corto hace que éste sea más deseable para las siguientes hormigas y por lo tanto la mayoría elige transitar por él. Considerando que la evaporación de la sustancia química hace que los caminos menos transitados sean cada vez menos deseables y la realimentación positiva en el camino con más feromonas, resulta claro que al cabo de un tiempo casi todas las hormigas transiten por el camino más corto.
Ant System
Inspirados en el comportamiento de las hormigas, arriba descripto, Dorigo proponen tres variantes del algoritmo Ant System (AS), que básicamente difieren en el momento y la modalidad en que actualizan la matriz de feromonas que sirve para guiar el movimiento de los agentes computacionales llamados hormigas; estos algoritmos son:
·         Ant-density: con actualización constante de las feromonas por donde pasa una hormiga.
·         Ant-quantity: con actualización de feromonas inversamente proporcional a la distancia entre 2 ciudades recorridas.
·         Ant-cycle: con actualización de feromonas inversamente proporcional al trayecto completo, al terminar un recorrido.

Para el presente trabajo, se considera un conjunto de MAXC ciudades y se define b (t) i como el número de hormigas en la ciudad i en el tiempo t, por consiguiente, el número total de hormigas MAXH estará dado por:

MAXC
MAXH = Σ b i (t)
i = 1

Para satisfacer la restricción de que una hormiga visite todas las ciudades una sola vez, se asocia a cada hormiga k una estructura de datos llamada lista tabú, tabuk, que guarda las ciudades ya visitadas por dicha hormiga. Una vez que todas las ciudades hayan sido recorridas, el trayecto o tour (ciclo) es completado, la lista tabú se vacía y nuevamente la hormiga está libre para iniciar un nuevo tour. Se define como tabuk(s) al elemento s-esimo de la lista tabú de la hormiga k.
El punto de partida para la solución del problema en cuestión, es la matriz de distancias D = {di j -distancia entre la ciudad i y la ciudad j}, a partir de la cual se calcula la visibilidad Vij= 1/ dij. Por su parte, se denota como T = {Tij} a la matriz de feromonas a ser utilizada para consolidar la información que va siendo recogida por las hormigas; en otras palabras, la cantidad de feromona que se va almacenando entre cada par de ciudades i, j.
Durante la ejecución del algoritmo Ant System, cada hormiga elige en forma probabilística la próxima ciudad a visitar, realizando un cálculo de probabilidad que es función de la distancia y la cantidad de feromonas depositada en el arco que une a las ciudades origen-destino, esto es:
donde α y β son constantes que expresan la importancia relativa del sendero de feromonas y la distancia entre las ciudades respectivamente. Así, un alto valor de α significa que el sendero de feromonas es muy importante y que las hormigas tienden a elegir caminos por los cuales otras hormigas ya pasaron. Si por el contrario, el valor de β es muy alto, una hormiga tiende a elegir la ciudad más cercana. Se resalta aquí que cada hormiga debe realizar un tour legal o sea, no puede viajar a una ciudad ya visitada con anterioridad hasta que complete su tour.
En el instante t, las hormigas se mueven de una ciudad a la siguiente (movimiento llamado: iteración), en donde se encontrarán en el instante t+1. Lógicamente, al cabo de (MAXC – 1) iteraciones, las hormigas han visitado la última ciudad y están en condiciones de regresar a su ciudad origen, posiblemente para actualizar la matriz de feromonas con la información recogida en el tour completo.
La matriz Tij(t) que especifica la intensidad de las feromonas del arco (i, j) en t, se actualiza según la fórmula:
Tij (t + 1) = × Tij (t) + ATij (t, t + 1)
donde ρ es el coeficiente de persistencia de las feromonas, de forma tal que (1-ρ) representa la evaporación de la substancia entre t y t+1, mientras que la cantidad de feromona depositada en un arco (i, j), está dada por:
MAXH
ATij(t,t+1)=ΣATkij(t,t+1)
k=1
con ATkij (t, t+1) representando la cantidad de feromonas por unidad de longitud, depositada en el arco (i,j) por la hormiga k-esima entre t y t+1. Cabe destacar aquí que la principal diferencia entre las diversas variantes del algoritmo Ant System, está dada justamente en la forma de calcular ATkij (t, t+1), conforme será explicado en las próximas subsecciones.
El proceso se repite iterativamente hasta que se cumpla algún criterio de parada. En este trabajo, el proceso termina si el contador de tour alcanza un número máximo de ciclos NCMAX (definido por el usuario) o todas las hormigas realizan el mismo tour. En este último caso, es evidente que las hormigas han dejado de buscar nuevas soluciones, lo que constituye un criterio de convergencia del algoritmo (similar a la uniformización de la población de un algoritmo genético).
Ant Quantity
En esta variante del algoritmo (ver Pseudocódigo 1), la hormiga k que viaja desde la ciudad i a la ciudad j, deposita en el
trayecto una cantidad de feromonas inversamente proporcional a la distancia dij, esto es:
si la hormiga k – esima camina por el arco ( , ) entre y + 1
de otra manera
donde Q1 es una constante.
Pseudocódigo 1: Ant-quantity secuencial.

t=0; /*t es contador de tiempo*/
nc=0; /*nc es el contador de ciclos*/
s=1; /*índice de la lista tabú*/
Para cada arco (i,j) inicializar T (t) c ij = ; /*c es una constante positiva pequeña*/
Para cada arco (i,j) AT (t) ij = 0 ;
Colocar las MAXH hormigas en las MAXC ciudades;
Colocar la ciudad origen de la hormiga k-esima en tabuk(s)
DO WHILE (nc<=NCMAX y que todas las hormigas no realicen el mismo tour)
FOR t=1 hasta MAXC-1 /*se repite hasta que la lista tabú este llena*/
s=s+1
FOR i=1 hasta i<=MAXC
FOR k=1 hasta k<=b(t)
Elegir la ciudad j a mover, con probabilidad pij(t) dado por la ecuación   (1);       
Mover la hormiga k-esima a la ciudad;
Insertar la ciudad j en tabuk(s);
Calcular ATij (t, t +1) = AT ij (t, t+ 1) + Q 1 / d ij;
END FOR
END FOR
Para cada arco (i,j) calcular T (t t ) ij , + 1 según la ecuación (2);
END FOR
Guardar el camino más corto;
nc=nc+1;
IF (nc<=NCMAX)
Vaciar todas las listas tabú;
Para cada arco (i,j) AT ij(t + 1) = 0 ;
s=1;
Colocar la ciudad origen de la hormiga k-esima en tabuk(s);
END IF
END WHILE
Imprimir el mejor camino;
 

viernes, 3 de diciembre de 2010

Sistemas Basados en Reglas

Los sistemas basados en reglas son usados como una forma de almacenar y manipular el conocimiento e interpretarlo de una manera útil. También son usados en inteligencia artificial e investigación.

Un clásico ejemplo de sistemas basados en reglas son los sistemas expertos de un dominio en específico. Por ejemplo un sistema experto podrían ayudar a un doctor  a escoger el diagnóstico correcto basado en un grupo de síntomas.

Definiciones de los Sistemas Expertos (SE)

Es un software que imita el comportamiento de un experto humano en la solución de un problema. Pueden almacenar conocimientos de expertos para un campo determinado y solucionar un problema mediante deducción lógica de conclusiones.

Son SE aquellos programas que se realizan haciendo explicito el conocimiento en ellos, que tienen información específica de un dominio concreto y que realizan una tarea relativa a este dominio.

Programas que manipulan conocimiento codificado para resolver problemas en un dominio especializado en un dominio que generalmente requiere de experiencia humana.

Programas que contienen tanto conocimiento declarativo (hechos a cerca de objetos, eventos y/o situaciones) como conocimiento de control (información acerca de los cursos de una acción), para emular el proceso de razonamiento de los expertos humanos en un dominio en particular y/o área de experiencia.  
Software que incorpora conocimiento de experto sobre un dominio de aplicación dado, de manera que es capaz de resolver problemas de relativa dificultad y apoyar la toma de decisiones inteligentes en base a un proceso de razonamiento simbólico.

Aplicaciones

Sus principales aplicaciones se dan en las gestiones empresariales debido a que;

a) Casi todas las empresas disponen de un ordenador que realiza las funciones básicas de tratamiento de la información: contabilidad general, decisiones financieras, gestión de la tesorería, planificación, etc.

b) Este trabajo implica manejar grandes volúmenes de información y realizar operaciones numéricas para después tomar decisiones. Esto crea un terreno ideal para la implantación de los SE.

Además los SE también se aplican en la contabilidad en apartados como: Auditoria(es el campo en el que más aplicaciones de SE se está realizando) Fiscalidad, planificación, análisis financiero y la contabilidad financiera.

Áreas de Aplicación

Los SE se aplican a una gran diversidad de campos y/o áreas. A continuación se listan algunas de las principales:

Militar  Informática  Telecomunicaciones Química Derecho Aeronáutica Geología Arqueología Agricultura Electrónica Transporte Educación Medicina Industria Finanzas y Gestión

Ventajas

Estos programas proporcionan la capacidad de trabajar con grandes cantidades de información, que son uno de los grandes problemas que enfrenta el analista humano que puede afectar negativamente a la toma de decisiones pues el analista humano puede depurar datos que no considere relevantes, mientras un SE debido a su gran velocidad de proceso analiza toda la información incluyendo las no útiles para de esta manera aportar una decisión más sólida.

Limitaciones

Es evidente que para actualizar se necesita de reprogramación de estos (tal vez este sea una de sus limitaciones más acentuadas) otra de sus limitaciones puede ser el elevado costo en dinero y tiempo, además que estos programas son poco flexibles a cambios y de difícil acceso a información no estructurada.

Debido a la escasez de expertos humanos en determinadas áreas, los SE pueden almacenar su conocimiento para cuando sea necesario poder aplicarlo. Así mismo los SE  pueden ser utilizados por personas no especializadas para resolver problemas. Además si una persona utiliza con frecuencia un SE aprenderá de él.

Por otra parte la inteligencia artificial no ha podido desarrollar sistemas que sean capaces de resolver problemas de manera general, de aplicar el sentido común para resolver situaciones complejas ni de controlar situaciones ambiguas.

El futuro de los SE da vueltas por la cabeza de cada persona, siempre que el campo elegido tenga la necesidad y/o presencia de un experto para la obtención de cualquier tipo de beneficio.

Arquitectura Básica de los Sistemas Expertos
 
Base de conocimientos. Es la parte del sistema experto que contiene el conocimiento sobre el dominio. Hay que obtener el conocimiento del experto y codificarlo en la base de conocimientos. Una forma clásica de representar el conocimiento en un sistema experto son lar reglas. Una regla es una estructura condicional que relaciona lógicamente la información contenida en la parte del antecedente con otra información contenida en la parte del consecuente.

Base de hechos (Memoria de trabajo). Contiene los hechos sobre un problema que se han descubierto durante una consulta. Durante una consulta con el sistema experto, el usuario introduce la información del problema actual en la base de hechos. El sistema empareja esta información con el conocimiento disponible en la base de conocimientos para deducir nuevos hechos.

Motor de inferencia. El sistema experto modela el proceso de razonamiento humano con un módulo conocido como el motor de inferencia. Dicho motor de inferencia trabaja con la información contenida en la base de conocimientos y la base de hechos para deducir nuevos hechos. Contrasta los hechos particulares de la base de hechos con el conocimiento contenido en la base de conocimientos para obtener conclusiones acerca del problema.

Subsistema de explicación. Una característica de los sistemas expertos es su habilidad para explicar su razonamiento. Usando el módulo del subsistema de explicación, un sistema experto puede proporcionar una explicación al usuario de por qué está haciendo una pregunta y cómo ha llegado a una conclusión. Este módulo proporciona beneficios tanto al diseñador del sistema como al usuario. El diseñador puede usarlo para detectar errores y el usuario se beneficia de la transparencia del sistema.

Interfaz de usuario. La interacción entre un sistema experto y un usuario se realiza en lenguaje natural. También es altamente interactiva y sigue el patrón de la conversación entre seres humanos. Para conducir este proceso de manera aceptable para el usuario es especialmente importante el diseño del interfaz de usuario. Un requerimiento básico del interfaz es la habilidad de hacer preguntas. Para obtener información fiable del usuario hay que poner especial cuidado en el diseño de las cuestiones. Esto puede requerir diseñar el interfaz usando menús o gráficos.

Ejemplo
El ejemplo del que vamos a hablar es de un sistema experto para reparar un microondas, este sistema experto fue desarrollado en prolog y  básicamente tiene como objetivo el proporcionar una guía para la solución de los problemas o fallas más comunes que puede  presentar el horno de microondas.

Las preposiciones simples que se utilizaron son:
A1 – Está conectado el microondas.
B1 – La conexión hace falso contacto.
C1 – Hay problemas con el calor del microondas.
C2 – Hay problemas con el panel de control.
C3 – Hay problemas con la puerta.
C4 – Hay otros problemas.
D1 – Hay calor débil.
D2 – Existe calor intermitente.
D3 – Existe calor.
D4 – La pantalla muestra código anormal.
D5 – La puerta se cierra de golpe para que funcione.
D6 – Algo estalló durante el tiempo de cocción.
E1 – El sonido del tarareo esta bajo.
E2 – Las conexiones de la terminal están en buenas condiciones.
E3 – Todo funciona correctamente.
E4 – Observa el código F1, F2, F3, F4 o F6.
E5 – Observa el código F5.
E6 – Observa el código S1.
E7 – Observa el código CS.
E8 – Observa el código PPPP.
E9 – Los botones funcionan correctamente.
E10 – La conexión del interruptor trabaja.
E11 – El microondas trabaja cuando se cierra la puerta.
E12 – Se encuentra chispeado fuera de la parte posterior del microondas.
E13 – Se apaga el microondas en el tiempo de cocinado.
F1 – El tubo del magnetrón funciona.
F2 – Expide un olor ardiente.
F3 – Los conectores del filamento del magnetrón están flojos.
F4 – Expide algún olor.
F5 – El botón Stara funciona correctamente.
F6 – Aparece “F12” en la pantalla.
F7 – La puerta del microondas esta quebrada.
F8 – Despidió olor a quemado.
F9 – Se apagó el microondas por problemas de energía.
G1 – El triac esta funcionando.
G2 – Aparece el código “F11”.
G4 – El cierre de la puerta funciona.
G5 – Las conexiones funcionan adecuadamente.
H1 – Trabajan las luces y el ventilador.
H2 – Funciona el módulo de control de calor.
H3 – El contador de tiempo del tablero funciona bien.
H4 – El contacto del fusible funciona bien.
H5 – Se escuchó un ruido en el microondas.
I1 – El triac funciona.
I2 – El tiempo transcurrido de cocción cambia por si solo.
I3 – Recibe energía.
I4 – El ventilador funciona.
I5 – Se forman arcos en el fondo del microondas.
J1 – El regulador auxiliar proporciona voltaje al transformador.
J2 – Funciona el tablero de memoria extendido.
J3 – Hay restos de alimento en el microondas.
J4 – Está girando la placa giratoria.

Árbol de Decisión
 Camino Solución
1)   ¬A1 èS1
2)   A1 Λ B1 èS2
3)   A1 Λ ¬B1 Λ C1 Λ D1 Λ E1 Λ F1 èS3
4)   A1 Λ ¬B1 Λ C1 Λ D1 Λ E1 Λ ¬F1 èS4
5)   A1 Λ ¬B1 Λ C1 Λ D1 Λ ¬E1 Λ F2 èS5
6)   A1 Λ ¬B1 Λ C1 Λ D1 Λ ¬E1 Λ ¬F2 èS6
7)   A1 Λ ¬B1 Λ C1 Λ D2 Λ ¬E2 èS7
8)   A1 Λ ¬B1 Λ C1 Λ D2 Λ ¬E2 Λ F3èS8
9)   A1 Λ ¬B1 Λ C1 Λ D2 Λ ¬E2 Λ ¬F3èS9
10)   A1 Λ ¬B1 Λ C1 Λ ¬D3 Λ E3 èS10
11)   A1 Λ ¬B1 Λ C1 Λ ¬D3 Λ ¬E3 Λ F4 Λ G1 èS11
12)   A1 Λ ¬B1 Λ C1 Λ ¬D3 Λ ¬E3 Λ F4 Λ ¬G1 Λ H1 èS12
13)   A1 Λ ¬B1 Λ C1 Λ ¬D3 Λ ¬E3 Λ F4 Λ ¬G1 Λ ¬H1 èS13
14)   A1 Λ ¬B1 Λ C1 Λ ¬D3 Λ ¬E3 Λ ¬F4 Λ G2 èS14
15)   A1 Λ ¬B1 Λ C1 Λ ¬D3 Λ ¬E3 Λ ¬F4 Λ ¬G2 Λ ¬H2 èS15
16)   A1 Λ ¬B1 Λ C1 Λ ¬D3 Λ ¬E3 Λ ¬F4 Λ ¬G2 Λ H2 Λ ¬I1 èS16
17)   A1 Λ ¬B1 Λ C1 Λ ¬D3 Λ ¬E3 Λ ¬F4 Λ ¬G2 Λ H2 Λ I1 Λ ¬J2 èS17
18)   A1 Λ ¬B1 Λ C1 Λ ¬D3 Λ ¬E3 Λ ¬F4 Λ ¬G2 Λ H2 Λ I1 Λ J2 èS18
19)   A1 Λ ¬B1 Λ C2 Λ D4 Λ E4 èS19
20)   A1 Λ ¬B1 Λ C2 Λ D4 Λ E5 èS20
21)   A1 Λ ¬B1 Λ C2 Λ D4 Λ E6 èS21
22)   A1 Λ ¬B1 Λ C2 Λ D4 Λ E7 èS22
23)   A1 Λ ¬B1 Λ C2 Λ D4 Λ E8 èS23
24)   A1 Λ ¬B1 Λ C2 Λ ¬D4 Λ ¬E9 Λ F5 èS24
25)   A1 Λ ¬B1 Λ C2 Λ ¬D4 Λ ¬E9 Λ ¬F5 èS25
26)   A1 Λ ¬B1 Λ C2 Λ ¬D4 Λ E9 Λ F6 èS26
27)   A1 Λ ¬B1 Λ C2 Λ ¬D4 Λ E9 Λ ¬F6 Λ G3 èS27
28)   A1 Λ ¬B1 Λ C2 Λ ¬D4 Λ E9 Λ ¬F6 Λ ¬G3 Λ ¬H3 Λ I2 èS28
29)   A1 Λ ¬B1 Λ C2 Λ ¬D4 Λ E9 Λ ¬F6 Λ ¬G3 Λ ¬H3 Λ I2 Λ ¬J2 èS29
30)   A1 Λ ¬B1 Λ C2 Λ ¬D4 Λ E9 Λ ¬F6 Λ ¬G3 Λ ¬H3 Λ I2 Λ J2 èS30
31)   A1 Λ ¬B1 Λ C2 Λ ¬D4 Λ E9 Λ ¬F6 Λ ¬G3 Λ H3 Λ I3 èS31
32)   A1 Λ ¬B1 Λ C2 Λ ¬D4 Λ E9 Λ ¬F6 Λ ¬G3 Λ H3 Λ ¬I3 èS32
33)   A1 Λ ¬B1 Λ C3 Λ D5 Λ E10 èS33
34)   A1 Λ ¬B1 Λ C3 Λ D5 Λ ¬E10 èS34
35)   A1 Λ ¬B1 Λ C3 Λ ¬D5 Λ ¬E11 èS35
36)   A1 Λ ¬B1 Λ C3 Λ ¬D5 Λ E11 Λ ¬F7 è S36
37)   A1 Λ ¬B1 Λ C3 Λ ¬D5 Λ E11 Λ F7 Λ G4 èS37
38)   A1 Λ ¬B1 Λ C3 Λ ¬D5 Λ E11 Λ F7 Λ ¬G4 è S38
39)   A1 Λ ¬B1 Λ C4 Λ D6 Λ E12 èS39
40)   A1 Λ ¬B1 Λ C4 Λ D6 Λ ¬E12 Λ F8 èS40
41)   A1 Λ ¬B1 Λ C4 Λ D6 Λ ¬E12 Λ ¬F8 èS41
42)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ ¬E13 èS42
43)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ E13 Λ F9 èS43
44)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ E13 Λ ¬F9 Λ G5 Λ H4 èS44
45)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ E13 Λ ¬F9 Λ G5 Λ ¬H4 èS45
46)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ E13 Λ ¬F9 Λ ¬G5 Λ H5 Λ I4 èS46
47)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ E13 Λ ¬F9 Λ ¬G5 Λ H5 Λ ¬I4 èS47
48)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ E13 Λ ¬F9 Λ ¬G5 Λ ¬H5 Λ I5 Λ J3 èS48
49)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ E13 Λ ¬F9 Λ ¬G5 Λ ¬H5 Λ I5 Λ ¬J3 èS49
50)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ E13 Λ ¬F9 Λ ¬G5 Λ ¬H5 Λ ¬I5 Λ J4 èS50
51)   A1 Λ ¬B1 Λ C4 Λ ¬D6 Λ E13 Λ ¬F9 Λ ¬G5 Λ ¬H5 Λ ¬I5 Λ ¬J4 èS51
Por ultimo les dejo unas imágenes del código y del sistema experto ya funcionando.