viernes, 28 de agosto de 2009

Sistema experto probabilístico

En el desarrollo de la ciencia de la computación es fundamental el análisis de la información, la incertidumbre e imprecisión asociada con los fenómenos reales y con la percepción, interpretación y modelado de la realidad. El adecuado tratamiento y modelado de la incertidumbre conduce a sistemas confiables, económicos y seguros. No existe, prácticamente, ningún problema en donde se tenga la información total sobre todas las variables y en donde esta información no tenga ningún grado de incertidumbre o imprecisión. Un problema con todos los datos y completamente determinístico no es un problema real. La principal dificultad en el tratamiento y modelado de la incertidumbre es precisamente la consideración de sus características inciertas. Todo intento de determinar estas características es reducir el nivel de incertidumbre. En general, se manejan situaciones en las cuales se cuenta con diferentes tipos o niveles de incertidumbre. Tradicionalmente, la incertidumbre ha sido modelada a través de la teoría de la probabilidad, sin embargo, debido a que la incertidumbre no es igual en todos los casos, se han formulado otras formas de manejar la incertidumbre de las variables, tales como la teoría de las posibilidades, la lógica difusa y la teoría de Dempster-Shafer, entre otras.

En los problemas de la vida real se utiliza la información inmediata, es decir datos, experiencia, razonamientos a priori para hacer inferencias que conduzcan hacia algo más amplio que no se observa directamente. A través de la inferencia se utilizan observaciones del mundo para revelar otros hechos que no se han observado. El término inferencia se utiliza como sinónimo de ilación. En un sentido amplio la inferencia va desde la implicación hasta el proceso mental operativo mediante el cual, partiendo de determinada información, se llega por implicación o también por inducción a una conclusión.

Los sistemas expertos constituyen una de las áreas más importantes de la inteligencia artificial. Estos sistemas son llamados así porque emulan el comportamiento de un experto en un dominio concreto y en ocasiones son usados por estos. Con los sistemas expertos se busca una mejor calidad y rapidez en las respuestas dando así lugar a una mejora de la productividad del experto. Estos sistemas imitan las actividades de un humano para resolver problemas de distinta índole, problemas que no necesariamente tienen que ser de inteligencia artificial. También se dice que un sistema experto se basa en el conocimiento declarativo, referido como hechos sobre objetos o situaciones y el conocimiento procedimental, que se refiere a la información sobre el seguimiento de una acción. Para que un sistema experto sea herramienta efectiva, los usuarios deben interactuar de una forma fácil, reuniendo dos capacidades para poder cumplirlo: (1) Explicar su razonamiento o base del conocimiento. Los sistemas expertos se deben realizar siguiendo ciertas reglas o pasos comprensibles de manera que se pueda generar la explicación para cada una de estas reglas, que a la vez se basan en hechos. (2) Adquisición de nuevos conocimientos o integrador del sistema. Es un mecanismo de razonamiento que sirve para modificar los conocimientos anteriores. Sobre la base de lo anterior se puede decir que los sistemas expertos son el producto de investigaciones en el campo de la inteligencia artificial ya que esta no intenta sustituir a los expertos humanos, sino que desea ayudarlos a realizar con más rapidez y eficacia las tareas que cumplen.

Los problemas con los que pueden tratar los sistemas expertos pueden clasificarse en dos tipos: problemas esencialmente deterministas y problemas esencialmente estocásticos. Los problemas de tipo determinista pueden ser formulados usando un conjunto de reglas que relacionen varios objetos bien definidos. Los sistemas expertos que tratan problemas deterministas son conocidos como sistemas basados en reglas. En situaciones inciertas, es necesario introducir algunos medios para tratar la incertidumbre. Durante las últimas décadas han sido propuestas algunas medidas de incertidumbre. Algunos ejemplos de estas medidas son los factores de certeza, la lógica difusa, etc. Otra medida intuitiva de incertidumbre es la probabilidad, en la que la distribución vinculada de un conjunto de variables se usa para describir las relaciones de dependencia entre ellas, y se sacan conclusiones usando fórmulas muy conocidas de la teoría de la probabilidad. Los sistemas expertos que utilizan la probabilidad como medida de incertidumbre se conocen como sistemas expertos probabilísticos y la estrategia de razonamiento que usan se conoce como razonamiento probabilístico, o inferencia probabilística.

Los sistemas expertos comunes, normalmente basados en reglas, no tienen en cuenta la incertidumbre, ya que la forma de tratar los objetos y las reglas, es de tipo determinista, pero como se comento anteriormente, es frecuente la toma de decisiones en condiciones de incertidumbre, ya sea en áreas de la ingeniería, los negocios o inclusive la salud. El ejemplo que se presenta a continuación es el de un paciente que asiste al médico, con ciertos síntomas para que este le determine con base en estos, que tipo de enfermedad de las posibles padece. Se dice que el sistema no es determinista, ya que la relación entre las enfermedades y los síntomas que tiene un paciente no son deterministas, porque los mismos síntomas pueden estar presentes en distintas enfermedades. Esto crea la necesidad, de herramientas que tengan la capacidad para funcionar, en estos ambientes, una buena opción son los sistemas de tipo probabilístico. Estos como los otros, cuentan con una base de conocimiento, pero esta se forma por el espacio probabilístico, que describe el problema. El motor de inferencias se encuentra basado en probabilidades condicionales y este se encarga de actualizar dichas probabilidades con base en los hechos que observa del ambiente en que se desempeña. Para modelar de manera acertada los sistemas de tipo probabilístico, se tiene que tomar en cuenta la teoría de las probabilidades condicionales. A la probabilidad de que un evento ocurra cuando se sabe que otro evento se ha presentado previamente se llama probabilidad condicional, este tipo de probabilidad generalmente se interpreta de la siguiente manera: “la probabilidad de que ocurra un evento dado que ocurrió un evento previo“.

En los primeros sistemas expertos, se eligió la probabilidad como medida para tratar la incertidumbre pero, desgraciadamente, muy pronto se encontraron algunos problemas, debidos al uso incorrecto de algunas hipótesis de independencia, utilizadas para reducir la complejidad de los cálculos. Como resultado, en las primeras etapas de los sistemas expertos, la probabilidad fue considerada como una medida de incertidumbre poco práctica. La mayoría de las críticas a los métodos probabilísticos se basaban en el altísimo número de parámetros necesarios, la imposibilidad de una asignación o estimación precisa de los mismos, o las hipótesis poco realistas de independencia. Consecuentemente, en la literatura de la época, surgieron medidas alternativas a la probabilidad, como los factores de certeza, las credibilidades, las plausibilidades, las necesidades o las posibilidades, para tratar la incertidumbre. Sin embargo, con la aparición de las redes probabilísticas, principalmente las redes Bayesianas y Markovianas, la probabilidad ha resurgido de forma espectacular, y es, hoy en día, la más intuitiva y la más aceptada de las medidas de incertidumbre.

El método más antiguo para el tratamiento de la incertidumbre es la probabilidad. Dentro del campo de la inteligencia artificial, surgieron críticas contra el uso de métodos probabilistas en sistemas expertos, especialmente porque las hipótesis necesarias para hacer tratable el método bayesiano clásico eran incorrectas en la mayor parte de los problemas del mundo real. Esto motivó el desarrollo de otros métodos, como los factores de certeza o la lógica difusa, en que se introducen implícitamente hipótesis y aproximaciones aún más exigentes. Afortunadamente, el desarrollo de las redes bayesianas en la década de los años 1980 permitió refutar las objeciones anteriores contra el uso de la probabilidad, construyendo un modelo de razonamiento causal con un sólido fundamento teórico. Por otro lado, los diagramas de influencia, que aparecen también en la década de los años 1980, pueden considerarse como una extensión de las redes bayesianas, que por tener nodos de decisión y nodos de utilidad, permiten resolver problemas de toma de decisiones. En la década de los años 1990 ha crecido exponencialmente el número de investigadores, universidades y empresas dedicadas a este tema; actualmente existen sistemas expertos bayesianos en las especialidades más diversas, tales como los sistemas expertos médicos, las aplicaciones en ingeniería, visión artificial, comercio electrónico, informática educativa, interfaces inteligentes, etc.

Guillermo Choque Aspiazu
www.eldiario.net
Junio 1 de 2009

viernes, 21 de agosto de 2009

Accesibilidad Web

A pesar de que el surgimiento de la World Wide Web, y su posterior crecimiento exponencial, han supuesto un cambio radical en cuanto a la facilidad de difusión y disponibilidad de la información, las limitaciones y el mal uso por parte de los diseñadores de las tecnologías imperantes de publicación Web están dando lugar a situaciones de acceso dificultoso a la información por parte de aquellos usuarios con discapacidad. No se debe olvidar que los usuarios discapacitados pueden tener motivaciones adicionales para usar Internet, ya que la Web puede servir de medio facilitador para tareas que les resultarían más costosas de llevar a cabo en el mundo real. A estos datos hay que sumar que es predecible que el porcentaje de la población con discapacidad se incremente a lo largo de los próximos años, debido al progresivo aumento de la longevidad en la misma. En contraposición, como demuestran numerosos estudios sobre evaluación de accesibilidad de aplicaciones Web, la mayoría de los sitios presentan numerosas barreras de accesibilidad, por lo que resulta de inmediata necesidad la puesta en marcha de medidas que terminen con esta situación, para lo que se necesita la participación tanto de usuarios, ingenieros, administradores, desarrolladores e investigadores.

Para definir qué es la accesibilidad, previamente se debe revisar los tipos de limitaciones que pueden impedir el acceso a la información en la Web. En este entendido los principales tipos de discapacidad son: (1) Deficiencias visuales. Entre las que se encuentran la ceguera, la visión reducida y los problemas en la visualización del color. (2) Deficiencias auditivas. Estas deficiencias pueden ser consideradas menos limitadoras en el acceso y uso de contenidos digitales, debido a que el canal sonoro es mucho menos utilizado en interfaces Web que el canal visual. Aún así, no se debe olvidar las limitaciones y barreras derivadas de esta discapacidad, como es el caso del lenguaje. (3) Deficiencias motrices. Son las relacionadas con la capacidad de movilidad del usuario. Estos usuarios no suelen ser capaces de interactuar con el sistema a través de dispositivos de entrada tradicionales, por lo que utilizan dispositivos alternativos, como los dispositivos basados en la voz del locutor. (4) Deficiencias cognitivas y de lenguaje. Atribuible a personas que presentan problemas en el uso del lenguaje, la lectura, percepción, memoria, salud mental y otros.

Hablar de accesibilidad Web es hablar de un acceso universal a la Web, independientemente del tipo de hardware, software, infraestructura de red, idioma, cultura, localización geográfica y capacidades de los usuarios. La idea principal radica en hacer la Web más accesible para todos los usuarios independientemente de las circunstancias y los dispositivos involucrados a la hora de acceder a la información. Partiendo de esta idea, una página accesible lo será tanto para una persona con discapacidad, como para cualquier otra persona que se encuentre bajo circunstancias externas que dificulten su acceso a la información, como sucede en el caso de ruidos externos, en situaciones donde la atención visual y auditiva no estén disponibles, pantallas con visibilidad reducida, etcétera.

La discapacidad no es el único tipo de limitación que dificulta la accesibilidad de contenidos. Además de las limitaciones propias del individuo, existen otras derivadas del contexto de uso y del dispositivo de acceso empleado, tales como el hardware o el software. Lo más interesante de este hecho es el paralelismo existente entre limitaciones, ya que aún teniendo diferente origen suponen barreras similares en el acceso a la información. Por ejemplo, comparten el mismo problema de visualización aquellos usuarios con visión reducida, como aquellos que, sin padecer discapacidad visual, utilicen pantallas pequeñas o accedan desde entornos llenos de humo. Por lo tanto, se puede deducir que cualquier producto que sea diseñado atendiendo a limitaciones derivadas de discapacidades individuales, posibilitarán y facilitarán así mismo su acceso por usuarios que, sin padecer estas discapacidades, se encuentren en contextos de uso desfavorables y de equivalente limitación, por lo que el número de usuarios beneficiados de este modo de diseño será mayor que el representado por usuarios con discapacidad.

Por todo lo mencionado en párrafos precedentes se puede definir la accesibilidad Web como la posibilidad de que un producto o servicio Web pueda ser accedido y usado por el mayor número posible de personas, indiferentemente de las limitaciones propias del individuo o de las derivadas del contexto de uso. En la definición, “las limitaciones propias del individuo” no solo engloban aquellas representadas por discapacidades, sino también otras como pueden ser el idioma, conocimientos o experiencia. Además, la accesibilidad no sólo implica la necesidad de facilitar acceso, sino también la de facilitar el uso. La distinción entre usabilidad y accesibilidad no solo es difícil, sino en muchos casos innecesaria. Un diseño será accesible cuando sea usable para más personas en más situaciones o contextos de uso, posibilitando a todos los usuarios, de forma eficiente y satisfactoria, la realización y consecución de tareas. La accesibilidad debe ser entendida como “parte de”, y al mismo tiempo “requisito para”, la usabilidad.

El máximo organismo dentro de la jerarquía de Internet que se encarga de promover la accesibilidad es el “Consorcio World Wide Web”,en especial su grupo de trabajo de “Iniciativa para la Accesibilidad Web”. Las pautas de accesibilidad se dividen en tres bloques: (1) Pautas de accesibilidad al contenido en la Web. Están dirigidas a los Web masters e indican cómo hacer que los contenidos del sitio Web sean accesibles. (2) Pautas de accesibilidad para herramientas de autor. Están dirigidas a los desarrolladores del software que usan los Web masters, para que estos programas faciliten la creación de sitios accesibles. (3) Pautas de accesibilidad para agentes de usuario. Están dirigidas a los desarrolladores de agentes de usuario, navegadores y similares, para que estos programas faciliten a todos los usuarios el acceso a los sitios Web.

Las “pautas de accesibilidad al contenido en la Web”, tienen como función principal guiar el diseño de páginas Web hacia un diseño accesible, reduciendo de esta forma barreras a la información. La accesibilidad al contenido consiste en catorce pautas que proporcionan soluciones de diseño y que utilizan como ejemplo situaciones comunes en las que el diseño de una página puede producir problemas de acceso a la información. Las pautas contienen además una serie de puntos de verificación que ayudan a detectar posibles errores. Cada punto de verificación está asignado a uno de los tres niveles de prioridad establecidos por las pautas: (1) Prioridad 1. Son aquellos puntos que un ingeniero Web tiene que cumplir ya que, de otra manera, ciertos grupos de usuarios no podrían acceder a la información del sitio Web. (2) Prioridad 2. Consta de aquellos puntos que un ingeniero Web debería cumplir ya que, si no fuese así, sería muy difícil acceder a la información para ciertos grupos de usuarios. (3) Prioridad 3. Son aquellos puntos que un ingeniero Web debería cumplir ya que, de otra forma, algunos usuarios experimentarían ciertas dificultades para acceder a la información. Con base en estos puntos de verificación se establecen los siguientes niveles de conformidad: (1) Nivel "A". Todos los puntos de verificación de prioridad 1 se satisfacen. (2) Nivel "Doble A". Todos los puntos de verificación de prioridad 1 y 2 se satisfacen. (3) Nivel "Triple A". Todos los puntos de verificación de prioridad 1, 2 y 3 se satisfacen. De modo general se dice que las pautas describen cómo hacer aplicaciones Web accesibles sin sacrificar el diseño. De manera similar, se han desarrollado “pautas de accesibilidad para herramientas de autor”, cuyo objetivo es ayudar a los ingenieros del software a la hora de crear herramientas de autor para producir contenido Web accesible. También se han desarrollado “pautas de accesibilidad para XML”, donde se explica cómo asegurar la accesibilidad de aplicaciones basadas en XML. Y por último, “pautas de accesibilidad para agentes de usuario”, donde se explica cómo hacer accesible los navegadores, reproductores multimedia y otras tecnologías asistenciales.

La Web es un recurso muy importante para diferentes aspectos de la vida: educación, empleo, gobierno, comercio, sanidad, entretenimiento y muchos otros. Resulta demasiado importante que la Web sea accesible para así proporcionar un acceso equitativo e igualdad de oportunidades a las personas con discapacidad. Una página Web accesible puede ayudar a personas con discapacidad a que participen de manera más activa en la sociedad. La Web ofrece a aquellas personas con discapacidad una oportunidad de acceder a la información y de interactuar.

Guillermo Choque Aspiazu
www.eldiario.net
Mayo 25 de 2009

viernes, 14 de agosto de 2009

Ingeniería de requerimientos

A medida que pasan los años, la ingeniería del software ha introducido y popularizado una serie de estándares para medir y certificar la calidad, tanto del sistema a desarrollar, como del proceso de desarrollo en sí. Se han publicado muchos libros y artículos relacionados con este tema, con el modelado de procesos del negocio y la reingeniería. Al mismo tiempo, un número creciente de herramientas automatizadas surgieron para ayudar a definir y aplicar un proceso efectivo para el desarrollo del producto software. Hoy en día la economía globalizada depende más de sistemas automatizados que en épocas pasadas; esto ha llevado a los equipos de desarrollo a enfrentarse con nuevos procesos y estándares de calidad. Una de las mayores deficiencias en la práctica de construcción del producto software es la poca atención que se presta a la discusión del problema. En general los ingenieros de desarrollo se centran en la solución dejando el problema inexplorado y por ende descrito parcialmente. Uno de los resultados más importantes de la aplicación del proceso de ingeniería es la especificación de un sistema basado en computadora que se describe de manera genérica en los siguientes niveles: vista global de todo el sistema, vista del dominio, vista del elemento y vista detallada, esta jerarquía está organizada de manera deductiva: de lo general a lo particular.

En este contexto se presenta un desafío a los ingenieros del software ¿Cómo se puede asegurar que se ha especificado un sistema que recoge las necesidades del cliente y satisface sus expectativas?. No hay una respuesta segura a esta difícil pregunta, pero un sólido proceso de ingeniería de requerimientos es la mejor solución de la que se dispone hasta este momento. La ingeniería de requerimientos facilita el mecanismo apropiado para comprender lo que requiere el cliente, analizando necesidades, confirmando su factibilidad, negociando una solución razonable, especificando la solución sin ambigüedad, validando la especificación y gestionando los requerimientos para que se transformen en un sistema operacional. La ingeniería de requerimientos cumple un papel primordial en el proceso de producción de software, ya que enfoca un área fundamental: la definición de lo que se desea producir. Su principal tarea consiste en la generación de especificaciones correctas que describan con claridad, sin ambigüedades, en forma consistente y compacta, el comportamiento del sistema; de esta manera, se pretende minimizar los problemas relacionados con el desarrollo del producto software.

La definición abstracta del término requerimiento, que aparece en el glosario del “Instituto de Ingenieros Eléctricos y Electrónicos” de los Estados Unidos es: “(1) Una condición o necesidad de un usuario para resolver un problema o alcanzar un objetivo. (2) Una condición o capacidad que debe estar presente en un sistema o componentes de sistema para satisfacer un contrato, estándar, especificación u otro documento formal. (3) Una representación documentada de una condición o capacidad como en (1) o (2). Los requerimientos pueden dividirse en: funcionales y no funcionales. Los requerimientos funcionales definen las funciones que el sistema será capaz de realizar. Describen las transformaciones que el sistema realiza sobre las entradas para producir salidas. Los requerimientos no funcionales tienen que ver con características que de una u otra forma puedan limitar el sistema, como por ejemplo, el rendimiento, en tiempo y espacio, interfaces de usuario, fiabilidad, robustez del sistema, disponibilidad de equipo, mantenimiento, seguridad, portabilidad, estándares, etc.

En la ingeniería de sistemas y la ingeniería de software la ingeniería de requerimientos comprende el conjunto de tareas relacionadas con la determinación de las necesidades o de las condiciones a satisfacer para un software nuevo o modificado, tomando en cuenta los diversos requerimientos de los clientes. La ingeniería de requerimientos, por consiguiente, proporciona el mecanismo apropiado para entender lo que el cliente quiere, analizar las necesidades, evaluar la factibilidad, negociar una solución razonable, especificar la solución sin ambigüedades, validar la especificación, y administrar los requerimientos conforme éstos se transforman en un sistema operacional. El proceso de la ingeniería de requerimientos se lleva a cabo a través de siete distintas funciones: (1) Inicio, (2) obtención, (3) elaboración, (4) negociación, (5) especificación, (6) validación y (7) gestión. Resulta importante destacar que algunas de estas funciones de la ingeniería de requerimientos ocurren en paralelo y que todas deben adaptarse a las necesidades del proyecto. Todas están dirigidas a definir lo que el cliente quiere, y sirven para establecer una base sólida respecto del diseño y la construcción de lo que obtendrá el cliente.

Una conversación inicial es todo lo que se necesita para precipitar un esfuerzo importante de ingeniería del software. Pero en general, la mayoría de los proyectos comienza cuando se identifica una necesidad de negocios o se descubre un nuevo mercado o servicio potencial. Al inicio del proyecto los ingenieros de requerimientos hacen una serie de preguntas libres de contexto. El objetivo es establecer una comprensión básica del problema, las personas que quieren la solución, la naturaleza de la solución que se desea, y la efectividad de la comunicación preliminar. En la siguiente etapa, aparenta ser muy simple preguntarle al cliente, a los usuarios y otros interesados cuáles son los objetivos para el sistema o producto, qué es lo que se debe lograr, de qué forma el producto satisface las necesidades del negocio y por último cómo se utilizará el sistema o producto día a día. Pero estas cuestiones no son simples como aparentan, son bastante complicadas. La información conseguida con el cliente durante el inicio y la obtención se expande y se refina durante la elaboración. Esta actividad de la ingeniería de requerimientos se enfoca en el desarrollo de un modelo técnico refinado de las funciones, características y restricciones del software.

La elaboración es una acción del modelado del análisis y se compone de una serie de tareas de modelado y refinamiento. La elaboración se conduce mediante la creación y el refinamiento de escenarios del usuario que describen la forma en que el usuario final, y otros actores, interactuarán con el sistema. Cada escenario del usuario se analiza para obtener clases de análisis: entidades del dominio de negocios visibles para el usuario final. Se definen los atributos de cada clase de análisis y se identifican los servicios que requiere cada clase. Se identifican las relaciones y la colaboración entre las clases y se produce una variedad de diagramas con el “Lenguaje de Modelado Unificado”. El resultado final de la elaboración es un modelo de análisis que define el dominio de la información, las funciones y el comportamiento del problema. Posteriormente, dados los recursos limitados del negocio, resulta usual que los clientes y usuarios pidan más de lo que se puede lograr. También es relativamente común que diferentes clientes o usuarios propongan requerimientos que entran en conflicto entre sí al argumentar que su versión es “esencial para las necesidades especiales del cliente”. El ingeniero de requerimientos debe conciliar estos conflictos por medio de un proceso de negociación. Se pide a los clientes, usuarios y otros interesados que ordenen sus requerimientos y después discutan los conflictos relacionados con la prioridad. Se identifican y analizan los riesgos asociados con cada requerimiento. Se hacen “estimaciones” preliminares del esfuerzo requerido para su desarrollo y después se utilizan para evaluar el impacto de cada requerimiento en el costo del proyecto y sobre el tiempo de entrega.

Mediante un enfoque iterativo, los requerimientos se eliminan, combinan o modifican de forma que cada parte alcance cierto grado de satisfacción. Una especificación puede ser un documento escrito, un conjunto de modelos gráficos, un modelo matemático formal, una colección de escenarios de uso, un prototipo o cualquier combinación de éstos. La especificación es el producto de trabajo final que genera la ingeniería de requerimientos. Sirve como base para las actividades de ingeniería del software subsecuentes. Describe la función y el desempeño de un sistema basado en computadora y las restricciones que regirán su desarrollo. La calidad de los productos de trabajo procedentes de la ingeniería de requisitos se evalúa durante el proceso de validación. La validación de requisitos examina la especificación para asegurar que todos los requisitos del software se han establecido de manera precisa; que se han detectado las inconsistencias, omisiones y errores y que éstos han sido corregidos, y que los productos de trabajo cumplen con los estándares establecidos para el proceso, proyecto y producto. La función de gestión de los requerimientos es un conjunto de actividades que ayudan al equipo del proyecto a identificar, controlar y rastrear los requisitos y los cambios a estos en cualquier momento mientras se desarrolla el proyecto. Muchas de estas actividades son idénticas a las actividades de la gestión de la configuración del software.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Mayo 18 de 2009

viernes, 7 de agosto de 2009

Computación blanda

El hombre, en la búsqueda de la precisión, intentó ajustar el mundo real a modelos matemáticos rígidos y estáticos, como la lógica clásica binaria. Cuando Aristóteles y sus precursores idearon sus teorías de la lógica y de las matemáticas, propusieron la “Ley del Centro Excluido” que indica que cada asunto debe ser verdad o falso. La hierba es verde o no verde; claramente no puede ser verde y no verde. Tuvieron que pasar muchísimos años hasta que, a mediados del siglo veinte, fue concebido el concepto de lógica difusa por el matemático azerbaiyano-iraní Lofti Asker Zadeh, de la Universidad de Berkeley, quién inconforme con los conjuntos clásicos que sólo permiten dos opciones, la pertenencia o no de un elemento a dicho conjunto, la presentó como una forma de procesar información permitiendo pertenencias parciales a unos conjuntos, que en contraposición a los clásicos los denominó conjuntos difusos. La lógica difusa puede presumir de unos orígenes venerables. Hace más de 2400 años que Parménides de Elea sugirió que una proposición podía ser verdadera y falsa al mismo tiempo. Su gran admirador Platón le hizo caso y llegó a admitir una tercera región entre los polos de la verdad y la falsedad. El concepto de conjunto difuso fue expuesto por Zadeh en un artículo publicado el año 1965, hoy clásico en la literatura de la lógica difusa, titulado “Conjuntos difusos” y que fue publicado en la revista “Información y Control”. El mismo Zadeh publica en 1971 el artículo, “Semántica Difusa Cuantitativa” en donde introduce los elementos formales que acabarían componiendo el cuerpo de la doctrina de la lógica difusa y sus aplicaciones tal como se conocen en la actualidad.

Se dice que la lógica difusa es una técnica de la inteligencia artificial que permite trabajar con información que contiene un alto grado de imprecisión, en esto se diferencia de la lógica convencional que trabaja con información bien definida y precisa. Se afirma que la lógica difusa es una lógica multivaluada que permite valores intermedios para definir evaluaciones entre si/no, verdadero/falso, negro/blanco, caliente/frío, etc. La idea de que el cerebro humano utiliza un mecanismo análogo a la lógica difusa debe mucho al lingüista William Labov, fundador de la moderna sociolingüística. Labov demostró el año 1973 que las categorías “taza” y “tazón” son difusas en el cerebro: se solapan una con otra, y su uso depende más del contexto y la experiencia del hablante que del tamaño real del recipiente. La decisión entre los dos nombres depende a la vez de otros factores: tener un asa, ser de cristal, llevar un plato debajo y exhibir un diámetro creciente de base a boca restan puntos a “tazón” y empujan al hablante hacia “taza”. El resultado de Labov es muy similar a la lógica difusa en el cerebro de las personas, un objeto puede ser un tazón con un grado de verdad del 0.7 y una taza con un grado de verdad de 0.3. Y esos grados se ajustan continuamente en función del contexto y la experiencia del hablante. La neurobiología más reciente ha confirmado las ideas de Labov de una forma inesperada, en una serie de experimentos que han iluminado el problema central de la semántica: ¿cómo se atribuye un significado a las palabras? e incluso un tema clave de la filosofía de la mente: qué son los conceptos, los símbolos mentales con los que se teje el pensamiento humano. La idea convencional es que los conceptos son entidades estables, que se forman y manipulan en las altas instancias del córtex cerebral, en los lóbulos frontales agigantados durante la evolución humana. El concepto “flor” sería un auténtico “símbolo” por lo mismo que es la palabra flor: porque se ha independizado de su significado y se puede manejar sin tener delante una flor.

Luego de las publicaciones de Zadeh, específicamente a mediados del año 1994, este gran matemático proporciona a la comunidad científica la primera definición de “Computación Blanda o Soft Computing”. La referencia a los conceptos que actualmente maneja solía hacerse de forma atómica, es decir, se hablaba de manera aislada de cada una de sus áreas componentes con indicación del empleo de metodologías difusas. Aunque la idea de establecer el área de la computación blanda se remonta al año 1990, Zadeh propuso la definición de computación blanda, estableciéndola en los siguientes términos: “Básicamente, la computación blanda no es un cuerpo homogéneo de conceptos y técnicas. Más bien es una mezcla de distintos métodos que de una forma u otra cooperan desde sus fundamentos. En este sentido, el principal objetivo de la computación blanda es aprovechar la tolerancia que conllevan la imprecisión y la incertidumbre, para conseguir manejabilidad, robustez y soluciones de bajo costo. Los principales ingredientes de la computación blanda son: la lógica difusa, la neurocomputación y el razonamiento probabilístico, incluyendo este último a los algoritmos genéticos, las redes de creencia, los sistemas caóticos y algunas partes de la teoría del aprendizaje. En esa asociación de lógica difusa, neurocomputación y razonamiento probabilístico, la lógica difusa se ocupa principalmente de la imprecisión y el razonamiento aproximado; la neurocomputación del aprendizaje, y el razonamiento probabilístico de la incertidumbre y la propagación de las creencias.”

Queda claro así como la computación blanda no está definida precisamente, sino que en una primera aproximación se define por extensión, por medio de distintos conceptos y técnicas que intentan superar las dificultades que surgen en los problemas reales, aquellos que se dan en un mundo que es impreciso, incierto y difícil de categorizar. Aunque ha habido varios intentos de ajustar más esta definición, no han sido muy fructíferos. Así, por ejemplo, a la vista de la dificultad de dar una nueva definición del campo de una manera exacta y consensuada, y de la mayor sencillez de hacerlo por medio de sus características, se propone la siguiente definición de trabajo, que vuelve a ser de tipo descriptivo: “Cualquier proceso de computación que expresamente incluya imprecisión en los cálculos en uno o mas niveles, y que permita cambiar o disminuir la granularidad del problema o suavizar los objetivos de optimización en cualquier etapa, se define como perteneciente al campo de la computación blanda”.

Otra forma de definir computación blanda es considerarla como antitesis de lo que podría denominarse “computación dura”, de manera que podría verse la computación blanda como un conjunto de técnicas y métodos que permitan tratar las situaciones practicas reales de la misma forma que suelen hacerlo los seres humanos, es decir, en base a inteligencia, sentido común, consideración de analogías, aproximaciones, etc. En este sentido la computación blanda es una familia de métodos de resolución de problemas cuyos primeros miembros serían el razonamiento aproximado y los métodos de aproximación funcional y de optimización, incluyendo los de búsqueda. En este sentido, la computación blanda queda situada como la base teórica del área de los sistemas inteligentes, y se hace patente que la diferencia entre el área de la inteligencia artificial clásica, y la de los sistemas inteligentes, es que la primera se apoya en la denominada computación dura, mientras que la segunda lo hace en la computación blanda.

La computación blanda difiere de la computación convencional en que es tolerante a la imprecisión, la incertidumbre y la verdad parcial, a fin de conseguir soluciones robustas y de bajo costo a diferentes problemas de la ciencia y la tecnología. La computación blanda incluye entre sus elementos constitutivos a la lógica difusa, las redes neuronales, los algoritmos genéticos, las redes de creencia, computación evolutiva, computación con acido desoxirribonucleico, la teoría del caos y algunas partes de la teoría del aprendizaje. Los elementos constitutivos de la computación blanda, lejos de ser competitivos entre sí, son colaborativos y complementarios, y en muchos casos un problema puede ser resuelto de mejor manera con una combinación ingeniosa de algunos de ellos; por ejemplo, al combinar redes neuronales con lógica difusa, se han creado los sistemas neurodifusos, que se aplican de manera exitosa en productos tan cotidianos como los aparatos de aire acondicionado, las máquinas lavadoras o las fotocopiadoras de ropa.

Un ejemplo en que la computación blanda ha logrado notables avances es el reconocimiento de la escritura manual. Se trata de un problema engorroso para la computación convencional, porque es difícil imaginar una descripción matemática precisa de la letra “a” que abarque a todas las “aes” que escriben y reconocen las personas. La computación blanda puede manejar categorías como “más o menos una a”. Se debe recordar que, en la lógica difusa, una cosa puede ser una “a” con un grado de verdad del setenta por ciento por ejemplo. El sistema de reconocimiento de escritura falla mucho con cada nuevo usuario, pero luego se adapta a las peculiaridades de sus trazos. Para esto sirven las redes neuronales con la ayuda de los algoritmos genéticos.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Mayo 11 de 2009