Regressão Linear: Perseguição Inteligente
Imagine que você está desenvolvendo um jogo onde inimigos devem seguir o player em um vasto mundo aberto. A forma como o NPC se movimenta pode ser essencial para proporcionar uma experiência de jogo mais envolvente. Para isso, você decide utilizar um modelo de regressão linear para ajustar a velocidade dos inimigos conforme a distância ao alvo. Vamos ver como isso funciona?
O Cenário:
Seu inimigo, um caçador implacável, deve perseguir o player que está constantemente em movimento. Ele precisa ajustar sua velocidade de maneira inteligente para alcançar o player rapidamente quando ele estiver distante e desacelerar para ajustar sua precisão quando estiver mais próximo, evitando movimentos bruscos que possam atrapalhar sua perseguição.
A Regressão Linear:
A regressão linear entra em ação ao modelar a relação entre a distância (d) e a velocidade (v) do inimigo. Suponhamos que você coletou dados observando o comportamento do NPC em várias simulações:
Neste caso, quanto maior a distancia maior a velocidade.
distance = [10, 8, 6, 4, 2, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] # Distâncias (X)
speeds = [2, 1.9, 1.6, 1.3, 1, 2.1, 2.5, 2.7, 2.6, 2.8, 3, 3.1, 3.3, 3.2, 3.5]# Velocidades (Y)
Você percebe que existe uma relação linear entre a distância e a velocidade: à medida que a distância aumenta, a velocidade do NPC também aumenta. Esta relação pode ser expressa pela equação de uma linha reta:
A equação reduzida da reta é y = mx + b, onde x e y são, respectivamente, a variável independente e a variável dependente; m é o coeficiente angular, e b é o coeficiente linear.
Em outras palavras, temos:
V=mD+b,
Onde V é a velocidade, D é a distância, m é a inclinação da linha (indicando a taxa de aumento de velocidade por unidade de distância) e b é o intercepto (a velocidade inicial quando a distância é zero).
Determinando os Parâmetros:
Usando a técnica de regressão linear, você calcula m e b com base nos dados coletados:
Após calcular esses valores, você encontra a equação da linha que melhor se ajusta aos seus dados. Por exemplo, suponhamos que m=0.2 e b=. Assim, a equação seria:
V=0.2*D
Para avaliar a precisão do modelo de regressão linear, utilizamos algumas métricas de erro:
Erro Absoluto Médio (MAE): Mede a média das diferenças absolutas entre os valores previstos e os valores reais;
Erro Quadrático Médio (MSE): Mede a média dos quadrados das diferenças entre os valores previstos e os valores reais.
Essas métricas ajudam a entender o quão bem o modelo de regressão linear está ajustando os dados. O MAE é útil para interpretar o erro em termos das unidades originais dos dados, enquanto o MSE penaliza mais os erros maiores, sendo útil para identificar grandes discrepâncias entre os valores previstos e os valores reais.
Implementação no Jogo: Ajustando a Velocidade do NPC com Regressão Linear
Para o exemplo, utilizaremos Python com a biblioteca sklearn, mas é claro que é possível escrever o código em C# utilizando Unity. Desta forma, vamos ajustar a velocidade de um NPC (Inimigo) de acordo com a distância ao jogador. Este é um exemplo simples, mas que pode facilitar a compreensão dos conceitos de regressão linear aplicados ao desenvolvimento de jogos.
Desenvolvimento
import numpy as np from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_absolute_error,mean_squared_error import matplotlib.pyplot as plt# Dados de exemplo adicionais - quanto maior a distancia maior a velocidade distance = np.array([[10], [8], [6], [4], [2], [12], [14], [16], [18], [20], [22], [24], [26], [28], [30]]) # Distâncias (X) speeds = np.array([[2], [1.9], [1.6], [1.3], [1], [2.1], [2.5], [2.7], [2.6], [2.8], [3], [3.1], [3.3], [3.2], [3.5]]) # Velocidades (Y) <strong># Criar e treinar o modelo de regressão linear</strong> model = LinearRegression() model.fit(distance, speeds) <strong>#verificar o coeficientes b</strong> model.intercept_ print(model.intercept_) <strong>#verificar os coeficientes m - inclinacao da curva</strong> model.coef_ print(model.coef_) <strong># Prever a velocidade usando o modelo treinado</strong> predicted_speeds = model.predict(distance) <strong>Calcular os erros</strong> #erros resultado = abs(speeds - predicted_speeds).mean() mae= mean_absolute_error(speeds,predicted_speeds) mse = mean_squared_error(speeds,predicted_speeds) plt.scatter(distance, speeds, color='blue', label='Dados de exemplo') plt.plot(distance,predicted_speeds, color='red', label='Linha de Regressão') plt.xlabel('Distância até o alvo') plt.ylabel('Velocidade do NPC') plt.title('Regressão Linear: Distância vs Velocidade') plt.legend() plt.show()
Após a execução do código, podemos visualizar o resultado na Figura 1.0.
Figura 1.0 – Velocidade x Deslocamento
É notório observar que, quanto mais distante o NPC estiver do jogador, maior será a sua velocidade. Em relação aos dados e à projeção, podemos analisar os erros para entender melhor a precisão do modelo.
Conclusão:
Ciro Ciro
Seu conteúdo é maravilhoso!
Flávia Moreira Flávia Moreira
Obrigada pelo seu comentário.
Wellington Wellington
Conteúdo sempre objetivo, parabéns!
Wellington Wellington
Sempre com objetividade, é prazeroso ler! Parabéns!
Flávia Moreira Flávia Moreira
Obrigada!