¿Es posible enseñar a una máquina cómo programarse a sí mismo para una especificación definida? [cerrado]

12

Un amigo mío sin conocimientos de programación me hizo esta pregunta y me pareció interesante.

Creo que no es posible porque requeriría una inteligencia artificial realmente avanzada capaz de analizar el texto de un problema, pensar en una solución y programarla. Pensar que una máquina es capaz de programar una calculadora simple me parece bastante avanzado.

Pero tal vez me equivoque y me gustaría saber qué piensa al respecto y si tiene conocimiento de algún artículo / investigación sobre el tema, o si ya existe o si existe la posibilidad de seleccionar una especificación, y hacer que la máquina se autoprograme para esta "especificación"

    
pregunta florian 10.11.2014 - 00:01

5 respuestas

15

Joel en realidad contestó este hace algunos años atrás . El significado real de "enseñar a una máquina cómo programar por sí mismo" es "enseñar a una máquina cómo tomar una especificación y crear un programa que corresponda a esa especificación". Y con eso en mente:

  

El problema, aquí, es muy fundamental. Para probar mecánicamente   que un programa corresponde a alguna especificación, la especificación en sí necesita ser   extremadamente detallado De hecho la especificación tiene que definir todo sobre   El programa, de lo contrario, nada puede ser probado automáticamente y   mecánicamente. Ahora, si la especificación define todo acerca de cómo   programa se va a comportar, entonces, he aquí que contiene todos los   Información necesaria para generar el programa! Y ahora ciertos geeks.   Se van a un lugar muy oscuro donde empiezan a pensar.   Compilación automática de especificaciones en programas, y comienzan a pensar.   que acaban de inventar una manera de programar computadoras sin   programación.

     

Ahora, este es el equivalente de ingeniería de software de un movimiento perpetuo   máquina. Es una de esas cosas que los crackpots siguen intentando hacer, no   No importa cuánto les digas que nunca podría funcionar. Si la especificación define   precisamente lo que hará un programa, con suficiente detalle como para poder   utilizado para generar el programa en sí, esto simplemente plantea la pregunta: cómo   ¿Escribes la especificación? Una especificación tan completa es tan difícil de escribir   como el programa informático subyacente, porque al igual que muchos detalles tienen   Para ser respondido por el escritor de especificaciones como el programador. Utilizar terminología   de la teoría de la información: la especificación necesita tantos bits de Shannon   La entropía como tendría el propio programa informático. Cada bit de entropía.   es una decisión tomada por el escritor o el programador.

     

Entonces, la conclusión es que si realmente existiera una forma mecánica de   probar cosas sobre la corrección de un programa, todo lo que podría   probar es si ese programa es idéntico a algún otro programa que   debe contener la misma cantidad de entropía que el primer programa,   De lo contrario, algunos de los comportamientos serán indefinidos, y por lo tanto   no probado Así que ahora la escritura de especificaciones es tan difícil como escribir un   programa, y todo lo que ha hecho es mover un problema de aquí a   allá, y no logró nada en absoluto.

La única forma de evitar esto sería producir una computadora real con la intuición suficiente para completar todos los espacios en blanco que usted y yo hacemos automáticamente, todo el tiempo, al producir software ... en en cuyo caso terminaría con una computadora que se programe a sí misma, así como un desarrollador humano. ;)

    
respondido por el Mason Wheeler 10.11.2014 - 00:33
4

Claro, do this all the time (para subconjuntos de problemas extremadamente limitados). Es bastante trivial imaginar dar otro paso o dos y vincular algo como Siri en la entrada de estos generadores de código (o algo así como Wolfram Alpha) que a su vez escribe código y resuelve tu problema. Espero que ya exista algo en algún lugar para hacer las cosas más básicas.

El problema con la escritura de software complejo para empresas no es hacer que un programa escriba el código, es escribir un programa para obtener los requisitos.

    
respondido por el Telastyn 10.11.2014 - 00:26
2

Creo que la respuesta de @Mason Wheeler tiene la idea clave. Funciona así:

La entropía de Shannon de Tic-tac-toe es realmente pequeña. Así que llamamos a tic-tac-toe un juego "resuelto" o "determinista". No es realmente interesante una vez que pasas la escuela primaria. Las damas tienen una entropía más alta, si consideras la entropía de todos los juegos posibles que puedes jugar. Pero las damas también son un juego "resuelto" o "determinista". Si te mueves primero, solo debes ganar o empatar. El ajedrez tiene una entropía mucho, mucho mayor, pero ningún humano ha vencido a los mejores jugadores de computadoras desde 2006. Entonces, en cierto modo, las computadoras han dominado el ajedrez de una manera que los humanos no pueden. Big Blue analizó la wikipedia y luego jugó a Jeopardy contra jugadores humanos y los venció profundamente.

¿Qué sigue? ¿Qué es la entropía de una novela, o los sonetos de Shakepeare?

De manera similar, en el espacio de programación, lo que probablemente surgirá es un conjunto creciente de competencias. Prolog abordó un conjunto de problemas informáticos en los que configuró el problema y la computadora resolvió la respuesta. Alguien probablemente encontrará clases de problemas de programación simples que una computadora podrá satisfacer, etc. Luego, alguien se basará en eso para producir "personalización a pedido" dentro de algún espacio problemático. Y así va.

Creo que la pregunta se convierte en, cuánto tiempo le lleva a una IA dominar una determinada cantidad de entropía ... y ¿cuántos recursos de computación se requieren? Creo que es inimaginable que una computadora no pueda dominar la entropía dominada por el mejor cerebro humano; no hay nada mágico en los cerebros, pero la pregunta es, cuántos núcleos necesitas y cuántos siglos. ¿tardará en llegar?

Pero ... ¿alguna vez una computadora podrá hacer mi trabajo? ¡Inconcebible!

    
respondido por el Rob 10.11.2014 - 01:54
1

Esto es difícil de responder porque, al igual que con la inteligencia artificial, una vez que lo hayamos logrado, habremos escrito un programa que lo haga. Y los críticos dirán: "bueno, ¡esta máquina no se está programando realmente en sí misma! ¡Simplemente sigue exactamente el programa que le diste!"

Bueno, sí. Lo que sea que logremos con las computadoras, lo haremos dándole un programa y lo ejecutará. Si eso es un argumento en contra, entonces no podemos lograr nada. Y sin embargo, en algún momento, la gente pensó que una computadora de ajedrez sería obviamente inteligente. Ahora pueden, y sabemos exactamente cómo, y no creemos que eso sea inteligente. Los submarinos todavía no pueden nadar.

Entonces, considera algunos ejemplos.

Desde hace décadas, hemos tenido generadores de analizadores . Les da una descripción de un idioma, se procesa y el resultado es un código para un analizador para ese idioma. Sabemos exactamente cómo se hace, pero ¿no es eso una programación de computadora en sí misma?

Segundo: editores que le informan que ha cometido un error (error de sintaxis, variable no existente, etc.). No programa nada en sí mismo, pero puede decirte que hiciste algo mal. Está muy solo en la superficie.

Idiomas en los que puedes hacer clic y arrastrar los controles de la IU, y el código que realmente los hará funcionar se genera automáticamente.

compiladores JIT. El software que puede reconocer los hotspots en el software actualmente en ejecución y reemplazar algunos de ellos por un código compilado altamente optimizado, optimizándose efectivamente mientras se ejecuta. Creo que este es un ejemplo de lo que puede parecer una programación de máquina en sí misma, hasta que sepa exactamente cómo sucede, y luego resulta que simplemente está haciendo lo que el programador le dijo, como siempre.

Juego general de juego. Este es un campo de investigación interesante, en el que los investigadores escriben programas que pueden leer descripciones de las reglas de los juegos, que luego los programas juegan unos contra otros. Entonces, en lugar de un programa de tic-tac-toe o un programa de ajedrez, estos son programas que leen las reglas de tic-tac-toe o ajedrez o algún juego nuevo creado al momento, y luego pueden jugarlos. El programa no se está programando, pero sí juega al ajedrez sin que las reglas del ajedrez hayan sido codificadas. Hubo un momento en que esto se consideraría claramente como la computadora que se enseña a sí misma algo.

Hemos dado muchos pasos pequeños en la dirección general.

Pero no puedo pensar en ningún programa que se reescriba en función de los resultados de ejecuciones anteriores, o que pueda reconocer rutinas obsoletas o ineficientes en su propio código. Creo que un día lo tendremos y no lo consideraremos nada especial, ya que será solo una característica del último compilador ...

    
respondido por el RemcoGerlich 10.11.2014 - 11:06
0

No actualmente y no en un futuro previsible porque necesita toda la asombrosa complejidad del cerebro humano para crear un programa. E incluso entonces, esos cerebros deben estar altamente capacitados para hacerlo correctamente, e incluso entonces no todos son capaces de hacer la tarea, aunque se podría argumentar que con el tiempo suficiente se podría entrenar a cualquiera para programar.

Lo tomé de la forma en que expresaste tu pregunta de que no estás hablando de tareas simples emuladas.

Pediste artículos y este artículo de Science Blogs en Developing Intelligence responde esa pregunta de muchas maneras.

    
respondido por el Ian Macintosh 10.11.2014 - 12:32

Lea otras preguntas en las etiquetas