Який алгоритм я повинен використовувати для створення функції автоматичного планування персоналу?


18

Уявіть собі невеликий місцевий бізнес (в моєму випадку дитячий садок) з кількома десятками неповних працівників. Мета полягає в автоматичному створенні тижневих розкладів персоналу. Моє запитання - про те, які алгоритмічні підходи дослідити для цієї проблеми.

Існує багато обмежень, які слід пам’ятати, головним чином (1) наявність персоналу та (2) потреби кожної зміни, а не лише кількість персоналу для кожної зміни, а також навички, необхідні для кожної зміни (наприклад, для певної зміни, Вам може знадобитися хтось, хто знає, як їздити, щоб робити пікапи / вивіз собак, для іншого, хтось знає, як давати собакам ванни тощо).

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

Також є переваги, які слід враховувати. Деякі працівники віддають перевагу вранці, десь два дні поспіль, а не в понеділок та четвер і т. Д. Ми знаємо, що не завжди можемо врахувати уподобання кожного. Насправді у нас є ієрархія, в якій працівники отримують перші поправки щодо свого вибору.

У мене є думка, що існує спосіб зменшити або висловити цю проблему в існуючий, вже вирішений алгоритм. Але я не знаю, які алгоритми вивчити. Які існуючі конкретні алгоритми були б найбільш перспективними?



3
І як осторонь, я ніколи не знайшов алгоритм, який би працював над цією проблемою за межами найпростіших обмежень в минулому, крім того, щоб "відкласти всіх на графік випадковим чином ігноруючи будь-яке інше обмеження та дозволити їм мінятись чи приймати зміни за бажанням".

4
На веб-сайті JBoss Drools доступне повне рішення: optaplanner.org - потрібно кодифікувати обмеження в плануванні, наприклад, максимум годин на тиждень тощо.
BobDalgleish

Я підозрюю, що це еквівалентно проблемі SAT, яка, як відомо, не є повною, але немає сумнівів, хороші алгоритми, які дають розумні результати.
Девід Конрад

Відповіді:


16

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

Як пропонує Боб, якщо ви працюєте в Java, погляньте на OptaPlanner (відкритий код). Дивіться це відео про розклад службовців .


3
Чи можете ви пояснити алгоритми або додати посилання на якесь місце? Якщо ви додаєте посилання, будь ласка, також додайте трохи інформації зі релевантної сторінки.
Адам Цукерман

Зроблено. Примітка: багато з них пояснюються і у вікіпедії.
Джеффрі Де Смет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.