12
1 P ARADIGMAS PARA DISEÑAR E IMPLEMENTAR SISTEMAS COMPLEJOS Carlos Gershenson* Vrije Universiteit Brussel/ Fundación Arturo Rosenblueth INTRODUCCIÓN Cuando los requerimientos de un sistema de cómputo crecen demasiado, es muy difícil construir sistemas con paradigmas clásicos. Un ejemplo de esto se ve con la ingeniería de software orientada a objetos, que permite el diseño y programación de sistemas mucho más complejos que con técnicas estructurales o secuenciales. Pero el paradigma de objetos también tiene sus límites. Cuando los proyectos toman algunos años, involucrando docenas de programadores, cada uno ignorando una parte distinta de los estándares, se acumulan errores, y es muy común que el equipo se toma más tiempo en pruebas y correcciones que en la construcción misma del sistema. Esto sin hablar del mantenimiento, cambios de especificaciones y plataformas, actualizaciones tecnológicas, expansiones, etc. Hay varias propuestas y tendencias innovadoras para diseñar, implementar, y controlar sistemas complejos en general, no sólo de software, en los cuales hay un gran número de elementos y tareas, y es difícil tener una visión completa del sistema o de la integración de sus componentes. Aquí mencionaremos algunas de ellas, las cuales

Sistemas complejos

Embed Size (px)

DESCRIPTION

paradigmas para diseñar sistemas complejos

Citation preview

Page 1: Sistemas complejos

1

PARADIGMAS PARA DISEÑAR E IMPLEMENTAR SISTEMAS COMPLEJOS

Carlos Gershenson* Vrije Universiteit Brussel/ Fundación Arturo Rosenblueth

INTRODUCCIÓN

Cuando los requerimientos de un sistema de cómputo crecen demasiado, es muy difícil

construir sistemas con paradigmas clásicos. Un ejemplo de esto se ve con la ingeniería

de software orientada a objetos, que permite el diseño y programación de sistemas

mucho más complejos que con técnicas estructurales o secuenciales.

Pero el paradigma de objetos también tiene sus límites. Cuando los proyectos toman

algunos años, involucrando docenas de programadores, cada uno ignorando una parte

distinta de los estándares, se acumulan errores, y es muy común que el equipo se toma

más tiempo en pruebas y correcciones que en la construcción misma del sistema. Esto

sin hablar del mantenimiento, cambios de especificaciones y plataformas,

actualizaciones tecnológicas, expansiones, etc.

Hay varias propuestas y tendencias innovadoras para diseñar, implementar, y controlar

sistemas complejos en general, no sólo de software, en los cuales hay un gran número

de elementos y tareas, y es difícil tener una visión completa del sistema o de la

integración de sus componentes. Aquí mencionaremos algunas de ellas, las cuales

Page 2: Sistemas complejos

2

pueden ser útiles en distintos casos, con referencias a trabajos que dan introducciones

a cada una.

En la siguiente sección hacemos una breve introducción a sistemas complejos.

Después pasamos a revisar las tecnologías de agentes, y como un caso especial la

simulación de enjambres. Seguimos con sistemas auto-organizativos, sistemas

adaptativos, y computación evolutiva. Estos paradigmas no son excluyentes, y en

muchos casos se traslapan. Simplemente son diversas formas de describir y construir

sistemas complejos.

1.- SISTEMAS COMPLEJOS

Un sistema es considerado “complejo” cuando está compuesto de un gran número de

elementos los cuales interactúan entre sí (Bar-Yam, 1997). La funcionalidad global del

sistema se da precisamente por las interacciones, y por lo tanto uno no encontrará tal

funcionalidad si uno observa sólo a unos cuantos elementos.

Es por eso que esta funcionalidad se llama “emergente”, dado que sólo se encuentra a

nivel sistema. Un ejemplo de propiedades emergentes son la temperatura y presión de

un sistema gaseoso, el cual está compuesto de moléculas, las cuales no tienen ni

temperatura ni presión. Otro ejemplo es una célula, compuesta “sólo” de moléculas y

proteínas. Decimos que la célula está viva, pero no que sus componentes lo están. En

computación, Internet cuenta con propiedades que una computadora no tiene. Entonces

podemos decir que sistemas de cómputo no son complejos (no confundir con

complicados) si se pueden construir con pocos elementos. Generalmente la

Page 3: Sistemas complejos

3

complejidad de un sistema de cómputo crecerá con en número de requerimientos y

funcionalidades del sistema.

Estamos acostumbrados a pensar en sistemas no complejos, simplemente porque es

más fácil. Pero esto no nos ayudará cuando necesitemos construir sistemas complejos.

Hay varias cosas que hay que tomar en cuenta, ya que encontraremos problemas que

“emergen” cuando el número de elementos se incrementa demasiado, o bien la única

forma de alcanzar la funcionalidad deseada es de manera emergente: diseñando

componentes simples para que en su conjunto resuelvan el problema.

Hay varias formas de atacar estos problemas, y a continuación mencionaremos algunas

de las más populares.

2-. AGENTES

La ingeniería de software orientada a agentes (Jennings, 1999) ya es bastante usada.

El concepto de “agente” es muy general, y hay varias definiciones, como la popular “los

agentes son cosas que hacen cosas a otras cosas”. Podríamos decir en términos

prácticos que simplemente son objetos o procesos con propósito (en el sentido de

Rosenblueth & Wiener, 1968). Por supuesto el propósito es dado por el programador.

Los agentes le dan una dimensión dinámica a los objetos, ya que cada agente puede

tener su propia meta, reglas, información, etc. Esto es muy útil especialmente en

sistemas multi-agentes, ya que cada agente hace su tarea independientemente de lo

que hagan otros agentes. Hay varias técnicas y protocolos para coordinar a los agentes

y para que compartan información.

Page 4: Sistemas complejos

4

También hay una gran variedad de tipos de agentes: racionales (hay muchas lógicas

definidas para ellos), para comercio electrónico, emocionales, de búsqueda, interfaz,

autónomos adaptativos (o nouvelle Inteligencia Artificial), etc. Estirando la definición de

agente, podríamos decir que los demonios de los sistemas UNIX son agentes, cada uno

con una tarea distinta: mandar y recibir correo, coordinar otros agentes y los recursos

del sistema, recibir información del teclado o del ratón, conectarse a una base de datos,

realizar tareas a horas determinadas, etc. De hecho es probable que algunos lectores

ya hayan programado agentes sin saberlo. Los componentes como CORBA o ActiveX

también pueden ser considerados como agentes.

La fuerza detrás del paradigma de agentes es la del principio “divide y vencerás”. Cada

agente se encarga de una tarea, y en su conjunto los agentes tienen que resolver el

problema que sería muy complejo como para atacarlo monolíticamente. La diferencia

entre agentes y objetos es el aspecto dinámico de los primeros. Los objetos tienen

propiedades que pueden cambiar, pero los agentes tienen metas y acciones posibles

para alcanzarlas. Un mismo sistema podría describirse por los dos paradigmas, pero la

integración de la información en el paradigma de agentes comunicándose entre sí es

más natural que con objetos cambiándose propiedades. La diferencia es más en la

descripción del sistema que en el sistema mismo, pero es una diferencia importante:

facilita mucho la computación distribuida, imprescindible en Internet. Simplemente es

más sencillo en este contexto hablar en términos de agentes que en términos de

objetos.

Page 5: Sistemas complejos

5

2.1. ENJAMBRES

Un caso especial de agentes para la simulación se ha desarrollado en el Santa Fe

Institute en Nuevo México, conocido como “enjambres” (Langton et al., 1999),

inspirados en la organización de insectos sociales (Bonebeau et al., 1998). Podríamos

decir que un enjambre es un agente con muchas otras cualidades: Un enjambre

generalmente consiste de varios enjambres, los cuales a su vez pueden consistir de

varios enjambres. En objetos esto sería simple agregación, pero como cada enjambre

tiene su dinámica propia, este paradigma facilita la simulación de sistemas a varios

niveles al mismo tiempo.

3.- SISTEMAS AUTO-ORGANIZATIVOS

Los insectos sociales (Bonebeau et al., 1998) son un buen ejemplo de un sistema

autoorganizativo (Heylighen, 2003). Aunque los sistemas auto-organizativos son algo

subjetivos (Gershenson & Heylighen, 2003), ya que es difícil decidir si un sistema es

auto-organizativo o no independientemente del observador, no dejan de ser útiles. Pero

sin entrar en muchos debates, podemos decir que un sistema es auto-organizativo si

aumenta su organización con el tiempo como producto de su funcionamiento interno

(aunque admitiendo por supuesto interacciones con su medio ambiente).

Las hormigas, por ejemplo, si se colocan en un hormiguero nuevo, empiezan a explorar

alrededor de manera más o menos aleatoria. Pero una vez que encuentran comida,

recuerdan dónde está, y hacen viajes más o menos directos entre el hormiguero y la

fuente de comida. Sólo que cuando caminan, las hormigas dejan feromonas por donde

Page 6: Sistemas complejos

6

pasan, las cuales son percibidas por otras hormigas. Una hormiga tiende a seguir un

rastro de feromonas. Como las hormigas que encuentran comida repiten su camino,

este se volverá más fuerte en feromonas que por donde sólo han explorado otras

hormigas.

Mientras pasa el tiempo, las hormigas en vez de explorar, van a seguir el camino de las

hormigas que ya encontraron comida, haciendo la tarea muy eficiente. Si se agrega otra

fuente de comida, o agota la primera, el hormiguero como tal es sumamente robusto y

adaptativo. De hecho se puede decir que una colonia de insectos en su conjunto tiene

funciones cognitivas, ya que puede resolver problemas de discriminación y

optimización. ¡Pero si el comportamiento de las hormigas se describe de una forma muy

simple! Sí, las funciones “emergentes” sólo se dan debido al gran número de hormigas

interactuando por medio de las feromonas. Es por esto que se han diseñado varios

algoritmos para atacar problemas de optimización, tales como el problema del

“vendedor viajero”, o el control de tráfico en redes de comunicación. Uno comienza con

varios agentes que tienen tareas “simples”, y es su conjunto pueden resolver problemas

muy complejos.

Autómatas celulares (Wolfram, 2002), tales como el juego de la vida (Berlekamp et

al.,1982; Gershenson, 1997), son otro ejemplo de sistemas de elementos que siguen

reglas simples y producen comportamiento complejo al nivel del sistema.

Un caso interesante para ilustrar la auto-organización es el de agregación limitada de

difusión (DLA). Consiste en una matriz, con cierta concentración de partículas

Page 7: Sistemas complejos

7

distribuidas aleatoriamente, las cuales tienen también movimiento aleatorio. En el centro

de la matriz se encuentra una partícula fija, la semilla del agregado, la cual no se

mueve. Si alguna partícula toca al agregado, se pega y deja de moverse. Así, a partir de

movimientos aleatorios y caos, se construyen agregados con patrones fractales, como

se puede apreciar en la Figura 1. (este puede ser un buen proyecto de programación

para estudiantes de primer semestre).

La idea principal de los sistemas auto-organizativos en cómputo (Heylighen &

Gershenson, 2003) es la siguiente: se diseñan los componentes del sistema, de forma

tal que la interacción entre ellos a través del tiempo produzca el resultado deseado en el

sistema.

Figura 1. DLA con 100 millones de partículas, cercido por Henry Kaufman.

Page 8: Sistemas complejos

8

El paradigma de sistemas auto-organizativos promete ser útil para diseñar sistemas

complejos, tales como la Red Semántica (Berners-Lee et al., 2001), control de tráfico

(Gershenson, 1998), gobierno electrónico, etc. Pero de entre todas las posibilidades de reglas e interacción de los elementos, ¿cómo

encontrar las adecuadas? Esto no es sencillo, ya que en general estos sistemas no son

computacionalmente reducibles. Es decir, la única forma de ver si una regla sirve o no

es probándola. Es por esto que es deseable que los componentes se adapten ellos

mismos para que mejoren su desempeño con el tiempo.

4. SISTEMAS ADAPTATIVOS

Podemos decir que un sistema es adaptativo si mejora su desempeño en el tiempo.

Hace más de cincuenta años, en cibernética (Wiener, 1948; Ashby, 1956), ya se

exploraron muchos métodos para construir sistemas adaptativos, pero fueron olvidados

y recientemente están siendo redescubiertos.

Se puede utilizar una metáfora y decir que el sistema aprende. Varios métodos en

sistemas adaptativos artificiales tienen inspiración en sistemas biológicos, los cuales se

adaptan a cambios en el medio ambiente, y en muchos casos pueden aprender: ya sea

nuevas tareas, o sólo mejorar tareas que ya practican.

Otra idea usada en sistemas adaptativos es la homeostasis: el sistema cuenta con una

seria de estados “preferidos”, y tratará de regresar a ellos después de perturbaciones

causadas por el medio ambiente o por el sistema mismo. Esto hace al sistema robusto.

Page 9: Sistemas complejos

9

Los sistemas adaptativos pueden ser muy útiles, ya que los podemos usar para

optimizar o encontrar soluciones que son muy complejas o complicadas: los sistemas

encuentran las soluciones ellos mismos.

Una aplicación se ve en la propuesta de IBM de “computación autónomica”

(http://www.research.ibm.com/autonomic), en la cual el sistema se adapta a los cambios

y actualizaciones del hardware y software, y hace por sí mismo tareas que por ahora

nosotros tenemos que ordenar a las computadoras.

Un caso especial de sistemas adaptativos utiliza la teoría Darwiniana de evolución

como inspiración para la búsqueda de soluciones a ciertos problemas.

5. COMPUTACIÓN EVOLUTIVA

Hay varias ramas de computación evolutiva. Los “algoritmos genéticos” son la más

común. Son métodos de búsqueda en los cuales hay poblaciones de soluciones

posibles, generadas aleatoriamente. Después, siguiendo ideas de evolución biológica,

las soluciones pueden ser apareadas, mutadas, recombinadas, etc. Hay problemas en

los cuales son muy útiles, por ejemplo en el diseño de agentes sociales, robots,

aviones, muebles, sonidos, etc. Pero no hay ningún algoritmo que sea bueno en todos

los casos.

Otra rama es la programación genética (Koza, 1992). Es similar a los algoritmos

genéticos, pero en vez de manipular soluciones, manipula segmentos de programa, los

cuales pueden ser alineados recursivamente. La idea es que por medio de evolución, se

podrían producir programas que en teoría serían muy difíciles de hacer. La realidad es

Page 10: Sistemas complejos

10

que no han hecho ningún programa que un programador no pueda hacer, pero con la

velocidad a la que aumenta la capacidad de cómputo, probablemente haya varias

aplicaciones para programación genética en el futuro cercano.

Ha habido gente que también se ha inspirado en evolución para crear circuitos:

hardware evolutivo. Sobre chips reconfigurables, los circuitos y sus componentes

pueden ser sometidos a su vez a mutaciones y recombinaciones a través de

generaciones. Aquí también en práctica no han superado a los humanos, pero una

posible aplicación es la evolución de circuitos que autodetectan fallas.

CONCLUSIONES

Hemos revisado brevemente algunos paradigmas para el diseño e implementación de

sistemas complejos. Todos estos están siendo constantemente investigados y

actualizados.

También constantemente nuevas propuestas salen a la luz. Aunque muchos

paradigmas funcionan muy bien en teoría, pueden sufrir dificultades en la práctica. Creo

que la principal es que la mayoría de la gente no es familiar con la forma de pensar

requerida para resolver este tipo de problemas, así que la mejor forma de empezar es

tratar de tener una noción de las nuevas tecnologías. Esto cambiará nuestra forma de

pensar, y podremos tratar de atacar este tipo de problemas. Es difícil tratar de

desarrollar un sistema de agentes para comercio electrónico que aprendan las

preferencias de los usuarios si la mayoría de los programadores del grupo no saben

programación orientada a objetos.

Page 11: Sistemas complejos

11

Pero no podremos evitar el enfrentar sistemas más y más complejos de cómputo, ya

que la sociedad, el mercado, la tecnología, todo se vuelve más complejo. En el futuro

cercano la mayoría de los requerimientos serán para sistemas complejos.

REFERENCIAS

Ashby, W. R. An Introduction to Cybernetics. London, Chapman & Hall, 1956. http://pespmc1.vub.ac.be/ASHBBOOK.html Bar-Yam, Yaneer. Dynamics of complex systems. New England: Addison-Wesley. 1997. http://www.necsi.org/publications/dcs Berlekamp, E. R., [ et. al]. What is life: ch. 25. En: Games in particular academic press. Vol. 2:, 1982 Berners-Lee, T. The semantic web. En: Scientific American, Mayo 2001. http://www.sciam.com/issue.cfm?issuedate=May-01, http://www.semanticweb.org . Bonabeau, E. [ et. al]. Swarm Intelligence. USA: Oxford University Press. 1998 Gershenson, C. El juego de la vida en 3D En: Memorias X Congreso Nacional ANIEI. México:ANEI, 1997. http://student.vub.ac.be/~cgershen/jlagunez/aniei97/life.html Gershenson, C. Control de tráfico con agentes: CRASH. Memorias XI Congreso Nacional México: ANIEI1998, http://student.vub.ac.be/~cgershen/jlagunez/aniei98/crash.html Gershenson, C. & F. Heylighen. When can we call a system self-organizing: submitted to the 7th European. En: Conference on Artificial Life. Germany. 2003. http://arxiv.org/abs/nlin.AO/0303020 Heylighen, F. The science of self-organization and adaptivity. En:: The encyclopedia of life support systems, EOLSS Publishers Co. Ltd. Heylighen, Francis y Gershenson, Carlos. The meaning of self-organization in computing. University of Brussels, 2003. http://pcp.vub.ac.be/Papers/IEEE.Self-organization.pdf Holland, John. Henry. Adaptation in natural and artificial systems. 2a ed. Cambridge, Massachusetts: MIT Press, 1992. Jennings, Nicholas. R. Agent-oriented software engineering. England: University of London, 1999. http://www.ecs.soton.ac.uk/~nrj/download-files/cairo.pdf Koza, J. R. Genetic programming: on the programming of computers by means of natural selection. Cambridge: MIT, 1992. Langton C [et. al.] The swarm simulation system. http://www.swarm.org . Rosenblueth, A. & N. Wiener. Purposeful and non-purposeful Behaviourb En: Buckley, W. Modern Systems Research for the Behavioural Scientist. USA, 1968.

Page 12: Sistemas complejos

12

Wiener, N. Cybernetics; or control and communication in the animal and the machine. Ambridge: MIT Press., 1948. Wolfram, S. A new kind of science. Wolfram. Media. 2002

*CARLOS GERSHENSON

Ingeniero en Computación por la Fundación Arturo Rosenblueth. Maestro en Sistemas Evolutivos y Adaptativos, University of Sussex. Actualmente cursa el doctorado en la Vrije Universiteit Brussel. http://student.vub.ac.be/~cgershen