Если такого нету, а мне такое хочется попробовать накарябать чисто с точки зрения программирования (т.е. написать какую-то реализацию такого планировщика), но что-то не понятно, как.
Вообще не понятно как можно расставлять задачи на бесконечной прямой времени, как их при этом хранить и как при этом отличать занятое время от незанятого. Пока только родилась идея планирования на n дней вперед (тем более что больше смысла не имеет), путем записи отсортированного по времени начала ассоциативного массива с элементами типа "диапазон времени", с циклической проверкой всего массива на пересечения при попытки вставить новое событие (вот не медленно ли это, хз). При этом стоит заметить что повторений и цикличности в полной мере в этом случае никогда не будет, ибо каждый день, неделя и т.д. в реальности всегда уникален и наполнен своими событиями.
Итак, пока мысль такая: создаются объекты типа Task, засунутые в контейнер. Задачи хранят время, выделенное на задачу, некоторые атрибуты типа "обязательная" и "имеет жесткое расписание" или "должна выполняться перед ..." или "после ...". Мы проходим по всем задачам в контейнере и добавляем в план задачи с расписанием в первую очередь. Затем мы повторяем это с задачами, у которых есть зависимости от задач с расписаниями, и снова их добавляем. На этом, вроде-бы со всеми жестко привязанными вариантами мы должны были разобраться (а если не получилось сделать это так чтобы ничего не пересеклось, сделаем себе хедшот в виде эксепшена). Далее начинается самое сложное и интересное, ибо тут мы будем как раз пытаться сделать работу за человека :).
Есть пара вариантов, как можно работать с множеством задач без расписания, у которых есть разные приоритеты.
1. Это просто сортировать задачи по приоритетам и забивать ими все свободное время. Но это скучно и неинтересно для моего мозга, поэтому я бы такое расписание даже не стал юзать.
2. Сделать нечто похожее на работу планировщика задач CPU. Разбить задачи на кванты определенной длины (т.е., скажем, по 30 минут), а затем, как и OS, закидывать их с учетом приоритета на все свободные промежутки времени. Реализацию этого точно можно где-то подсмотреть. :)
Вот собственно и вся идея решения такой проблемы, но до конкретной реализации пока не додумал.
Идея не нова,
ОтветитьУдалитьно реализация её должна быть не линейной, а дифференцированной, imho.
Пример: известно, что человек работает с ПН по ПТ, значит приоритет у задачи "вечеринка/пьянка" выше в ПТ и СБ.
где-то такую подобную задачу я встречал на олимпиаде