Generic Algo
This commit is contained in:
parent
7b358760e9
commit
7c5d9fa852
74
board.py
74
board.py
@ -1,15 +1,18 @@
|
||||
import pygame
|
||||
from constant import size, rows, cols
|
||||
import random
|
||||
import numpy as np
|
||||
|
||||
class Board:
|
||||
def __init__(self):
|
||||
def __init__(self,load_from_file=False, filename='generated_board.npy'):
|
||||
self.board = []
|
||||
self.vegetables = []
|
||||
self.soil_features = None
|
||||
self.load_images()
|
||||
self.generate_board()
|
||||
self.vegetable_names = []
|
||||
self.load_images()
|
||||
if load_from_file:
|
||||
self.load_board_from_file(filename)
|
||||
|
||||
|
||||
def load_images(self):
|
||||
self.grass = pygame.image.load("board/grass.png")
|
||||
@ -19,11 +22,11 @@ class Board:
|
||||
self.soil = pygame.image.load("board/zyzna.png")
|
||||
|
||||
self.warzywa_images = {
|
||||
"marchewka": [pygame.image.load(f"warzywa/Carrot/{i}.jpg") for i in range(1, 10)],
|
||||
"ziemniak": [pygame.image.load(f"warzywa/Potato/{i}.jpg") for i in range(1, 10)],
|
||||
"pomidor": [pygame.image.load(f"warzywa/tomato/{i}.jpg") for i in range(1, 10)],
|
||||
"fasola": [pygame.image.load(f"warzywa/Bean/{i}.jpg") for i in range(1, 10)],
|
||||
"dynia": [pygame.image.load(f"warzywa/Pumpkin/{i}.jpg") for i in range(1, 10)],
|
||||
"marchewka": [pygame.image.load(f"warzywa/Carrot/{i}.jpg") for i in range(1, 10)],
|
||||
"ziemniak": [pygame.image.load(f"warzywa/Potato/{i}.jpg") for i in range(1, 10)],
|
||||
"rzodkiewka": [pygame.image.load(f"warzywa/Radish/{i}.jpg") for i in range(1, 10)],
|
||||
"ogorek": [pygame.image.load(f"warzywa/Cucumber/{i}.jpg") for i in range(1, 10)],
|
||||
"kalafior": [pygame.image.load(f"warzywa/Cauliflower/{i}.jpg") for i in range(1, 10)],
|
||||
@ -31,30 +34,26 @@ class Board:
|
||||
"brokul": [pygame.image.load(f"warzywa/Broccoli/{i}.jpg") for i in range(1, 10)]
|
||||
}
|
||||
self.vegetable_types = {
|
||||
"marchewka": 1,
|
||||
"ziemniak": 2,
|
||||
"pomidor": 3,
|
||||
"fasola": 4,
|
||||
"dynia": 5,
|
||||
"rzodkiewka": 6,
|
||||
"ogorek": 7,
|
||||
"kalafior": 8,
|
||||
"kapusta": 9,
|
||||
"brokul": 10
|
||||
"marchewka": 2,
|
||||
"ziemniak": 3,
|
||||
"pomidor": 4,
|
||||
"fasola": 5,
|
||||
"dynia": 6,
|
||||
"rzodkiewka": 7,
|
||||
"ogorek": 8,
|
||||
"kalafior": 9,
|
||||
"kapusta": 10,
|
||||
"brokul": 11
|
||||
}
|
||||
|
||||
def generate_board(self):
|
||||
self.board = [[random.choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) for _ in range(cols)] for _ in range(rows)]
|
||||
self.vegetables = [
|
||||
[None for _ in range(cols)] for _ in range(rows)
|
||||
]
|
||||
self.vegetable_names = [
|
||||
[None for _ in range(cols)] for _ in range(rows)
|
||||
]
|
||||
def load_board_from_file(self, filename):
|
||||
self.board = np.load(filename)
|
||||
self.vegetables = [[None for _ in range(cols)] for _ in range(rows)]
|
||||
self.vegetable_names = [[None for _ in range(cols)] for _ in range(rows)]
|
||||
for row in range(rows):
|
||||
for col in range(cols):
|
||||
if self.board[row][col] in (6, 7, 8, 9):
|
||||
vegetable_type = random.choice(list(self.warzywa_images.keys()))
|
||||
if self.board[row][col] in self.vegetable_types.values():
|
||||
vegetable_type = list(self.warzywa_images.keys())[self.board[row][col] - 2]
|
||||
vegetable_image = random.choice(self.warzywa_images[vegetable_type])
|
||||
self.vegetables[row][col] = vegetable_image
|
||||
self.vegetable_names[row][col] = vegetable_type
|
||||
@ -77,24 +76,18 @@ class Board:
|
||||
for col in range(cols):
|
||||
cube_rect = pygame.Rect(col * size, row * size, size, size)
|
||||
cube = self.board[row][col]
|
||||
if row == 4 and col == 4:
|
||||
if cube == 0:
|
||||
win.blit(self.grass, cube_rect)
|
||||
elif cube == 0:
|
||||
elif cube == 1:
|
||||
rock_scale = pygame.transform.scale(self.rock, (size, size))
|
||||
win.blit(self.dirt, cube_rect)
|
||||
win.blit(rock_scale, cube_rect)
|
||||
elif cube == 1:
|
||||
weed_scale = pygame.transform.scale(self.weeds, (size, size))
|
||||
win.blit(self.grass, cube_rect)
|
||||
win.blit(weed_scale, cube_rect)
|
||||
elif cube in (2, 3, 4, 5):
|
||||
win.blit(self.grass, cube_rect)
|
||||
elif cube == 10:
|
||||
elif cube == 12:
|
||||
win.blit(self.soil, cube_rect)
|
||||
if self.vegetables[row][col]:
|
||||
vegetable_image = pygame.transform.scale(self.vegetables[row][col], (size, size))
|
||||
win.blit(vegetable_image, cube_rect)
|
||||
elif cube == 11:
|
||||
elif cube == 13:
|
||||
win.blit(self.dirt, cube_rect)
|
||||
if self.vegetables[row][col]:
|
||||
vegetable_image = pygame.transform.scale(self.vegetables[row][col], (size, size))
|
||||
@ -106,21 +99,16 @@ class Board:
|
||||
win.blit(vegetable_image, cube_rect)
|
||||
|
||||
def is_rock(self, row, col):
|
||||
return self.board[row][col] == 0
|
||||
|
||||
def is_weed(self, row, col):
|
||||
return self.board[row][col] == 1
|
||||
|
||||
def set_grass(self, row, col):
|
||||
self.board[row][col] = 2
|
||||
|
||||
def is_dirt(self, row, col):
|
||||
return self.board[row][col] in (6, 7, 8, 9)
|
||||
return self.board[row][col] in (2,3,4,5,6,7,8,9,10,11)
|
||||
|
||||
def set_soil(self, row, col):
|
||||
self.board[row][col] = 10
|
||||
self.board[row][col] = 12
|
||||
self.vegetables[row][col] = self.vegetables[row][col]
|
||||
|
||||
def set_fakedirt(self, row, col):
|
||||
self.board[row][col] = 11
|
||||
self.board[row][col] = 13
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import pygame
|
||||
width, height = 640, 640
|
||||
rows, cols = 8, 8
|
||||
rows, cols = 10, 10
|
||||
size = width//cols
|
||||
yellow = (216,178,0)
|
||||
green= (103,178,0)
|
||||
|
25
main.py
25
main.py
@ -1,4 +1,5 @@
|
||||
import pygame
|
||||
import numpy as np
|
||||
from board import Board
|
||||
from constant import width, height, rows, cols
|
||||
from tractor import Tractor
|
||||
@ -6,18 +7,19 @@ from kolejka import Stan, Odwiedzone
|
||||
from queue import Queue
|
||||
import pandas as pd
|
||||
from neuralnetwork import load_model
|
||||
from decisiontree import train_decision_tree
|
||||
|
||||
data = pd.read_csv('dane.csv')
|
||||
|
||||
|
||||
from decisiontree import train_decision_tree
|
||||
|
||||
|
||||
model_path = 'model.pth'
|
||||
neuralnetwork_model = load_model(model_path)
|
||||
|
||||
model, feature_columns = train_decision_tree(data)
|
||||
|
||||
fps = 5
|
||||
fps = 15
|
||||
WIN = pygame.display.set_mode((width, height))
|
||||
pygame.display.set_caption('Inteligentny Traktor')
|
||||
|
||||
@ -56,16 +58,17 @@ def fringe_check(fringe, stan):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
initial_state = Stan(4, 4, "down")
|
||||
initial_state = Stan(9, 1, "down")
|
||||
run = True
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
board = Board()
|
||||
board.load_images()
|
||||
board = Board(load_from_file=True, filename='generated_board.npy')
|
||||
|
||||
|
||||
tractor = Tractor(4, 4, model, feature_columns, neuralnetwork_model)
|
||||
tractor = Tractor(9, 1, model, feature_columns, neuralnetwork_model)
|
||||
|
||||
while run:
|
||||
clock.tick(fps)
|
||||
@ -78,11 +81,11 @@ def main():
|
||||
|
||||
if not akcje:
|
||||
print("Nie znaleziono ścieżki do najbliższego pola dirt.")
|
||||
board.generate_board()
|
||||
initial_state = Stan(4, 4, "down")
|
||||
tractor = Tractor(4, 4, model, feature_columns, neuralnetwork_model)
|
||||
board = Board(load_from_file=True, filename='generated_board.npy')
|
||||
initial_state = Stan(0, 1, "down")
|
||||
tractor = Tractor(0, 1, model, feature_columns, neuralnetwork_model)
|
||||
while board.is_rock(initial_state.row, initial_state.col):
|
||||
board.generate_board()
|
||||
board = Board(load_from_file=True, filename='generated_board.npy')
|
||||
continue
|
||||
|
||||
print("akcje: >", akcje)
|
||||
@ -103,7 +106,7 @@ def main():
|
||||
board.draw_cubes(WIN)
|
||||
tractor.draw(WIN)
|
||||
pygame.display.update()
|
||||
pygame.time.delay(500)
|
||||
|
||||
|
||||
initial_state = nowy_stan
|
||||
initial_state.direction = tractor.direction
|
||||
|
@ -76,7 +76,7 @@ class Tractor:
|
||||
vegetable_type_number = board.vegetable_types[vegetable_name]
|
||||
else:
|
||||
vegetable_type_number = -1
|
||||
if board.is_dirt(next_row, next_col) and board.board[next_row][next_col] != 10:
|
||||
if board.is_dirt(next_row, next_col) and board.board[next_row][next_col] != 12:
|
||||
soil_features = board.soil_features
|
||||
sample = {
|
||||
"wilgotnosc_gleby": soil_features["wilgotnosc_gleby"],
|
||||
|
Loading…
Reference in New Issue
Block a user