Pregunta

Estoy haciendo esta pregunta porque sé que hay un montón de leer bien la CS tipos de aquí que pueda dar una respuesta clara.

Me pregunto si AI existe (o está siendo investigado/desarrollado) que escribe programas, mediante la generación y compilación de código a todos por sus propios y, a continuación, avanza en el aprendizaje del ex iteraciones.Estoy hablando de trabajar para hacer de nosotros, los programadores, obsoleto.Me estoy imaginando algo que se aprende lo que funciona y qué no en una lenguajes de programación por ensayo y error.

Sé que esto suena pastel en el cielo, así que estoy pidiendo para averiguar lo que se ha hecho, si cualquier cosa.

Por supuesto, incluso un humano programador necesidades de insumos y especificaciones, así como un experimento tiene que tener cuidadosamente los parámetros definidos.Como si la IA se va a explorar las diferentes funciones de temporización, que aspecto tiene que estar claramente definido.

Pero con un sofisticado de aprendizaje AI tengo curiosidad de ver lo que podría generar.

Sé que hay un montón de cualidades humanas, las computadoras no pueden replicarse como nuestra opinión, gustos y prejuicios.Pero mi imaginación le gusta la idea de un programa que escupe un sitio web después de un día de pensar y me permite ver lo que ocurrió, y aún así tendría que a menudo esperan a que la basura;pero tal vez un día me vez en la retroalimentación y la ayudan a aprender.

Otra vía de este pensamiento es que sería bueno para dar un alto nivel de descripción como "menued sitio web" o "herramientas de imagen" y genera el código con la suficiente profundidad que podría ser útil como un código de módulo de terminación para mí a continuación el código en los detalles.Pero supongo que podría ser concebido como un no-inteligente estática jerárquica de la finalización de código de esquema.

Qué?

¿Fue útil?

Solución

existen tales herramientas. Son objeto de una disciplina llamada Programación Genética . La forma de evaluar su éxito depende del alcance de su aplicación.

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 procedimientos son bien limitadas, con una medida de éxito explícita e inmutable, y una gran cantidad de "conocimiento universo", que es un gran conjunto de normas sobre lo que es una válida y activa, el programa y lo que 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 " función de aptitud ", o la evaluación de la calidad de la solución actual se ha llegado con.

Otro dominio que se puede ver en el trato con el "aprendizaje programa" es programación lógica inductiva , aunque es más usado para proporcionar la demostración automática o el aprendizaje de idiomas / taxonomía.

Otros consejos

Descargo de responsabilidad: Yo no soy un hablante nativo de inglés, ni un experto en el campo, soy un amateur - esperar inexactitudes y/o errores en lo que sigue.Así, en el espíritu de stackoverflow, no tenga miedo de corregir y mejorar mi prosa y/o el contenido de mi.Tenga en cuenta también que este es no un estudio completo de programación automática técnicas (la generación de código (CG) de Basado En Modelos De Arquitecturas De (MDAs) merece al menos una mención).

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

El Programación Genética (GP) enfoque Programación Automática combina, con su adecuación de las funciones de, dos problemas diferentes ("auto-compilación" es conceptualmente una obviedad):

  • la auto-mejora y adaptación de los sintetizado programa y, si lo desea, de la sintetizador de sí mismo;y
  • programa de síntesis.

w.r.t. la auto-mejora y adaptación consulte Jürgen Schmidhuber de la Goedel máquinas: auto-referencial universal solucionadores de problemas haciendo seguramente óptimo de auto-mejoras.(Como una nota al margen:interesante es su trabajo en artificial curiosidad.) También es relevante para esta discusión son Sistemas Autonómicos.

w.r.t. programa de síntesis, Creo que es posible clasificar a los 3 ramas principales: estocástico (probabilístico - como anteriormente se mencionó GP), inductivo y deductivo.

GP es esencialmente estocástico porque se produce el espacio de probabilidades de programas con heurísticas tales como las de cruce, mutación al azar, la duplicación de genes, la deleción del gen, etc...(de lo que las pruebas de los programas con el función de aptitud y dejar que los más aptos sobreviven y se reproducen).

Inductivo programa de síntesis es generalmente conocido como Inductivo De Programación (IP), de los cuales La Programación De La Lógica Inductiva (ILP) es un sub-campo.Que es, en general, la técnica no se limita a la lógica del programa síntesis o de sintetizadores escrito en un lenguaje de programación lógica (ni tanto están limitados a "..demostración automática o idioma/taxonomía de aprendizaje").

IP es a menudo determinista (pero hay excepciones):comienza a partir de una incompleta especificación (como ejemplo de entrada/salida de los pares) y el uso que para restringir el espacio de búsqueda de la probabilidad de los programas de la satisfacción de dicha especificación y, a continuación, para probar (generar-y-prueba de enfoque) o directamente sintetizar un programa de detección de recurrencias en los ejemplos, que son generalizado (basado en datos o analítica enfoque).El proceso como un todo, es esencialmente estadística inducción/inferencia - es decir,teniendo en cuenta lo que se debe incluir en la especificación incompleta es similar a la de muestreo aleatorio.

Generar y probar y data-driven/analítica§ enfoques pueden ser bastante rápido, por lo tanto son prometedores (incluso si sólo poco sintetiza los programas se muestran en público hasta ahora), pero generar y probar (como GP) es paralela y, a continuación, notables mejoras (escala realistas programa de tamaños) se puede esperar.Pero tenga en cuenta que Incremental Inductivo De Programación (IIP)§, que es inherentemente secuenciales, ha demostrado ser órdenes de magnitud más eficaz de no incremental enfoques.

§ Estos enlaces son directamente de los archivos PDF:lo siento, soy incapaz de encontrar un resumen.

La programación por Demostración (PbD) y Programación por Ejemplo (PbE) se el usuario final de desarrollo las técnicas conocidas para aprovechar inductivo programa de síntesis prácticamente.

Deductivo programa de síntesis empezar con un (presunto) completa (formal) (especificación de la lógica de condiciones) en su lugar.Una de las técnicas de apalancamiento automatizado teorema de provers:para sintetizar un programa, se construye una prueba de la existencia de un objeto de la reunión de la especificación;por lo tanto, a través de Curry-Howard-de Bruijn isomorfismo (pruebas-como-los programas de la correspondencia y las fórmulas-como-tipos de correspondencia), se extrae un programa de la prueba.Otras variantes incluyen el uso de la resolución de restricciones y deductivo composición de la subrutina de bibliotecas.

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

Cuando (si) estas técnicas de auto-mejora y adaptación y síntesis de programas) se madura, prometen aumento de la cantidad de automatización proporcionada por la programación declarativa (que tal ajuste se considera "programación"es a veces controvertida):nos concentraremos más en Dominio De La Ingeniería y Requisitos Análisis e Ingeniería de que en el manual del software de diseño y desarrollo, manual de depuración, manual del sistema de optimización de rendimiento y así sucesivamente (posiblemente con menos accidental de la complejidad en comparación con la que introdujo con manual actual, no de la auto-mejora/adaptar las técnicas).Esto también promover un nivel de agilidad todavía no se ha demostrado por las técnicas actuales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top