6

Estoy haciendo esta pregunta porque sé que hay muchos tipos de CS bien leídos aquí que pueden dar una respuesta clara.¿Completar código inteligente? ¿Hay AI para escribir código aprendiendo?

Me pregunto si existe una IA (o está siendo investigada/desarrollada) que escribe programas generando y compilando código por sí solo y luego progresa aprendiendo de iteraciones anteriores. Estoy hablando de trabajar para hacernos a nosotros, los programadores, obsoletos. Me estoy imaginando algo que aprende lo que funciona y lo que no funciona en un lenguaje de programación por prueba y error.

Sé que esto suena castillos en el cielo, así que estoy pidiendo para averiguar lo que se ha hecho, en todo caso.

Por supuesto incluso un programador humano necesita entradas y especificaciones, por lo que un experimento de este tipo tiene que tener cuidado parámetros definidos. Al igual que si la IA fuera a explorar diferentes funciones de temporización, ese aspecto tiene que estar claramente definido.

Pero con un aprendizaje sofisticada IA ​​tengo curiosidad para ver lo que podría generar.

Sé que hay una gran cantidad de cualidades humanas ordenadores no pueden replicarse como nuestro juicio, los gustos y prejuicios. Pero a mi imaginación le gusta la idea de un programa que escupe un sitio web después de un día de reflexión y me permite ver qué ocurrió, y aún así a menudo esperaba que fuera basura; pero tal vez una vez al día quizás le dé retroalimentación y lo ayude a aprender.

Otra avenida de este pensamiento es que sería bueno dar una descripción de alto nivel como "sitio web menued" o "herramientas de imagen" y genera código con suficiente profundidad que sería útil como módulo de finalización de código para mí luego codifica en los detalles. Pero supongo que podría ser previsto como un esquema de terminación de código jerárquico estático no inteligente.

¿Qué tal?

+0

A menudo me he preguntado sobre esto. Al parecer, esto se ha intentado durante décadas con resultados mediocres, según AI: A Modern Approach. – AaronLS

+0

Tengo ese libro, no lo leí. Escuché que es el estándar. Nunca llevé a AI a la universidad y siempre quise leer sobre la teoría, principalmente para poder escribir mejores juegos. – tkotitan

Respuesta

12

Tales herramientas existen. Son el tema de una disciplina llamada Genetic Programming. La forma de evaluar su éxito depende del alcance de su aplicación.

Ellos han tenido un gran éxito (órdenes de magnitud más eficientes que los seres humanos) para diseñar programas óptimos para la gestión de los procesos industriales, el diagnóstico médico automatizado, o el diseño de circuitos integrados. Esos procesos están bien limitados, con una medida de éxito explícita e inmutable, y una gran cantidad de "conocimiento del universo", que es un gran conjunto de reglas sobre qué es un programa válido, que funciona y qué no.

Han sido totalmente inútil en el intento de construir programas generales, que requieren la interacción del usuario, ya que el elemento principal de un sistema que aprende necesidades es un explícito "fitness function", o la evaluación de la calidad de la solución actual que ha llegado con.

Otro dominio que se puede ver al tratar con el "aprendizaje de programa" es Inductive Logic Programming, aunque se usa más para proporcionar demostración automática o aprendizaje de idioma/taxonomía.

7

responsabilidad: No soy un hablante nativo de Inglés, ni un experto en el campo, soy un amateur - esperan imprecisiones y/o errores en lo que sigue. Por lo tanto, en el espíritu de stackoverflow, no tenga miedo de corregir y mejorar mi prosa y/o mi contenido. Tenga en cuenta también que este es no un examen completo de las técnicas automatic programming (code generation (CG) de Model-Driven Architectures (méritos MDAs) al menos una mención de pasada).

Quiero agregar más a lo que respondió Varkhan (que es esencialmente correcto).

El (GP) enfoque Genetic Programming a Automatic Programming fusiona, con sus fitness functions, dos problemas diferentes ("auto-compilación" es conceptualmente una obviedad):

  • auto-mejora/adaptación - del sintetizado programa y, si así lo desea, del propio sintetizador; y
  • program synthesis.

w.r.t. auto-mejora/adaptación se refiere a Jürgen Schmidhuber de Goedel machines: solucionadores de problemas universales autorreferenciales haciendo provably óptimas auto-mejoras. (Como nota al margen: interesante es su trabajo en artificial curiosity.) También relevantes para esta discusión son Autonomic Systems.

w.r.t. program synthesis, creo que es posible clasificar las 3 ramas principales: stochastic (probabilísticos - como se ha mencionado anteriormente GP), inductivos y deductivos .

GP es esencialmente stochastic, ya que produce el espacio de programas que probablemente con la heurística como cruce, mutación al azar, la duplicación de genes, la supresión de genes, etc ... (de lo que pone a prueba programas con la fitness function y dejar que el los más aptos sobreviven y se reproducen).

síntesis programa inductivo se conoce generalmente como Inductive Programming (IP), de los cuales Inductive Logic Programming (ILP) es un sub-campo. Es decir, en general, la técnica no se limita a la síntesis logic program ni a los sintetizadores escritos en un lenguaje de programación lógica (ni ambos están limitados a ".. demostración automática o aprendizaje de lenguaje/taxonomía").

IP es a menudo determinista (pero hay excepciones): comienza a partir de una especificación incompleta(tales como pares de ejemplo de entrada/salida) y el uso que a la restricción del espacio de búsqueda de programas que puedan satisfacer dicha especificación y luego a probarlo (generan-y-test enfoque) o para sintetizar directamente un programa de detección de recidivas en los ejemplos dados, que son generalizables a continuación (impulsado por los datos o enfoque analítico). El proceso en su conjunto es esencialmente statistical induction/inference, es decir, considerar qué incluir en la especificación incompleta es similar al muestreo aleatorio.

Generate-and-test and data-driven/analytical enfoques § pueden ser bastante rápido, por lo tanto son prometedores (incluso si sólo programas poco sintetizados se manifestaron en público hasta ahora), pero generan y test (como GP) es embarrassingly parallel y luego mejoras notables (escalar a tamaños de programa realistas) se puede esperar.Pero tenga en cuenta que Incremental Inductive Programming (IIP) §, que es intrínsecamente secuencial, ha demostrado ser órdenes de magnitud más eficaces que los enfoques no incrementales.

§ Estos enlaces están directamente en archivos PDF: lo siento, no puedo encontrar un resumen.

Programming by Demonstration (PdD) y Programming by Example (PBE) son end-user development técnicas conocidas para aprovechar síntesis programa inductivo prácticamente.

Deductive program synthesis comienzo con un especificación (formal) (condiciones lógicas) completos (presuntos) en su lugar. Una de las técnicas es aprovechar automated theorem provers: para sintetizar un programa, construye una prueba de la existencia de un objeto que cumple con la especificación; por lo tanto, a través de Curry-Howard-de Bruijn isomorphism (correspondencia de pruebas como programas y correspondencia de fórmulas como tipos), extrae un programa de la prueba. Otras variantes incluyen el uso de constraint solving y deductive composition of subroutine libraries.

En mi opinión inductiva y deductiva síntesis en la práctica están atacando el mismo problema por dos ángulos ligeramente diferentes, ya que lo que constituye una completa especificación es discutible (además, una completa especificación de hoy puede llegar a ser incompleta mañana - el mundo no es estático).

Cuando (si) estas técnicas (auto-mejora/adaptación y síntesis de programas) madurará, que prometen a aumentar la cantidad de la automatización proporcionada por declarative programming (que tal ajuste se ha de considerar "programación" es sometimes debated) : nos concentraremos más en Domain Engineering y Requirements Analysis and Engineering que en el diseño y desarrollo manual del software, depuración manual, ajuste del rendimiento del sistema manual, etc. (posiblemente con menos accidental complexity en comparación con las técnicas actuales manuales, que no mejoran por sí solas/adaptación). Esto también promoverá un nivel de agility aún no demostrado por las técnicas actuales.

Cuestiones relacionadas