¿Pueden las computadoras escribir sus propios algoritmos?

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.

[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: , las computadoras pueden generar nuevos algoritmos, pero en este momento es bastante difícil crear programas largos.

Depende de lo que quieras decir con “algoritmo”. Si lo quiere decir como “un conjunto de instrucciones para resolver un problema”, los generadores de árboles de decisión son técnicamente algoritmos para generar algoritmos.

Las técnicas de aprendizaje del árbol de decisión se pueden utilizar para crear un conjunto de instrucciones para clasificar o realizar una regresión en un conjunto de datos, dado un conjunto inicial de datos para generar el árbol.

Por ejemplo, podemos entrenar un árbol de decisión para identificar si una persona en el Titanic sobrevivió o no, dada cierta información sobre sus características. Nuestro algoritmo de aprendizaje del árbol de decisión analiza nuestros datos de entrenamiento y elige la mejor variable en los datos para dividir el conjunto de datos. Esto continúa de manera recursiva hasta que todos los datos se dividan en algún punto arbitrario.

Por ejemplo, el árbol para clasificar a los pasajeros en el Titanic podría ser como el siguiente:
Ahora tiene un algoritmo para realizar una tarea de clasificación, sin orientación humana directa sobre el problema específico.

¿Por qué los humanos escriben código?

  • Para lograr algún objetivo. O para hacer algo.

Cuando las computadoras estaban en su infancia, existían lenguajes de programación de bajo nivel, como los ensamblajes que se usaban para programarlas.

Más tarde se desarrollaron lenguajes más legibles para humanos. Los compiladores toman esas instrucciones escritas en lenguajes legibles para humanos y las convierten en instrucciones de nivel binario. En muchos casos, optimiza el código para que funcione mejor. Entonces, en cierto modo, escribe su propio código.

Yo uso el servidor SQL. Cuando escribimos la consulta, podemos ver el plan de ejecución generado por el servidor. El mismo SQL puede tener diferentes planes de ejecución. Entonces, el servidor está tomando mis instrucciones y, en base a las instrucciones y datos disponibles, índices, etc., genera su propio código.

Entonces, la verdadera pregunta es, ¿podemos llevar los lenguajes de programación al siguiente nivel y hacerlo más parecido al lenguaje humano?

Ejemplo,

Comando: “Computadora, escribe un sitio de blog para mí …”.

Teóricamente, Siri puede abrir una cuenta en la nube usando su tarjeta de crédito en la nube. Con Docker, busque e implemente código de WordPress. Compra el nombre de dominio y dale el enlace. (Puede no estar en el orden exacto). Además, en función de su historial de búsqueda en Google, puede encontrar su color favorito, tema, etc. y personalizar su wordpress en consecuencia. Guay…. y miedo … Espero que entiendas el punto.

Entonces, sí … es posible que la computadora escriba un algoritmo.

Pueden y hacen. Pueden modificar subrutinas dentro de su código base. En teoría, el código principal también se puede modificar modificando el código fuente, volviendo a compilarlo y luego programando un ciclo de reinicio en sí mismo, invocando el nuevo tiempo de ejecución.

La pregunta es si existe un meta-algoritmo práctico, uno mediante el cual una computadora puede escribir un algoritmo dado un problema.

Permítanme hacer la siguiente pregunta retórica: supongamos que existe ese meta-algoritmo. Digamos que alimentamos el problema mencionado anteriormente, de diseñar un meta-algoritmo. ¿Será ese meta-algoritmo que diseñó más eficiente que él mismo?

Esa es exactamente la pregunta detrás del concepto de singularidad tecnológica. Como puede ver, sigue siendo controvertido.

Esto depende mucho de “completamente nuevo”. Tomado libremente, Jacque Swartz tiene toda la razón. Tomados estrictamente muchos / la mayoría de los humanos no pueden crear un algoritmo genuinamente original.

Sí, definitivamente es posible a través de la metaprogramación

También es posible que desee analizar algoritmos genéticos y programación evolutiva. Estos no solo escriben sus propias rutinas nuevas, sino que incluso las diseñan para ajustarse a un objetivo. La técnica es simple de entender y, aunque difícil de entender (atrapar los mínimos locales a menudo es un problema) no es muy difícil de codificar.

More Interesting

¿Podemos fusionar tanto la realización de cortometrajes como la realidad virtual? ¿Cómo crees que podemos hacer eso?

¿Es seguro suponer que una computadora comprada ahora (julio de 2015) no tendrá un rendimiento desactualizado durante 3 años, dado que no habría un avance en la investigación fundamental (como un chip no basado en silicio)?

En la era de Global Grid Computing, ¿cómo siguen siendo relevantes las supercomputadoras?

¿Cómo realiza una unidad lógica aritmética (ALU) la multiplicación, suma y comparación en enteros sin signo muy grandes (8,000,000 bits o más)?

¿Cuáles son los principales aspectos del aprendizaje automático que utiliza Microsoft y cómo se aplican realmente?

¿Qué tipo de inteligencia artificial te dejará sin trabajo?

¿Por qué Amazon y Facebook se agrupan comúnmente con empresas como Google, Apple y Microsoft cuando se considera un trabajo emocionante para los informáticos?

¿Cuál es el mejor enfoque para dominar los algoritmos de aprendizaje automático?

¿Qué debe hacer un investigador si su investigación falla?

En Xcode, ¿por qué no puedes construir y ejecutar un archivo C ++? Por ejemplo, ¿por qué tiene que crear un proyecto completo si lo único que desea ejecutar es un archivo C ++ para programar concursos, etc.?

Si por computación analógica se resolviera en tiempo polinómico un problema de NP, ¿debería considerarse como solución de P vs NP?

Informática en la Open University: ¿alguna experiencia de primera mano?

¿Se está haciendo algún trabajo práctico sobre la integración del conocimiento potencial en grandes cantidades de datos (a través de algoritmos de aprendizaje automático, por ejemplo), diseño UX / UI y cómo el cerebro humano aprende para maximizar la eficiencia de la creación de conocimiento?

¿Cuál es la diferencia entre base de datos paralela y mapreduce?

¿Qué temas de estadística y probabilidad se deben conocer antes de comenzar el aprendizaje automático?