drzewo generowane poza main

This commit is contained in:
s473561 2023-05-30 18:47:23 +02:00
parent 7bf768e6af
commit d1ba1659c1
14 changed files with 288 additions and 143 deletions

5
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"python.analysis.extraPaths": [
"./DecisionTree"
]
}

View File

@ -1,87 +0,0 @@
import graphviz
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
# def make_tree():
# plikZPrzecinkami = open("training_data.txt", 'w')
# with open('DecisionTree/200permutations_table.txt', 'r') as plik:
# for linia in plik:
# liczby = linia.strip()
# wiersz = ""
# licznik = 0
# for liczba in liczby:
# wiersz += liczba
# wiersz += ";"
# wiersz = wiersz[:-1]
# wiersz += '\n'
# plikZPrzecinkami.write(wiersz)
# plikZPrzecinkami.close()
# x = pd.read_csv('DecisionTree/training_data.txt', delimiter=';',
# names=['wielkosc', 'waga,', 'priorytet', 'ksztalt', 'kruchosc', 'dolna', 'gorna', 'g > d'])
# y = pd.read_csv('DecisionTree/decisions.txt', names=['polka'])
# # X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1) # 70% treningowe and 30% testowe
# # Tworzenie instancji klasyfikatora ID3
# clf = DecisionTreeClassifier(criterion='entropy')
# # Trenowanie klasyfikatora
# clf.fit(x.values, y.values)
# # clf.fit(X_train, y_train)
# return clf
plikZPrzecinkami = open("DecisionTree/training_data.txt", 'w')
with open('DecisionTree/200permutations_table.txt', 'r') as plik:
for linia in plik:
liczby = linia.strip()
wiersz = ""
licznik = 0
for liczba in liczby:
wiersz += liczba
wiersz += ";"
wiersz = wiersz[:-1]
wiersz += '\n'
plikZPrzecinkami.write(wiersz)
plikZPrzecinkami.close()
x = pd.read_csv('DecisionTree/training_data.txt', delimiter=';',
names=['wielkosc', 'waga,', 'priorytet', 'ksztalt', 'kruchosc', 'dolna', 'gorna', 'g > d'])
y = pd.read_csv('DecisionTree/decisions.txt', names=['polka'])
# X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1) # 70% treningowe and 30% testowe
# Tworzenie instancji klasyfikatora ID3
clf = DecisionTreeClassifier(criterion='entropy')
# Trenowanie klasyfikatora
clf.fit(x.values, y.values)
# clf.fit(X_train, y_train)
# Predykcja na nowych danych
new_data = [[2, 2, 1, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]
predictions = clf.predict(new_data)
# y_pred = clf.predict(X_test)
print(predictions)
# print("Accuracy:", clf.score(new_data, predictions))
# print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
# Wygenerowanie pliku .dot reprezentującego drzewo
dot_data = export_graphviz(clf, out_file=None, feature_names=list(x.columns), class_names=['0', '1'], filled=True,
rounded=True)
# Tworzenie obiektu graphviz z pliku .dot
graph = graphviz.Source(dot_data)
# Wyświetlanie drzewa
graph.view()
z = pd.concat([x, y], axis=1)
z.to_csv('dane.csv', index=False)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

58
drzewo_decyzyjne.py Normal file
View File

@ -0,0 +1,58 @@
import graphviz
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
def make_tree():
plikZPrzecinkami = open("training_data.txt", 'w')
with open('DecisionTree/200permutations_table.txt', 'r') as plik:
for linia in plik:
liczby = linia.strip()
wiersz = ""
licznik = 0
for liczba in liczby:
wiersz += liczba
wiersz += ";"
wiersz = wiersz[:-1]
wiersz += '\n'
plikZPrzecinkami.write(wiersz)
plikZPrzecinkami.close()
x = pd.read_csv('DecisionTree/training_data.txt', delimiter=';',
names=['wielkosc', 'waga,', 'priorytet', 'ksztalt', 'kruchosc', 'dolna', 'gorna', 'g > d'])
y = pd.read_csv('DecisionTree/decisions.txt', names=['polka'])
# X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1) # 70% treningowe and 30% testowe
# Tworzenie instancji klasyfikatora ID3
clf = DecisionTreeClassifier(criterion='entropy')
# Trenowanie klasyfikatora
clf.fit(x.values, y.values)
# clf.fit(X_train, y_train)
return clf
# # Predykcja na nowych danych
# new_data = [[2, 2, 1, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]
# predictions = clf.predict(new_data)
# # y_pred = clf.predict(X_test)
# print(predictions)
# # print("Accuracy:", clf.score(new_data, predictions))
# # print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
# Wygenerowanie pliku .dot reprezentującego drzewo
# dot_data = export_graphviz(clf, out_file=None, feature_names=list(x.columns), class_names=['0', '1'], filled=True,
# rounded=True)
# # Tworzenie obiektu graphviz z pliku .dot
# graph = graphviz.Source(dot_data)
# # Wyświetlanie drzewa
# graph.view()
# z = pd.concat([x, y], axis=1)
# z.to_csv('dane.csv', index=False)

View File

@ -1,10 +1,7 @@
import pygame import pygame
from plansza import x1, y1, x2, y2, x3, y3, x4, y4, a_pix, b_pix from plansza import x1, y1, x2, y2, x3, y3, x4, y4, a_pix, b_pix
from regal import Regal, obliczPixeleNaPodstawieKratek from regal import Regal, obliczPixeleNaPodstawieKratek
# import wozek
from packageList import * from packageList import *
# from paczka import Paczka
EKRAN_SZEROKOSC = 770 EKRAN_SZEROKOSC = 770
EKRAN_WYSOKOSC = 770 EKRAN_WYSOKOSC = 770
@ -15,9 +12,6 @@ pygame.display.set_caption("Inteligentny wozek")
icon = pygame.image.load('images/icon.png') icon = pygame.image.load('images/icon.png')
pygame.display.set_icon(icon) pygame.display.set_icon(icon)
# lista_paczek = packageList.zainicjuj_liste_paczek(a_pix, b_pix)
#lista_paczek = listOfPackages()
lista_paczek = [] lista_paczek = []
lista_paczek_na_regalach = [] lista_paczek_na_regalach = []
@ -52,11 +46,6 @@ def zwroc_regaly_kategoria(kategoria):
lista_reg.append(reg) lista_reg.append(reg)
return lista_reg return lista_reg
# def zwroc_regaly_wspolrzedne(x_reg, y_reg):
# for regal in lista_regalow:
# if regal.wiersz == obliczPixeleNaPodstawieKratek(x_reg) and regal.kolumna == obliczPixeleNaPodstawieKratek(y_reg):
# return regal
def narysuj_siatke(): def narysuj_siatke():
blockSize = 70 # Set the size of the grid block blockSize = 70 # Set the size of the grid block
WHITE = (200, 200, 200) WHITE = (200, 200, 200)
@ -94,9 +83,6 @@ def sprawdz_ktora_kolumna(y):
def narysuj_paczki(wozek): def narysuj_paczki(wozek):
#if wozek.ln == 0:
#for paczka in lista_paczek.list:
#if len(lista_paczek_na_regalach) == 0:
for paczka in lista_paczek: for paczka in lista_paczek:
paczka.narysuj(paczka.x, paczka.y, screen) paczka.narysuj(paczka.x, paczka.y, screen)
@ -104,3 +90,9 @@ def narysuj_paczke_na_regale():
for paczka in lista_paczek_na_regalach: for paczka in lista_paczek_na_regalach:
if paczka.is_in_move is False: if paczka.is_in_move is False:
paczka.narysuj(paczka.x, paczka.y, screen) paczka.narysuj(paczka.x, paczka.y, screen)
def dodaj_paczki_na_rampe(p1, p2):
lista_paczek.append(p1)
lista_paczek.append(p2)
p1.update_position(a_pix, b_pix)
p2.update_position(a_pix, b_pix)

33
main.py
View File

@ -7,6 +7,7 @@ import ekran
from grid import GridCellType, SearchGrid from grid import GridCellType, SearchGrid
from sklearn.tree import DecisionTreeClassifier from sklearn.tree import DecisionTreeClassifier
import pandas as pd import pandas as pd
import drzewo_decyzyjne
from plansza import a_pix, b_pix from plansza import a_pix, b_pix
pygame.init() pygame.init()
@ -14,15 +15,11 @@ pygame.init()
def main(): def main():
wozek = Wozek() wozek = Wozek()
p1 = Paczka('duzy', 12, 'narzedzia', False, True, False, any, any, any, any, any) p1 = Paczka('duzy', 12, 'narzedzia', False, True, False, any, any, any, any, any)
p2 = Paczka('maly', 1, 'ogród', False, True, False, any, any, any, any, any) p2 = Paczka('maly', 1, 'ogród', False, True, False, any, any, any, any, any)
ekran.lista_paczek.append(p1) ekran.dodaj_paczki_na_rampe(p1, p2)
ekran.lista_paczek.append(p2)
p1.update_position(a_pix, b_pix)
p2.update_position(a_pix, b_pix)
grid_points = SearchGrid() grid_points = SearchGrid()
drzewo = drzewo_decyzyjne.make_tree()
while True: while True:
for event in pygame.event.get(): for event in pygame.event.get():
@ -52,34 +49,14 @@ def main():
array, reg = przenoszona_paczka.tablica_do_drzewa(przenoszona_paczka.kategoria) array, reg = przenoszona_paczka.tablica_do_drzewa(przenoszona_paczka.kategoria)
plikZPrzecinkami = open("DecisionTree/training_data.txt", 'w') predictions = drzewo.predict([array])
with open('DecisionTree/200permutations_table.txt', 'r') as plik:
for linia in plik:
liczby = linia.strip()
wiersz = ""
licznik = 0
for liczba in liczby:
wiersz += liczba
wiersz += ";"
wiersz = wiersz[:-1]
wiersz += '\n'
plikZPrzecinkami.write(wiersz)
plikZPrzecinkami.close()
x = pd.read_csv('DecisionTree/training_data.txt', delimiter=';',
names=['wielkosc', 'waga,', 'priorytet', 'ksztalt', 'kruchosc', 'dolna', 'gorna', 'g > d'])
y = pd.read_csv('DecisionTree/decisions.txt', names=['polka'])
clf = DecisionTreeClassifier(criterion='entropy')
clf.fit(x.values, y.values)
predictions = clf.predict([array])
if predictions == 0: if predictions == 0:
print('odklada na dolna polke!') print('odklada na dolna polke!')
else: else:
print('odklada na gorna polke!') print('odklada na gorna polke!')
docelowy_stan = wyszukiwanie.Stan(reg.numerWiersza * 70, reg.numerKolumny * 70, 1) # x1 i y1 bo to są regału kategorii ogród docelowy_stan = wyszukiwanie.Stan(reg.numerWiersza * 70, reg.numerKolumny * 70, 1)
wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points)
sciezka = wyszukiwanie.znajdz_sciezke(wezel) sciezka = wyszukiwanie.znajdz_sciezke(wezel)
wozek.przemiesc_wozek_po_sciezce(sciezka) wozek.przemiesc_wozek_po_sciezce(sciezka)

View File

@ -89,36 +89,36 @@ class Paczka(pygame.sprite.Sprite):
# piorytet # piorytet
if self.priorytet is True: if self.priorytet is True:
tablica.append(0) tablica.append(1)
else: tablica.append(1) else: tablica.append(0)
# kształt # kształt
if self.ksztalt is True: if self.ksztalt is True:
tablica.append(0) tablica.append(1)
else: tablica.append(1) else: tablica.append(0)
# kruchość # kruchość
if self.kruchosc is True: if self.kruchosc is True:
tablica.append(0) tablica.append(1)
else: tablica.append(1) else: tablica.append(0)
reg = ekran.zwroc_regaly_kategoria(kategoria) reg = ekran.zwroc_regaly_kategoria(kategoria)
# czy dolna wolna # czy dolna wolna
if reg[0].is_dolna_free() is True: if reg[0].is_dolna_free() is True:
tablica.append(0)
else:
tablica.append(1) tablica.append(1)
else:
tablica.append(0)
#czy górna wolna #czy górna wolna
if reg[0].is_dolna_free() is True: if reg[0].is_dolna_free() is True:
tablica.append(0)
else:
tablica.append(1) tablica.append(1)
else:
tablica.append(0)
# czy na górnej więcej miejsca # czy na górnej więcej miejsca
if reg[0].is_dolna_free() is True: if reg[0].czy_na_gornej_wiecej_miejsca() is True:
tablica.append(0)
else:
tablica.append(1) tablica.append(1)
else:
tablica.append(0)
return tablica, reg[0] return tablica, reg[0]

View File

@ -0,0 +1,200 @@
1;0;0;1;0;0;1;0
0;0;1;0;1;1;0;1
2;0;1;1;0;0;0;1
2;2;1;0;1;1;1;0
1;0;0;1;0;0;0;1
2;1;0;0;1;1;0;0
1;0;0;0;1;0;0;1
1;1;0;1;0;0;0;1
0;0;1;0;1;1;1;0
0;2;0;0;0;1;1;0
0;0;1;0;0;1;0;1
0;0;0;0;0;1;1;0
0;2;1;0;1;1;0;0
2;0;0;0;1;0;0;0
2;1;0;1;0;1;1;1
0;1;1;0;1;1;1;0
0;2;0;1;1;1;0;1
1;2;1;0;1;1;0;0
0;0;1;1;1;1;0;1
0;0;0;1;1;0;0;1
1;1;1;1;1;0;1;0
1;2;1;0;0;1;1;1
2;2;1;1;0;1;1;1
1;2;1;0;1;1;0;1
0;1;0;0;0;1;0;1
1;1;0;0;0;1;0;1
0;1;0;0;0;1;1;1
2;1;0;1;0;1;0;1
0;1;1;0;1;1;0;0
2;1;0;1;0;1;1;0
1;2;1;0;0;0;1;1
1;2;0;1;0;1;1;1
0;2;0;1;0;1;0;1
2;1;1;0;1;1;1;1
0;2;0;1;0;0;0;1
0;1;1;0;0;1;1;0
2;2;1;0;0;0;1;1
1;0;0;0;0;0;1;0
0;0;1;1;0;1;0;0
2;2;0;1;1;1;0;0
1;2;1;1;0;0;0;1
1;2;0;1;0;0;1;1
0;1;0;1;1;1;1;0
0;1;0;0;1;1;0;0
0;1;0;1;1;0;0;0
1;1;1;0;1;1;0;1
1;1;1;1;0;1;1;0
2;1;1;1;0;1;1;0
2;2;0;0;1;1;0;0
1;0;0;1;0;1;0;1
2;1;1;1;1;0;1;0
0;0;0;0;1;1;0;0
2;1;1;1;0;1;0;1
1;2;1;1;1;0;1;1
0;2;0;0;1;1;1;1
2;1;0;1;1;0;0;0
0;2;1;1;1;0;1;1
1;2;0;1;1;1;1;0
0;2;0;0;0;1;0;1
1;2;0;0;0;1;0;0
2;0;0;1;0;1;1;1
2;1;1;0;0;0;1;1
0;1;1;1;0;1;0;0
2;1;0;1;1;1;0;0
0;2;0;1;0;0;0;0
2;1;0;0;1;0;0;1
1;1;0;0;1;1;0;0
2;0;0;1;0;0;1;1
2;0;1;1;1;0;1;1
2;2;0;1;1;0;0;0
0;1;0;1;1;1;0;1
1;0;1;1;1;0;0;0
2;0;0;1;1;1;1;1
1;0;0;0;0;0;0;1
2;1;1;0;0;0;0;1
0;0;0;0;1;1;0;1
0;1;0;1;0;0;0;1
2;2;0;1;0;0;0;0
0;2;1;1;1;1;0;1
2;2;1;0;0;1;1;0
1;2;0;0;1;1;1;0
0;1;1;1;0;0;0;1
1;1;1;0;1;0;0;0
2;0;1;1;0;0;1;1
2;0;1;0;1;0;1;0
2;2;0;0;0;1;1;0
1;1;0;1;1;0;1;1
2;0;0;0;0;0;1;1
1;2;0;0;1;1;0;1
1;2;1;1;0;0;0;0
0;0;1;1;1;1;1;0
0;2;1;1;0;1;0;0
2;1;1;0;0;0;1;0
1;0;0;1;1;0;0;0
2;2;0;1;1;1;0;1
2;0;0;1;1;1;0;0
0;2;1;0;0;0;0;0
1;2;1;1;1;0;0;1
0;0;0;0;0;1;1;1
2;2;1;1;1;0;1;1
0;1;0;0;1;0;1;0
2;1;1;0;1;1;0;0
0;1;1;1;1;1;1;1
1;2;1;1;1;0;1;0
2;0;1;1;1;1;1;0
1;0;1;1;0;0;1;0
0;2;0;0;1;0;0;1
2;2;0;0;0;1;0;0
0;2;0;0;1;1;0;0
0;1;0;0;0;0;1;1
1;0;0;0;0;1;0;1
2;1;0;0;0;0;1;0
0;1;1;0;0;1;0;0
1;0;1;0;1;0;1;0
2;0;0;0;1;1;0;0
0;0;0;0;0;0;0;0
0;0;1;0;1;0;0;0
1;0;1;0;0;0;0;0
0;2;1;0;0;0;0;1
2;0;0;1;1;1;0;1
0;2;0;1;1;1;1;0
0;2;1;1;1;1;1;1
1;2;0;1;0;1;1;0
0;2;1;0;0;1;0;0
2;0;1;1;1;1;1;1
0;0;0;1;1;1;1;1
1;2;0;1;1;0;0;0
1;2;0;1;1;0;0;1
2;2;0;1;0;0;1;0
2;2;0;0;0;0;1;0
0;0;0;1;0;0;1;0
1;0;1;0;1;0;0;0
0;2;0;0;0;0;0;0
2;0;1;0;1;1;1;1
0;2;1;0;0;0;1;1
0;2;1;0;1;1;1;1
2;2;1;0;1;0;1;0
1;1;1;1;1;1;1;1
0;1;1;0;1;0;0;0
2;1;1;0;0;1;1;1
0;0;1;0;1;1;1;1
0;1;1;0;1;0;1;0
2;0;0;1;0;0;1;0
1;1;0;1;1;1;1;0
2;0;0;1;1;1;1;0
0;0;1;0;0;1;1;0
1;0;1;0;1;1;1;1
0;1;0;0;0;0;0;1
0;2;0;1;1;0;0;1
2;1;1;0;1;0;1;1
1;1;1;1;1;0;1;1
1;0;1;1;0;0;1;1
1;0;0;1;1;0;0;1
2;1;1;1;0;0;1;0
1;0;0;0;0;0;0;0
0;0;0;1;1;1;1;0
1;0;1;1;0;0;0;1
2;1;1;1;1;0;1;1
1;2;0;1;0;1;0;1
1;1;0;0;0;1;1;0
2;2;1;0;1;1;0;1
0;0;0;0;0;0;1;0
0;2;0;0;0;1;1;1
2;1;0;0;0;0;1;1
0;0;0;1;1;1;0;0
1;0;1;0;0;1;1;0
2;0;0;0;1;1;1;1
1;2;1;0;0;0;0;1
2;2;0;0;0;1;0;1
0;1;1;0;0;0;1;0
0;2;0;0;1;0;1;0
1;1;0;0;1;1;1;1
0;0;0;1;0;0;1;1
0;1;1;0;0;1;1;1
2;2;0;1;1;0;1;0
1;0;1;0;1;0;1;1
1;1;0;1;0;0;1;1
2;0;1;1;0;0;1;0
2;0;1;0;0;0;1;0
1;1;1;1;0;1;1;1
2;1;1;0;1;0;0;0
0;2;0;1;1;0;0;0
1;2;1;1;0;1;0;0
2;1;1;1;1;1;0;1
0;2;0;1;0;1;1;1
0;2;1;0;1;0;0;1
0;1;1;0;0;0;1;1
1;0;0;1;1;0;1;1
2;2;1;1;0;0;0;0
0;1;1;0;0;0;0;0
2;0;1;1;0;1;0;0
0;1;1;0;0;0;0;1
0;0;1;1;1;0;1;0
0;2;0;0;0;0;1;0
2;0;0;1;0;1;1;0
0;0;1;0;1;0;1;1
2;2;0;0;1;0;1;1
2;2;0;1;0;0;0;1
2;2;0;1;0;1;0;1
1;2;1;0;0;1;0;1