Cómo desarrollar software que se afinará

Interesante pregunta. Como mínimo, se necesitan dos componentes de software:

Primero, querrá una forma de medir la parte de la actividad del programa que desea ajustar (reconocer errores internos o externos, mejorar la velocidad de ejecución o el uso de la memoria, minimizar las predicciones erróneas mediante una función de aprendizaje, etc.). Esto también puede tomar la forma de retroalimentación positiva / negativa binaria del usuario (en el rol de maestro).

En segundo lugar, querrá un método de optimización que pueda cambiar el programa de manera que probablemente mejore la métrica de actividad # 1.

Idealmente, el método de optimización también ‘revisará sus hipótesis’: mantenga un registro de las optimizaciones que se han probado antes y qué tan bien cada ‘puntaje’, para que pueda mejorar sus propias hipótesis y aprender otras nuevas.

Por ejemplo, si su aplicación tiene una interfaz de usuario que está tratando de anticipar las elecciones y prioridades de los usuarios, y genera adaptativamente un conjunto de opciones que son más probables, podría volver a clasificar esas opciones según las que se seleccionaron o rechazaron. O podría solicitar opciones al usuario cuando no se eligió ninguna de las opciones ofrecidas.

O la aplicación puede administrar el correo electrónico no deseado al permitir que el usuario marque los correos electrónicos como malos / buenos, y revise los viejos criterios aprendidos cuando los nuevos correos electrónicos buenos / malos parecen contradecir lo aprendido anteriormente.

O la aplicación puede rastrear eventos adversos en la ejecución del programa o fuentes de datos externas (datos incorrectos, recursos no disponibles / inestables, respuestas demoradas de componentes externos, ejecución lenta, operaciones redundantes / desperdiciadas, etc.) y luego reaccionar de una manera que minimice esa ineficiencia o notifica a un monitor externo del problema.