ANN integration

This commit is contained in:
s473594 2023-06-20 02:37:18 +02:00
parent 0f8d9a1032
commit 795ed2dcc1
3 changed files with 52 additions and 44 deletions

View File

@ -9,7 +9,7 @@ from sklearn.tree import export_graphviz
import pydotplus
# Read the dataset
train_data_m = pd.read_csv("datasets/bees.csv")
train_data_m = pd.read_csv("datasets/treedataset2.csv")
feature_cols = ['Weather','Temperature','WindSpeed','PollenAvailability','BeePopulation','TimeOfDay','FlowerDistance','Humidity']
print(train_data_m.head())
@ -35,5 +35,4 @@ dot_data = StringIO()
export_graphviz(clf, out_file=dot_data,
filled=True, rounded=True,
special_characters=True, feature_names = feature_cols,class_names=['0','1'])
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_png('tree.png')
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())

View File

@ -1,15 +1,14 @@
class Field:
Nodes = []
FieldSizeX = 0
FieldSizeY = 0
#Get value method
# Get value method
def __getitem__(self, pos):
X, Y = pos
return self.Nodes[X][Y].Value
#Get flower type
# Get flower type
def get_flower_type(self, pos):
X, Y = pos
return self.Nodes[X][Y].FlowerType
@ -24,9 +23,9 @@ class Field:
X, Y = pos
return self.Nodes[X][Y].Image
def __setitem__(self, pos, value, Type = "Value"):
def __setitem__(self, pos, value, Type="Value"):
X, Y = pos
if(Type == "Value"):
if (Type == "Value"):
self.Nodes[X][Y].Value = value
else:
self.Nodes[X][Y].Type = value
@ -34,18 +33,20 @@ class Field:
def __init__(self, tilemap_types, tilemap_values):
self.FieldSizeX = len(tilemap_types) - 1
self.FieldSizeY = len(tilemap_types[0]) - 1
if(tilemap_types != []):
if (tilemap_types != []):
for x in range(0, self.FieldSizeX + 1):
self.Nodes.append([])
for y in range(0, self.FieldSizeY + 1):
node = Node(x, y, tilemap_types[x][y], tilemap_values[x][y])
self.Nodes[x].append(node)
def get_type(self, pos):
X, Y = pos
return self.Nodes[X][Y].Type
def set_type(self, pos, type):
X, Y = pos
self.Nodes[X][Y].Type = type
def PrintFieldTypes(self):
for x in range(len(self.Nodes)):
@ -63,23 +64,24 @@ class Field:
def Neighbors(field, pos):
x, y, dir = pos
neighbors = []
if(x == 11):
if (x == 11):
x = 11
if(x > 0 and field.get_type([x - 1, y]) != TREE and dir == 3):
if (x > 0 and field.get_type([x - 1, y]) != TREE and dir == 3):
neighbors.append((x - 1, y, dir))
if(y > 0 and field.get_type([x, y - 1]) != TREE and dir == 0):
if (y > 0 and field.get_type([x, y - 1]) != TREE and dir == 0):
neighbors.append((x, y - 1, dir))
if(x < field.FieldSizeX and field.get_type([x + 1, y]) != TREE and dir == 1):
neighbors.append((x+1, y, dir))
if(y < field.FieldSizeY and field.get_type([x, y + 1]) != TREE and dir == 2):
neighbors.append((x, y+1, dir))
if (x < field.FieldSizeX and field.get_type([x + 1, y]) != TREE and dir == 1):
neighbors.append((x + 1, y, dir))
if (y < field.FieldSizeY and field.get_type([x, y + 1]) != TREE and dir == 2):
neighbors.append((x, y + 1, dir))
neighbors.append((x, y, (dir + 1) % 4))
if(dir == 0):
if (dir == 0):
neighbors.append((x, y, 3))
else:
neighbors.append((x, y, dir - 1))
return neighbors
class Node:
X = 0
Y = 0

View File

@ -10,6 +10,7 @@ import heapq as h
from checkFlower import chek_flower
from PIL import Image
import os
from DecisionTree import clf
@ -19,10 +20,10 @@ def Manhattan_dis(start, end):
return abs(start_x - end_x) + abs(start_y - end_y)
def Make_path(start, end, previos):
def Make_path(start, end, previous):
path = [end]
while start not in path:
path.append(previos[path[-1]])
path.append(previous[path[-1]])
path.reverse()
return path
@ -90,14 +91,6 @@ SHORT_IMG_PATH = 'spritesNtiles/shortGrass64.png'
TALL_IMG_PATH = 'spritesNtiles/tallGrass64.png'
BEE_HOME = 'spritesNtiles/beehome.png'
tiles_types = {
SHORT: pygame.image.load('spritesNtiles/shortGrass64.png'),
TALL: pygame.image.load('spritesNtiles/tallGrass64.png'),
TREE: pygame.image.load('spritesNtiles/dirtTree64.png'),
FLOWER: pygame.image.load('ANN\\rdy-dataset\\test\\rose\\377277099_544769262c_c.jpg')
}
tilemapSizeX = 12
tilemapSizeY = 12
@ -141,7 +134,7 @@ clock = pygame.time.Clock()
# Define parameters
flower_positions = [(flower_x, flower_y) for flower_x in range(tilemapSizeX) for flower_y in range(tilemapSizeY) if tilemap_types[flower_x][flower_y] == FLOWER]
flower_positions = [(flower_x, flower_y) for flower_x in range(tilemapSizeX) for flower_y in range(tilemapSizeY) if tilemap_types[flower_x][flower_y] == 0]
generations = 10
# Create an instance of the GeneticAlgorithm class
ga = GA(10, generations,flower_positions, tilemap_types)
@ -158,6 +151,11 @@ for x, y in tree_arrangement:
tilemap_types[x][y] = TREE
print(x,y)
flower_positions = [(flower_x, flower_y) for flower_x in range(tilemapSizeX) for flower_y in range(tilemapSizeY) if tilemap_types[flower_x][flower_y] == FLOWER]
for X in range(0, len(tilemap_types)):
tilemap_values.append([])
for Y in range(0, len(tilemap_types[X])):
@ -192,9 +190,10 @@ bee_dir = 'west'
while True:
bee_x = random.randint(0, tilemapSizeX-2)
bee_y = random.randint(0, tilemapSizeY-2)
if(field.get_type([bee_x, bee_y]) != TREE):
if field.get_type([bee_x, bee_y]) != TREE and field.get_type([bee_x, bee_y]) != FLOWER:
break
start_x = bee_x
start_y = bee_y
field.set_image(bee_x, bee_y, BEE_HOME)
@ -240,6 +239,8 @@ print(len(check_path_A))
current_node = 0
step = 1
comeback = False
while True:
@ -248,21 +249,14 @@ while True:
if event.type == pygame.QUIT:
pygame.quit()
quit()
bee_x, bee_y, bee_dir = path[current_node]
bee_dir = Directions[bee_dir]
# render the bee and the tilemap
dis.fill(white)
for x in range(tilemapSizeX):
for y in range(tilemapSizeY):
tile = tilemap_types[x][y]
surface = pygame.image.load(field.get_image((x, y)))
dis.blit(surface, (x * tileSize, y * tileSize))
# rotate and render the bee
if bee_dir == 'west':
bee_image = BEE
elif bee_dir == 'east':
@ -274,11 +268,24 @@ while True:
dis.blit(bee_image, (bee_x * tileSize, bee_y * tileSize))
pygame.display.update()
if (bee_x,bee_y) in flower_positions:
if field.get_type((bee_x,bee_y)) == FLOWER:
if chek_flower(pygame.image.load(field.get_image((bee_x,bee_y)))) not in ['western-poison-oak', 'water_lily']:
pygame.time.wait(1000)
field.set_image(bee_x,bee_y, SHORT_IMG_PATH)
field.set_type((bee_x,bee_y), SHORT)
else:
field.set_type((bee_x,bee_y), SHORT)
clock.tick(5)
if(current_node + 1 == len(path)):
step *= -1
clock.tick(10)
if(current_node + 1 == len(path) and not comeback):
path = A_star(field, (bee_x,bee_y, 3), (start_x,start_y))
current_node = 0
comeback = True
elif current_node + 1 == len(path):
pygame.time.wait(1000000)
if(step == -1 and current_node == 0):
step *= -1
current_node += step