Я согласился написать программное обеспечение для отца друга, когда я был студентом первого курса. Это было для планирования ресурсов. Я не осознавал этого в то время, но это оказалось полной проблемой NP.
К счастью, просто найти решение было приемлемо - не нужно было искать оптимальное решение. Было забавно писать эвристики - на самом деле их набор - которые можно было изменить, когда программа работала и пыталась решить проблему.
Я выполнил решение летом, но потом работал над новыми версиями каждый год. Мои большие планы продать это провалились. Я был лучшим разработчиком, чем маркетолог.
Это было очень весело и рано научило меня многому о реальном мире разработки - (конечные пользователи, сбор требований, тестирование и т. Д. - многое из того, что вы НЕ получаете в старших классах CS)
Чтобы ответить на ваш вопрос - это было для учителя, который должен был запланировать учеников для специального обучения. Он был логопедом и аудиологом - но это могло быть применено к любой подобной области. У него были учителя, классные и студенческие занятия, и ему приходилось встречаться со студентами определенное количество раз в неделю. Это проблема рюкзака или любое количество других подобных / эквивалентных проблем планирования.
Опять же, оказалось, что просто получить решение было хорошо - нам не нужно было максимизировать или минимизировать что-либо - мы просто должны были разместить всех студентов.
Я могу только вспомнить, что не смог решить тестовые случаи, которые я использовал для запуска сценариев - все проблемы, которые он создавал в течение многих лет, которые мы решали.
Мне так и не удалось продать его - в основном потому, что я понятия не имел, что я делаю, и я не был уверен, как добраться до моего рынка / покупателей.