sábado, 28 de junio de 2008

Holones

Se encuentra ampliamente aceptada en la comunidad científica que un sistema es un conjunto de dos o más elementos interrelacionados entre sí que trabajan de manera conjunta para lograr un objetivo común. En ese entorno la teoría de sistemas hace referencia a las teorías que describen la estructura y el comportamiento de los sistemas. La teoría de sistemas cubre el aspecto completo de tipos específicos de sistemas, desde los sistemas técnicos, también denominados sistemas duros, hasta los sistemas conceptuales, denominados sistemas suaves en contraposición a los primeros, aumentando su nivel de generalización y abstracción. La teoría general de sistemas ha sido descrita desde diferentes ángulos como: una teoría matemática convencional, un metalenguaje, un modo de pensar, una jerarquía de teorías de sistemas con generalidad creciente. Ludwig von Bertalanffy, quien introdujo la teoría general de sistemas, no tenía intenciones de que fuera una teoría convencional específica. Empleó ese término en el sentido de un nombre colectivo para problemas de sistemas.

Se han sugerido un número de palabras como alternativas a “sistema” para nombrar el concepto de un todo. Las propuestas incluyen: (1) La realizada por Gerard el año 1964 como “org”; (2) La propuesta de Jacob el año 1974 como “integron”; (3) La propuesta realizada por Koestler el año 1967 bajo el término “holón”. Sólo ésta última se ha utilizado de manera significativa, la cual clarificaría todo el campo del pensamiento de sistemas, si se volviese más popular, y en especial si el campo se conociese como “pensamiento holónico” o “pensamiento con holones”.

Los objetivos originales de la teoría general de sistemas son los siguientes: (1) Impulsar el desarrollo de una terminología general que permita describir las características, funciones y comportamientos sistémicos. (2) Desarrollar un conjunto de leyes aplicables a todos estos comportamientos. (3) Promover una formalización matemática de estas leyes. La primera formulación en tal sentido es atribuible al biólogo Ludwig von Bertalanffy (1901-1972), quien acuñó la denominación “Teoría General de Sistemas”. Para Ludwing von Bertalanffy, la teoría general de sistemas debería constituirse en un mecanismo de integración entre las ciencias naturales y sociales y ser al mismo tiempo un instrumento básico para la formación y preparación de científicos.

Sobre estas bases se constituyó el año 1954 la “Sociedad para la Investigación de Sistemas”, cuyos objetivos fueron los siguientes: (1) Investigar el isomorfismo de conceptos, leyes y modelos en varios campos y facilitar las transferencias entre aquellos. (2) Promocionar y desarrollar modelos teóricos en campos que carecen de ellos. (3) Reducir la duplicación de los esfuerzos teóricos. (4) Promover la unidad de la ciencia a través de principios conceptuales y metodológicos unificadores. La perspectiva de la teoría general de sistemas surge en respuesta al agotamiento e inaplicabilidad de los enfoques analítico-reduccionistas y sus principios mecánico-causales. Se desprende que el principio clave en que se basa la teoría general de sistemas es la noción de totalidad orgánica, mientras que el paradigma anterior estaba fundado en una imagen inorgánica del mundo.

A poco andar, la teoría general de sistemas concitó un gran interés y pronto se desarrollaron bajo su alero diversas tendencias, entre las que destacan la cibernética de N. Wiener, la teoría de la información de C. Shannon y W.Weaver y la dinámica de sistemas de J. Forrester. Si bien el campo de aplicaciones de la teoría general de sistemas no reconoce limitaciones, al usarla en fenómenos humanos, sociales y culturales se advierte que sus raíces están en el área de los sistemas naturales y en el de los sistemas artificiales. Mientras más equivalencias se reconozcan entre organismos, máquinas, hombres y formas de organización social, mayores serán las posibilidades para aplicar correctamente el enfoque de la teoría general de sistemas, pero mientras más se experimenten los atributos que caracterizan lo humano, lo social y lo cultural y sus correspondientes sistemas, quedarán en evidencia sus inadecuaciones y deficiencias.

El termino holón se compone de la palabra griega “holos”, que significa “el todo” y el sufijo “on” que significa “parte”. El año 1967, su creador, el filósofo húngaro Arthur Koestler definió holón como una parte identificable de un sistema que tiene identidad única, compuesta de partes subordinadas y que, a su vez, es parte de un todo, en semejanza a la organización de los sistemas biológicos. Las propiedades asociadas a un holón, y a las organizaciones holónicas son las de ser eficientes en el uso de recursos, muy resistentes a las perturbaciones, tanto internas como externas, y adaptables a los cambios del entorno. Su fortaleza y estabilidad procede de ser unidades independientes en el tratamiento de problemas. Como por ejemplo una célula, que tiene su propio núcleo, su propia autonomía en comunión con el resto de organismos, formando parte por ejemplo de un tejido. Cualquier “cosa” que sea a la vez una parte y un todo es considerada un holón.

A una jerarquía de holones se le llama holarquía. En una holarquía la eliminación de un holón más fundamental, el ergo menos significativo, trae consigo la desaparición de los holones más abarcantes de los que formaba parte. Observe el siguiente ejemplo: las células están formadas a partir de moléculas y éstas a partir de átomos. De modo que si se consigue desintegrar los átomos que conforman una célula se habrá acabado también con ella y con las moléculas que la forman. Por esta misma razón un átomo de hidrógeno es más importante que una hormiga, pero menos significativo. La doctrina que propugna la concepción de cada realidad como un todo distinto de la suma de las partes que lo componen es el holismo. Las interacciones parte-todo dan lugar a una serie de características en el conjunto que no aparecen con la simple suma de las partes.

Para el investigador Ken Wilber cualquier holón tiene cuatro propiedades fundamentales: (1) Autopreservación. Cuyo fundamento es que todos los holones preservan una cierta capacidad de preservar su propia totalidad o autonomía. Un átomo de hidrógeno dentro del contexto adecuado sigue siendo un átomo de hidrógeno. No necesariamente demuestra intencionalidad de una forma que se llamaría desarrollada, pero preserva su individualidad a lo largo del tiempo. (2) Autoadaptación. Un holón se encuentra en que es también parte de un todo más amplio y debe adaptarse o acomodarse a otros holones. (3) Autotranscendencia. Cuando dos átomos de hidrógeno y uno de oxígeno se juntan en circunstancias adecuadas, emerge un holón nuevo, y en cierta manera, sin precedentes, en este caso el de la molécula de agua. No es una simple asociación, es una transformación cuyo resultado es un nuevo holón emergente. (4) Autodisolución. Los holones que se van construyendo también se pueden destruir. Estas fuerzas pueden ser representadas por una cruz, con dos opuestos horizontales y dos opuestos verticales. Estas fuerzas están en tensión constante, cuanta más autopreservación menos autoadaptación y cuanta más autotranscendencia menos autodisolución. Preservar o acomodarse, trascender o disolverse son los cuatro impulsos diferentes a los que está sometido todo holón.

Las aplicaciones de los holones pueden ser clasificadas en tres áreas diferenciadas: (1) Ecología. En esta área el concepto de holón se utiliza en la filosofía del medio ambiente, en ecología y en la ecología humana. Los ecosistemas a menudo se consideran como holones dentro de una o muchas holarquías. Los holones se consideran subsistemas abiertos de los sistemas de orden superior, con una serie continua como la producida desde la célula a la ecoesfera. (2) Filosofía de la historia. En esta área un holón es un acontecimiento histórico que hace que otros acontecimientos históricos sean inevitables. Un holón es un concepto controvertido, con el cual algunos rechazan la inevitabilidad de cualquier acontecimiento histórico. Una categoría especial de holón es la tecnología, lo que implica una perspectiva sobre cómo las tecnologías tienen el potencial para dictar la historia. (3) Desarrollo humano y psicológico. En esta área un holón es un término genérico que en psicología se refiere a la teoría de la espiral dinámica. En este contexto se refiere al desarrollo de los sistemas de valores culturales que son discretos en sí mismos y también forma parte de un sistema de valores más grandes. Una caracterización simple que es bastante familiar constituye la “escala de necesidades de Maslow” en la cual un sistema de valores básicos es “debo comer”, la cual permanece constante una vez satisfecha, pero es adicional al hecho “quiero amigos”.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Mayo 26 de 2008

Ingeniería del Software de Sala Limpia

La ingeniería del software designa el conjunto de técnicas destinadas a la producción de un producto software, más allá de la sola actividad de programación. Forman parte de esta disciplina las ciencias computacionales y el manejo de proyectos, entre otros campos, propios de la rama más genérica denominada ingeniería informática. A su vez el software es el conjunto de instrucciones que permite al hardware de la computadora desempeñar trabajo útil. En los primeros años del presente siglo, las reducciones de costo en hardware llevaron a que el software fuera un componente que participa en muchos de los dispositivos usados por las sociedades industrializadas. Asimismo, se considera parte del software a la documentación generada durante el desarrollo del proyecto.

El modelo de métodos formales acompaña a un conjunto de actividades que conducen a la especificación matemática del software. Los métodos formales permiten que un ingeniero especifique, desarrolle y verifique un sistema aplicando una notación rigurosa y matemática. Hay una variación, que se utiliza por algunos ingenieros del software conocida como: “ingeniería del software de sala limpia”. Cuando se utilizan métodos formales, se eliminan muchos de los problemas que son difíciles de superar con las metodologías habituales: la ambigüedad, la completitud y la inconsistencia se descubren y se corrigen de manera más sencilla, mediante la aplicación del análisis matemático.

Las ventajas de los métodos formales son: (1) Se comprende mejor el sistema. (2) La comunicación con el cliente mejora ya que se dispone de una descripción clara y no ambigua de los requisitos del usuario. (3) El sistema se describe de manera precisa. (4) El sistema se asegura matemáticamente que es correcto según las especificaciones. (5) Mayor calidad del software respecto al cumplimiento de las especificaciones. (6) Mayor productividad. La falta de madurez en la práctica de los métodos formales es la causa de la imposibilidad de utilizar los métodos formales a nivel industrial tal y como se utilizan otros métodos de la ingeniería del software. Algunas de estas causas son las siguientes: (1) El desarrollo de herramientas que apoyen la aplicación de métodos formales es complicado y los programas resultantes son incómodos para los usuarios. (2) Los investigadores por lo general, obviamente con salvadas excepciones, no conocen la realidad industrial. (3) Es escasa la colaboración entre la industria y el mundo académico, que en ocasiones se muestra demasiado dogmático. (4) Se considera que la aplicación de métodos formales encarece los productos y ralentiza su desarrollo.

La tecnología de dotación lógica de sala limpia es un acercamiento al desarrollo del software lógico, que mejora calidad y reduce costos. El acercamiento toma su nombre de los cuartos limpios usados en la fabricación de la precisión, donde las técnicas estadísticas del control de calidad acentúan la prevención del defecto concluido el retiro del defecto. Las mismas prácticas se pueden aplicar al desarrollo del producto software. En la tecnología de dotación lógica de sala limpia, el desarrollo incremental permite la mejora continua del proceso. Los equipos de diseño aplican el desarrollo y las técnicas de revisión basadas en métodos formales a los sistemas, obteniendo productos que son casi sin defecto incluso antes de realizar las respectivas pruebas. Los equipos de la prueba utilizan control de calidad estadístico para certificar la calidad del sistema, en términos significativos para el cliente.

La ingeniería del software de sala limpia es un enfoque formal para el desarrollo del software, que pueda dar lugar a un software con una calidad notablemente alta. Emplea la especificación de estructura de cajas para el modelado de análisis y diseño, haciendo hincapié en la verificación de la corrección, más que en la comprobación, como mecanismo fundamental para encontrar y eliminar errores. Se aplica una comprobación estadística de uso para desarrollar la información relativa a la tasa de fallos necesaria para certificar la fiabilidad del producto software. La filosofía de sala limpia es un enfoque riguroso de la ingeniería del software. Se trata de un modelo de proceso del software que hace hincapié en la verificación matemática de la corrección, y en la certificación de la fiabilidad del software. El resultado final es una tasa de fallo extremadamente baja, que sería difícil o imposible de conseguir empleando métodos menos formales.

La sucesión de tareas de sala limpia para cada incremento, se manifiesta mediante los requerimientos globales del producto que se van desarrollando empleando los métodos de la ingeniería de sistemas. Una vez asignada la funcionalidad al elemento de software del sistema, el tubo de la sala limpia comienza sus incrementos y se producen las siguientes tareas: (1) Planificación de incrementos. La planificación incremental permite calidad temprana y continua interacción con el usuario. Facilita mejoras de proceso mientras progresa el desarrollo. El acercamiento incremental evita los riesgos inherentes a la integración tardía en el ciclo de desarrollo. (2) Recolección de requisitos. El propósito del proceso del análisis de requerimientos consiste, por una parte, en definir requisitos para el producto software, incluyendo función, uso, ambiente, y funcionamiento; la parte complementara constituye el obtener un acuerdo con el cliente en los requisitos como base para la función y especificación de uso. (3) Especificación de la estructura de cajas. Tres tipos especiales de funciones matemáticas son importantes en el desarrollo de sala limpia, debido a su correspondencia y correlación en el proceso de descomposición y verificación. Estas funciones son conocidas como la caja negra, la caja de estado y caja limpia. En la estructura de las cajas se pueden aplicar una variedad de estrategias de descomposición, además se puede incluir funcionalidad y orientación a objeto. (4) Diseño formal. Mediante el uso del enfoque de estructura de cajas, el diseño de sala limpia es una extensión natural y sin discontinuidades de la especificación. Los participantes proporcionan los objetivos, los criterios de entrada, las tareas, la verificación, las medidas y los criterios comunes de la salida en los procesos, así como elementos de proceso común. (5) Verificación de corrección. El equipo de sala limpia lleva a cabo una serie de rigurosas actividades de verificación de corrección, las cuales se aplican primero al diseño y después al código. El propósito del proceso de verificación de la corrección, es verificar la corrección del incremento asociado al producto software utilizando técnicas matemáticas. (6) Generación de código, inspección y verificación. Las especificaciones de estructura de caja que se representan mediante un lenguaje especializado se traducen en un lenguaje de programación adecuado. (7) Planificación de la comprobación estadística. Se refiere a la comprobación estadística de uso y certificación. El propósito del proceso estadístico de uso y certificación es demostrar la aptitud del software para el uso en un experimento estadístico formal. La “aptitud para el uso” se define con respecto a los modelos de uso y a las metas de la certificación empleados en el proceso de prueba. Las metas de certificación, primero establecidas en el plan de medida y refinadas en el plan de prueba de incremento, se pueden expresar en términos tales como el índice de confiabilidad del software.

Una caja encapsula el sistema con un cierto grado de detalle. Mediante un proceso de refinamiento progresivo, se van refinando las cajas para formar una jerarquía en la cual cada caja tiene una transferencia. Para esto, al interior de la ingeniería del software de sala limpia, se utilizan tres tipos de cajas: (1) Caja negra. Especifica el comportamiento del sistema, o de una parte de un sistema. (2) Caja de estado. Esta caja encapsula los datos de estados y de servicios de forma análoga a los objetos. En esta vista de especificación, se representan las entradas a la caja de estados y sus salidas. (3) Caja transparente. Las funciones de transición que están implicadas en la caja de estados se definen en la caja transparente.

El diseño que se utiliza en la ingeniería del software de sala limpia hace mucho uso de la filosofía de programación estructurada. Esta filosofía contiene las funciones básicas de procesamiento, las que se refinan utilizando una expansión progresiva de funciones matemáticas en estructuras de conectivas lógicas. La técnica y estrategia de la comprobación de la sala limpia es fundamentalmente distinta de los enfoques convencionales de comprobación. Los métodos convencionales derivan de un conjunto de casos de prueba para descubrir errores en el diseño y codificación del producto software. La ingeniería del software de sala limpia se diferencia de otros métodos o paradigmas por las siguientes razones: (1) Hace uso explícito del control estadístico de calidad. (2) Verifica la especificación del diseño empleando una demostración de corrección basada en las matemáticas. (3) Hace mucho uso de la comprobación estadística de utilización para descubrir errores de especial incidencia.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Mayo 19 de 2008

Ingeniería del Software basada en Agentes

En los primeros años del presente siglo, la humanidad se encuentra sufriendo cambios o transformaciones contextuales, que además de ser evolutivas, también representan saltos y rompimiento de paradigmas, que en la mayoría de los casos conllevan al desmonte y sustitución abrupta de viejos paradigmas. La transformación mas significativa la constituye la tecnología, y especialmente la informática; dentro de esta ultima se encuentra el software, que desempeña un papel importante en las organizaciones y mas aún en la sociedad, donde actualmente se está viviendo la revolución de la información. La ingeniería del software, en este contexto, ha caminado pareja al desarrollo de mecanismos de abstracción cada vez más potentes y de más alto nivel. La abstracción modular, tipos abstractos de datos, objetos y, de manera mas reciente, componentes y agentes que son claros ejemplos de este tipo de abstracciones.

Históricamente han ido apareciendo diferentes modelos de programación de forma que cada modelo nuevo ha representado un mayor grado de abstracción que el anterior. Dicha evolución puede resumirse de forma aproximada en los siguientes hitos: (1) La programación orientada a la maquina con los primeros lenguajes de maquina basados en el algebra de Boole. (2) La programación estructurada la que, a través del teorema de la estructura, plantea que cualquier programa puede crearse siguiendo tres estructuras básicas: la secuencial, la decisional y la iterativa. (3) La programación modular, plantea considerar como elemento de diseño el módulo como unidad mínima de análisis. (4) La programación orientada a objetos que considera el mundo como un medio donde predominan los objetos y el paso de mensajes. (5) La programación basada en componentes, que recoge elementos fundamentales agrupados en los componentes para propiciar el diseño y desarrollo orientado a componentes. (6) Programación orientada a agentes, donde se considera que los sistemas multiagente constituyen el núcleo orientador de los procesos de solución de problemas.

Un agente es cualquier proceso computacional dirigido por el objetivo o capaz de interaccionar con su entorno de forma flexible y robusta En este sentido, un agente es un sistema informático, situado en algún entorno, que percibe su medio ambiente y a partir de tales percepciones determina y ejecuta acciones de forma autónoma y flexible, estas acciones le permitan alcanzar sus objetivos, siendo capaz de modificar su entorno. Los agentes pueden ser considerados como sucesores del paradigma orientado a objetos, pero con algunas diferencias significativas como: (1) Los objetos no tienen control sobre su estado interno, los agentes si. (2) Los objetos no tienen iniciativa, los agentes si. (3) Los agentes poseen actitud y el sentido de la orientación, los objetos no. (4) Los agentes son objetos proactivos. (5) Los agentes se pueden comunicar con los humanos, como si fuesen humanos. (6) Un agente puede cuestionar y aprender.

La ingeniería del software orientada hacia agentes es una disciplina reciente que aplica técnicas de ingeniería del software e inteligencia artificial, busca la construcción del anhelado software que piensa o el software con inteligencia. Este paradigma ha tomando cada día más y más importancia ya que posee unas arquitecturas y características propias que no encajan fácilmente en ninguno de los paradigmas de ingeniería del software clásicos. La ingeniería del software orientada a agentes es una disciplina que proviene de la fusión entre la inteligencia artificial, la tecnología de objetos y de componentes, sistemas distribuidos, sociedad y la ciencia del comportamiento entre otros. De la tecnología de objetos rescata: mensajes entre objetos, encapsulamiento, clases y herencia. De los sistemas distribuidos considera: la distribución de datos y procesos, conectividad, redes, protocolos, interoperabilidad e Internet. De la sociedad y la ciencia del comportamiento: interacciones entre humanos, roles, conductismo, cognitivismo. De la inteligencia artificial: representación del conocimiento, razonamiento, aprendizaje y el enfoque de agente inteligentes.

La ingeniería del software basada en agentes ha surgido en respuesta a la demanda de los requerimientos de los sistemas multiagente. Estos sistemas son esencialmente distribuidos y están compuestos por un conjunto de agentes del software que interactúan a fin de satisfacer sus objetivos. Si bien los sistemas multiagente son aplicados a una diversidad enorme de sistemas de computadoras comparten una serie de características, entre las que se mencionan: (1) la información es distribuida, (2) las entidades tienen conocimiento parcial, (3) la computación es asincrónica y (4) no existe un sistema de control central. Los agentes del software son entidades computacionales autónomas que están dirigidas por objetivos e insertas en un entorno que pueden percibir y actuar sobre él. Autonomía significa que las acciones ejecutadas por el agente no son explícitamente iniciadas por el usuario u otro agente; además de que el agente persiste en el tiempo, es decir que no termina su ejecución cuando ha finalizado una tarea, sino que continúa observando su entorno, decidiendo qué acción ejecutar en el próximo instante de tiempo.

Estas y otras características de los sistemas multiagente hacen que su ciclo de vida sea una tarea poco trivial. Por ello es deseable contar con herramientas que asistan en las etapas involucradas en la construcción de un sistema multiagente. Sin embargo, no existe al momento tal herramienta, más allá del gran esfuerzo en investigación dirigido en este sentido. Una alternativa propuesta desde hace tiempo en la ingeniería del software consiste en reutilizar los componentes previamente construidos. Entre las técnicas de reuso empleadas en el paradigma orientado a objetos están la reutilización de librerías de clases, los patrones de diseño y los frameworks. Éstos últimos son el esqueleto de un conjunto de aplicaciones que pertenecen a un dominio concreto.

Hay que notar que los agentes no son necesariamente inteligentes. Existen como en todo el resto del dominio de la inteligencia artificial, dos enfoques para construir sistemas multiagente: (1) El enfoque formal o clásico, que consiste en dotar de los agentes de la mayor inteligencia posible utilizando descripciones formales del problema a resolver y de hacer reposar el funcionamiento del sistema en tales capacidades cognitivas. Usualmente la inteligencia es definida utilizando un sistema formal para la descripción, raciocinio, inferencia de nuevo conocimiento y planificación de acciones a realizar en el medio ambiente. (2) El enfoque constructivista, que persigue la idea de brindarle inteligencia al conjunto de todos los agentes, para que a través de mecanismos ingeniosamente elaborados de interacción, el sistema mismo genere comportamiento inteligente que no necesariamente estaba planeado desde un principio o definido dentro de los agentes mismos. Este tipo de conducta es habitualmente llamado comportamiento emergente.

Como casi todo enfoque informático para la solución de problemas, los sistemas multiagente proponen ayudas metodológicas de ingeniería de software, en este caso metodologías de ingeniería del software orientada a agentes y las notaciones respectivas, es decir, artefactos de desarrollo que son específicamente concebidos para crear sistemas basados en agentes. Las metodologías y notaciones de ingeniería de software orientada a agentes, son: (1) Vocales de Yves Demazeau, es una de las primeras propuestas en el área, y considera la concepción de sistemas multiagente desde varios puntos de vista, correspondientes a las vocales: Agente, Entorno, Interacciones, y Organización. (2) GAIA de Michael Wooldridge y Nick Jennings de la Universidad de Southampton, propone cómo realizar un análisis basado en roles del sistema multiagente. (3) MASE de Scott A. Deloach, propone agentes como extensiones de objetos y proporciona la herramienta AgentTool para análisis, diseño e implementación. (4) AgentUML de James Odell, propone una notación, extendiendo el Lenguaje de Modelado unificado, para especificar protocolos de comunicación entre agentes. (5) MADKiT es una herramienta de desarrollo, propuesta por Jacques Ferber, basada en el paradigma Agente-Rol-Organización de la metodología Aalaadin. (6) ADELFE del grupo IRIT de la Universidad de Toulouse, trata especialmente los temas de cooperación entre agentes. (7) INGENIAS del grupo GRASIA de la UCM, extiende la metodología MESSAGE y proporciona un conjunto de herramientas para modelar y generar código de sistemas multiagente. (8) Mas-CommonKADS de Carlos Iglesias en la UPM extiende la metodología CommonKADS, para sistemas expertos, a agentes, utilizando estructuración orientada a objetos y lenguajes de especificación de protocolos.

Guillermo Choque Aspiazu
www.eldiario.net
Mayo 12 de 2008