Алгоритм планирования для планирования жизни - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь написать некоторый код для планирования набора реальных задач, которые вводит пользователь.Эти задачи хранятся в базе данных sqlite.И на данный момент единственными параметрами, которые я принимаю во внимание, являются

The project to which a task belongs to --> p
The name of the task itself --> t
And the due date for this task --> d

project и due date параметры не являются обязательными.Но предполагая, что пользователь всегда будет вводить по крайней мере task name и due date для каждой задачи. Мне было интересно, можно ли запланировать набор задач, используя планировщик, такой как, например, Completely Fair Scheduler (CFS)!Я понимаю, что CFS был написан для планирования задач с гораздо более тонкой гранулярностью (наносекунды), чем набор задач, предлагаемых для этой цели ... Но я понял, что это может быть возможно и, возможно, более эффективно, если я смогу изменить его для работы сзадачи, которые находятся в том же масштабе времени, что и наше восприятие времени.

Типичная запись в базе данных будет в формате (p, t, d).«р» не является обязательным.Вот несколько примеров ..

(_, 'Call home', 29/2/2012)
(Work, 'Meet boss', 14/3/2012)
(Work, 'Ask for raise', 18/3/2012)
(_, 'Book tickets', 10/3/2012)
(Work, 'Quit', 14/4/2012)
(Personal, 'Get botox injections', 10/3/2012)
(Personal, 'Get breast implants', 10/10/2012)
(_, 'Dad bday', 7/10/2012)

Вот ситуация для рассмотрения.Я хотел бы проснуться утром.Запустите этот алгоритм «еще предстоит закодировать» для набора задач ... как те, что приведены выше ... и я хотел бы получить расписание на оставшуюся часть дня, которое максимизирует пропускную способность.На более позднем этапе я хотел бы передать аргументы этим алгоритмам, которые позволили бы мне управлять планировщиком, чтобы он возвращал набор задач в зависимости от моей текущей ситуации.Например, если я на работе, я хочу иметь возможность передавать аргументы алгоритму, просить его возвращать только те задачи, которые можно выполнить на работе.

Я надеюсь, что смогу передать сутьЭто.Я понимаю, что одного due date недостаточно для планирования задач с использованием, например, CFS ... но если есть другие параметры, которые я должен учитывать, пожалуйста, дайте мне знать.И любые предложения о том, какой алгоритм планирования использовать, будут полезны.

Спасибо.

1 Ответ

1 голос
/ 03 мая 2012

cfs предназначен для планирования секций задач на процессоре. Вы человек и не можете выполнять многозадачность, как процессор. Вы намного лучше справляетесь с одной задачей.

инструменты, обычно используемые для решения задач планирования для людей, связаны с программированием ограничений . они позволяют вам выполнять такие вещи, как оптимизация для определенных переменных (производительность, в вашем случае, которая, я думаю, связана с задачами, имеющими разные приоритеты) при различных ограничениях (например, в течение всего лишь нескольких часов в день и невозможности выполнить два вещи одновременно).

Оказывается, в общем, это сложный класс проблем, и нет единственного, действительно хорошего решения (хотя многие основаны на управляемом поиске в той или иной форме). вам нужно настроить подходы, попробовать разные алгоритмы и т. д. Из-за этого были разработаны различные пакеты, которые предоставляют довольно абстрактные интерфейсы, которые позволяют описать проблему в формальных (ish) терминах, а затем пытаются решить ее различными способами.

Сказав все это, для любого конкретного случая (например, вашего), вероятно, будет более продуктивно просто написать прямое решение (а не изучить один из этих сложных пакетов). но я не вижу, чтобы использование cfs было частью какого-либо разумного решения.

не уверен, что это то, что вы искали, или полезно - извините. если бы я был на вашем месте, я бы попробовал использовать choco , потому что это единственный пакет ограничений, с которым у меня есть некоторый опыт. но вы не я, и я сомневаюсь, что это хорошее решение для вас - вам лучше всего просто поискать информацию, основанную на приведенной здесь информации, а затем задать другой вопрос, как только у вас появится лучшее представление о том, что возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...