Sí.
Esto es parte de lo que se trata el campo de la “síntesis del programa”. He trabajado en sistemas que utilizan solucionadores de las Teorías del módulo de satisfacción (SMT) y algunos algoritmos de aprendizaje automático muy básicos como la cadena de Markov Monte Carlo (MCMC) que pueden generar código para alguna especificación (que podría ser un algoritmo más lento que hace lo mismo, algunos formales lógica o incluso solo un conjunto de pares de entrada / salida).
Estos sistemas en realidad pueden generar nuevos algoritmos para realizar ciertas tareas. Por ejemplo, eche un vistazo a este documento [1], donde desarrollan un sistema que a veces puede generar ensamblaje escrito a mano por expertos que superan el código al encontrar un nuevo algoritmo para el mismo problema.
- Cómo calcular el tamaño del vocabulario de uno por sus mensajes de chat
- ¿Cuáles son las 3 mejores mejoras tangibles logradas con IA o aprendizaje profundo que han ayudado más a la medicina clínica?
- ¿Cuáles son las mejores universidades para estudiar informática de alto rendimiento?
- ¿Cómo funcionaba la computadora de guía Apollo con tan poco poder de procesamiento?
- ¿Cuáles son todos los juegos que puedo jugar con Intel HD 5500, 8 GB de RAM y un procesador Intel i5?
[1]: http://cs.stanford.edu/people/es…
Las técnicas relacionadas ahora incluso están presentes en software muy común como Microsoft Excel: Flash Fill (función Excel en Office 2013) utiliza la síntesis del programa para generar código de manipulación de cadenas a partir de demostraciones dadas por el usuario final.
Desafortunadamente, estos sistemas tienen un problema importante: el escalado. Básicamente estamos buscando en el espacio de posibles programas, y ese espacio es increíblemente enorme. Las buenas técnicas de uso general pueden, si se les da un grupo grande y horas o días, generar programas eficientes de quizás 50 instrucciones. ¡Ni siquiera hablemos de cómo funcionan las cosas en las que trabajé!
Hay varias formas de mitigar esto. El relleno flash limita el espacio de búsqueda al limitarse a un lenguaje específico de dominio muy limitado para la manipulación de cadenas. Esto hace que el número de programas posibles sea mucho más pequeño, pero también limita el llenado de flash a un nicho muy específico.
Otro enfoque (esto es favorecido en gran medida por el profesor con el que trabajo) es el boceto. La idea básica es que el programador completa las partes del programa que son “obvias”: cosas como la estructura general de bucle, entrada y salida, diseño de memoria, etc., y el sintetizador completa los bits críticos de rendimiento que faltan.
Entonces, en resumen: sí , las computadoras pueden generar nuevos algoritmos, pero en este momento es bastante difícil crear programas largos.