ANN integration
This commit is contained in:
parent
0f8d9a1032
commit
795ed2dcc1
@ -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())
|
38
src/Field.py
38
src/Field.py
@ -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
|
||||
|
53
src/main.py
53
src/main.py
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user