add: genetic now working

This commit is contained in:
KOSMOGOR
2025-04-07 19:09:24 +03:00
parent c8e540f28b
commit 61276e22b5
3 changed files with 23 additions and 10 deletions
+7 -3
View File
@@ -4,14 +4,14 @@ import numpy as np
class NeuralNetwork(nn.Module):
def __init__(self, inputSize):
super(NeuralNetwork, self).__init__()
super().__init__()
self.hidden = nn.Linear(inputSize, 10)
self.output = nn.Linear(10, 3)
def forward(self, x):
x = torch.relu(self.hidden(x))
x = self.output(x)
return torch.log_softmax(x)
return torch.argmax(x)
class GeneticAlgorithm:
def __init__(self, populationSize: int, mutationRate: float, percentageBest: float, inputSize: int = 5):
@@ -54,7 +54,11 @@ class GeneticAlgorithm:
self.population.extend([child1, child2])
while len(self.population) > self.populationSize: self.population.pop()
def predict(self, data: list):
def predict(self, data: list, i):
data = torch.tensor(data, requires_grad=False).float()
return self.population[i](data)
def predict_all(self, data: list):
result = []
for i in range(self.populationSize):
result.append(self.population[i](data[i]))
+9 -7
View File
@@ -45,7 +45,7 @@ def get_features(horse):
HEIGHT, BARRIER_SPEED]
return features
genecticAlg = GeneticAlgorithm(POPULATION_SIZE, MUTATION_RATE, POPULATION_BEST)
genecticAlg = GeneticAlgorithm(POPULATION_SIZE, MUTATION_RATE, POPULATION_BEST, 10)
UI.add_horses(horses) # Add horses to UI
while True:
@@ -56,14 +56,16 @@ while True:
keys = pygame.key.get_pressed() # Get pressed keys
for horse in horses:
for i, horse in enumerate(horses):
if horse.stopped == False: # If the horse is not stopped
if keys[pygame.K_UP]: # Move horse up if UP key is pressed
horse.up()
elif keys[pygame.K_DOWN]: # Move horse down if DOWN key is pressed
horse.down()
data = get_features(horse)
res = genecticAlg.predict(data, i)
if res == 0:
horse.up()
elif res == 1:
horse.down()
else:
horse.stay() # Stop vertical movement if no key is pressed
horse.stay()
else:
horse.move(-BARRIER_SPEED, 0) # Move stopped horse to the left
+7
View File
@@ -0,0 +1,7 @@
import torch
import torch.nn as nn
import torch.nn.functional as nnf
import numpy as np
t = torch.tensor([1, 2, 3]).float()
print(torch.argmax(t))