Abre a aplicação, pede uma viagem e espera que apareça um motorista. Parece simples. Mas, por trás dessa decisão, há mapas divididos em pequenas células, previsões de trânsito e combinações entre vários pedidos. Um carro da Uber pode estar a 300 metros e demorar 10 minutos a chegar. E esperar mais um minuto pode poupar 13 a outra pessoa. Como se explica?
Pedir uma viagem demora poucos segundos. Abrimos a aplicação, escolhemos o destino e aguardamos a atribuição de um motorista. No entanto, aquilo que vemos no ecrã é apenas uma pequena parte do processo.
Para encontrar uma combinação adequada, é preciso organizar posições geográficas, calcular percursos e considerar outros pedidos feitos na mesma zona.
O carro mais próximo no mapa pode não ser o que chega mais depressa. E atribuí-lo imediatamente a uma pessoa pode aumentar bastante a espera de outra. Vamos perceber como funciona.

1. Porque não comparar a nossa posição com todos os carros?
A solução mais óbvia seria calcular a distância entre o passageiro e cada motorista disponível. Depois, bastaria escolher o mais próximo. Com poucos veículos, o problema parece simples. Mas imagine repetir esta operação para muitos pedidos, enquanto os carros circulam e as suas posições mudam continuamente.
Uma forma de reduzir o trabalho consiste em começar pela localização, isto é, selecionar uma zona relevante e identificar os motoristas que podem ser candidatos à viagem.

É semelhante a procurar um restaurante. Antes de comparar menus de toda a cidade, começamos por escolher uma área onde faça sentido ir.
Contudo, esta primeira seleção ainda não responde à pergunta principal: qual destes motoristas consegue chegar ao ponto de recolha nas melhores condições?
2. H3: organizar o mapa como um favo de mel
É aqui que entra o H3, um sistema de indexação geoespacial desenvolvido pela Uber e disponibilizado como código aberto em 2018. A empresa documentou a sua utilização na análise geográfica e na otimização de preços e da atribuição de viagens.
O nome pode parecer complicado, mas a ideia é acessível: dividir a superfície terrestre em células identificáveis, maioritariamente hexagonais.

No exemplo, o passageiro encontra-se na célula central. Uma pesquisa pode consultar essa célula e as que a rodeiam, alargando a área quando necessário.
Há, porém, um detalhe importante: as células H3 não têm todas uma dimensão fixa. O sistema disponibiliza 16 resoluções, numeradas de 0 a 15. Resoluções mais elevadas correspondem a células mais pequenas, e as áreas também variam com a localização. Fonte: estatísticas oficiais do H3.
Esta organização ajuda a procurar e analisar informação geográfica. O H3, por si só, não escolhe o motorista nem calcula o percurso até ao passageiro.
3. Porque são usados hexágonos?
Ao olhar para a grelha, surge uma pergunta: porque não dividir o mapa em quadrados?
Numa grelha quadrada regular, uma célula tem quatro vizinhas que partilham um lado. Se incluirmos as quatro diagonais, passamos a ter oito, mas os centros destas últimas ficam mais longe.
Numa grelha hexagonal regular, os seis vizinhos que partilham um lado estão à mesma distância do centro da célula de referência.

Essa simetria favorece determinadas análises de proximidade e movimento, sendo uma das razões apresentadas pela Uber para a escolha dos hexágonos.
A representação tem, ainda assim, uma simplificação: a Terra não é plana. A grelha global H3 inclui exatamente 12 pentágonos em cada resolução, além dos hexágonos.
E a regularidade geométrica não resolve tudo. Duas células vizinhas podem estar separadas por um rio, uma linha ferroviária ou uma estrada sem acesso direto.
4. Da posição GPS a um identificador de célula
Para trabalhar com esta organização, uma posição geográfica pode ser associada ao identificador da respetiva célula.
Um índice H3 é representado por um inteiro de 64 bits e pode ser apresentado em formato hexadecimal. É uma forma compacta de identificar uma célula. Fonte: terminologia H3.
Na prática, isto permite organizar informação por área, como mostra o esquema seguinte.

Neste exemplo, os motoristas 12 e 27 estão associados à célula A, enquanto o motorista 35 está na célula B. Consultar as células relevantes permite obter um conjunto de candidatos.
Mas identificar a célula não equivale a conhecer a posição exata do carro dentro dela. Para calcular uma recolha, continuam a ser necessárias coordenadas e informação sobre as estradas.
A tabela ilustra o conceito; não representa uma descrição da base de dados atualmente usada pela Uber.
5. Um carro a 300 metros pode demorar 10 minutos
Imagine que está numa margem de um rio e que o motorista se encontra na outra. No mapa, os dois pontos parecem muito próximos.
O problema é que o automóvel não pode atravessar a água. Precisa de seguir até uma ponte e regressar pela outra margem.

Este cenário mostra a diferença entre distância geográfica e tempo de chegada.
Também os sentidos únicos, os acessos às vias e o trânsito podem alterar o percurso. Um veículo aparentemente mais afastado pode ter uma ligação rodoviária mais favorável ao ponto de recolha.
A Uber descreve uma arquitetura em que as previsões de tempo para segmentos de estrada alimentam a escolha das rotas e as estimativas de chegada. Por isso, contar os carros nas imediações não permite concluir quanto tempo um motorista demorará a chegar.
6. Dois passageiros e dois motoristas: quem fica com quem?
O problema torna-se mais interessante quando existem vários pedidos na mesma zona. Imagine que pede uma viagem quase ao mesmo tempo que outro passageiro, a quem chamaremos João.
Há dois motoristas disponíveis, A e B, com os seguintes tempos de chegada:
| Motorista | Tempo até si | Tempo até João |
|---|---|---|
| A | 4 minutos | 2 minutos |
| B | 5 minutos | 15 minutos |
Se o motorista A lhe for atribuído imediatamente, espera quatro minutos. João fica com B e espera 15 minutos. Somadas, as duas esperas representam 19 minutos.
Mas existe outra possibilidade: A vai buscar João e B vem buscá-lo a si.

Nesta segunda combinação, espera cinco minutos e João espera dois. A soma passa para sete minutos.
Ou seja:
- Espera mais um minuto.
- João espera menos 13 minutos.
- A soma das esperas diminui 12 minutos.
A espera média desce de 9,5 para 3,5 minutos. O exemplo mostra também um compromisso: melhorar o resultado do grupo não significa reduzir a espera de cada pessoa.
Neste caso, uma pequena diferença para um passageiro evita uma espera muito maior para o outro.
7. Porque pode fazer sentido avaliar vários pedidos em conjunto?
É esta lógica que ajuda a compreender a atribuição por lotes, conhecida como batched matching. A Uber explica que pode avaliar, durante alguns segundos, vários pedidos e motoristas próximos em conjunto, procurando reduzir a espera média.

O exemplo anterior explica a vantagem: atribuir imediatamente um motorista pode retirar a outro passageiro a sua melhor opção, mesmo quando existe uma alternativa quase tão boa para o primeiro.
Ao considerar os pedidos em conjunto, torna-se possível comparar essas combinações antes de fazer as atribuições. A própria Uber ressalva que funcionalidades e regras variam entre mercados.
Em Portugal, basta pensar em Lisboa ou no Porto para perceber o problema: um carro pode parecer próximo no mapa, mas estar do outro lado do rio ou ter de contornar ruas de sentido único. É essa diferença entre a proximidade no ecrã e o caminho real até ao passageiro que ajuda a explicar uma espera aparentemente difícil de compreender.
Da próxima vez que esperar por um Uber, apesar de ver vários carros por perto, lembre-se: o mapa mostra posições. A decisão exige avaliar estradas, tempos de chegada e possíveis combinações com outros pedidos.


















