Алгоритмические решения по планированию персонала - PullRequest
7 голосов
/ 03 марта 2011

На общем уровне проблема проста: назначьте армию персонала для покрытия из расчета на одного человека в день, в любой день персонал разделен на 3 пула, у каждого персонала есть потребность в отпуске, у каждого персонала есть максимум 2 смены в неделю и т. д.

Я бы не хотел делать это вручную, как это делалось в моей организации на протяжении веков. Я бы хотел сделать что-нибудь классное, например, генетические алгоритмы (например, [1] http://www.sersc.org/journals/IJAST/vol14/1.pdf).

Существуют ли надежные альтернативы с открытым исходным кодом / бесплатные? Это также звучит как проблема оптимизации, могу ли я запустить C ++, R и т. Д., Чтобы подключиться к какой-либо библиотеке оптимизации для этого?

спасибо

Ответы [ 4 ]

7 голосов
/ 03 марта 2011

Это проблема оптимизации. Это известно как проблема планирования, как ни странно. :-D В зависимости от размера данных вам, возможно, придется пойти на метаэвристику, такую ​​как генетические алгоритмы, оптимизация муравьиного роя и т. Д., Но я бы начал здесь с развертывания вашей собственной эвристики на основе правил.

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

Это должно, если вы все сделаете правильно, составить правильный, но неоптимальный график, и тогда вы сможете делать классные вещи, такие как определение операторов (swap, move, 3-swap), что даст вам окрестности (все действительные графики, которые могут быть достигнуты с помощью оператора). Затем вы можете выбрать лучшее расписание в районе и повторить. Это спуск по соседству. Но есть много методов, основанных на соседстве, чтобы выбрать из. Я считаю, что имитация отжига хороша применительно к задачам планирования.

6 голосов
/ 03 марта 2011

Вы можете попробовать OptaPlanner (ранее назывался Drools Planner ), он основан на Java и с открытым исходным кодом.

3 голосов
/ 26 июля 2012

Возможно, вас также заинтересуют рамки программирования с ограничениями, многие из которых с открытым исходным кодом, такие как Choco (Java), Gecode (C ++) и другие, которые использовались для этих целей.Типы проблем тоже, хотя я согласен с ravloony, что, возможно, стоит проверить, может ли алгоритм в упомянутом им стиле справиться с задачей, которую вы описали.

0 голосов
/ 03 марта 2011

Поскольку в день работает только один человек, похоже, что это может быть проблема целочисленного / двоичного программирования.Есть много пакетов, которые делают целочисленное программирование.Сложной частью этих проблем, независимо от того, какой метод вы решите использовать для их решения, является поиск краткого способа определения ограничений проблемы.В этом случае, какие именно требования к отпуску и т. Д.

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