Таск-трекер пишете?
Наша задача - построить такое расписание, которое максимизирует количество выполненных дел.
Если надо максимизировать только
количество дел - тогда сортируете дела по количеству времени и вперед ставите самые короткие. Тогда, если лимит времени меньше, чем нужно на то, чтобы сделать все дела, сделаете за отведенное время максимум.
У каждого дела есть конечный и короткий набор характеристик (читай ограничений о1, o2, o3, о4)
Ограничения - это что? Ресурсы, которых на все дела не хватит? Задача о рюкзаке получается.
К несчастью, человек наш не идеален, и не всегда делает свои дела и для этого может быть множество причин (пространство, видимо, порядка N)
"Причины" - это отмазки что ли? Например, "забухал", "был не в настроении", "любимый котик заболел"?
Если задачу выполнить не удается, то причина, как правило, - это нехватка ресурсов или внезапно возникшая подзадача, которую надо добавить в план. Я бы думал в этом направлении.
После каждого отрезка времени T у нас есть возможность получить обратную связь от человека, как он оценивает расписание и мы знаем, какие задачи выполненные, а какие нет. Очевидно, что с первого раза у нас не выйдет предложить оптимальный алгоритм, поэтому мы должны сделать систему способной пользоваться обратной связью, чтобы улучшать наше расписание для следующего периода.
А ограничения ваши как именно ограничивают исполнителя?