From 687ee801703f3c5f8ce3adeb28759e864d9c70d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kinga=20Jagodzi=C5=84ska?= Date: Mon, 15 Jun 2020 11:10:08 +0000 Subject: [PATCH] =?UTF-8?q?Zaktualizuj=20'Traktorek/Kinga=20Jagodzi=C5=84s?= =?UTF-8?q?ka=5FAlgorytm=20genetyczny.py'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Kinga Jagodzińska_Algorytm genetyczny.py | 312 +++++++++--------- 1 file changed, 156 insertions(+), 156 deletions(-) diff --git a/Traktorek/Kinga Jagodzińska_Algorytm genetyczny.py b/Traktorek/Kinga Jagodzińska_Algorytm genetyczny.py index 5ce0567..48dd836 100644 --- a/Traktorek/Kinga Jagodzińska_Algorytm genetyczny.py +++ b/Traktorek/Kinga Jagodzińska_Algorytm genetyczny.py @@ -1,156 +1,156 @@ -import random -import pygame - - -class Gen(object): - - def __init__(self, game): - self.game = game - - self.pokolenie = 0 - self.length = 0 - self.max_gen = 99 - self.index_gen = [] - - def empty(self): - for x in range(25): - if self.game.fields[x] == "puste": - self.length = self.length + 1 - self.index_gen.append(x) - - # tworzenie dna - def dna_create(self): - self.dna = [] - for x in range(self.max_gen): - temp = [] - for y in range(self.length): - temp.append(random.choice(["żyto", "jęczmień", "owies", "marchew", "rzodkiew", "pietruszka"])) - self.dna.append(temp) - - def algorytm(self): - l = [] - first = True - self.empty() - self.dna_create() - while True: - if first == True: - for x in range(len(self.dna)): - l.append(self.l_score(self.dna[x])) - first = False - elif first == False: - for x in range(int(self.max_gen * 1 / 3)): - l.append(self.l_score(self.dna[x + int(self.max_gen * 2 / 3)])) - if max(l) >= self.length or self.pokolenie > 200: - return self.dna[l.index(max(l))] - # usuwamy najmniej odpowiadające nam dna - for x in range(int(self.max_gen * 1 / 3)): - del self.dna[l.index(min(l))] - l.remove(min(l)) - for x in range(int(self.max_gen * 1 / 3)): - temp = [] - for y in range(self.length): - if y % 2 == 0: - temp.append(self.dna[x][y]) - if y % 2 == 1: - temp.append(self.dna[int(self.max_gen * 2 / 3) - 1 - x][y]) - # mutacja - if random.randint(0, 100) <= 40: - for x in range(3): - temp[random.randint(0, self.length - 1)] = random.choice(["żyto", "jęczmień", "owies", "marchew", "rzodkiew", "pietruszka"]) - self.dna.append(temp) - self.pokolenie = self.pokolenie + 1 - - def l_score(self, tab): - suma1 = 0 - for x in range(len(tab)): - suma = 1 - for y in self.game.neighbours[self.index_gen[x]]: - if y in self.index_gen: - som = tab[self.index_gen.index(y)] - else: - som = self.game.fields[y] - if tab[x] == "żyto": - if som == "żyto": - suma = suma * 0.5 - elif som == "jęczmień": - suma = suma * 1 - elif som == "owies": - suma = suma * 0.7 - elif som == "marchew": - suma = suma * 0 - elif som == "rzodkiew": - suma = suma * 1 - elif som == "pietruszka": - suma = suma * 0.6 - - elif tab[x] == "jęczmień": - if som == "żyto": - suma = suma * 1 - elif som == "jęczmień": - suma = suma * 0.8 - elif som == "owies": - suma = suma * 0.2 - elif som == "marchew": - suma = suma * 1 - elif som == "rzodkiew": - suma = suma * 0.2 - elif som == "pietruszka": - suma = suma * 0.9 - - elif tab[x] == "owies": - if som == "żyto": - suma = suma * 0.7 - elif som == "jęczmień": - suma = suma * 0.2 - if som == "owies": - suma = suma * 1 - if som == "marchew": - suma = suma * 0.3 - if som == "rzodkiew": - suma = suma * 0 - if som == "pietruszka": - suma = suma * 1 - - if tab[x] == "marchew": - if som == "żyto": - suma = suma * 0 - if som == "jęczmień": - suma = suma * 1 - if som == "owies": - suma = suma * 0.3 - if som == "marchew": - suma = suma * 0.9 - if som == "rzodkiew": - suma = suma * 1 - if som == "pietruszka": - suma = suma * 0.8 - - if tab[x] == "rzodkiew": - if som == "żyto": - suma = suma * 1 - if som == "jęczmień": - suma = suma * 0.2 - if som == "owies": - suma = suma * 0 - if som == "marchew": - suma = suma * 1 - if som == "rzodkiew": - suma = suma * 0.9 - if som == "pietruszka": - suma = suma * 0.7 - - if tab[x] == "pietruszka": - if som == "żyto": - suma = suma * 0.6 - if som == "jęczmień": - suma = suma * 0.9 - if som == "owies": - suma = suma * 1 - if som == "marchew": - suma = suma * 0.8 - if som == "rzodkiew": - suma = suma * 0.7 - if som == "pietruszka": - suma = suma * 0.4 - suma1 = suma1 + suma - return suma1 +import random +import pygame + + +class Gen(object): + + def __init__(self, game): + self.game = game + + self.pokolenie = 0 + self.length = 0 + self.max_gen = 99 + self.index_gen = [] + + def empty(self): + for x in range(25): + if self.game.fields[x] == "puste": + self.length = self.length + 1 + self.index_gen.append(x) + + # tworzenie dna + def dna_create(self): + self.dna = [] + for x in range(self.max_gen): + temp = [] + for y in range(self.length): + temp.append(random.choice(["rzodkiewa", "papryka", "sałata", "marchew", "pomidor", "pietruszka"])) + self.dna.append(temp) + + def algorytm(self): + l = [] + first = True + self.empty() + self.dna_create() + while True: + if first == True: + for x in range(len(self.dna)): + l.append(self.l_score(self.dna[x])) + first = False + elif first == False: + for x in range(int(self.max_gen * 1 / 3)): + l.append(self.l_score(self.dna[x + int(self.max_gen * 2 / 3)])) + if max(l) >= self.length or self.pokolenie > 200: + return self.dna[l.index(max(l))] + # usuwamy najmniej odpowiadające nam dna + for x in range(int(self.max_gen * 1 / 3)): + del self.dna[l.index(min(l))] + l.remove(min(l)) + for x in range(int(self.max_gen * 1 / 3)): + temp = [] + for y in range(self.length): + if y % 2 == 0: + temp.append(self.dna[x][y]) + if y % 2 == 1: + temp.append(self.dna[int(self.max_gen * 2 / 3) - 1 - x][y]) + # mutacja + if random.randint(0, 100) <= 40: + for x in range(3): + temp[random.randint(0, self.length - 1)] = random.choice(["rzodkiewa", "papryka", "sałata", "marchew", "pomidor", "pietruszka"]) + self.dna.append(temp) + self.pokolenie = self.pokolenie + 1 + + def l_score(self, tab): + suma1 = 0 + for x in range(len(tab)): + suma = 1 + for y in self.game.neighbours[self.index_gen[x]]: + if y in self.index_gen: + som = tab[self.index_gen.index(y)] + else: + som = self.game.fields[y] + if tab[x] == "rzodkiewa": + if som == "rzodkiewa": + suma = suma * 0.5 + elif som == "papryka": + suma = suma * 1 + elif som == "sałata": + suma = suma * 0.7 + elif som == "marchew": + suma = suma * 0 + elif som == "pomidor": + suma = suma * 1 + elif som == "pietruszka": + suma = suma * 0.6 + + elif tab[x] == "papryka": + if som == "rzodkiewa": + suma = suma * 1 + elif som == "papryka": + suma = suma * 0.8 + elif som == "sałata": + suma = suma * 0.2 + elif som == "marchew": + suma = suma * 1 + elif som == "pomidor": + suma = suma * 0.2 + elif som == "pietruszka": + suma = suma * 0.9 + + elif tab[x] == "sałata": + if som == "rzodkiewa": + suma = suma * 0.7 + elif som == "papryka": + suma = suma * 0.2 + if som == "sałata": + suma = suma * 1 + if som == "marchew": + suma = suma * 0.3 + if som == "pomidor": + suma = suma * 0 + if som == "pietruszka": + suma = suma * 1 + + if tab[x] == "marchew": + if som == "rzodkiewa": + suma = suma * 0 + if som == "papryka": + suma = suma * 1 + if som == "sałata": + suma = suma * 0.3 + if som == "marchew": + suma = suma * 0.9 + if som == "pomidor": + suma = suma * 1 + if som == "pietruszka": + suma = suma * 0.8 + + if tab[x] == "pomidor": + if som == "rzodkiewa": + suma = suma * 1 + if som == "papryka": + suma = suma * 0.2 + if som == "sałata": + suma = suma * 0 + if som == "marchew": + suma = suma * 1 + if som == "pomidor": + suma = suma * 0.9 + if som == "pietruszka": + suma = suma * 0.7 + + if tab[x] == "pietruszka": + if som == "rzodkiewa": + suma = suma * 0.6 + if som == "papryka": + suma = suma * 0.9 + if som == "sałata": + suma = suma * 1 + if som == "marchew": + suma = suma * 0.8 + if som == "pomidor": + suma = suma * 0.7 + if som == "pietruszka": + suma = suma * 0.4 + suma1 = suma1 + suma + return suma1