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.
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
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