Três lições dos nossos projetos de IA
Ao longo de dois anos, acompanhámos dezenas de projetos de IA, desde a exploração inicial até um modelo que é executado todas as noites. Alguns…
Como funciona o GP-spel?
O GP-spel foi desenvolvido pela NU.nl e abrange uma temporada de Fórmula 1. Todos os fins de semana há uma corrida num país diferente, com uma sessão de qualificação e a corrida propriamente dita. Para cada fim de semana de corrida, os participantes têm de formar uma equipa de quatro pilotos e prever os três primeiros classificados. Também pode ganhar pontos extra se acertar na posição de Max Verstappen. Neste artigo, explico como usei modelos matemáticos para otimizar a minha equipa de quatro pilotos. Desta vez, não vou abordar a previsão dos resultados da qualificação e da corrida, embora seja uma aplicação interessante de data science.
Para formar uma equipa de quatro pilotos, dispõe de um orçamento total de 100 milhões. A equipa da NU.nl definiu o custo de cada piloto: quanto melhor for o piloto, mais caro é. Lewis Hamilton custa nada menos do que 50 milhões, enquanto Mick Schumacher – filho de - custa «apenas» 5 milhões. Ganha pontos consoante as posições em que os pilotos da sua equipa terminam a qualificação e a corrida. Por exemplo, se Max Verstappen fizer parte da sua equipa, conquistar a pole position no sábado e vencer a corrida no domingo, ganha (10 pela pole position + 25 pela vitória na corrida) 35 pontos. O objetivo é, naturalmente, acumular o máximo de pontos possível com a equipa que escolheu.
O problema descrito acima — escolher a equipa ideal de pilotos — é um problema da mochila. Trata-se de um conhecido problema matemático que coloca a seguinte questão:
‘Dado um conjunto de itens I, em que cada item i tem um peso associado c_i e um valor associado w_i, determine que itens devem ser colocados na mochila para maximizar o valor total sem exceder o peso máximo.’
Podemos agora formular a escolha de uma equipa de pilotos como um problema da mochila. Temos um conjunto de pilotos I, cada um com um custo c_i. O objetivo é maximizar o valor total da equipa. No entanto, não sabemos qual o valor que cada piloto acrescenta, pelo que precisamos de encontrar uma solução ‘inteligente’ (voltarei a este ponto mais à frente). Além do orçamento de 100 milhões, há algumas restrições adicionais do jogo que temos de ter em conta:
O passo seguinte é formular o nosso problema matemático como um problema de programação linear inteira. Na nossa área, sabemos que um problema da mochila pode ser resolvido com recurso à programação linear. A programação linear é um método para resolver problemas de otimização em que a função objetivo e as restrições são lineares. É também o caso do nosso problema. Falamos de um problema de programação linear inteira porque a solução é binária (e, portanto, composta por valores inteiros). Para cada piloto i, definimos uma variável de decisão x_i. Esta variável é igual a 1 se o piloto i for escolhido para a solução e igual a 0 se não o escolhermos. Podemos então formular o nosso problema como um problema de programação linear inteira (atenção: vêm aí fórmulas matemáticas!).
Pontos no campeonato a 3 de julho de 2021: 156 pontos no campeonato (KP)
Posição no treino livre 1: 1 (P1)
Posição no treino livre 2: 3 (P2)
Posição no treino livre 3: 1 (P3)
Valor de Max: KP + (21 – P1) + (21 – P2) + (21 – P3) = 156 + (21 – 1) + (21 – 3) + (21 – 1) = 214
Podemos calcular o valor da equipa selecionada somando os valores dos seus pilotos. Note que isto corresponde à função objetivo da nossa formulação matemática acima, porque a variável x_i é igual a 0 quando um piloto não faz parte da nossa equipa.
Seguem-se as restrições. A restrição 1 estabelece que o custo total dos pilotos que escolhemos para a nossa equipa não pode exceder o orçamento de 100 milhões. Calculamos o custo total somando o custo c_i de cada piloto i da nossa equipa. Aplica-se o mesmo raciocínio usado para a função objetivo: se não escolhermos um piloto para a nossa equipa, a variável x_i é igual a 0 e o seu custo não entra no cálculo. A restrição 2 garante que selecionamos exatamente quatro pilotos para a nossa equipa. A terceira restrição garante que escolhemos, no máximo, um piloto por equipa. Suponhamos que o piloto j é Max Verstappen (equipa Red Bull) e o piloto k é Sergio Perez (também da equipa Red Bull). Esta restrição estabelece que a soma das suas variáveis de decisão pode ser, no máximo, 1. Isto significa que não podemos escolher ambos os pilotos (pois, nesse caso, x_j + x_k = 2).
Desta vez, para construir o modelo, escolho Excel em vez de Python ou R. No Excel, é fácil formular e resolver problemas de programação linear com o Solver. Abaixo, pode ver uma captura de ecrã da minha folha de Excel.
| Restrição | Células | Fórmula no Excel |
| Tem de escolher 4 pilotos | C27 <= D27 | SUM(J4:J23) <= 4 |
| Não pode gastar mais de 100 milhões | C28 <= D28 | SUMPRODUCT(D4:D23,J4:J23) <= 100 |
| Pode escolher apenas 1 piloto por equipa | C29:C38 <= D29:D38 | Por exemplo, SUM(J4:J5) <= 1 para a Mercedes. |
| Variáveis de decisão binárias | J4:J23 | J4:J23 = binary |
Em seguida, podemos indicar no Solver que algoritmo queremos usar para resolver o problema. Escolhemos Simplex LP porque a nossa função objetivo e as restrições são lineares. Obtemos então a seguinte solução ótima:
Agora que o fim de semana de corridas na Áustria terminou, podemos fazer o balanço: o modelo escolheu a melhor equipa? Podemos calcular isso com base nos resultados da qualificação e da corrida. No total, a minha equipa somou 69 pontos: 27 na qualificação e 42 na corrida. Podemos agora pedir ao modelo que calcule novamente a equipa ótima, usando como valor a distribuição de pontos do jogo GP com base nos resultados da qualificação e da corrida. Obtemos assim a seguinte equipa ótima:
Naturalmente, ainda há vários aspetos que posso melhorar no meu modelo, sobretudo na forma como determino o valor dos pilotos. Por exemplo, o cálculo pode passar a incluir os resultados da qualificação ou o desempenho em circuitos semelhantes. Também seria interessante investigar se a função ponderada é a melhor opção para determinar esse valor. A função de valor poderia eventualmente ser otimizada com recurso a machine learning, ou o valor poderia ser tratado como estocástico em vez de determinístico. Esta última abordagem, em particular, pode trazer muito valor ao modelo, já que a sorte e o azar podem ter um papel importante na Fórmula 1.
A programação linear tem inúmeras aplicações nas empresas. Pode servir, por exemplo, para encontrar a combinação ideal de produtos que uma empresa deve produzir para maximizar o lucro, elaborar os horários de trabalho do pessoal hospitalar, encontrar o percurso mais curto de A até B ou resolver um problema de transporte. Na minha opinião, as técnicas de investigação operacional, como a programação linear, ainda são pouco utilizadas no mundo da data science. Por vezes, treinam-se redes neuronais muito complexas quando a mesma pergunta poderia ser respondida com um modelo muito mais simples. No nosso trabalho, devemos, por isso, continuar sempre a ponderar a complexidade face à eficácia. Será o meu modelo suficientemente eficaz para ganhar o jogo de F1 do NU.nl? Saberemos no final desta temporada de Fórmula 1 ;).
Ao longo de dois anos, acompanhámos dezenas de projetos de IA, desde a exploração inicial até um modelo que é executado todas as noites. Alguns…
Muitas organizações já realizaram um projeto-piloto de IA. O modelo funciona, a demonstração é aplaudida e depois não acontece mais nada. Pela nossa…
A inteligência artificial está a evoluir rapidamente. Surgem novos modelos quase todas as semanas, e cada vez mais organizações experimentam a IA. Ao…
Quer ser a primeira pessoa a saber quando publicamos um novo artigo no blogue?
Obrigado pela sua inscrição!