2009-04-03 7 views
35

Cuando das un paso atrás y mirar ...¿Alguna vez ha obtenido una solución de programación de la naturaleza?

  • la naturaleza de los animales, insectos, plantas y los problemas que han resuelto orgánicamente
  • tal vez incluso la naturaleza y el equilibrio del universo

¿Alguna vez ha sido capaz de resolver un problema derivando un enfoque de la naturaleza?

He oído hablar de Ant Colony Algorithms pudiendo optimizar la cadena de suministro, entre otras cosas. También Fractal es la "geometría de la naturaleza" se han aplicado a una amplia gama de problemas.

Ahora que la primavera ha llegado de nuevo y el mundo está volviendo a la vida, me pregunto si alguien tiene algunas experiencias que puedan compartir.

Gracias

PS Yo recomendaría ver el "Hunting the Hidden Dimension" episodio Nova en fractales.

Respuesta

19

Recuerdo leer un libro de un matemático sobre el campo de las matemáticas, y mencionó un ejemplo de la naturaleza. Su ejemplo de la naturaleza me ayudó a mejorar un diseño en el que estaba trabajando.

Su ejemplo fue este: conducía y vio algunas aves en un cable telefónico. Los pájaros estaban espaciados uniformemente. Esto no sucedió porque había un ave que gobernaba y le decía a cada uno dónde sentarse. Más bien, cada ave tenía dentro de sí un cierto "algoritmo" para decidir qué hacer cuando venía otro pájaro. Las aves prefieren maximizar su espacio libre, supongo.

Esto me ayudó en un momento en el que era bastante nuevo en OO. Seguí tendiendo a hacer las cosas de procedimiento y tengo inteligencia centralizada en "objetos de Dios". Leí esto y me di cuenta de que los objetos individuales podían enfocarse solo en las cosas que necesitaban saber y preocuparse, y aún así, el resultado a nivel de imagen completa podría ser lo que usted desea. Que el resultado correcto puede "emerger" sin ser "controlado".

+15

Esto no es casualidad: Alan Kay, el padre de la programación orientada a objetos, es un microbiólogo mediante entrenamiento, y modeló OO de la misma forma en que las células simples pueden formar organismos complejos con un comportamiento complejo. –

+1

Interesante, no lo sabía. Se adapta con la referencia Ant Colony también. –

+0

Los humanos también prefieren maximizar su espacio libre: obsérvese la próxima vez que elija un lugar en el restaurante o en el cine. – mouviciel

0

La amenaza de daystar constantemente me obliga a evaluar y reevaluar mis algoritmos para una máxima eficiencia.

7

Personalmente, nunca he resuelto un problema aplicando ideas de la naturaleza. Sin embargo, he resuelto problemas mediante la aplicación de soluciones de otras personas inspiradas en la naturaleza.

Muchos algoritmos de diseño de gráficos, y algoritmos de diseño en general, se basan en mecánicas (muelles, gomas, gravedad) o en simples comportamientos similares a insectos (siga a su líder, maximice/minimice la distancia).

Y, por supuesto, me gusta la programación orientada a objetos, que fue desarrollada por Nygaard y Dahl para simulaciones de objetos físicos del mundo real, y fue perfeccionada por Alan Kay, un microbiólogo que modeló OO explícitamente puede formar organismos complejos capaces de un comportamiento complejo. Entonces, en cierto sentido, todos los que hacen OO, derivan indirectamente su programa de la naturaleza.

1

Uno de los más famosos es neural networks.

+0

Irónicamente, las redes neuronales (tal como se practican actualmente) se basan en una comprensión pobre del estado del conocimiento del funcionamiento neuronal tal como existía hace décadas. La comprensión de cómo funcionan las neuronas tanto individualmente como como parte de una red ha avanzado increíblemente en los últimos años, mientras que al mismo tiempo los programadores de "redes neuronales" han abandonado incluso sus modos biológicos obsoletos, poco conocidos. – MusiGenesis

+1

Ortografía traída a usted por una red neuronal muy desactualizada que aún no ha tomado su café. – MusiGenesis

0

Una cosa que he entendido bien de la ley de la naturaleza de conservation of energy, "La cantidad total de errores en el producto es constante. Un error nunca se corrige.Sólo se convierte en otro error "!! :-)

Bromas aparte, estoy muy agradecido a utilizar lenguajes como C++ en mi trabajo, donde los conceptos (por ejemplo: la herencia, amigo). Derivan de sistema social

3

Trabajo en el procesamiento de imágenes, tratando con objetos obscenos que están demasiado cerca para distinguirlos por umbrales simples Implementé un algoritmo de cuenca hidrográfica - la idea es que si visualiza los objetos como colinas en un mapa, y calcula la línea divisoria de aguas entre las dos colinas, se puede calcular dónde termina un objeto y comienza el otro.

Quería mejorar este algoritmo y como excursionista tengo fo y yo en lo alto del Lake District mirando por encima del panorama, cortando las colinas y valles con los dedos (para vergüenza de mi otra mitad). También se me conoce por molestar a los caminantes con preguntas como: "¿dónde termina esta colina y comienza la siguiente? ¿Por qué? ¿Y por qué no contaron ese montículo?"

Aún no he llegado a llevar mi computadora portátil conmigo. :)

3

Cualquiera sea el concepto en la naturaleza, donde podemos hacer un modelo matemático (Ecuación Diferencial) podemos aplicarlos a la programación ya que los últimos se basan en la base lógica y matemática, uno más que otros.

creo que podemos pensar al revés también, por ejemplo, el patrón de observador, hay una gran cantidad de especies que implementan ese patrón también, la cadena de responsabilidad, etc.

Su una interesante forma de pensar ...

¡Buen amigo!

+0

Veo esa parte 'hacia atrás' más interesante. –

1

Mi software de música (ver mi perfil) usa el proceso evolutivo para crear música, de una manera un tanto análoga a de Richard Dawkins The Blind Watchmaker (que creó imágenes en lugar de música).

+0

¿Está familiarizado con el Profesor Al Biles? –

+0

@San Jacinto: la pregunta es, ¿el profesor Al Biles está familiarizado con * me *? :) – MusiGenesis

+0

En realidad, nunca he oído hablar de Al biles, pero he oído hablar de su software * GenJam *, así que creo que he oído algo de él. – MusiGenesis

0

El concepto extremadamente simple de "manejo de excepciones" es la aplicación más poderosa y directa de la naturaleza en cualquier software.

Cualquier organismo vivo hace su mejor esfuerzo para adaptarse a las circunstancias cambiantes que le rodean, y para seguir adelante en la vida y lograr su objetivo de supervivencia. Muchas circunstancias excepcionales se presentan para evitar su objetivo, pero los organismos luchan con fuerza e intentan encontrar la forma más óptima de hacer el trabajo. Nuestras vidas diarias están llenas de tales experiencias.

El manejo de excepciones también ayuda a cualquier software a trabajar para lograr su objetivo sin pasar por las dificultades encontradas.

Pero una cosa que falta en los softwares es algo que realmente debería estar allí. Dice así:

Los seres humanos siguen aprendiendo de sus errores, almacenando todo lo que encuentran en sus cabezas, y la próxima vez que surja ese problema, sabrán cómo evitarlo/resolverlo. Pero la primera vez que ocurre, saben que lo evitan de sus hábitos normales (manejando la excepción usando la excepción de la clase de base común), pero luego aprenden que hay una forma especializada de manejarlo (clase de excepción especializada como FileDoesNotExistException). Nunca van a un taller de reparación para actualizarse, aunque reciben asesoramiento de amigos. Espero que ustedes entiendan la esencia de lo que estoy tratando de decir.

Un software también debe seguir aprendiendo sin mostrar a sus usuarios el mensaje "Sitio bajo actualización" y tratar problemas desconocidos utilizando la clase de excepción simple.Sin embargo, se publican nuevas versiones, pero me gustaría que desarrollemos un software de autoaprendizaje que funcione todo el tiempo y que se actualice a sí mismo, sin bajar nunca.

1

El departamento de CS de mi antigua universidad ha tenido un interés histórico por los algoritmos inspirados en la naturaleza desde los años setenta (creo que el término académico correcto es Natural computation. Así es como entré en contacto con algunos de esos algoritmos, especialmente Evolution strategies, redes neuronales ampliamente conocidas, y el arte exótico de Membrane computing. También hice una clase de minería de datos, donde estudiamos algunos algoritmos que permitían que un sistema informático aprendiera de un conjunto de datos.

Yo diría que todo tipo de algoritmo que hace que la computadora "learn" caiga en la categoría que se deriva de la naturaleza. Por lo tanto, incluso los algos bastante básicos como Naive Bayes caen en esta categoría, y p robably todos los usan de una manera u otra, p. para filtrar el correo electrónico no deseado.

Personalmente, solo he implementado este tipo de algoritmos en clases universitarias o en mis experimentos personales de programación. Creo que generalmente se enseña que son poderosos aunque en muchos casos menos eficaces que los algoritmos deterministas "clásicos". Por lo tanto, siempre se debe preferir un algoritmo determinista, ¡si hay uno que resuelva el problema! Solo cuando el problema es demasiado complejo para ser resuelto usando algoritmos determinísticos, la computación natural puede ofrecer una mejor solución. Desde mi experiencia personal esto es realmente cierto. Un pequeño ejemplo: la estrategia de evolución que implementé para resolver acertijos Sudoku me llevó medio día implementarla y ejecutarla durante varias horas para encontrar la misma solución que el clásico algoritmo de retroceso encontrado en menos de un segundo (lo que me llevó menos de treinta minutos escribir). ;-))

Recuerdo que un compañero de estudios utilizó estrategias de evolución para resolver el problema de cómo distribuir de manera óptima un conjunto de archivos en varios DVD para su archivo, que creo que es una aplicación del problema de mochila o bin- problema de embalaje, y funcionó bastante bien. Aparentemente, los algoritmos de colonia de hormigas también se pueden usar para esto. De todos modos, gracias por esta interesante pregunta.

0

Hice algún trabajo una vez con el autor de Terragen para incorporar algunos algoritmos de representación atmosférica de él en un programa de representación de paisaje que había escrito. Me impresionó mucho que el código realmente emulara la atmósfera: alimentaste con negro como tu color base (porque el cielo está negro en el espacio) y el color de la fuente de luz (efectivamente blanco, un ligero toque de amarillo), varios valores para la altura de la atmósfera, la densidad y la descomposición rojo/verde/azul lo patearon por completo, produciendo un bonito cielo azul degradado y un sol amarillo brillante, o si colocaste el sol correctamente, un bonito cielo azul y azul oscuro y una puesta de sol.

En realidad, no era particularmente complejo, solo unas ecuaciones matemáticas muy bien elegidas que emulaban el comportamiento de como mucho una docena de parámetros diferentes, pero estaba muy bien ensamblado. A partir de entonces, pasé mucho tiempo jugando con él y finalmente reescribiéndolo por completo para GLSL, pero ciertamente me enseñó algunas cosas sobre cómo abordar un cierto tipo de problema.

1

No he resuelto el problema todavía, pero creo que la mejor solución para la reputación, el "karma" o cualquier variación para encontrar un consenso entre un grupo de personas se encuentra en el trabajo de Maynard Smith descrito en Evolution and the Theory of Games . Específicamente, desarrolla el concepto de una Estrategia evolutivamente estable (ESS), que es un patrón de comportamiento que es robusto contra los malos actores externos.

Si suponemos que todos son altruistas, entonces las cosas son simples. Lo que Maynard Smith llama la estrategia "Dove" de aplazar siempre a los demás es una estrategia eficiente en el sentido de que nadie pierde el tiempo luchando. Pero no es un ESS, porque puede ser invadido desde afuera por actores egoístas. Esto sería análogo a un sitio que solo tiene votos ascendentes.Fallaría porque cualquiera podría votar cualquier cosa a la cima.

Los sistemas más sofisticados como Stack Overflow y Slashdot fomentan principalmente votos ascendentes, pero permiten downvotes. Son más robustos contra las personas que no están "cooperando", pero siguen siendo vulnerables a los "juegos". En ambos casos, es fácil ganar reputación rápidamente al ser el primero en publicar, al publicar algo divertido en lugar de útil, y acciones similares.

2

Muy a menudo.

A veces salgo a caminar por el bosque mientras reflexiono sobre un problema. Y la mayoría de las veces, las soluciones que encuentro tienen algo que ver con los árboles.

También he trabajado en ideas de IU inspiradas en la física. Usar conceptos como gravedad, magnetismo o repulsión eléctrica para organizar elementos en la pantalla.

También escuché una vez una charla interesante sobre SOA, lo creas o no. La idea central de la charla fue que diferentes subsistemas en una arquitectura SOA deberían cooperar a la manera de las células en un sistema biológico. El tema fue muy esclarecedor en cuanto a cómo un sistema complejo realmente puede funcionar, incluso si está construido a partir de componentes débilmente acoplados.

+1

¿Cuando todo lo que tienes son árboles, cada problema parece un bosque? :) – Coxy

+0

Cuando todo lo que tengo son árboles, ¡todo problema es un bosque! Gracias, Coxymla. – Guge

+0

¿Alguna referencia a esta charla? Gracias ... – bob

3

hemos creado un "error" mediante programación una vez ... ...

+0

sorry couldnt resist ... –

Cuestiones relacionadas