Tuesday, August 12. Turno da noite.

Às 9:40 PM estávamos no meio do nosso pico de saída. No corredor transversal onde a Via Principal B encontra o Corredor C, quatro AMRs chegaram das quatro direções no mesmo momento. E pararam. Os quatro. Ninguém se moveu, porque cada um achava que tinha a preferência.

Na tela de despacho, quatro pontinhos estavam congelados. Atrás deles, uma fila de robôs se acumulava pelo Corredor C. O líder de turno Xiao Li correu, observou um pouco e voltou para me dizer: "Chen, aqueles quatro parece que combinaram. Ninguém se mexe."

Foram 8 minutos desde que travaram até um dos nossos ir a pé e mover manualmente um robô para fora do caminho. Oito minutos com zero movimento no Corredor C. O reabastecimento não conseguia entrar. Todo o plano de ondas desmoronou. Naquela noite nosso throughput por hora caiu do habitual 1,100 caixas para apenas 800. Serei honesto com você: o RCS vinha rodando bem há três meses, e o que finalmente nos derrubou foi uma única interseção.

Quatro robôs, ninguém cedendo

A prioridade padrão de fábrica era "primeiro a chegar, primeiro a passar". Parece justo, certo? Como uma fila. Quem chega primeiro à interseção passa primeiro.

Isto é o que realmente acontece. Durante o pico, quatro robôs chegam com cerca de um segundo de diferença entre si. O sistema não consegue dizer quem foi verdadeiramente o primeiro. Então os quatro param, os quatro avançam um pouco para testar, os quatro freiam de emergência quando seus lasers de segurança se detectam. Param três segundos, tentam de novo, param de novo. Deadlock.

E deadlock é contagioso. Uma vez que a interseção congela, os robôs atrás param, e os que estão atrás desses param também. Oito minutos depois, metade da frota na Zona B estava parada e a tela do RCS era um muro de vermelho. Old Wang, nosso veterano das noites, pegou o rádio: "Chen, esses robôs estão aqui para trabalhar ou para fazer reunião?"

Na manhã seguinte passei todo o standup discutindo com o engenheiro do fornecedor. As palavras exatas dele: "Chen, este é o padrão da indústria." Eu disse: "Seu padrão acabou de desligar meu armazém por oito minutos. Me dê um não-padrão."

Duas correções erradas que realmente testamos

A primeira ideia era óbvia: os carregados vão primeiro. Configuramos "prioridade de carregados" — os robôs cheios recebem a prioridade mais alta, os vazios cedem.

Três dias depois, Old Zhang estava parado na interseção do Corredor C com dois contratados novos, xingando os robôs. Um robô vazio a caminho de buscar uma carga havia cedido para sete ou oito carregados seguidos e estava lá há 11 minutos. Zhang disse: "Chen, essas coisas implicam com os novatos — um robô vazio não é um robô?" Pior ainda, os robôs carregados começaram a agir com privilégios. Sabiam que todos cederiam, então pararam de reduzir a velocidade nas interseções, e duas vezes quase empurraram um robô vazio saindo de um corredor lateral contra as estruturas. A moral é invisível até quebrar — mas na passagem de turno naquele dia, alguém realmente disse: "Talvez as noites devessem voltar para as empilhadeiras." Ouvir isso me deu calafrios.

A segunda ideia: prioridade da via principal. Os robôs na via principal nunca param; os robôs dos corredores laterais cedem.

Isso foi pior. Os robôs dos corredores laterais não conseguiam entrar na via principal de jeito nenhum. Acumulavam-se nos corredores — o pior foi um corredor lateral de 40 metros com seis robôs para-choque com para-choque, e o rapaz do reabastecimento nem conseguia passar com sua transpaleteira manual. Movemos o engarrafamento da interseção para os corredores, onde era mais difícil de resolver, e deixamos as zonas de picking sem reabastecimento no processo.

Dois experimentos fracassados nos ensinaram algo contraintuitivo: quanto mais você tenta ser "justo", pior o engarrafamento.

Primeiro a chegar, primeiro a passar parece o mais justo — e é o que mais trava. A prioridade de carregados parece o mais sensato — e implica com os robôs vazios até torná-los inúteis. A prioridade da via principal parece o mais científico — e move o engarrafamento para um lugar mais difícil de tratar. Finalmente caiu a ficha: interseções não temem lentidão, temem ambiguidade. No momento em que dois robôs pensam que devem passar, você está acabado. A única forma de manter o tráfego fluindo é embutir uma "injustiça" deliberada — dizer exatamente quem cede para quem, e deixar zero margem de negociação.

O que nosso armazém faz agora

Depois de um mês de tentativa e erro, ficamos com três regras. É assim que nosso armazém opera hoje.

Regra um: mude as regras conforme a hora do dia. Sem tamanho único.

Durante o dia, quando as ondas são leves e há poucos robôs fora, usamos primeiro a chegar, primeiro a passar. Simples, sem complicação. Das 7 PM às 11 PM, o sistema muda automaticamente para "prioridade por urgência de tarefa". Cada tarefa recebe uma pontuação — as tarefas de saída próximas ao seu corte de transportadora pontuam mais alto, depois o reabastecimento, e os robôs vazios voltando para carregar, os mais baixos. Nota: pontuamos por urgência, não por peso. Um robô vazio correndo para uma onda prestes a perder o corte supera um robô carregado passeando sem prazo. Old Zhang não xingou em uma interseção desde então.

Estratégia Risco de deadlock Espera máxima do robô vazio Throughput de pico Quando usamos
Primeiro a chegar, primeiro a passar Alto (quase diário no pico) cerca de 5 min Base Dia, tráfego leve
Prioridade de carregados Médio Mais de 10 min cerca de 10% abaixo da base Testada 3 dias, descartada
Prioridade da via principal Médio Corredores laterais acumulam Corredores engarrafam, ainda pior Testada 2 dias, descartada
Urgência de tarefa por hora do dia Baixo (zero deadlocks em 3 meses) Menos de 3 min cerca de 15% acima da base O que operamos agora, o dia todo

(Estes são números medidos no nosso próprio piso com 40 robôs. Frota diferente, layout diferente — tome-os como referência, não como evangelho.)

AMRs cedendo passagem em uma interseção de corredores

Regra dois: desenhe uma caixa de não-parada ao redor das interseções ruins.

Puxamos as estatísticas das seis interseções do prédio. Aquela da Via Principal B respondia por mais de 70% dos nossos deadlocks. A correção foi simples: 15 metros em cada direção, desenhamos uma cerca eletrônica. Antes de qualquer robô entrar na caixa, o RCS tem que provar que consegue cruzar a interseção de uma vez. Se não conseguir provar, espera fora. Nada de "me enfio e vejo". É a mesma regra de "não bloqueie a caixa" nas ruas da cidade — exceto que a escrevemos no software. Aquela interseção não travou uma vez sequer desde então.

Regra três: os despachantes novos acompanham os veteranos por três dias — observando interseções.

Esta é sobre pessoas. Nas primeiras duas semanas após mudarmos as regras, os veteranos do turno da noite olhavam os monitores, e no momento em que algo parecia errado chamavam pelo rádio. Agora todo despachante novo passa três dias com Old Wang apenas observando o tráfego das interseções, aprendendo a detectar "aqueles dois estão prestes a se pegar". As máquinas cuidam das regras; as pessoas cuidam das exceções. Parece antiquado, mas funciona — no mês passado uma atualização de software resetou nossos parâmetros de prioridade para os padrões de fábrica, e Old Wang notou que "os robôs estão cedendo errado" dez minutos antes do alarme do sistema disparar.

Vamos às contas. Na nossa pior semana, tivemos em média três deadlocks por dia, de cinco a oito minutos cada, e o throughput por hora caía duzentas ou trezentas caixas cada vez. Isso dá quase 4,000 caixas perdidas em uma semana. Na temporada de pico, esse tipo de falha lhe traz penalidades de clientes de fazer chorar. Estamos no novo esquema há três meses: zero deadlocks, e o throughput do turno da noite na verdade subiu em relação a antes. Honestamente, o engenheiro do fornecedor achou nossa abordagem tosca no início. Agora eles escreveram nossas regras por hora do dia na configuração recomendada que enviam a outros armazéns.

Um lembrete para colegas operadores: quando colocar o RCS no ar, não se limite a admirar quão inteligente é o algoritmo de despacho. Vá e fique na sua interseção mais movimentada durante um turno de pico primeiro. Se errar na interseção, 40 robôs viram 40 bloqueios; se acertar, as pessoas viram o bônus. E antes de mudar qualquer regra de tráfego, fale primeiro com seus veteranos do turno da noite — os robôs dirigem sozinhos, mas os turnos são conduzidos por pessoas. Se as pessoas não comprarem a ideia, nenhuma regra funciona.

Por Chen Feng, gerente de operações de armazém

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