Orquest impulsa al máximo la rentabilidad del negocio a través de la planificación óptima de empleados y la automatización.
Dimensiona y planifica los equipos en tienda para ofrecer la mejor atención al cliente y maximizar tu rendimiento.
Jul 27 2018
La planificación automática del personal es un problema bastante conocido en el sector retail. De hecho, y debido a su complejidad, sigue siendo uno de los más difíciles de resolver con éxito. Si pensamos en esta industria, encontramos regulaciones de turnos muy flexibles, lo que hace que el problema sea mucho más complejo.
En este post definiremos el problema de optimización subyacente y explicaremos por qué es tan difícil de resolver, esperamos que de una forma sencilla para que se entienda fácilmente.
Vamos a definir un escenario de planificación del personal realmente simple, que luego mediremos.
Nuestro caso planteado tiene sólo 10 empleados. Es una cantidad bastante pequeña de trabajadores para una tienda regular.
Cada empleado puede trabajar entre 3 y 8 horas consecutivas al día. Pero se debe respetar que haya un descanso de 12 horas entre dos días laborables consecutivos.
Hay tres tareas que se llevan a cabo con regularidad en la tienda: gestión, ventas y reaprovisionamiento. Para hacerlo más sencillo, supongamos que todos los empleados pueden hacer todas las tareas.
Los empleados pueden trabajar en la tienda de 08:00 a 20:00 todos los días.
Nuestra meta es asignar un turno a cada empleado para cada día, satisfaciendo todas las limitaciones laborales definidas y maximizando la cobertura de las necesidades del personal.
Hay muchas formas de medir la complejidad de un problema. De hecho, hay multitud de teorías sobre ello y problemas interesantes aún sin resolver. En este post nos centraremos en medir el tamaño del problema, que es uno de los principales indicadores de complejidad. Y así, estimaremos el número de posibles soluciones.
Primero, vamos a sacar el número de diferentes turnos que uno de nuestros empleados puede hacer en un día determinado. Para que esté más claro, lo haremos para la duración de cada posible turno.
Para un turno de ciertas horas, podríamos imaginárnoslo deslizándose desde la hora de apertura hasta la de cierre, para así representar todas las posibilidades de posición. Poniendo un intervalo de tiempo deslizante de 30 minutos, tendríamos:
Y podemos continuar esto hasta el turno máximo de 8 horas por día y trabajador, lo que nos da 9 posibilidades distintas de asignar el turno:
En resumen, tenemos 19 + 18 +… 10 + 9 = 135 posibilidades diferentes de asignar un turno para un empleado determinado en un día específico. De hecho no son demasiados.
Hemos estimado en 135 el número de posibles asignaciones de turnos que un empleado determinado puede tener en un día. Ahora queremos saber cuántas posibilidades distintas de asignación tenemos para un trabajador en 7 días consecutivos, una semana. Para ello, empezaremos con los días 1 y 2.
Primero, podemos combinar todas las asignaciones posibles del día 1 con todas las del día 2. Es decir, independientemente del turno asignado a un empleado en el día 1, todavía podemos asignar cualquiera de los posibles turnos en el día 2.
Entonces, podemos calcular todas las asignaciones posibles de turnos para los días 1 y 2 como 135 * 135 = 18.225 opciones diferentes. Lo vemos en la siguiente imagen:
Extrapolando este mismo razonamiento al resto de la semana, podemos afirmar que el número de posibles asignaciones para un solo empleado en toda la semana suma 135 * 135 * 135 * 135 * 135 * 135 * 135. Si lo calculamos, finalmente tenemos:
¡817.215.093.984.375 posibilidades!
Eso son un montón de posibilidades. Y sólo estamos planteando una semana, para una sola persona, en las condiciones más simples. No estamos teniendo en cuenta ni el hecho de que dentro de cada turno tenemos que decidir qué tareas exactas realiza cada empleado.
Hemos visto que el problema más simple que podríamos plantear, termina siendo enorme. Si seguimos incluyendo variables al problema hasta que coincida con un caso real, se hace aún más grande.
Con un problema tan grande te preguntas, ¿es posible resolverlo o encontrar una buena solución? Bueno, la respuesta corta es sí, lo hemos hecho en ORQUEST, pero te vamos a contar un poco más.
En el mundo de la ciencia de datos, hay un montón de técnicas, normalmente bajo el nombre de optimización combinatoria, que están diseñadas para enfrentarse a estos desafíos, aunque todavía sigue siendo realmente difícil. Presentaremos los más relevantes y analizaremos brevemente su aplicabilidad al problema de la planificación automática de personal.
La heurística es la más sencilla de estas técnicas. Aprovechando la estructura del problema y el conocimiento del negocio, construye una solución en un procedimiento paso a paso. Y a partir de esa solución, toma la mejor decisión con la información que tiene a mano, en cada momento.
Usando técnicas de ramificación, logran tomar algunas de esas decisiones y amplificar las opciones. Pero como hemos visto antes, el número de diferentes soluciones a nuestro problema es realmente enorme, así que aunque seamos capaces de explorar alternativas de forma rápida, nunca será suficiente.
Numerosas veces hemos visto algoritmos de gestión de personal que usan este tipo de técnicas y orgullosamente registran el número de soluciones que han encontrado hasta el momento, pero esa cifra apenas llegará al 0.001% del total.
La metaheurística son técnicas que, partiendo de una solución completa inicial, la desarrollan evaluando sus variantes con el objetivo de encontrar la solución óptima.
Algunas de las técnicas con estas características son la búsqueda tabú, el algoritmo de recocido simulado y otras más recientes como el algoritmo de la colonia de hormigas, la optimización por enjambre de partículas, etc. También se puede incluir el algoritmo evolutivo en esta categoría.
Si bien estas técnicas han demostrado ser realmente efectivas para resolver problemas extremadamente complejos en áreas como la logística, el comercio minorista o el transporte, no lo han logrado con la planificación automática del personal. Las razones que hay detrás son bastante complejas de explicar en un post, pero se podría decir que las estrechas relaciones entre los muchos componentes del problema es una de las causas fundamentales del mismo.
La Programación Lineal en Enteros es una técnica bastante conocida, con empresas líderes de productos comerciales detrás de ella, como IBM CPLEX y Gurobi. Se sabe que resuelve grandes problemas en industrias como manufactura, logística, transporte y muchos otros.
Pero una vez más, la planificación automática del personal ha demostrado ser un problema lo suficientemente difícil para ellos, y nunca hemos podido ver una solución exitosa para este problema utilizando estas técnicas (aunque sí varios fracasos).
Tal y como dije antes, ORQUEST es capaz de obtener soluciones realmente buenas (la mayoría de las veces la solución óptima) al problema de la planificación automática del personal.
El equipo de ORQUEST ha invertido enormes cantidades de tiempo y trabajo en el desarrollo de algoritmos sofisticados que, al mezclar todas las técnicas explicadas anteriormente, son capaces de resolver problemas reales de planificación automática de personal con más de 100 empleados en plantilla y durante más de 1 mes de forma automática en minutos.
Y ahora, ¿deberías creernos? Bueno, yo diría que no deberías. Pero siempre puedes ponerte en contacto con nosotros y pedirnos una demostración personalizada, para que puedas verla de primera mano.
Cookie | Duración | Descripción |
---|---|---|
cookielawinfo-checkbox-advertisement | 1 year | Set by the GDPR Cookie Consent plugin, this cookie records the user consent for the cookies in the "Advertisement" category. |
cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
CookieLawInfoConsent | 1 year | CookieYes sets this cookie to record the default button state of the corresponding category and the status of CCPA. It works only in coordination with the primary cookie. |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
Cookie | Duración | Descripción |
---|---|---|
sp_landing | 1 day | The sp_landing is set by Spotify to implement audio content from Spotify on the website and also registers information on user interaction related to the audio content. |
sp_t | 1 year | The sp_t cookie is set by Spotify to implement audio content from Spotify on the website and also registers information on user interaction related to the audio content. |
wp-wpml_current_language | session | WordPress multilingual plugin sets this cookie to store the current language/language settings. |
Cookie | Duración | Descripción |
---|---|---|
CONSENT | 2 years | YouTube sets this cookie via embedded YouTube videos and registers anonymous statistical data. |
Cookie | Duración | Descripción |
---|---|---|
VISITOR_INFO1_LIVE | 5 months 27 days | YouTube sets this cookie to measure bandwidth, determining whether the user gets the new or old player interface. |
YSC | session | Youtube sets this cookie to track the views of embedded videos on Youtube pages. |
yt-remote-connected-devices | never | YouTube sets this cookie to store the user's video preferences using embedded YouTube videos. |
yt-remote-device-id | never | YouTube sets this cookie to store the user's video preferences using embedded YouTube videos. |
yt.innertube::nextId | never | YouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen. |
yt.innertube::requests | never | YouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen. |
Cookie | Duración | Descripción |
---|---|---|
loglevel | never | No description available. |