diff --git a/__pycache__/settings.cpython-310.pyc b/__pycache__/settings.cpython-310.pyc index 952eafd..0af80cb 100644 Binary files a/__pycache__/settings.cpython-310.pyc and b/__pycache__/settings.cpython-310.pyc differ diff --git a/main.py b/main.py index 99686d4..af5e54f 100644 --- a/main.py +++ b/main.py @@ -2,10 +2,12 @@ import pygame import sys import random from settings import screen_height, screen_width, SIZE, SPECIES, block_size, tile, road_coords, directions -from src.map import drawRoads, seedForFirstTime, return_fields_list +from src.map import drawRoads, seedForFirstTime, return_fields_list, WORLD_MATRIX from src.Tractor import Tractor from src.Plant import Plant from src.bfs import Astar +from src.Field import Field + # pygame initialization pygame.init() @@ -40,8 +42,15 @@ tractor_move = pygame.USEREVENT + 1 pygame.time.set_timer(tractor_move, 800) moves = [] goal_astar = Astar() -destination = (random.randrange(0, 936, 36), random.randrange(0, 900, 36)) +mx=random.randrange(0, 936, 36) +my=random.randrange(0, 936, 36) +destination = (mx, my) print("Destination: ", destination) +mx=int((mx+18)/36) +my=int((my+18)/36) +print("Destination: ", mx,my) +tmp = WORLD_MATRIX[mx][my] + moves = goal_astar.search( [tractor.rect.x, tractor.rect.y, directions[tractor.rotation]], destination) diff --git a/settings.py b/settings.py index ed0d402..53f1734 100644 --- a/settings.py +++ b/settings.py @@ -1,10 +1,13 @@ from cmath import sqrt -screen_width=1200#936 -screen_height=1000#936 +screen_width=1200 +#screen_width=936 +# screen_height=1000 +screen_height=936 SIZE = (screen_width, screen_height) SPECIES=["carrot","potato","beetroot","wheat"] +WEATHER=['slonce','wiatr','snieg','deszcz'] # size in pixels of one tile = 36px/36px tile = (36, 36) block_size = 36 diff --git a/src/Field.py b/src/Field.py index fedc537..6d6b599 100644 --- a/src/Field.py +++ b/src/Field.py @@ -1,8 +1,9 @@ from pygame.sprite import Sprite +from src.Plant import Plant class Field(Sprite): def __init__(self, type, x, y, image, cost, hydration_level , soil, - fertilizer_degree, development_degree, plant_type, fertilizer_type, to_water): + fertilizer_degree, development_degree, plant_type, fertilizer_type, to_water, plantObj): super().__init__() self.type = type self.x = x @@ -18,4 +19,11 @@ class Field(Sprite): self.plant_type = plant_type self.fertilizer_type = fertilizer_type self.to_water = to_water + self.plantObj = plantObj + + def getPlantObj(self): + return self.plantObj + + def setPlantObj(self,newPlant): + self.plantObj=newPlant diff --git a/src/ID3.py b/src/ID3.py index 7b488e6..d0357a5 100644 --- a/src/ID3.py +++ b/src/ID3.py @@ -1,11 +1,36 @@ import pandas as pd -from sklearn.tree import DecisionTreeClassifier, export_text -from sklearn.preprocessing import LabelEncoder -from sklearn.model_selection import train_test_split -from sklearn import metrics +from sklearn.tree import DecisionTreeClassifier +import pickle +import os +from sklearn import tree +import pydotplus +import matplotlib.image as pltimg +import matplotlib.pyplot as plt # Read the CSV file -data = pd.read_csv("train_2.csv", delimiter=";") +train = pd.read_csv("train_2.csv", delimiter=";") -y = data[['czy_zebrac']].copy() -y.head() \ No newline at end of file +x_train = train.drop('czy_zebrac',axis=1) +y_train = train['czy_zebrac'] + +d_tree = DecisionTreeClassifier() +d_tree = d_tree.fit(x_train,y_train) + +# Save the decision tree model as a pickle file in the script's folder +pickle.dump(d_tree, open('tree.plk', 'wb')) + +# Export the decision tree as DOT data +data = tree.export_graphviz(d_tree, out_file=None) + +# Create a graph from the DOT data +graph = pydotplus.graph_from_dot_data(data) + +# Save the graph as a PNG image in the script's folder +graph.write_png(os.path.join('.', 'mytree.png')) + +# Read the PNG image +img = pltimg.imread(os.path.join('.', 'mytree.png')) + +# Display the image +imgplot = plt.imshow(img) +plt.show() \ No newline at end of file diff --git a/src/Plant.py b/src/Plant.py index 11e8cc4..b0ee9e1 100644 --- a/src/Plant.py +++ b/src/Plant.py @@ -2,11 +2,24 @@ import pygame from settings import block_size class Plant(pygame.sprite.Sprite): - def __init__(self,species,is_ill,pos_x,pos_y): + def __init__(self,wzrost, + wilgotnosc, + dni_od_nawiezienia, + aktualna_pogoda, + czy_robaczywa, + cena_sprzedarzy, + species, + pos_x, + pos_y): + super().__init__() self.species=species - self.is_ill=is_ill - + self.wzrost=wzrost + self.wilgotnosc=wilgotnosc + self.dni_od_nawiezienia=dni_od_nawiezienia + self.aktualna_pogoda=aktualna_pogoda + self.czy_robaczywa=czy_robaczywa + self.cena_sprzedarzy=cena_sprzedarzy if species=="carrot": self.growth_time=100 self.weight=50 @@ -47,4 +60,6 @@ class Plant(pygame.sprite.Sprite): self.image = pygame.transform.scale(self.image,(block_size, block_size)) self.rect = self.image.get_rect() self.rect.center = [pos_x,pos_y] - \ No newline at end of file + +def getParameters(self): + return [self.species, self.wzrost, self.wilgotnosc, self.dni_od_nawiezienia,self.aktualna_pogoda,self.czy_robaczywa,self.cena_sprzedarzy] \ No newline at end of file diff --git a/src/__pycache__/Field.cpython-310.pyc b/src/__pycache__/Field.cpython-310.pyc index 350b21c..7300160 100644 Binary files a/src/__pycache__/Field.cpython-310.pyc and b/src/__pycache__/Field.cpython-310.pyc differ diff --git a/src/__pycache__/Plant.cpython-310.pyc b/src/__pycache__/Plant.cpython-310.pyc index a440d7d..e2ac07f 100644 Binary files a/src/__pycache__/Plant.cpython-310.pyc and b/src/__pycache__/Plant.cpython-310.pyc differ diff --git a/src/__pycache__/map.cpython-310.pyc b/src/__pycache__/map.cpython-310.pyc index ea4355d..8598130 100644 Binary files a/src/__pycache__/map.cpython-310.pyc and b/src/__pycache__/map.cpython-310.pyc differ diff --git a/src/map.py b/src/map.py index 8e7afe8..9b0d95b 100644 --- a/src/map.py +++ b/src/map.py @@ -33,7 +33,7 @@ def get_cost_by_type(plant_type): fields = pygame.sprite.Group() -world_matrix = [[0 for _ in range(fields_amount+1)] for _ in range(fields_amount+1)] +WORLD_MATRIX = [[0 for _ in range(fields_amount+1)] for _ in range(fields_amount+1)] def drawRoads(screen): #drawing roads: @@ -42,15 +42,15 @@ def drawRoads(screen): for x in road_coords: for block in range(int(fields_amount)+1): screen.blit(road, (x*block_size, block * 36)) - tmp_field=Field('road', x*block_size, block * 36, None, get_cost_by_type('road'), None, None, None, None, 'road', None, None) + tmp_field=Field('road', x*block_size, block * 36, None, get_cost_by_type('road'), None, None, None, None, 'road', None, None,plantObj=None) fields.add(tmp_field) - world_matrix[x][block]=Road(x,block) + WORLD_MATRIX[x][block]=Road(x,block) for y in road_coords: for block in range(int(fields_amount)+1): screen.blit(road, (block * block_size, y*block_size)) - tmp_field=Field('road', block * block_size, y*block_size, None, get_cost_by_type('road'), None, None, None, None, 'road', None, None) + tmp_field=Field('road', block * block_size, y*block_size, None, get_cost_by_type('road'), None, None, None, None, 'road', None, None,plantObj=None) fields.add(tmp_field) - world_matrix[block][y]=Road(block,y) + WORLD_MATRIX[block][y]=Road(block,y) barn_img = pygame.image.load('assets/barn.png') @@ -68,21 +68,29 @@ def seedForFirstTime(): x = (((field%5)*((block_size*(field_width+1)))) + ((blocks_seeded_in_field % field_width)*block_size) + ((3/2)*block_size)) y = ((int(field/5)*((block_size*(field_width+1)))) + ((int(blocks_seeded_in_field/field_height))*block_size) + ((3/2)*block_size)) + # wzrost;wilgotnosc;dni_od_nawiezienia;aktualna_pogoda;czy_roslina_robaczywa;typ_rosliny;pojemnosc_ekwipunku;cena_sprzedarzy;czy_zebrac - new_plant = Plant(plant_name,0, x, y) + new_plant = Plant( + wzrost=random.randint(0, 100), + wilgotnosc=random.randint(0, 100), + dni_od_nawiezienia=random.randint(0, 31), + aktualna_pogoda='_', + czy_robaczywa=random.randint(0, 1), + cena_sprzedarzy=random.randint(500, 2000), + species=plant_name, + pos_x=x, + pos_y=y) blocks_seeded_in_field = blocks_seeded_in_field + 1 plant_group.add(new_plant) - tmp_field_plant = Field('field', x-18, y-18, None, get_cost_by_type(plant_name), None, None, None, None, plant_name, None, None) + tmp_field_plant = Field('field', x-18, y-18, None, get_cost_by_type(plant_name), None, None, None, None, plant_name, None, None, plantObj=new_plant) fields.add(tmp_field_plant) mx = int((x-18)/36) my = int((y-18)/36) - world_matrix[mx][my]=tmp_field_plant + WORLD_MATRIX[mx][my]=tmp_field_plant - # for i in range(1,4): - # world_matrix[mx][my+i]=tmp_field_plant #debug - print(world_matrix) + # print(WORLD_MATRIX) #end of debug return plant_group diff --git a/src/trained_tree.txt b/src/trained_tree.txt deleted file mode 100644 index 32f0720..0000000 --- a/src/trained_tree.txt +++ /dev/null @@ -1,7 +0,0 @@ -|--- czy_roslina_robaczywa <= 0.50 -| |--- class: 0 -|--- czy_roslina_robaczywa > 0.50 -| |--- dni_od_nawiezienia <= 9.50 -| | |--- class: 0 -| |--- dni_od_nawiezienia > 9.50 -| | |--- class: 1