From 9c48010c38a7bdccf69a32c1cf92a1935f09af5d Mon Sep 17 00:00:00 2001 From: tomasz Date: Mon, 18 May 2020 18:55:18 +0200 Subject: [PATCH] blad w algorytmie, nie generuje nowych obiektow tylko nadpisuje juz wygenerowane --- .idea/workspace.xml | 318 +++++++++--------- Mapa/__pycache__/generate.cpython-37.pyc | Bin 3030 -> 3084 bytes Mapa/generate.py | 4 +- __pycache__/program.cpython-37.pyc | Bin 4934 -> 4758 bytes genetyczny/Data.py | 1 + genetyczny/__pycache__/Data.cpython-37.pyc | Bin 746 -> 765 bytes genetyczny/__pycache__/eee.cpython-37.pyc | Bin 0 -> 3368 bytes genetyczny/__pycache__/funkcje.cpython-37.pyc | Bin 4689 -> 4714 bytes genetyczny/eee.py | 142 ++++++++ genetyczny/funkcje.py | 1 + genetyczny/genetyczny.py | 1 - program.py | 28 +- 12 files changed, 317 insertions(+), 178 deletions(-) create mode 100644 genetyczny/__pycache__/eee.cpython-37.pyc create mode 100644 genetyczny/eee.py delete mode 100644 genetyczny/genetyczny.py diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 6c26ce9..72c409c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,12 +2,12 @@ - + + - - + - regals - isOccupied - print - regal - whee - returnPath 10 regalsik # @@ -154,6 +139,12 @@ cop jakLiczycKoszt jakLiczyc + eve + doW + self + moves + gen + wybierz fitness @@ -178,19 +169,20 @@ - + + + + - + - - - @@ -391,17 +383,16 @@ - - + - + - + @@ -438,10 +429,20 @@ + + file://$PROJECT_DIR$/genetyczny/eee.py + 24 + file://$PROJECT_DIR$/genetyczny/funkcje.py - 145 - + + file://$PROJECT_DIR$/genetyczny/funkcje.py + 40 + @@ -485,13 +486,6 @@ - - - - - - - @@ -500,9 +494,6 @@ - - - @@ -536,13 +527,6 @@ - - - - - - - @@ -570,20 +554,6 @@ - - - - - - - - - - - - - - @@ -591,34 +561,27 @@ - - - - - - - - - - - - - + + - - + + - + - - - - - + + + + + + + + + @@ -629,40 +592,81 @@ - + - - - - - + + - + - - + + + + + + + + + - + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Mapa/__pycache__/generate.cpython-37.pyc b/Mapa/__pycache__/generate.cpython-37.pyc index b301dedc62fc9ea72477caed18228f925a365636..5fcef5cc6e556c6fb963b3c9209013ab13b7de22 100644 GIT binary patch delta 98 zcmca6-Xp>5#LLUY00izWhvE)S3vvIOF$7ViGQ$|Lq%`RLrjEwA))47)d034|d A761SM diff --git a/Mapa/generate.py b/Mapa/generate.py index 397b7f2..46f2e55 100644 --- a/Mapa/generate.py +++ b/Mapa/generate.py @@ -173,10 +173,10 @@ class Generate: all[wysokosc-1][szerokosc-3] = 23 all[wysokosc-2][szerokosc-4] = 1 - """ Drugi wyjazd + all[wysokosc-2][2] = 2 all[wysokosc-1][2] = 23 all[wysokosc-2][3] = 1 - """ + return all diff --git a/__pycache__/program.cpython-37.pyc b/__pycache__/program.cpython-37.pyc index 48eff3bf018f014eb8e9303aeefa43343c39439a..dd8f3c39a985f5de3e9d3ed0de805aa8f7f0e5a1 100644 GIT binary patch delta 1440 zcmaJ>&uooqrJ(~^+j00xBkpZPat5bCA>fVpr-qF0WcS;q;4gtgx6&U`c9&YSP8 zUz~Wd=w42zlR#JaWm*~jh-4j!NUYg&R#JUDt2u7aG9-WEtN6s6f;-~MBw_52U( zHR9pumqg{VXiZ+fyH+o*)#bzWbLH|{eNC6k_mL^-VrpJjXf;op09|uqK|>XLq7Pq^ zcgKrv*~dH20<78;cWOcfIvGIq5Uo@w5H`MMubP&aql!B-ZK2&jY-eQREEA!zT7>$n z9w$E&qD10(%2;nAK)QQr8O&23OyG>Xpy%~z6|EIWoOP;zfiZ&K!-EAQ8_gPjjOB8g#Lv-VEuoAJVtq;zyya63m&AeZppd#@DgMKVUZ!r1Ptk*#W|JjTC`8NY3zr5)&EG5;*UFWF z)zo*DR>wG_KxSax^P9Tls7K9K@nOrasd z_4)f|iQNe@ypyI)#zy;!ea%k9(ZXDm^nS;y(F^b5c*&&(e7$+URo^`4`+oG+JB9gZ Kell;ME&d0D#7pY{ delta 1591 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 literal 0 HcmV?d00001 diff --git a/genetyczny/__pycache__/funkcje.cpython-37.pyc b/genetyczny/__pycache__/funkcje.cpython-37.pyc index 74e2f21e8df2dc147c132b4c0920990733e82bad..9e698499fc6ecd7d5cf617561f049aeeefcceb63 100644 GIT binary patch delta 492 zcmZwEOD_Xa6bJA*!#vG&S|q4fB$a5=q#7a?9#QouS_=}A5(~EF3$PS>&M8YbIluYOy?17A&b)*^LU!D?O^L?P>BHJt*?v_agYRky zB9(LP6CjGm#tjT(k9p!Bplw29+L##LnThsMiW@S)!=O^BCaK&v^fjD!!M0M8Jmnfd z^5l~0skK!1mvF2hnAZPUkUY)PH{~TMET;v(GOP)QE+WG86IEqvH@ zTRGYhdG`P{>kRtv!U{HlC7WQ%I+(y^)`>XYTi-3W^tfvg63tssFZ-ZX7W0)Sdklh8 zG%co?8D^GAG9wsr#+3xcG8UW|B=FK%g;D%+qOn?Qns`@@W=d7#pqR_<=Tq6@Bi*_> zA%RLKvOp~2vj3`w+a!9KPG*4!>%U)|;E5y#0)tA5;xo<#Iw6IHKrvkFKsT=sGyDTY WoSA3%d}5JFAv7kn4&BsSb?pcBv0&u@ delta 445 zcmYk2Jx>Bb5Qc9K?t}Z_4#cPsGzK)mNEAau0VaH?5G1q~8lzHJXw0641)2~$+G#B? zCbmlW2Ud1yi-nbimi_^q(Zo2L_sQ(LliAt*NIoa+qHP-zg|hpwv)#8}R2bpA+Jp3< zt9=42<9Xl)ayV;TxLGO_8e@vFf_FwaR-klWCU68uDyc;Bo-k;3ZMmnk)oTE$?dvJn zHxuUn{i`_x>OXl~H5lG4HG@6-w{1<7A+M17`~gXuC_0#k?CI zd!#c@CrF^uO%{kI9=TVuWpczEBhJ_)r1am;MK)@<5XvSRlnzN=gdow(7ESC2mlo&L nt%04;N$Th2GgKmS4E|BUKPc)9o=-Fx4UC4XT1+?eNnQH}xxP@7 diff --git a/genetyczny/eee.py b/genetyczny/eee.py new file mode 100644 index 0000000..481f1eb --- /dev/null +++ b/genetyczny/eee.py @@ -0,0 +1,142 @@ +from genetyczny.funkcje import * +from easygui import * +from genetyczny.Data import Data +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.animation as animation + +def start(data, wheel): + + ileGeneracji = 200 + ileWPopulacji = 16 + fragment = 0.2 + mutacja = 0.05 + unbox = 3 + + + data.kordyWozka = (wheel.ns, wheel.we) + data.jakLiczycKoszt = unbox + + randomPopulation = genRandomPopulation(data, ileWPopulacji) + for i in range(ileGeneracji): + if i == 0: + best2 = dwieNajlepsze(randomPopulation, data) + else: + x = genPopulacje(best2[0], best2[1], ileWPopulacji, fragment, mutacja) + best2 = dwieNajlepsze(x, data) + data.histZmian.append(data.best[1]) + break + #rysujWykres(data, ileGeneracji, 1000, 2000) + + + +def ruszWozek(gen,data, moves, wheel): + regalKordy = gen.kordy + unbox = data.unbox[gen.ktoryUnbox] + star = AStar() + mapForAStar = data.astarMap[:] + mapForAStar[regalKordy[0]][regalKordy[1]] = 0 + path = star.search([wheel.ns, wheel.we], regalKordy, mapForAStar, 1, 1) + cns = wheel.ns + cwe = wheel.we + value = path[cns][cwe] + while True: + if cns > 0 and path[cns - 1][cwe] == (value + 1): + cns = cns - 1 + moves.append(1) + value = value + 1 + continue + if cns < (len(mapForAStar) - 1) and path[cns + 1][cwe] == (value + 1): + cns = cns + 1 + moves.append(2) + value = value + 1 + continue + if cwe > 0 and path[cns][cwe - 1] == (value + 1): + cwe = cwe - 1 + moves.append(3) + value = value + 1 + continue + if cwe < (len(mapForAStar[0]) - 1) and path[cns][cwe + 1] == (value + 1): + cns = cns + 1 + moves.append(4) + value = value + 1 + continue + break + mapForAStar[regalKordy[0]][regalKordy[1]] = 1 + # wyszukiwanie ścieżki z miejsca podjęcia paczki do regału + # zmienna path posiada macierz oraz kroki podjęte przez wózek + path = star.search([regalKordy[0], regalKordy[1]], unbox, mapForAStar, 1, 1) + #mapForAStar[where[0]][where[1]] = 1 + value = path[cns][cwe] + while True: + if cns > 0 and path[cns - 1][cwe] == (value + 1): + cns = cns - 1 + moves.append(1) + value = value + 1 + continue + if cns < (len(mapForAStar) - 1) and path[cns + 1][cwe] == (value + 1): + cns = cns + 1 + moves.append(2) + value = value + 1 + continue + if cwe > 0 and path[cns][cwe - 1] == (value + 1): + cwe = cwe - 1 + moves.append(3) + value = value + 1 + continue + if cwe < (len(mapForAStar[0]) - 1) and path[cns][cwe + 1] == (value + 1): + cwe = cwe + 1 + moves.append(4) + value = value + 1 + continue + break + +def rysujWykres(data, x, yStart, yEnd): + + plt.axis([0, x,yStart, yEnd]) + + for i in range(0, len(data.doWykresu) - 1): + y = data.doWykresu[i] + x = i + plt.scatter(x, y) + plt.pause(0.0001) + + plt.show() + + +def okno(): + good = True + fieldValues = multenterbox("Wprowadź warunki początkowe", "Start algorytmu genetycznego", ["Ile chrom. w generacji", "Wielkosc dziedziczonego fragmentu (x>0 and x<1)", "Wartosc mutacji (x>0 and x<1)", "Unbox: (0or 1 or 2 or 2)", "Ile generacji"]) + if(fieldValues[0].isnumeric() and (fieldValues[0]!="")): + good = False + elif(good==True): + msgbox("Wartość nie jest liczbą", "Błąd") + good = False + if(fieldValues[1].isnumeric() and (fieldValues[1]!="")): + if((int(fieldValues[1])<=0) and (good==True) and (int(fieldValues[1])>= 1)): + msgbox("Zla wartosc fragmentu") + good = False + elif (good == True): + msgbox("Wartość nie jest liczbą", "Błąd") + good = False + if(fieldValues[2].isnumeric() and (fieldValues[2]!="")): + if((int(fieldValues[1])<=0) and (good==True) and (int(fieldValues[1])>= 1)): + msgbox("Zla wartosc mutacji") + good = False + elif (good == True): + msgbox("Wartość nie jest liczbą", "Błąd") + good = False + if(fieldValues[3].isnumeric() and (fieldValues[3]!="")): + if(((int(fieldValues[3]) != 0) or (int(fieldValues[3]) != 1) or (int(fieldValues[3]) != 2) or (int(fieldValues[3]) != 3)) and (good==True)): + msgbox("Zla wartosc unboxa") + good = False + elif (good == True): + msgbox("Wartość nie jest liczbą", "Błąd") + good = False + if(fieldValues[4].isnumeric() and (fieldValues[4]!="")): + pass + else: + msgbox("Wartość nie jest liczbą", "Błąd") + good = False + if(good == True): + return [fieldValues[0], fieldValues[1], fieldValues[2],fieldValues[3]] diff --git a/genetyczny/funkcje.py b/genetyczny/funkcje.py index bccff64..fd0d297 100644 --- a/genetyczny/funkcje.py +++ b/genetyczny/funkcje.py @@ -150,6 +150,7 @@ def dwieNajlepsze(populacja, data): data.best = (pierwsza[:],bestValue) elif(data.best[1] > bestValue): data.best = (pierwsza[:],bestValue) + data.doWykresu.append(bestValue) tmpPopulacja.pop(bestChromIndex) chromFitness.pop(bestChromIndex) diff --git a/genetyczny/genetyczny.py b/genetyczny/genetyczny.py deleted file mode 100644 index 8b13789..0000000 --- a/genetyczny/genetyczny.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/program.py b/program.py index 92c030c..12859b6 100644 --- a/program.py +++ b/program.py @@ -15,6 +15,7 @@ from neurons import Neurons from whereDecision import WhereDecision from Evencik import Evencik from genetyczny.Data import Data +from genetyczny.eee import * class MainWindow: def __init__(self, szerokosc, wysokosc, kruche, latwopalne, radioaktywne, niebezpieczne): @@ -58,7 +59,7 @@ class MainWindow: self.map[i][j] = Shelf(self.screen, self.cell, i, j, (self.map[i][j]-3)%4, (self.map[i][j]-3)//4) self.mapForAStar[i][j] = 1 - self.map = randomBox(self.map, self.regals, 25) + self.map = randomBox(self.map, self.regals, 5) updateMap(self.data, self.map, self.mapForAStar, self.regals) generateGeny(self.data) @@ -81,31 +82,22 @@ class MainWindow: self.wheel.move(Evencik(pygame.K_LEFT), self.map) elif (self.moves[0]==4): self.wheel.move(Evencik(pygame.K_RIGHT), self.map) + self.moves.pop(0) def events(self): for event in pygame.event.get(): if(event.type==pygame.QUIT): sys.exit() - """ - elif(event.type == pygame.K_p): - print("eee") - """ + elif(event.type==pygame.KEYDOWN): - - self.data.kordyWozka = (self.wheel.ns, self.wheel.we) - self.data.jakLiczycKoszt = 1 - - randomPopulation = genRandomPopulation(self.data, 5) - for i in range(100): - if i == 0: - best2 = dwieNajlepsze(randomPopulation, self.data) - else: - x = genPopulacje(best2[0], best2[1], 5, 0.2, 0.3) - best2 = dwieNajlepsze(x, self.data) - self.data.histZmian.append(self.data.best[1]) - if len(self.moves)==0: + if event.key == pygame.K_g: + start(self.data,self.wheel) + for gen in self.data.best[0]: + ruszWozek(gen,self.data, self.moves, self.wheel) + elif len(self.moves)==0: self.wheel.move(event, self.map) + elif(event.type==pygame.MOUSEBUTTONDOWN): if (type(self.map[0][2]) == Floor): whatIsIt = self.neurons.whatIsIt(easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]]))