Pense na programação de tarefas do RCS como o balcão de triagem de um pronto-socorro. Os pacientes (tarefas) não param de chegar; a enfermeira da triagem (o programador) decide pela gravidade (prioridade) quem entra primeiro na sala de trauma (um robô). A via de emergência existe para emergências de verdade, mas se cada família gritar "o nosso é urgente", a triagem entra em colapso. A configuração de prioridade de tarefas do RCS faz exatamente esse trabalho: decide quem embarca primeiro e quem espera.

Como funciona: filas, pesos e o ciclo de despacho

O RCS é o cérebro da frota de robôs. A cada 100 ms até cerca de um segundo, ele executa um ciclo de despacho: pontua cada tarefa em espera, ordena e atribui as de maior pontuação aos robôs livres. A pontuação de uma tarefa é mais ou menos assim:

task score = priority weight × f(wait time, distance, battery, task type)

A preempção de pedidos urgentes significa literalmente tomar posse. Observe o que é tomado: não um lugar na fila, mas capacidade. O tempo de robô é fixo: cada minuto que um pedido urgente toma é um minuto que uma tarefa normal espera.

Dá para pensar nisso como uma praça de pedágio de rodovia: a pista ETC (alta prioridade) avança primeiro enquanto a pista de pagamento em dinheiro (tarefas normais) fica na fila. Mas não dá para continuar acrescentando pistas ETC: faça de todas as pistas ETC e ninguém estará furando fila nenhuma; a praça continua travada. Prioridade só significa alguma coisa quando é escassa.

O f() da fórmula merece um olhar mais atento: o tempo de espera protege contra "esperar para sempre", a distância escolhe o robô mais próximo, a bateria filtra unidades com pouca carga e o tipo de tarefa distingue trabalhos de transporte, elevação e carregamento. Uma tarefa P2 que espera há 10 minutos pode superar a pontuação de uma P1 recém-chegada quando o envelhecimento (aging) entra em ação: esse é todo o sentido do envelhecimento, e também o ajuste que a maioria desativa sem pensar e do qual mais se arrepende depois.

Três formas de configurar a preempção, e o que cada uma custa

Configuração A: ponderação por prioridade. Aumente o peso de prioridade do pedido urgente: por exemplo, tarefas normais em 5, pedidos urgentes em 50. Um único parâmetro, simples demais. O custo: se aumentar demais (por exemplo, 100), as tarefas de baixa prioridade nunca são atendidas. Isso é inanição (starvation), e vai arrastar uma onda normal até a morte.

Configuração B: reatribuição preemptiva. Quando chega um pedido urgente, requisite um robô que esteja trabalhando numa tarefa de baixa prioridade; a tarefa interrompida volta atrás e entra de novo na fila. A resposta mais rápida. O custo é o deslocamento vazio (deadhead): a viagem interrompida foi quilometragem desperdiçada, e agora precisa ser refeita.

Configuração C: capacidade reservada. Mantenha 10–20% da frota fora das ondas normais, dedicados a pedidos urgentes. A opção mais estável. O custo é capacidade ociosa em dias tranquilos: soldados que você alimenta por mil dias para um dia de batalha.

Configuração Resposta a urgências Impacto nas ondas normais Complexidade Adequada para
A Ponderação Rápida Mata a onda se exagerada Baixa Participação de urgências estável abaixo de 5%
B Preempção A mais rápida Mais deslocamentos vazios, reversões de tarefas Baixa Urgências raras que exigem resposta de segundo nível
C Capacidade reservada Sempre rápida Quase nenhum Baixa Participação de urgências volátil com picos claros

Um projeto que ajustei em 2025: um armazém de comércio eletrônico no leste da China, 180 AMR. Peso de urgências fixado em 50. Com uma participação normal de urgências de 3%, tudo ia bem; no dia do festival de compras 618, os pedidos urgentes saltaram para 15%, a espera média das tarefas normais subiu de 50 segundos para 4 minutos e a taxa de pontualidade das ondas caiu 12 pontos. Os registros mostraram uma tarefa de baixa prioridade esperando 47 minutos: inanição de manual. A causa raiz era uma única peça faltante: ponderação configurada, nenhum mecanismo de envelhecimento.

Como escolher entre as três? Olhe a participação de urgências: estável abaixo de 5%, use A: barata e suficiente. Rara, mas com necessidade de resposta de segundo nível (uma linha de produção prestes a parar), use B. Volátil com picos claros (grandes eventos de vendas, fim de trimestre), use C. A maioria dos armazéns termina com um híbrido A+C: ponderação em dias normais, capacidade reservada ligada duas semanas antes do pico. A linha divisória não é técnica, é o ritmo do negócio, e é por isso que nove em cada dez pessoas que copiam os parâmetros de outro armazém acabam revertendo.

Vista aérea de uma frota de AMR circulando por rotas planejadas no piso de um armazém

A configuração de prioridade de tarefas do RCS testada em campo: níveis, envelhecimento e capacidade reservada

Níveis. P0 urgência de verdade (manter abaixo de 5% do volume) / P1 ondas prioritárias / P2 normal / P3 adiável (reposição, contagens cíclicas). A regra de ferro para o que conta como "urgente": não que vendas diga que é urgente, mas que o prazo do SLA esteja a menos de X horas. Quando vendas diz "este lote é urgente", faça primeiro duas perguntas: "qual é a penalidade do SLA e perdemos o cliente?" Não sabe responder? Vai para P2. É aqui que nascem os requisitos falsos, e nunca me contenho em denunciá-los.

Envelhecimento. Tarefas que esperam demais são promovidas automaticamente: o piso que evita a inanição:

effective priority = base weight + factor × wait time / threshold

Sem envelhecimento, mesmo pesos lindamente ajustados são uma bomba-relógio: tranquilos em dias normais, explosão garantida no pico.

Capacidade reservada. 15–20% na alta temporada, 5–10% fora dela, ajustada dinamicamente com a participação de urgências, nunca fixada em código. Lembre-se: os pesos reordenam a fila; não criam capacidade. Se a participação de urgências passar de 10% e você continuar apenas ajustando pesos, está usando a ferramenta errada.

As armadilhas de manutenção: configure uma vez, sofra para sempre

Armadilha 1: ajustar uma vez e rodar um ano. A alta temporada muda o mix de SKU e o ritmo das ondas, mas os pesos continuam os do ano passado. A configuração de prioridade deve acompanhar o plano de ondas: revisão pelo menos trimestral e sempre um novo ajuste antes do pico.

Armadilha 2: testar sem carga, então a inanição nunca aparece. Os testes só observam o tempo médio de espera, e médias são a métrica mais desonesta que existe. O número que importa é o tempo máximo de espera das tarefas de baixa prioridade. Quando ele sobe, a inanição está chegando.

Armadilha 3: blindar-se contra uma participação de urgências acima do limite. Se os pedidos urgentes ficarem acima de 10% do volume a longo prazo, isso não é um problema de programação, é um problema de capacidade: adicione robôs ou rebaixe alguns pedidos "urgentes" para P2. Não dá para tapar um buraco de capacidade com parâmetros do programador.

Armadilha 4: deixar qualquer um marcar P0. O maior inimigo da prioridade não são os parâmetros, são as pessoas. Os direitos de marcação P0 devem ser restritos: quem pode marcar, se exige aprovação e uma auditoria mensal da verdadeira participação de P0. Deixe a marcação aberta e P0 ultrapassará 20% em três meses; nenhum ajuste salva você depois disso.

Então, a configuração de prioridade vale a pena? Observe um par de números: a taxa de pontualidade dos pedidos urgentes atingindo a meta enquanto o tempo médio de espera das tarefas normais permanece estável. Ambos verdadeiros, e a configuração está certa. Só um verdadeiro, e você está se enganando.

Por Da Liu, Engenheiro de automação

Traduzido do inglês. Em caso de divergência, prevalece a versão em inglês.