Sistemas complejos
-
Upload
kennedy-amaro-quispe -
Category
Documents
-
view
2 -
download
0
description
Transcript of 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
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
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.
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.
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
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
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.
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.
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
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.
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.
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