Проблема (всем известная, но никем толком не решенная): автоматизация составления расписаний в уч. заведениях, в т.ч. высших. Это мой диплом, но я независимо от этого факта хочу осчастливить человечество.
Задача сводится к назначению одних объектов (ресурсов - времени, аудиторий) другим (событиям - занятиям, экзаменам) с учетом набора ограничений - жестких (обязательных) и мягких (необязательных, определяющих качество расписания).
Информационная структура может совершенно различаться у разных заведений, поэтому нужен абстрактный подход типа "ресурсы -> события", позволяющий пользователю задавать структуру самому в данных абстрактных терминах.
Наборы ограничений также могут быть совершенно разнообразны и непредсказуемы - как простые, типа нежелательности первых пар и суббот, так и довольно нетривиальные, типа окон, расстояний между аудиториями и равномерности нагрузок.
Я пришел к выводу, что для по-настоящему гибкого задания ограничений требуется: 1) полный по Тьюрингу язык, на котором пишутся функции - предикаты ограничений; 2) API, предоставляющее доступ из этих функций к объектам расписания.
В качестве такого языка мне импонирует Lua.
Система должна также уметь работать с неполными и некорректными (нарушающими жесткие ограничения) расписаниями и вносить в расписания динамические изменения в связи с изменением исх. данных и ограничений.
Есть наука теория удовлетворения ограничений, изучающая такие вот крайне общие комбинаторные задачи, без особой привязки к конкретным ограничениям. Ее аппарат, кажется, наиболее адекватен для алгоритмизации того, что мне нужно.
Какие у кого мысли насчет концепции системы? Сам думал-думал, много чего надумал, теперь вот решил поинтересоваться.