viernes, 27 de marzo de 2009

Matemática Difusa

El año 1950 el gran filósofo galés Bertrand Russell recibió el Premio Nobel de Literatura. Pero, sin duda, sus aportaciones más importantes e imperecederas son las encuadradas dentro de la filosofía y de la lógica matemática. A principios de siglo Russell se interesó por la vieja paradoja griega del cretense que afirmaba que todos los cretenses mienten. En tal caso, ¿miente el cretense?. Si miente al hacer la afirmación, entonces no está diciendo la verdad, es decir, no miente. Pero si no miente, está diciendo la verdad, es decir, miente. La contradicción del cretense es evidente: su enunciado, simultáneamente, resulta ser cierto y falso. Pero, aunque lo parezca, este ejemplo no es una simple paradoja. Sus derivaciones actuales marcan multitud de procesos industriales, informáticos o económicos. En realidad esta paradoja se relaciona con el mismo corazón de la teoría de conjuntos y de la lógica moderna. El mismo Russell encontró otra paradoja semejante en la teoría matemática de los conjuntos: “El conjunto de todos los conjuntos es, a su vez, otro conjunto, por lo que sería miembro de sí mismo.”

En centro de este problema es la contradicción existente entre la lógica clásica y la lógica difusa. El origen de sus diferencias radica en lo que Aristóteles expuso como ley del tercio excluso. Lo usual en la teoría de conjuntos es que un objeto cualquiera pertenezca a un conjunto o bien no pertenezca a él, sin términos medios posibles. Así, una persona que tiene empleo pertenece al conjunto de los empleados y no pertenece al conjunto de los no empleados. O el número 8 forma parte del conjunto de los números pares, pero en absoluto del de los números impares. Un objeto no puede pertenecer simultáneamente a un conjunto y a su complementario. El funcionamiento de las computadoras está fundamentado en este tipo de lógica. El “razonamiento” de una computadora consiste en tratar con situaciones concretas y precisas que se corresponden a la disyuntiva dicotómica verdadero/falso, a través de un lenguaje binario consistente en series de unos y ceros. Pero al cerebro humano no le basta esta lógica tradicional, sino que utiliza expresiones más inciertas e indeterminadas que incluyen juicios de valor.

La inteligencia artificial pretende construir sistemas capaces de realizar las mismas funciones que caracterizan al pensamiento humano mientras que, por su parte, los sistema expertos son aplicaciones informáticas que adoptan decisiones o resuelven problemas de índole variada utilizando los conocimientos y las reglas analíticas definidas por los expertos en esos campos. Un nexo bastante utilizado entre la inteligencia artificial y los sistemas expertos es la lógica difusa. Mediante la lógica difusa la inteligencia artificial se aplica a las computadoras a fin de transformar el blanco/negro de la lógica clásica hasta los tonos de grises que caracteriza la percepción humana de un mundo que es incierto. La lógica clásica no tenía contestación para la paradoja del cretense, sin embargo para la lógica borrosa sí la hay: el cretense es un 50% veraz y un 50% mentiroso. Algo puede ser simultáneamente una porción de verdadero y la porción complementaria de falso.

Muchos de los científicos que trabajan con la teoría de la incertidumbre afirman de manera contundente que “el mundo es un lugar difuso”. Si se combina el término difuso con “lógica” se consigue una contradicción de ideas. Desgraciadamente, la palabra inglesa “fuzzy” presenta connotaciones bastante negativas. Significa incierto, impreciso, pensamiento errado. Cuando las personas piensan en lógica, es el último en precisión, roca sólida, indiscutible. Ser lógico es quizá el cumplido más alto que se puede otorgar a un científico. Cuando se habla de “lógica”, normalmente se hace referencia a la lógica de Aristóteles descubierta en el año 300 antes de Cristo. La lógica Aristotélica es la base del pensamiento occidental, habiendo sido estudiada y explorada por miles de científicos y filósofos desde sus comienzos. Esta lógica se encuentra fundamentada con base en una idea sencilla, simple pero comprendida por todos: Una proposición es solamente verdadera o falsa. Es una lógica binaria que permite solo dos valores, sin existir una posición o posiciones intermedias entre estos dos extremos absolutos.

La mayoría de los fenómenos que se encuentran a diario son imprecisos, es decir, contienen de manera implícita un cierto grado de incertidumbre en la descripción de su naturaleza. Esta imprecisión puede estar asociada con su forma, posición, momento, color, textura o incluso en la semántica que describe lo que realmente son. En muchos casos el mismo concepto puede tener diferentes grados de imprecisión en diferentes contextos o tiempos. Un día cálido en invierno no es exactamente lo mismo que un día cálido en primavera. La definición exacta de cuando la temperatura va de templada a caliente es imprecisa, no es posible identificar un punto simple de templado, tal que emigrando un simple grado la temperatura del ambiente sea considerada caliente. Este tipo de imprecisión asociado continuamente a los fenómenos, es bastante común en bastantes campos de estudio: informática, ingeniería, sociología, física, biología, psicología, oceanografía, etc.

Se acepta la imprecisión como una consecuencia natural de “la forma de las cosas en el mundo”. La dicotomía entre el rigor y la precisión del modelado matemático en muchos de los campos de la ciencia además de la intrínseca incertidumbre del “mundo real” no es generalmente aceptada por los científicos, filósofos y analistas de negocios. Es posible simplemente una aproximación a estos eventos a través de funciones numéricas y la selección de un resultado, en lugar de hacer un análisis del conocimiento empírico. Sin embargo las personas se encargan de procesar y entender de manera sencilla e implícita la imprecisión de la información, a tal punto que son capaces de formular planes, tomar decisiones y reconocer conceptos compatibles con altos niveles de vaguedad y ambigüedad.

La lógica difusa se encuentra relacionada y fundamentada en la teoría de los “conjuntos difusos”. Según esta teoría, el grado de pertenencia de un elemento a un conjunto viene determinado por una función de pertenencia, que puede tomar todos los valores reales comprendidos en el intervalo [0, 1]. No hay nada impreciso acerca de la lógica difusa, es matemática, natural y simple, fundada en el concepto “todo es cuestión de grados”, lo cual permite manejar información vaga o de difícil especificación, si se quisiera hacer cambiar con esta información el funcionamiento o el estado de un sistema específico. Por consiguiente, es posible con la lógica difusa, gobernar un sistema por medio de reglas de “sentido común” las cuales se refieren a cantidades indefinidas.

Las reglas involucradas en un sistema difuso, puede ser aprendidas con sistemas adaptativos que aprenden al “observar” como operan las personas los dispositivos reales, o estas reglas pueden también ser formuladas por un experto humano, en general la lógica difusa se aplica tanto a sistemas de control como para modelar cualquier sistema continuo de informática, ingeniería, física, biología o economía entre otros. La lógica difusa es entonces definida como un sistema matemático que modela funciones no lineales, que convierte unas entradas en salidas de acuerdo con los planteamientos lógicos que utilizan el razonamiento aproximado. Por consiguientes, la lógica difusa se adapta mejor al mundo real en el que conviven varias personas, e incluso puede comprender y funcionar las expresiones cotidianas del tipo: “hace mucho calor”, “no es muy alto”, “el ritmo del corazón está un poco acelerado”, etc. La clave de esta adaptación al lenguaje, se basa en comprender los cuantificadores o restricciones elásticas del lenguaje. En la teoría de conjuntos difusos se definen también las operaciones de unión, intersección, diferencia, negación o complemento, y otras operaciones sobre conjuntos en los que se basa esta lógica. Para cada conjunto difuso, existe asociada una función de pertenencia para sus elementos, que indican en qué medida el elemento forma parte de ese conjunto difuso.

La matemática difusa tiene una base sólida, que radica en la lógica difusa, y se destaca por la importancia de su aplicación en las diversas disciplinas, de forma tal que permita el cambio de paradigma de algunas teorías subyacentes en la toma de decisiones. Esta toma de decisiones se realiza en tres situaciones: la de certeza, donde reina la matemática convencional; la de riesgo, donde se aplica el cálculo de probabilidades; y por último, la de incertidumbre, en la cual se intenta demostrar la aplicabilidad de la matemática difusa para efectuar un tratamiento de la incertidumbre.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Diciembre 15 de 2008

miércoles, 25 de marzo de 2009

Agentes Semánticos

Un agente es todo aquello que puede considerarse que percibe su ambiente mediante sensores y que responde o actúa en tal ambiente por medio de efectores. Los agentes humanos tienen ojos, oídos y otros órganos que le sirven de sensores, así como manos, piernas, boca y otras partes de su cuerpo que le sirven de efectores. En el caso de agentes robóticos, los sensores son sustituidos por cámaras infrarrojas y los efectores son reemplazados mediante motores. En el caso de un agente de software, sus percepciones y acciones vienen a ser una cadena de bits codificados. En este contexto, un agente inteligente es una entidad capaz de percibir su entorno, procesar tales percepciones y responder o actuar en su entorno de manera racional, es decir, de manera correcta y tendiendo a maximizar un resultado esperado. En este contexto la racionalidad es la característica que posee una elección de ser correcta, más específicamente, de tender a maximizar un resultado esperado. Este concepto de racionalidad es más general y por ello más adecuado que inteligencia, la cual sugiere entendimiento, para describir el comportamiento de los agentes inteligentes. Por este motivo es mayor el consenso en llamarlos agentes racionales. Un agente inteligente puede ser una entidad física o virtual. Si bien el término agente racional se refiere a agentes artificiales en el campo de la inteligencia artificial, también puede considerarse agentes racionales a los animales incluido el hombre.

De esta manera se considera que un agente racional es aquel que hace lo correcto, lo correcto se afirma cuando el agente alcanza el mejor desempeño. El agente racional puede medir su propio desempeño, a modo de autoevaluación, pero es una tarea no recomendable. El término “medición del desempeño” se aplica al cómo es el criterio que sirve para definir qué tan exitoso ha sido un agente. Desde luego que no existe una medida fija que se pueda aplicar por igual a todos los agentes porque sus respuestas van a ser subjetivas, entonces una verdadera medición de desempeño la pueden realizar observadores externos. En este punto es menester señalar que no se debe confundir omnisciencia con racionalidad. Un agente omnisciente es aquel que sabe el resultado real que producirán sus acciones, y su conducta es congruente con ello.

En general, se acepta que un agente es cualquier sistema capaz de percibir cambios en su entorno, de representar de algún modo la información sobre el estado actual de sus objetivos y de actuar sobre su entorno basándose en éstos y en experiencias pasadas. Cuando se consideran entornos virtuales, entre los cuales se considera a la Web, los intranets, etc., se habla de agentes del software; en entornos físicos, los agentes pueden ser animales, personas, robots o autómatas. El término “agente” describe una abstracción del software, una idea o concepto, similar a los métodos, funciones y objetos en la programación orientada a objetos. El concepto de agente proporciona una forma conveniente y poderosa de describir una compleja entidad de software, que es capaz de actuar con cierto grado de autonomía, para cumplir tareas en representación de las personas. Pero a diferencia de los objetos, que son definidos por métodos y atributos, un agente es definido por su propio comportamiento. Varios autores han propuesto diferentes definiciones de agentes, estos incluyen generalmente conceptos como: (1) Persistencia. El código no es ejecutado bajo demanda sino que se ejecuta continuamente y decide por sí mismo cuándo debería llevar a cabo alguna actividad. (2) Autonomía. Los agentes tienen la capacidad de seleccionar tareas, priorizarlas, tomar decisiones sin intervención humana. (3) Capacidad o habilidad social. Los agentes son capaces de tomar otros componentes, a través de la coordinación y comunicación, tales que puedan colaborar en una tarea. (4) Reactividad. Los agentes perciben el contexto en el cual operan y reaccionan a éste apropiadamente.

En el dinámico mundo de la Web, el lenguaje de marcado constituía desde el principio una herramienta destinada no solamente para la presentación de documentos, de hecho, esa fue una consecuencia desafortunada de su popularidad; este lenguaje buscaba ser un útil para la representación de contenidos. Con el tiempo el creador de la Web Tim Berners-Lee junto con otros autores desarrollaron una idea nueva mucho más flexible y desde cierto punto de vista más simple que la Web tradicional, ésta idea fue la Web semántica. La idea fundamental de la Web semántica fue avanzar más sobre la idea original de representar la estructura de un documento pero de paso corregir algunos de los problemas que surgieron durante la transformación por uso del lenguaje de marcado. La Web semántica recupera la capacidad de los lenguajes de marcado para establecer elementos claros, bloques de elementos y relaciones entre componentes de un objeto tanto en su sintaxis como en su semántica, es decir, en el significado y relaciones de significado de los mismos. Esta propuesta establece una serie de capas tales que, como todos los esquemas en capas, cada uno aporta una funcionalidad estrictamente definida para un objetivo final. La Web semántica se propone entonces como pila de capas a saber: codificación e identificación, sintaxis, representación de información, ontología, reglas lógicas, prueba y confianza. Existen múltiples representaciones de esta pila, pero todas tienen las capas mencionadas y sus significados son los mismos con alguna que otra variante que incluye una o dos capas más. Por encima de las capas de codificación e identificación y paralelamente a las otras capas hay un último elemento de seguridad que suele estar compuesto por encriptación y firma digital. La visión de la Web semántica permite un mayor grado de expresividad en las aplicaciones Web, ya que en estas aplicaciones no solo se codifican datos, si no que también se introduce conocimiento. Este conocimiento adicional proporciona información extra que seguramente no es útil al que navega por la aplicación, pero si que resulta bastante útil para que las computadoras sean capaces de extraer conocimiento de una forma más simple y estandarizada, por tanto mejorando ampliamente los resultados de la búsqueda en la Web.

La Web semántica busca darle a las computadoras la flexibilidad necesaria para que las aplicaciones tengan cierta capacidad de deducción sobre lo que están transportando y para garantizar que los orígenes de los contenidos y los contenidos mismos sean confiables, validando tanto la autenticidad de las fuentes como la veracidad de parte de los contenidos. Esta propuesta no busca de ninguna manera crear un marco lógico único, sino ser suficientemente flexible como para representar todas las lógicas y preferencias humanas posibles y permitir que los humanos validen que los orígenes y contenidos se adaptan a lo que ellos prefieren. Por encima de esta infraestructura se espera que existan aplicaciones casi inteligentes, que conozcan mucho acerca de sus usuarios y sean capaces de proponerle opciones una vez que están en conocimiento de los temas de preferencia y de lo que Internet tiene para ofrecer teniendo estas preferencias alineadas con los datos personales importantes de la persona, como la fecha de cumpleaños, enfermedades que sufra o citas que tenga planificadas.

Los agentes semánticos son agentes que usan tecnologías de la Web semántica para cumplir sus objetivos. Debido a que todavía no existe una Web semántica, no hay agentes semánticos que puedan aprovechar sus posibilidades. Existen, sin embargo, agentes semánticos que operan sobre dominios muy específicos; y también hay algunos agentes semánticos que actúan como buscadores de información o como asistentes personales. Por ejemplo, el navegador “Amblit” incluye un asistente denominado “agente personal inteligente” al que se le puede enseñar lo qué desea el usuario y cuándo lo desea. Este agente admite preguntas, en el supuesto caso de un dominio local, como las siguientes: ¿Cuál es la cotización de ENTEL? ¿Qué tiempo hará en Santa Cruz la próxima semana? ¿Cuál es el número de teléfono de Ana Maura Pacheco? También se le pueden dar órdenes del tipo “Búscame un mapa de Bolivia” o “Averigua dónde puedo encontrar la película ‘Inteligencia Artificial’ de Spielberg”. Para entender miles de sentencias en lenguaje natural, el agente semántico de Amblit se apoya en una ontología y en un software de comprensión del lenguaje natural. Este software “traduce” las preguntas u ordenes en texto libre a conceptos de la ontología.

Los agentes del software serán parte de la Web semántica, pero no estarán restringidos a ella. Cada vez se usan más en aplicaciones de todo tipo: comercio electrónico, sistemas de telecomunicaciones, control de procesos industriales, búsqueda de información, control del tráfico aéreo, reingeniería de procesos, gestión de agendas, organización de correos electrónicos, etc. Puede que en el futuro no exista la Web semántica o que sólo se desarrollen “islotes” semánticos. Sea como fuere, los agentes se encuentran presentes en el mundo de las nuevas tecnologías para quedarse.

Guillermo Choque Aspiazu
Diciembre 8 de 2008

lunes, 23 de marzo de 2009

Programación de Sistemas Expertos

En informática la programación es un proceso por el cual se escribe el denominado código fuente en un lenguaje de programación, el mismo se prueba, se depura y se mantiene. Al interior de la informática, los programas son los elementos que, derivados de un algoritmo, forman el código fuente, que es el conjunto de las instrucciones que ejecuta el hardware de una computadora para realizar una tarea determinada. Para el desarrollo de programas de cierta envergadura o complejos, con ciertas garantías de calidad, es conveniente seguir alguno de los modelos de proceso del software, donde la programación es sólo una de las etapas para el desarrollo del software. Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa un algoritmo. Debe considerarse que la secuencia de instrucciones en sí es la que debe ser finita, no el número de pasos realizados como la ejecución de ellas. Los programas suelen subdividirse en partes menores, llamadas módulos, de modo que la complejidad algorítmica de cada una de las partes sea menor que la del programa completo, lo cual ayuda al desarrollo del programa. Según el investigador Niklaus Wirth, un programa está formado por algoritmos y estructura de datos.

Existe una tendencia a considerar como equivalentes el proceso de creación de un programa informático con la programación, que es cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando se trata de medianos y grandes proyectos. El proceso de creación del software es una tarea destinada a la ingeniería que cuenta con los siguientes pasos: (1) Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatización de una tarea. (2) Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el programa y para qué se necesita. (3) Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase. (4) Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable. (5) Implementar el programa. Consiste en realizar un diseño detallado, especificando completamente todo el funcionamiento del programa, tras lo cual la codificación debería resultar inmediata. (6) Probar el programa. Consiste en realizar pruebas de funcionalidad al programa. (7) Instalar el programa. Consiste en poner el programa en funcionamiento junto con los componentes que pueda necesitar. La ingeniería del software se encuentra centrada en los pasos de planificación y diseño de productos software o programas con calidad, mientras que la programación artesanal plantea que la realización de un programa consiste únicamente en escribir el código fuente.

Los sistemas expertos pueden ser considerados como el primer producto verdaderamente operacional de la inteligencia artificial. Son programas computacionales diseñados para actuar como un especialista humano en un dominio particular o área de conocimiento. En este sentido, pueden considerarse como intermediarios entre el experto humano, que transmite su conocimiento al sistema, y el usuario que lo utiliza para resolver un problema con la eficacia del especialista. El sistema experto utilizará para ello el conocimiento que tiene almacenado y algunos métodos de inferencia. A la vez, el usuario puede aprender observando el comportamiento del sistema. Es decir, los sistemas expertos se pueden considerar simultáneamente como un medio de ejecución y transmisión del conocimiento. Lo que se intenta, de esta manera, es representar los mecanismos heurísticos que intervienen en un proceso de descubrimiento. Estos mecanismos forman ese conocimiento difícil de expresar que permite que los expertos humanos sean eficaces calculando lo menos posible. Los sistemas expertos contienen ese “saber hacer”.

Los sistemas expertos constituyen quizás el área de la inteligencia artificial más conocida y ampliamente aplicada a problemas prácticos. La idea general sobre la cual se basan dichos sistemas, es que la experticia se puede descomponer en un conjunto de reglas o proposiciones, las cuales pueden verse como pedazos aislados de conocimiento que se encadenan o relacionan a partir de un procesamiento lógico. Este modelo es comparable con el modelo Euclidiano el cual parte de un conjunto de axiomas básicos y a partir de un mecanismo de razonamiento, aplicado sobre dicho conjunto, se pueden generar teoremas, propiedades, etc. En otro sentido, menos técnico, los sistemas expertos pueden definirse como sistemas capaces de emular la experticia de un experto humano en la resolución de un problema, brindando una solución similar a la que daría cualquier experto en la materia de trabajo.

Los sistemas expertos se componen de cuatro elementos fundamentales: (1) Base de conocimiento. Contiene las reglas sobre las cuales se construyen las soluciones a los problemas. Cada base de conocimiento es específica al dominio del conocimiento en el cual el sistema se especializa, por ejemplo: la medicina, la matemática, el diseño de circuitos, etc. (2) Base de hechos o axiomas. Contiene todas las afirmaciones o axiomas iniciales a partir de las cuales, y con ayuda de la reglas de la base de conocimiento, se puede encontrar la solución al problema planteado. (3) Motor de inferencia. También denominado intérprete de reglas, es el elemento central del sistema experto y se encarga de realizar el proceso de inferencia a partir de los elementos contenidos en la base de conocimiento y en la base de hechos. (4) Adicionalmente puede existir una base de datos con información puntual sobre problemas específicos anteriormente resueltos por el sistema, y que se usa como información adicional en el proceso de inferencia. La característica central de un sistema experto es que separa los conocimientos almacenados, en una base de conocimiento, del programa que los controla, el motor de inferencia. Los datos propios de un determinado problema se almacenan en una base de datos particular denominada base de hechos. Una característica adicional deseable, y a veces fundamental, es que el sistema sea capaz de justificar su propia línea de razonamiento de forma inteligible por el usuario.

Algunas diferencias entre un sistema experto y un programa convencional son: (1) la tarea que realiza un sistema experto fue anteriormente realizada por un especialista humano entendido en la temática. (2) Los sistemas basados en conocimiento son mantenidos por ingenieros del conocimiento y por expertos humanos. El mantenimiento de los programas convencionales lo llevan a cabo los programadores. (3) La base de conocimiento de un sistema experto es legible y fácil de modificar. (4) La estructura global de los programas convencionales descansa fundamentalmente en los algoritmos, mientras que la de los sistemas basados en conocimiento se basan sobre todo en heurísticas. Se puede observar otra diferencia importante entre la programación convencional y la programación simbólica describiendo como trabajan los ingenieros del conocimiento. La ingeniería del conocimiento se ocupa tanto del desarrollo del software para sistemas expertos como del análisis del modo en el que los expertos humanos resuelven problemas. Los ingenieros del conocimiento colaboran con los expertos humanos y les ayudan a describir su conocimiento y las estrategias de inferencia de modo tal que puedan codificarse. Así, un ingeniero del conocimiento combina grandes dosis de psicología cognitiva con técnicas de programación simbólica para el desarrollo de sistemas expertos.

A modo de conclusión se puede mencionar que las discrepancias principales entre la programación convencional y la simbólica son las siguientes: (1) La programación convencional trabaja con algoritmos mientras que la programación simbólica trabaja con heurísticas. (2) La programación convencional utiliza bases de datos con direccionamiento numérico mientras que la programación simbólica utiliza bases de conocimiento estructuradas simbólicamente en una memoria de trabajo global. (3) La programación convencional está orientada al procesamiento numérico mientras que la programación simbólica está orientada el procesamiento simbólico. (4) La programación convencional cuenta con un procesamiento secuencial y por lotes mientras que la programación simbólica cuenta con un procesamiento bastante interactivo. (5) La programación convencional no tiene un mecanismo de explicación de su procesamiento mientras que la programación simbólica cuenta con un mecanismo sencillo de explicación de su ejecución.

Guillermo Choque Aspiazu
Diciembre 1 de 2008

viernes, 20 de marzo de 2009

Reingeniería del Software

En la actualidad cualquier entidad ya sea educacional, gubernamental o empresarial dependen en total medida del rendimiento que tengan sus sistemas informáticos. Resulta limitado imaginar el funcionamiento de una empresa, sin la intervención de algún sistema computacional, pues estos están involucrados de algún modo en la organización, ventas, desarrollo, producción, manufactura, inventarios, publicidad, mercadotecnia, personal, costos; de manera resumida casi en todo. Una empresa, no es una entidad en sí misma, sino que está basada en programas computacionales, o más específicamente en productos software. La vida actual se encuentra en constante cambio y por lo tanto existe un desarrollo e innovación cada vez más rápido; y por supuesto las empresas no están excluidas de dicho cambio y se ven obligadas a actualizar constantemente sus sistemas computacionales, pues sin estos no podrían estar a la altura de las necesidades que exigen sus clientes. La gran competencia y demanda que existe en el mercado, exige que las empresas tengan lo último en tecnología, por lo que la actualización y el perfeccionamiento del software son absolutamente imprescindibles. Y es aquí precisamente donde entran en juego las estrategias para realizar cambios en el producto software.

Los sistemas de información heredados generalmente son la columna vertebral del flujo de información de las empresas y la principal forma de agruparla. Un sistema de información heredado puede ser definido como “cualquier sistema de información que significativamente se resiste a la modificación y evolución”. Tales sistemas de información pueden causar serios problemas a la organización, entre los cuales resaltan los siguientes: (1) Los sistemas de información heredados casi siempre son ejecutados sobre hardware obsoleto que son lentos y caros de mantener. (2) El mantenimiento del software puede ser caro, porque se carece de la documentación necesaria para el entendimiento de los detalles del sistema y su seguimiento es costoso de que además consume mucho tiempo. (3) Una falta de interfaces limpias hace que la integración de los sistemas de información heredados con otros sistemas sea difícil. (4) Los sistemas de información heredados son también difíciles mas no resulta imposible el ampliarlos. Por consiguiente la solución a estos problemas cae en las siguientes categorías: (1) Mantenimiento. Que consiste en un proceso incremental e iterativo en el cual se hacen pequeñas modificaciones al sistema. (2) Modernización. Implica cambios más extensos que el mantenimiento pero conserva partes considerables del sistema existente. (3) Remplazo. Que consiste en reconstruir el sistema desde sus inicios. Esta última solución consiste en aplicarle al sistema actividades de reingeniería.

La reingeniería se focaliza dentro de dos ámbitos muy importantes como son el negocio de la organización y el desarrollo del software. Por una parte se encarga del proceso de negocio con el fin de elevar la competitividad del mismo y por el otro, evalúa y examina los programas o aplicaciones con el objetivo de reestructurarlos o reconstruirlos, aportando de esta manera con un alto nivel de calidad. La reingeniería de procesos en los negocios se encuentra en función de las necesidades del cliente, rediseñándose radicalmente los procesos principales de negocios desde el inicio al fin con la finalidad de alcanzar mejoras en las medidas críticas de rendimiento tales como: costos, calidad, servicio y rapidez. La reingeniería regresa a la esencia del negocio, cuestionando principios fundamentales y su forma de operación. La reingeniería significa una revolución en la forma de administrar la empresa; su éxito no se basa en mejorar lo existente sino en olvidar cómo se hacían las cosas, diseñarlas de nuevo y analizar el proceso. La reingeniería implica borrar todo lo pasado y empezar de nuevo. Se determina primero qué debe hacerse y luego cómo debe hacerse. Se olvida de lo que es y se concentra en lo que debe ser.

La reingeniería debe ser entendida como un proceso mediante el cual se mejora un software existente haciendo uso de técnicas de ingeniería inversa y reestructuración de código. En este proceso juega un papel importante el uso de repositorios para almacenar los resultados de la ingeniería inversa y las herramientas de asistencia de la ingeniería del software. Puesto que la reingeniería es una suma de tareas que requiere tiempo y esfuerzo, esta se puede dividir en una serie de procesos separados que se llevan a cabo secuencialmente. Los procesos fundamentales en la reingeniería son: (1) Análisis de inventario. Este proceso consiste en el estudio de la antigüedad, importancia de la aplicación en el negocio y el proceso de mantenimiento actual, entre otros criterios, para estudiar la posible conveniencia de la reingeniería. (2) Reestructuración de documentos. En este proceso se puede optar por una de tres opciones: Evitar la documentación de los módulo estáticos que no van a sufrir cambios, documentar sólo lo que se va a modificar y documentar toda la información del sistema, si es que este es fundamental para el negocio. (3) Ingeniería inversa. En este proceso se extraen modelos de alto nivel de abstracción que ayuden a la comprensión de la aplicación para poder modificarla y que sirvan como punto de partida para el siguiente proceso. Estos datos se deben almacenar en un repositorio que permita que las personas o herramientas que lleven a cabo los siguientes pasos lo encuentren disponible. De esta manera se conforma también la documentación de análisis y diseño de la aplicación que facilitará su posterior mantenimiento. (4) Reestructuración del código y de los datos o aplicación de técnicas de ingeniería directa. A la luz de los resultados de la ingeniería inversa, se reestructuran el código y los datos o se aplican técnicas de ingeniería directa para rehacer la aplicación.

La reingeniería del Software es una forma de modernización para mejorar las capacidades o la capacidad de mantenimiento de los sistemas de información heredados, mediante la aplicación de tecnologías y practicas modernas. La reingeniería del software ofrece una disciplina de preparación para migrar un sistema de información heredado hacia un sistema capaz de evolucionar. El proceso aplica principios de ingeniería aplicados a un sistema existente para encontrar nuevos requerimientos. El “Instituto de Ingeniería del Software” establece una definición de reingeniería como: “reingeniería es la transformación sistemática de un sistema existente dentro de una nueva forma de realizar el mejoramiento de la calidad en las operaciones, la capacidad del sistema, la funcionalidad, el rendimiento evolutivo a bajo costo y las agendas o riesgos para el cliente.”

El propósito de la reingeniería es que los sistemas existentes tomen ventajas de las nuevas tecnologías además de habilitar el nuevo esfuerzo de desarrollo para que se aproveche las ventajas de reutilizar sistemas existentes. La reingeniería tiene el potencial de mejorar la productividad y calidad del software a través de todo el ciclo de vida. La reingeniería casi siempre implica cambiar la forma de un programa y mejorar su documentación. En este caso, la funcionalidad del programa no es modificada; sólo su forma se presta a modificaciones. En otros casos, la reingeniería va más allá de la forma e incluye rediseñar la funcionalidad del programa para buscar mejores requerimientos de usuario.

Los objetivos de la reingeniería son: (1) Proporcionar asistencia automatizada para el mantenimiento. (2) Reducir los errores y costos del mantenimiento. (3) Incrementar el intercambio del grupo de mantenimiento. (4) Hacer sistemas fáciles de entender, cambiar y probar. (5) Habilitar la conversión y migración de sistemas. (6) Reforzar el apego a estándares. (7) Mejorar la respuesta a peticiones de mantenimiento. (8) Mejorar el estado de ánimo del grupo de mantenimiento. (9) Proteger y extender la vida del sistema. (10) Usar ayudas de la ingeniería del software para apoyar sistemas existentes. (11) Reusar componentes de sistema existentes.

La reingeniería se aplica en las siguientes situaciones: (1) Cuando una aplicación de cierto sistema ha funcionado durante varios años y, con el paso del tiempo, se ha vuelto inestable debido a las correcciones, adaptaciones y mejoras realizadas. (2) Cuando alguna de las partes de un gran sistema requiere un mantenimiento frecuente. (3) Cuando los cambios en el sistema se hacen mayormente sobre una parte de un sistema, entonces dicha parte puede ser objeto de reingeniería. (4) Cuando el soporte hardware o software se queda obsoleto. (5) Cuando se dispone de herramientas automáticas para reestructurar el sistema. Entre las ventajas que proporciona la reingeniería se anotan las siguientes: (1) Se reduce el riesgo en la actualización del software. (2) Se reduce el costo en la actualización del software. (3) Se aumenta la calidad y confiabilidad del software.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Noviembre 24 de 2008

viernes, 6 de marzo de 2009

Máquinas Inteligentes

Una pregunta que se hacen los estudiosos de las neurociencias y de la computación es sobre la posibilidad de desarrollar sistemas inteligentes. Esta pregunta es relevante no sólo desde el punto de vista tecnológico, que es el más evidente luego de tantos años de robots televisivos, sino en sus aspectos teóricos, ya que una respuesta afirmativa implica adherirse a la idea de que no existe en el cerebro de los seres humanos nada semejante a "un soplo divino", un alma o espíritu. Una respuesta negativa, si bien no necesariamente representa que se adopte una postura idealista, implica que la estructura de la entidad que da origen a la conciencia es tal que, en principio, es irreproducible y, más aún, con toda probabilidad incognoscible. El problema no es trivial y tiene que ver también con la posibilidad del auto-reconocimiento del ser humano, de entender cómo es que piensa y adquiere conciencia, cómo se origina la imaginación, la memoria, gustos y emociones. En última instancia las neurociencias pretenden entender la inteligencia y la conciencia humana. Es importante distinguir entre lo que pudiera ser una "máquina pensante" y lo que son las computadoras. Al hablar de máquinas inteligentes la mayoría de las personas tienden a asociar las computadoras personales y su increíble necedad. Las computadoras con las que usualmente se tiene relación son capaces de almacenar grandes cantidades de datos y realizar ciertas operaciones básicas a muy alta velocidad y, por el momento, nada más.

El comportamiento inteligente se caracteriza por no producir siempre los mismos resultados. Según las circunstancias y factores objetivos y subjetivos, ante una misma situación, los seres inteligentes no toman la misma decisión. Es conocida la importancia que tiene en los juegos de apuesta, las diversas actitudes que se adoptan cuando se dispone de las misma cartas, según las diversas fases del juego o el comportamiento de los rivales. La inteligencia artificial ha sido creada por el hombre para copiar, en cierta medida, la inteligencia natural. Para conseguirlo, se ha escogido como herramienta disponible más potente y sofisticada, la computadora, máquina capaz de procesar gran cantidad de datos en muy poco tiempo, según las directrices definidas en un programa computacional. Actualmente se considera a la computadora como una máquina tonta, que significa que solo realiza aquello que se haya programado previamente. Este modo de operar elimina una de las cualidades principales de la inteligencia, que consiste en un comportamiento que no ha sido programado, sino que se ha producido de manera espontánea, como consecuencia de un manejo inteligente de los conocimientos y experiencias. Esto se puede observar en un ser humano donde la experiencia y la facultad de razonamiento se alternan a lo largo del tiempo, es bastante frecuente, cuando se observa el comportamiento de los seres humanos, que una persona reaccione de forma diferente ante los mismos hechos.

La inteligencia comprende facultades como: (1) Percibir y manejar elementos del mundo real. (2) Adquirir, aplicar conocimientos y entender el lenguaje natural. (3) Razonar y resolver problemas. Una máquina puede considerarse como inteligente cuando cumple los siguientes requisitos: (1) Si es capaz de percibir visualmente los objetos que la rodean y reconocer sus formas. (2) Si es capaz de “entender” el lenguaje natural, hablado o escrito, así como de producir respuestas en dicho lenguaje. (3) Otra característica propia de una máquina inteligente consiste en elaborar acciones de acuerdo con las condiciones cambiantes del entorno y llevarlas a cabo mediante los correspondientes elementos físicos. (4) Se dice que una máquina es inteligente cuando puede almacenar información y conocimiento a los que maneja mediante reglas y algoritmos para alcanzar soluciones a problemas que plantea su funcionamiento. El estado actual de la inteligencia artificial está muy lejos de alcanzar la excelente armonía funcional de los seres vivos inteligentes y, mucho menos, de fabricar robots que cuenten con emociones. Conviene señalar que no siempre se persigue que las máquinas sigan lo más fielmente posible el modo de actuar del ser humano; en ocasiones, se prefiere que operen en función de una mayor eficacia respecto a la aplicación hacia la que se orientan.

A pesar del enorme avance de la tecnología en los últimos 50 años los robots son aún incapaces de realizar labores "humanas" con un grado de inteligencia equiparable al ser humano. Existe un amplio campo de investigación en la implementación de mecanismos de la inteligencia artificial que permitan a los robots realizar labores que resultan peligrosas, tediosas o simplemente aburridas para los seres humanos, además que estas máquinas tengan la capacidad de aprender y mejorar su conocimiento en base a la experiencia. La inteligencia artificial ha sido en los últimos años una herramienta útil en la solución de problemas de ingeniería. En el ámbito industrial, esta herramienta ha sido empleada en diferentes procesos de manufactura, especialmente en el análisis de operación de la maquinaria y procesos asociados empleando para ello bases de conocimiento y los llamados sistemas expertos. El principal atributo de los sistemas expertos es su capacidad de decisión en problemas complejos de manera similar como lo resolvería el ser humano; esta disciplina hace uso extensivo de redes neuronales artificiales y lógica difusa, que en su conjunto fortalecen la capacidad de raciocinio de dichas máquinas.

De entre las muchas razones que se han citado a favor de la construcción de máquinas que piensen de manera inteligente, indudablemente dos han sido las que han ejercido la mayor influencia en el desarrollo de la inteligencia artificial: (1) Como modelos explicativos del pensamiento humano, es decir, para entender mejor cómo es que efectivamente piensan los humanos y (2) Como ayuda para el proceso del pensamiento. Esto último se puede lograr, ya sea por que, al reducir los riesgos de error, las máquinas pueden ayudar a pensar mejor o porque, al ahorrar trabajo, permiten reducir los recursos humanos dedicados al pensamiento. Estos dos objetivos ofrecen diferentes ideas sobre el tipo de pensamiento que se espera de las máquinas. Para unos, lo que se busca son máquinas que piensen tal y como lo hacen los seres humanos, incluidas sus limitaciones e imperfecciones. Para otros, lo que se espera de las máquinas inteligentes es que superen las capacidades cognitivas de los seres humanos y piensen de manera racionalmente perfecta. Para este segundo grupo de investigadores, la inteligencia artificial debe encarnar una visión idealizada del pensamiento humano. De esta manera, el objetivo de la inteligencia artificial consistiría en hacer realidad el viejo sueño de Leibniz de automatizar el razonamiento lógico.

Según la Dra. Breazel del Instituto Tecnológico de Massachussets, en una opinión realizada el año 2002 decía: “la inteligencia artificial sin emociones artificiales es un proyecto destinado al fracaso”, ya que, según ella, el pensamiento inteligente requiere, entre otras cosas, un buen manejo de las emociones. Como respuesta al pensamiento de la Dra. Breazel, la inteligencia artificial concibe ya la fabricación de una máquina que reconozca, comprenda y exprese emociones similares, aunque no iguales a las humanas, con la finalidad de lograr que sea "genuinamente inteligente" y que interaccione de manera adecuada con las personas. Equipada con hardware y software especial, el sistema artificial podrá ver y reconocer expresiones faciales y posturas corporales, así como detectar pautas vocales y entonaciones del habla, dilatación en las pupilas, cantidad de latidos cardíacos y hasta patrones odoríferos característicos. De esta manera, será capaz de inferir con bastante precisión el estado emocional en que se encuentran las personas y actuar en consecuencia.

Parece ser que una de las metas mas importantes de la inteligencia artificial, en la búsqueda de las maquinas inteligentes, es lograr la construcción de máquinas con ciertas capacidades propias del hombre; es decir, con habilidad para la solución de problemas complejos como la toma de decisiones para la planeación de empresas, la evaluación de riesgos para las compañías de seguros, pruebas de eficiencia de motores, detección de arritmias cardiacas, análisis y evaluación de encefalogramas, sismogramas, espectros de luz emitida o absorbida por estrellas o por materiales, etc. Todos estos problemas tienen un denominador común consistente en la optimización no basada en reglas concretas.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Noviembre 17 de 2008

Domótica

Como es natural, todos los seres humanos aspiran a una mejor calidad de vida y parece lógico que esa aspiración se refleje en el entorno de residencia de las personas: el hogar, al que todos se esfuerzan en dotar de mayor confort y comodidad, esperando por lo tanto disfrutar de un ambiente protector para la familia. La “ciencia” encargada de esto es la domótica. Vital importancia tiene la palabra “integración”, todas las necesidades se deben satisfacer de forma global y en conjunto. En otro caso no puede hablarse de domótica, sino simplemente de la automatización de tal o cual actividad. El objetivo principal de la domótica radica en satisfacer todas las necesidades del hombre y su entorno. Se puede destacar en este campo la optimización de la energía, el aumento de la seguridad, ahorro de dinero y tiempo, así como también comunicarse, proteger el hogar, controlar a distancia los aparatos domésticos, en otras palabras, vivir mejor. La domótica no son “servicios” ni “productos” sino la integración y la implementación de los sistemas electrotécnicos en el hogar.

El término domótica proviene de la unión de las palabras domus, que significa “casa” en latín, y tica, palabra en griego que significa “'que funciona por sí sola”. Se entiende por domótica el conjunto de sistemas capaces de automatizar una vivienda, aportando servicios de gestión energética, seguridad, bienestar y comunicación, y que pueden estar integrados por medio de redes interiores y exteriores de comunicación, cableadas o inalámbricas, y cuyo control goza de cierta ubicuidad, desde dentro y fuera del hogar. Se podría definir como la integración de la tecnología en el diseño inteligente de un recinto.

La historia de la domótica comienza con los habitantes de las viviendas, ya que el término domótica es aún desconocido por una gran cantidad de personas. Sin embargo es la consecución natural de un conjunto bastante amplio de avances producidos en las dos últimas décadas. Desde entonces el hogar digital continua mudando su centro de gravedad desde las primeras máquinas electrónicas hacia la computadora en un proceso de consolidación y diversificación que conduce a por lo menos dos fenómenos contradictorios, como son el auge desmedido de cables por fuera de las paredes de las viviendas: contestadores telefónicos primero, múltiples aparatos telefónicos luego, cables y centrales de alarma, y mas tarde el videocable o los teatros domiciliarios como principales ejemplos, y por el otro lado la proliferación de mandos a distancia para hacer “mas fácil” la vida del ser humano. Además, la computadora desde hace algunos años y en una tendencia cada vez mas acentuada “compite” con otros aparatos electrónicos por el control de las funciones de seguridad y entretenimiento.

Resulta imposible precisar una fecha concreta para el nacimiento de la domótica, ya que no se trata de un hecho puntual, sino de todo un proceso evolutivo que comenzó con las redes de control de los edificios inteligentes y se ha ido adaptando a las necesidades propias de la vivienda. Habría que citar la historia completa de la evolución de la computación y la electrónica, ya que la domótica está estrechamente vinculada con el desarrollo de las nuevas tecnologías y se refiere a la adaptación de éstas a las necesidades de los seres humanos. En todo caso, si debe destacarse una fecha importante en la historia de la domótica, esta sería el año 1978 con la salida al mercado del sistema X-10. El sistema X10 es el “lenguaje” de comunicación que utilizan los productos compatibles X10 para comunicarse entre ellos y que le permiten controlar las luces y los electrodomésticos de un hogar, aprovechando para ello la instalación eléctrica existente, y evitando tener que instalar cables. Cada aparato tiene una dirección a la que responde o envía, existiendo un total de 256 direcciones. Todos los productos X10 son compatibles entre si por lo que se pueden combinar para formar el sistema más adecuado a las preferencias del usuario. Posteriormente se implantan sistemas de control de las instalaciones. En un principio, a comienzos de los años 1980, sólo se hacían cosas básicas como la gestión integral de calefacción y aire acondicionado, que hasta entonces se hacía de forma aislada.

La domótica es una serie de sistemas tecnológicos que aportan diferentes servicios al hogar, estos servicios pueden ser de seguridad, bienestar, comunicación, de gestión energética. etc. La domótica está integrada por redes de comunicación tanto interiores como exteriores ya sea de forma inalámbrica o alambrica. Esta no solo va dirigida a las viviendas, sino también a los comercios, edificios, granjas. etc. La domótica se ha implantado desde hace décadas, pero, desde que se creo el Internet ha tomado un giro controversial, los modelos tecnológicos relacionados a este han progresado y forman parte del futuro de la domótica. Las tecnologías inalámbricas y las redes de Internet, creen haberse constituido, como las tecnologías del entorno digital que evolucionarán, y sobre las cuales la domótica debería mantenerse para aumentar el uso de las tecnologías en los hogares. Se debe tener en cuenta algunos elementos para instalar un sistema domótico como: (1) El incremento en el confort. (2) Climatización del control de luces, ventanas, cortinas, persianas y enchufes. (3) Uso de energía renovable como la energía solar, la geotérmica y la eólica

En domótica el estándar es una especificación que normaliza la ejecución de ciertos procesos o la elaboración de dispositivos para garantizar la interoperabilidad. Los estándares pueden ser: (1) EIB o EIBus, el Bus de Instalación Europeo. Es un conjunto de conductores eléctricos en forma de pistas metálicas impresas sobre la placa base de la computadora. (2) X10. Es un conjunto de reglas de comunicación para el control remoto de dispositivos eléctricos. (3) ZigBee. Conjunto de comunicaciones inalámbrico similar al bluetooth. (4) UPnP, Universal Plug and Play. Es una arquitectura de software abierto y distribuido, independiente del fabricante, del sistema operativo, del lenguaje de programación, etc.

Desde el punto de vista de donde reside la inteligencia del sistema domótico, existen varias arquitecturas diferentes: (1) Arquitectura centralizada. Un controlador centralizado recibe información de múltiples sensores y, una vez procesada, genera las órdenes oportunas para los efectores. (2) Arquitectura distribuida. Toda la inteligencia del sistema está distribuida por todos los módulos sean sensores o efectores. Suele ser típico de los sistemas de cableado en bus, o redes inalámbricas. (3) Arquitectura mixta. Se refiere a sistemas con arquitectura descentralizada en cuanto a que disponen de varios pequeños dispositivos capaces de adquirir y procesar la información de múltiples sensores y transmitirlos al resto de dispositivos distribuidos por la vivienda, es decir, aquellos sistemas basados en Zigbee y totalmente inalámbricos.

Los ámbitos donde se encuentra la domótica son: (1) En el ámbito del ahorro energético. Las funciones que se pueden enumerar son la programación y zonificación del clima en el hogar, la gestión del consumo eléctrico, o con el uso de energías renovables, en sistemas mixtos. (2) En el ámbito del nivel de confort. Se usa para sistemas de iluminación, para el control general de todas o algunas luces de la vivienda, la regulación de la iluminación según el nivel de luminosidad ambiente, y sobre todo facilitando el manejo, e integrando este sistema con el resto de las funciones del hogar. Además se puede controlar el portero visor, comandarlo vía Internet, etc. (3) En el ámbito de la protección patrimonial. Se puede usar para simulación de presencia, detección muy temprana de incendios, fugas de gas, escapes de agua, etc. También para monitoreo remoto del hogar o de instituciones vía cámaras con protocolo Internet. Esta pequeña lista no cierra un sinnúmero de otros usos que esta disciplina puede brindar, y que se resumen en una mejor integración y más control sobre los recursos energéticos de la vivienda, sobre el confort y seguridad de la misma.

Los sistemas domóticos son integradores de servicios en: (1) Iluminación. Encendido y apagado automático de luces. (2) Seguridad. Alarmas de incendio y antirrobo. (3) Climatización. Encendido y apagado automático de calefacción y estufas. (4) Cámaras. Sirven de vigilancia para seguridad del hogar y pueden activarse con la detección de calor corporal. (5) Control de Acceso. Portones, puertas, ventanas, etc. (6) Entretenimiento. Televisores, computadoras, videojuegos, etc. (7) Electrodomésticos. Programación para activar microondas, lavadoras, secadoras, etc. (8) Persianas y motores. (9) Riego. Activación automática del riego a una hora predeterminada por usuario. (10) Cualquier dispositivo adaptado mediante una interfaz.

Guillermo Choque Aspiazu
www.eldiario.net
Noviembre 10 de 2008