From a8e8264b7bcf59f90caa6b585a7035606bab497c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kinga=20Jagodzi=C5=84ska?= Date: Wed, 13 May 2020 09:28:14 +0000 Subject: [PATCH] Dodaj 'Kinga' --- Kinga | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 Kinga diff --git a/Kinga b/Kinga new file mode 100644 index 0000000..3de6543 --- /dev/null +++ b/Kinga @@ -0,0 +1,162 @@ +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 = [] + self.empty() + + def empty(self): + for x in range(25): + if self.game.fields[x][0] == "puste": + self.length = self.length + 1 + self.index_gen.append(x) + + def bbrrr(self): + return self.index_gen + + # 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 = False + self.dna_create() + while True: + if first == False: + for x in range(len(self.dna)): + l.append(self.l_score(self.dna[x])) + first = True + elif first == True: + 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: + break + # 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: + 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(["żyto", "jęczmień", "owies", "marchew", "rzodkiew", "pietruszka"]) + 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 + print(self.dna[l.index(max(l))]) + return self.dna[l.index(max(l))] + + 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][0] + 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