Планирование рабочих мест: какие решения мне следует рассмотреть?

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

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

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

Я читал статьи о проблемах планирования с ограниченными ресурсами и задачах назначения, но у меня очень мало формального обучения CS, и я часто теряюсь во всех нюансах различных вариантов этих задач.

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

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

Является ли генетический алгоритм возможным решением этой проблемы? Или есть решения получше?


person mrdg    schedule 13.05.2012    source источник
comment
Зависимы ли задачи друг от друга? (Например, задача 7 требует завершения задачи 2, прежде чем она может начаться). Известны ли задачи заранее?   -  person amit    schedule 13.05.2012
comment
Вы имеете в виду сами проекты, когда говорите о задачах? Проекты не зависят друг от друга. А на момент создания расписания все проекты известны. Для наглядности, в этой задаче не важны отдельные задачи в проекте. Проект считается завершенным по истечении заданного срока, как в проектах SCRUM.   -  person mrdg    schedule 13.05.2012


Ответы (2)


Создайте двудольный граф с разработчиками с одной стороны и необходимыми участниками проекта с другой. Под «необходимыми участниками проекта» я подразумеваю, что если проекту P нужны 3 разработчика, вы должны добавить 3 узла, возможно, с именами P0, P1 и P2.

Проведите грань между разработчиком и необходимым участником проекта, если этот разработчик обладает всеми навыками, необходимыми для этого проекта. Затем ваша проблема сводится к поиску соответствия на этом графике; для этого можно использовать стандартные алгоритмы.

person phs    schedule 13.05.2012
comment
Я собираюсь изучить это. Может ли это решение также решить часть моей проблемы, касающуюся времени / планирования? - person mrdg; 14.05.2012
comment
Он не будет точно обрабатывать время, но если он обнаружит соответствие на графике, включающем все проекты, то это сопоставление будет учитывать ваши ограничения планирования. Проблема в том, что это было бы слишком ограничительно: были бы графики, которые не имеют соответствия, но все равно будут иметь возможное расписание (в котором один разработчик выполняет один проект, а затем другой.). Ответ Дуга: вы могли жадно создать итеративное сопоставление, по одному проекту за раз. Затем вы можете управлять пулом разработчиков, исключая тех, кто, как вы знаете, заняты. - person phs; 15.05.2012

Использование генетического алгоритма - возможный подход, но он очень амбициозен.

Начните с жадного алгоритма.

person Doug Currie    schedule 13.05.2012