Zaktualizuj 'Traktorek/Kinga Jagodzińska_Algorytm genetyczny.py'
This commit is contained in:
parent
91715f1210
commit
687ee80170
@ -1,156 +1,156 @@
|
|||||||
import random
|
import random
|
||||||
import pygame
|
import pygame
|
||||||
|
|
||||||
|
|
||||||
class Gen(object):
|
class Gen(object):
|
||||||
|
|
||||||
def __init__(self, game):
|
def __init__(self, game):
|
||||||
self.game = game
|
self.game = game
|
||||||
|
|
||||||
self.pokolenie = 0
|
self.pokolenie = 0
|
||||||
self.length = 0
|
self.length = 0
|
||||||
self.max_gen = 99
|
self.max_gen = 99
|
||||||
self.index_gen = []
|
self.index_gen = []
|
||||||
|
|
||||||
def empty(self):
|
def empty(self):
|
||||||
for x in range(25):
|
for x in range(25):
|
||||||
if self.game.fields[x] == "puste":
|
if self.game.fields[x] == "puste":
|
||||||
self.length = self.length + 1
|
self.length = self.length + 1
|
||||||
self.index_gen.append(x)
|
self.index_gen.append(x)
|
||||||
|
|
||||||
# tworzenie dna
|
# tworzenie dna
|
||||||
def dna_create(self):
|
def dna_create(self):
|
||||||
self.dna = []
|
self.dna = []
|
||||||
for x in range(self.max_gen):
|
for x in range(self.max_gen):
|
||||||
temp = []
|
temp = []
|
||||||
for y in range(self.length):
|
for y in range(self.length):
|
||||||
temp.append(random.choice(["żyto", "jęczmień", "owies", "marchew", "rzodkiew", "pietruszka"]))
|
temp.append(random.choice(["rzodkiewa", "papryka", "sałata", "marchew", "pomidor", "pietruszka"]))
|
||||||
self.dna.append(temp)
|
self.dna.append(temp)
|
||||||
|
|
||||||
def algorytm(self):
|
def algorytm(self):
|
||||||
l = []
|
l = []
|
||||||
first = True
|
first = True
|
||||||
self.empty()
|
self.empty()
|
||||||
self.dna_create()
|
self.dna_create()
|
||||||
while True:
|
while True:
|
||||||
if first == True:
|
if first == True:
|
||||||
for x in range(len(self.dna)):
|
for x in range(len(self.dna)):
|
||||||
l.append(self.l_score(self.dna[x]))
|
l.append(self.l_score(self.dna[x]))
|
||||||
first = False
|
first = False
|
||||||
elif first == False:
|
elif first == False:
|
||||||
for x in range(int(self.max_gen * 1 / 3)):
|
for x in range(int(self.max_gen * 1 / 3)):
|
||||||
l.append(self.l_score(self.dna[x + int(self.max_gen * 2 / 3)]))
|
l.append(self.l_score(self.dna[x + int(self.max_gen * 2 / 3)]))
|
||||||
if max(l) >= self.length or self.pokolenie > 200:
|
if max(l) >= self.length or self.pokolenie > 200:
|
||||||
return self.dna[l.index(max(l))]
|
return self.dna[l.index(max(l))]
|
||||||
# usuwamy najmniej odpowiadające nam dna
|
# usuwamy najmniej odpowiadające nam dna
|
||||||
for x in range(int(self.max_gen * 1 / 3)):
|
for x in range(int(self.max_gen * 1 / 3)):
|
||||||
del self.dna[l.index(min(l))]
|
del self.dna[l.index(min(l))]
|
||||||
l.remove(min(l))
|
l.remove(min(l))
|
||||||
for x in range(int(self.max_gen * 1 / 3)):
|
for x in range(int(self.max_gen * 1 / 3)):
|
||||||
temp = []
|
temp = []
|
||||||
for y in range(self.length):
|
for y in range(self.length):
|
||||||
if y % 2 == 0:
|
if y % 2 == 0:
|
||||||
temp.append(self.dna[x][y])
|
temp.append(self.dna[x][y])
|
||||||
if y % 2 == 1:
|
if y % 2 == 1:
|
||||||
temp.append(self.dna[int(self.max_gen * 2 / 3) - 1 - x][y])
|
temp.append(self.dna[int(self.max_gen * 2 / 3) - 1 - x][y])
|
||||||
# mutacja
|
# mutacja
|
||||||
if random.randint(0, 100) <= 40:
|
if random.randint(0, 100) <= 40:
|
||||||
for x in range(3):
|
for x in range(3):
|
||||||
temp[random.randint(0, self.length - 1)] = random.choice(["żyto", "jęczmień", "owies", "marchew", "rzodkiew", "pietruszka"])
|
temp[random.randint(0, self.length - 1)] = random.choice(["rzodkiewa", "papryka", "sałata", "marchew", "pomidor", "pietruszka"])
|
||||||
self.dna.append(temp)
|
self.dna.append(temp)
|
||||||
self.pokolenie = self.pokolenie + 1
|
self.pokolenie = self.pokolenie + 1
|
||||||
|
|
||||||
def l_score(self, tab):
|
def l_score(self, tab):
|
||||||
suma1 = 0
|
suma1 = 0
|
||||||
for x in range(len(tab)):
|
for x in range(len(tab)):
|
||||||
suma = 1
|
suma = 1
|
||||||
for y in self.game.neighbours[self.index_gen[x]]:
|
for y in self.game.neighbours[self.index_gen[x]]:
|
||||||
if y in self.index_gen:
|
if y in self.index_gen:
|
||||||
som = tab[self.index_gen.index(y)]
|
som = tab[self.index_gen.index(y)]
|
||||||
else:
|
else:
|
||||||
som = self.game.fields[y]
|
som = self.game.fields[y]
|
||||||
if tab[x] == "żyto":
|
if tab[x] == "rzodkiewa":
|
||||||
if som == "żyto":
|
if som == "rzodkiewa":
|
||||||
suma = suma * 0.5
|
suma = suma * 0.5
|
||||||
elif som == "jęczmień":
|
elif som == "papryka":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
elif som == "owies":
|
elif som == "sałata":
|
||||||
suma = suma * 0.7
|
suma = suma * 0.7
|
||||||
elif som == "marchew":
|
elif som == "marchew":
|
||||||
suma = suma * 0
|
suma = suma * 0
|
||||||
elif som == "rzodkiew":
|
elif som == "pomidor":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
elif som == "pietruszka":
|
elif som == "pietruszka":
|
||||||
suma = suma * 0.6
|
suma = suma * 0.6
|
||||||
|
|
||||||
elif tab[x] == "jęczmień":
|
elif tab[x] == "papryka":
|
||||||
if som == "żyto":
|
if som == "rzodkiewa":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
elif som == "jęczmień":
|
elif som == "papryka":
|
||||||
suma = suma * 0.8
|
suma = suma * 0.8
|
||||||
elif som == "owies":
|
elif som == "sałata":
|
||||||
suma = suma * 0.2
|
suma = suma * 0.2
|
||||||
elif som == "marchew":
|
elif som == "marchew":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
elif som == "rzodkiew":
|
elif som == "pomidor":
|
||||||
suma = suma * 0.2
|
suma = suma * 0.2
|
||||||
elif som == "pietruszka":
|
elif som == "pietruszka":
|
||||||
suma = suma * 0.9
|
suma = suma * 0.9
|
||||||
|
|
||||||
elif tab[x] == "owies":
|
elif tab[x] == "sałata":
|
||||||
if som == "żyto":
|
if som == "rzodkiewa":
|
||||||
suma = suma * 0.7
|
suma = suma * 0.7
|
||||||
elif som == "jęczmień":
|
elif som == "papryka":
|
||||||
suma = suma * 0.2
|
suma = suma * 0.2
|
||||||
if som == "owies":
|
if som == "sałata":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
if som == "marchew":
|
if som == "marchew":
|
||||||
suma = suma * 0.3
|
suma = suma * 0.3
|
||||||
if som == "rzodkiew":
|
if som == "pomidor":
|
||||||
suma = suma * 0
|
suma = suma * 0
|
||||||
if som == "pietruszka":
|
if som == "pietruszka":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
|
|
||||||
if tab[x] == "marchew":
|
if tab[x] == "marchew":
|
||||||
if som == "żyto":
|
if som == "rzodkiewa":
|
||||||
suma = suma * 0
|
suma = suma * 0
|
||||||
if som == "jęczmień":
|
if som == "papryka":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
if som == "owies":
|
if som == "sałata":
|
||||||
suma = suma * 0.3
|
suma = suma * 0.3
|
||||||
if som == "marchew":
|
if som == "marchew":
|
||||||
suma = suma * 0.9
|
suma = suma * 0.9
|
||||||
if som == "rzodkiew":
|
if som == "pomidor":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
if som == "pietruszka":
|
if som == "pietruszka":
|
||||||
suma = suma * 0.8
|
suma = suma * 0.8
|
||||||
|
|
||||||
if tab[x] == "rzodkiew":
|
if tab[x] == "pomidor":
|
||||||
if som == "żyto":
|
if som == "rzodkiewa":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
if som == "jęczmień":
|
if som == "papryka":
|
||||||
suma = suma * 0.2
|
suma = suma * 0.2
|
||||||
if som == "owies":
|
if som == "sałata":
|
||||||
suma = suma * 0
|
suma = suma * 0
|
||||||
if som == "marchew":
|
if som == "marchew":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
if som == "rzodkiew":
|
if som == "pomidor":
|
||||||
suma = suma * 0.9
|
suma = suma * 0.9
|
||||||
if som == "pietruszka":
|
if som == "pietruszka":
|
||||||
suma = suma * 0.7
|
suma = suma * 0.7
|
||||||
|
|
||||||
if tab[x] == "pietruszka":
|
if tab[x] == "pietruszka":
|
||||||
if som == "żyto":
|
if som == "rzodkiewa":
|
||||||
suma = suma * 0.6
|
suma = suma * 0.6
|
||||||
if som == "jęczmień":
|
if som == "papryka":
|
||||||
suma = suma * 0.9
|
suma = suma * 0.9
|
||||||
if som == "owies":
|
if som == "sałata":
|
||||||
suma = suma * 1
|
suma = suma * 1
|
||||||
if som == "marchew":
|
if som == "marchew":
|
||||||
suma = suma * 0.8
|
suma = suma * 0.8
|
||||||
if som == "rzodkiew":
|
if som == "pomidor":
|
||||||
suma = suma * 0.7
|
suma = suma * 0.7
|
||||||
if som == "pietruszka":
|
if som == "pietruszka":
|
||||||
suma = suma * 0.4
|
suma = suma * 0.4
|
||||||
suma1 = suma1 + suma
|
suma1 = suma1 + suma
|
||||||
return suma1
|
return suma1
|
||||||
|
Loading…
Reference in New Issue
Block a user