Los algoritmos genéticos se convierten en desarrolladores ellos mismos

[Kory] experimentó con algoritmos genéticos. Normalmente esperaríamos que sus experimentos traten de configurar las variables en un sistema de control o algo así, pero él hace algo mucho más genial. [Kory] usa algoritmos genéticos para escribir programas de computadora, y en el proceso nos acerca un paso más a la Singularidad.

Los primeros experimentos con algoritmos genéticos que generaron aplicaciones lo hicieron en BASIC, C y otros lenguajes legibles por humanos. Durante estos programas casi funcionaba, había demasiadas restricciones sobre lo que GA podía producir. Se necesitaba un lenguaje más simple, y después de pasar al ensamblaje por un segundo caliente, [Kory] terminé usando brainfuck, un lenguaje extremadamente mínimo pero aún así completo de Turing.

El uso de brainfuck para crear programas a partir de un algoritmo genético puede parecer un poco extraño, pero existe un método para [Kory]la locura de. Es relativamente simple escribir un intérprete que la función apropiada de GA pueda ver y generar una puntuación de qué programas deben reproducirse y cuáles deben morir. Además, la simplicidad de la lluvia de ideas significa que una computadora no tiene que aprender mucha sintaxis y gramática.

Ahora [Kory]La computadora, que puede programarse a sí misma, hace esto solo creando programas simples de "hola mundo". Sin embargo, esta IA debería poder crear programas que tomen la entrada del usuario y generen resultados, cualquiera que sea. Una vez [Kory] puede hacer que la computadora genere sus propias funciones de fitness, sin embargo, el cielo es el límite y la Singularidad se acerca rápidamente.

  • Nico Nimleth dice:

    Bella: D

  • Andrés dice:

    Curiosamente... El problema más difícil es decidir qué debe hacer la función de aptitud, es decir, ¿qué cualidades deben hacer que un programa sea más apropiado que otro? Y dejar que la computadora “decida” no da una respuesta a la pregunta porque, incluso entonces, alguien tiene que decidir qué criterios usará la computadora para determinar la mejor característica de condición física.

    • Sr. X dice:

      También tienes el problema de un bucle infinito, ¿cómo lo detectas? Para un programador es obvio detectar cuando una computadora ha dejado de hacer algo útil y solo está funcionando. Para una computadora capaz de detectar esto, es una historia completamente diferente.

      • terror dice:

        Sería posible que el sistema observe lo que está cambiando y ver si llegará a ciertas ramas o romperá las condiciones en el futuro.

        Por ejemplo, si se repite hasta n = 10,000,000,000, y n está actualmente en 1235879 y sigue aumentando... en realidad no está en un bucle infinito. Esto debería ser detectable.

        • adcurtina dice:

          "debería ser posible"

          je. Este es un gran problema en informática. Se llama el problema de parada: http://en.wikipedia.org/wiki/Halting_problem

          es básicamente imposible que un programa de computadora sepa si se detendrá o no. Si puede, entonces p = np, y la prueba de eso tiene un premio de un millón de dólares.

          De ninguna manera es sencillo.

          • Guillermo dice:

            El problema de parada no tiene nada que ver con P = NP. El problema de la detención simplemente dice que es imposible calcular si un programa se detendrá o no, para todos los programas posibles y todas las entradas posibles. Puede calcular la respuesta para algunos, pero no para todos.

            P = NP tiene que ver con la eficiencia de los algoritmos y si ciertos problemas se pueden resolver de manera más eficiente o no. No tiene nada que ver con la computabilidad.

          • Num み か る ん (@ numpad0) dice:

            Si la pieza de código contenía un ciclo infinito, ¿cómo se puede estimar eso? Simplemente agregue un temporizador. Eliminar las variantes que se ejecutan durante más de, tal vez, 10 segundos. Creo que finalmente estamos "resolviendo" el problema de la parada, por supuesto que no se puede resolver correctamente, pero nuestro sistema nervioso debería haber estado haciendo esto durante miles de años.

          • Dudado dice:

            ¿No es para eso que están los perros? Si tiene algún contador (o algún circuito de tiempo de espera) y lo aumenta constantemente y permite que el programa lo restablezca periódicamente durante el código, puede saber que algo salió mal cuando se produce un desbordamiento del contador.

      • Alguien asdf dice:

        Realmente no tienes un problema de bucle sin fin. El objetivo de un algoritmo genético es evolucionar hacia una mejor solución.

        Si encuentra alguna solución, entonces el algoritmo genético descartará cualquier solución que requiera más tiempo (u otras calificaciones como memoria, etc., lo que sea que su algoritmo de aptitud considere "apropiado"): los bucles interminables estarían fuera.

        Es posible que falten algunas soluciones, como "si se cuelga durante algunas repeticiones más", pero su algoritmo de fitness saldría (o incluiría).

  • xorpunk dice:

    Hice esto hace un fin de semana y lo publiqué en algunos foros de arranque, pero lo llamé generador de macros, generaba web scrapers...

  • janek dice:

    La programación genética no es exactamente una idea nueva: http://en.wikipedia.org/wiki/Genetic_programming
    Pero usar la fuga de cerebros es un pensamiento divertido 🙂

    • Patrik D'haeseleer (@PatrikD) dice:

      Si. “Esa es una rueda cuadrada interesante que se te ocurrió ahí. Es posible que también desee ver las rondas en las que otros han trabajado ... "

  • duro dice:

    Me parece bastante apropiado que el lenguaje elegido para los programas desarrollados por GA se llame "brainfuck".

  • nutrino dice:

    La prueba de aptitud para la generación no debe ser si puede compilar algo, sino si lo que compila puede compilar algo (la cosa es hacer del programa algo así como ADN retorcido). Tendrás que compilar dos veces (¿o más? No he considerado esto durante unos minutos aquí) antes de que puedas decidir mantener a los abuelos o no. Y no, no es baladí.

    • Sr. X dice:

      De hecho. No solo eso, también tiene que programar "objetivo" en la función adecuada. De lo contrario, los programas generados no tendrán un propósito funcional a pesar de ser sintácticamente correctos.

      • Jim dice:

        Eso es casi un punto filosófico, ¿no?

  • T80 dice:

    Como jugador de Fallout; que parece fácil de hackear.

    … Lo veré por mí mismo.

    • cambio dice:

      Si solo. La función de aptitud para analizar los resultados de los minijuegos de piratería de Fallout es Mastermind.

  • robomonkey dice:

    Doy la bienvenida a nuestros nuevos gobernantes de IA.

  • QWERTY dice:

    Ahora reescríbelo usando el lenguaje de programación Chef y erradica el hambre en el mundo para siempre 🙂
    http://esolangs.org/wiki/Chef

  • papa_decepcionado dice:

    Tienes que bromear. Qué nombre tan estúpido para un idioma. Este proyecto nunca será más que una broma de alcoba. Ninguna corporación adoptará jamás su uso. Ningún programador profesional lo incluirá jamás en su currículum.

    • Oxina dice:

      Señor, espero que usted sea el que está bromeando.

    • Noelk dice:

      http://en.wikipedia.org/wiki/Esoteric_programming_language

    • terror dice:

      Ese es el punto.

    • alto dice:

      Brinf*ck es una broma. Significa ser divertido, ser esotérico de una manera divertida, no ser usado excepto con fines divertidos.

      Usarlo para la programación genética también es una especie de broma, aunque no está claro si es intencionalmente una broma.

    • tonto de patas azules dice:

      Si puede ver alguna razón por la que se hizo esto que no sea una búsqueda de ganancias o un intento genuino de dejar una marca duradera en el mundo de CS, entonces no sé qué decirle, excepto que tal vez debería considerar por qué está visitando esto. sitio.

      • papa_decepcionado dice:

        Es el nombre del producto, no el rincón sin fines de lucro. Adelante, inclúyalo en su currículum, las compañías Fortune 500 no pensarán que es divertido. Dígale el nombre del producto a un grupo de compañeras de trabajo y lo escoltarán fuera del edificio.

        • Ryan dice:

          Y nadie aquí lo discute a pesar de sus publicaciones. Estás peleando al aire libre ahora mismo.

  • Jon dice:

    Je je. . . "Hola mundogaY"

  • durosoftlucid dice:

    Si pudiera generar el programa más pequeño que genera un número largo y claro, probablemente podría ganar mucho dinero aquí: http://prize.hutter1.net/
    Generar el programa más corto que puede contar Pi hasta unos pocos millones de dígitos sería un comienzo increíble-increíble-xxl.

  • derpa dice:

    Si el programador permite que los programas escriban su propia función de aptitud, ¿el programa más exitoso no generaría simplemente métricas de aptitud extremadamente altas, independientemente de lo que pretenda hacer el programa? Como la teoría popular egoísta ...

    • andar_b dice:

      Algo así como usar hazañas para obtener puntajes ridículamente altos en un juego, sin lograr los objetivos del juego.

    • freak dice:

      Bueno, necesitarías una función de fitness para las funciones de fitness...

      • greg dice:

        La función de aptitud es el propósito general de lo que debe hacer el programa. Aunque no soy programador. Todo lo que sé es que los algoritmos genéticos ya han sido creados y funcionan bien por desarrolladores reales. A mi entender, sería generalizado algún meta-principio de funcionamiento contenido en el problema a abordar por el programa generado. Corrígeme si esto está mal.

  • Sam dice:

    mirar el incentivo para la supervivencia evolutiva real agregando amenazas que el programa debe evitar para sobrevivir forzaría un aumento en la inteligencia. ejecutar varios al mismo tiempo ya que cualquier comunicación podría conducir a comportamientos grupales. No sé cómo se implementaría el pensamiento programático.

    • Erich dice:

      ¿Guerra de corazones?

  • alto dice:

    Esto se llama Programación Genética, y es un campo de CS bien establecido.

    Hay muchos sistemas disponibles, se han escrito cientos de artículos científicos y hay una conferencia dedicada que se lleva a cabo todos los años durante 18 años.

    Es increíble que alguien pueda dedicar tanto tiempo al tema sin Observe que tantas personas han estado allí antes.

    • xorpunk dice:

      Si le señalas esas cosas a las personas que no se familiarizaron con las computadoras y las matemáticas hasta que fue genial, se te considera un troll...

      Esto se remonta a antes de CS y transistores y profundiza en la cibernética. También es un tema CS de casi tres décadas y se usa en muchos juegos y compiladores. También es uno de los conceptos más simples en algoritmos...

    • Ryan dice:

      ¿Y de dónde sacas el "sin darte cuenta de que ha pasado tanta gente antes"?

      • alto dice:

        1) No se hace referencia a ningún trabajo anterior.
        2) Todo el enfoque es tan ingenuo que está claro que su autor no tenía antecedentes en el campo.
        3) Estos resultados serían interesantes si nadie lo hubiera hecho antes. La programación genética no dio resultados mucho más impresionantes, pero sí mucho más impresionantes que eso.
        4) La conclusión es bastante explícita:
        "Este experimento fue una demostración del concepto de que un programa de IA podría desarrollar sus propios programas de computadora que realizan una tarea específica".

        • alto dice:

          Quise decir "La programación genérica no ha dado resultados muy impresionantes, pero sigue siendo mucho más impresionante que eso". Lo siento.

        • Lista de jeremy dice:

          Casi nada de la literatura implica tratar de desarrollar algo que pueda generar una cadena en lugar de un solo número, esta publicación de blog en realidad podría ser la referencia más antigua en Internet para cualquiera que lo haga.

  • la5322 dice:

    ¿Puedes hacer que esto funcione en un sistema Unix? Actualmente estoy tratando de experimentar con esto, pero tengo problemas para ejecutarlo con dinero.

  • Marcar como inapropiado dice:

    Creo que el paquete Spiral FFT tiene un enfoque similar para crear código FFT.

  • Anónimo dice:

    Tal vez un programa posterior pueda hacer otras mejoras también. En este momento, el programa contiene cosas que no tienen sentido, como rizos vacíos, corchete derecho justo después del corchete izquierdo o corchetes que no coinciden. Seguir un signo más con un signo menos o viceversa tampoco es muy prudente.

Gloria Vega
Gloria Vega

Deja una respuesta

Tu dirección de correo electrónico no será publicada.