Acepté escribir software para el padre de un amigo cuando era un estudiante universitario de primer año. Fue para programar recursos. No me di cuenta en ese momento, pero resultó ser un problema completo de NP.
Afortunadamente, encontrar una solución era aceptable, no era necesario encontrar la solución óptima. Fue divertido escribir heurísticas, en realidad, una serie de ellas, que podrían cambiarse mientras el programa se estaba ejecutando e intentando resolver el problema.
Tuve una solución en verano, pero luego trabajé en nuevas versiones cada año sucesivo. Mis grandes planes para venderlo fracasaron. Fui un desarrollador mejor que un vendedor.
Fue muy divertido y me enseñó mucho sobre el mundo real del desarrollo (usuarios finales, recopilación de requisitos, pruebas, etc.) muchas de las cosas que NO se obtienen en la licenciatura CS)
Para responder a su pregunta, era para un maestro que tenía que programar a los alumnos para recibir instrucción especial. Era terapeuta del habla y audiólogo, pero podría aplicarse a cualquier campo similar. Tenía actividades existentes de docentes, aulas y estudiantes para trabajar y tenía que cumplir un número específico de veces por semana con los estudiantes. Es el problema de la mochila o cualquier cantidad de otros problemas de programación similares/equivalentes.
De nuevo, resultó que solo obtener una solución estaba bien, no teníamos que maximizar o minimizar nada, simplemente teníamos que dar cabida a todos los estudiantes.
Solo recuerdo que no pude resolver los casos de prueba que solía ejecutar en los escenarios, todos los problemas que proporcionó a lo largo de los años lo resolvimos.
Nunca pude comercializarlo, sobre todo porque no tenía idea de lo que estaba haciendo y no estaba seguro de cómo llegar a mi mercado/compradores.
+1 por "no muy bien" definido "- en el mundo real, este parece ser un problema mucho más común. –