Update 'main.py'
This commit is contained in:
parent
0e8d3c40bd
commit
942ca758ef
223
main.py
223
main.py
@ -13,12 +13,12 @@ from choice_tree import *
|
|||||||
from joblib import load
|
from joblib import load
|
||||||
from customertree import objects
|
from customertree import objects
|
||||||
|
|
||||||
import tensorflow as tf
|
#import tensorflow as tf
|
||||||
from keras import *
|
#from keras import *
|
||||||
import h5py
|
import h5py
|
||||||
|
|
||||||
pygame.init()
|
pygame.init()
|
||||||
|
project = 0
|
||||||
|
|
||||||
WIN = 0
|
WIN = 0
|
||||||
LOSSE = 0
|
LOSSE = 0
|
||||||
@ -39,10 +39,10 @@ CATEGORIES = [
|
|||||||
"waffles"
|
"waffles"
|
||||||
]
|
]
|
||||||
|
|
||||||
food_model = load("models/food_model.joblib")
|
#food_model = load("models/food_model.joblib")
|
||||||
drink_model = load("models/drink_model.joblib")
|
#drink_model = load("models/drink_model.joblib")
|
||||||
|
|
||||||
model = tf.keras.models.load_model('final1')
|
#model = tf.keras.models.load_model('final1')
|
||||||
|
|
||||||
with h5py.File('food_10_64x3_test.hdf5', "r") as f:
|
with h5py.File('food_10_64x3_test.hdf5', "r") as f:
|
||||||
a_group_key = list(f.keys())[0]
|
a_group_key = list(f.keys())[0]
|
||||||
@ -73,7 +73,7 @@ def image_recognition():
|
|||||||
WIN += 1
|
WIN += 1
|
||||||
break
|
break
|
||||||
waiter.order_list.pop()
|
waiter.order_list.pop()
|
||||||
print(WIN, LOSSE - WIN)
|
#print(WIN, LOSSE - WIN)
|
||||||
|
|
||||||
# ai settings
|
# ai settings
|
||||||
#S_IDLE = ("kitchen", "middle", "inplace")
|
#S_IDLE = ("kitchen", "middle", "inplace")
|
||||||
@ -89,13 +89,15 @@ KITCHEN = (1, 1)
|
|||||||
MIDDLE = (floor(WIDTH / 2), floor(HEIGHT / 2))
|
MIDDLE = (floor(WIDTH / 2), floor(HEIGHT / 2))
|
||||||
|
|
||||||
display = pygame.display.set_mode((WIDTH * 32 + 200, HEIGHT * 32))
|
display = pygame.display.set_mode((WIDTH * 32 + 200, HEIGHT * 32))
|
||||||
|
tileFoil = pygame.image.load('tile.jpg')
|
||||||
|
waiterAct = pygame.image.load('act1.png')
|
||||||
|
waiterAct.set_colorkey((255, 255, 255))
|
||||||
# eating time
|
# eating time
|
||||||
EAT_TIME = 15
|
EAT_TIME = 15
|
||||||
|
|
||||||
tree = build_tree(training_data)
|
tree = build_tree(training_data)
|
||||||
#order_len = len(tree_format)
|
#order_len = len(tree_format)
|
||||||
print_tree(tree)
|
#print_tree(tree)
|
||||||
|
|
||||||
|
|
||||||
def client_ordering():
|
def client_ordering():
|
||||||
@ -215,7 +217,7 @@ class Tile:
|
|||||||
|
|
||||||
|
|
||||||
class Restaurant:
|
class Restaurant:
|
||||||
def __init__(self, tables, clients, spots):
|
def __init__(self, tables, clients, spots, walls):
|
||||||
self.h = HEIGHT
|
self.h = HEIGHT
|
||||||
self.w = WIDTH
|
self.w = WIDTH
|
||||||
self.tiles = []
|
self.tiles = []
|
||||||
@ -232,7 +234,7 @@ class Restaurant:
|
|||||||
new.append(Tile(ih, iw, True, False, False, 1))
|
new.append(Tile(ih, iw, True, False, False, 1))
|
||||||
self.tiles.append(new)
|
self.tiles.append(new)
|
||||||
# random walls
|
# random walls
|
||||||
for i in range(3):
|
for i in range(walls):
|
||||||
w = random.randint(1, 2)
|
w = random.randint(1, 2)
|
||||||
h = random.randint(4, HEIGHT - 5)
|
h = random.randint(4, HEIGHT - 5)
|
||||||
for j in range(random.randint(1, 3)):
|
for j in range(random.randint(1, 3)):
|
||||||
@ -325,28 +327,6 @@ class Agent:
|
|||||||
self.y = self.y + 1
|
self.y = self.y + 1
|
||||||
else:
|
else:
|
||||||
self.x = self.x + 1
|
self.x = self.x + 1
|
||||||
if not self.path:
|
|
||||||
waiter.goal = (random.randint(1, 8), random.randint(1, 8))
|
|
||||||
waiter.astar()
|
|
||||||
#
|
|
||||||
#def BFS(self, goal):
|
|
||||||
# restaurant.flush()
|
|
||||||
# queue = [(self.x, self.y)]
|
|
||||||
# while len(queue) > 0:
|
|
||||||
# n = queue.pop(0)
|
|
||||||
# restaurant.tiles[n[1]][n[0]].visited = True
|
|
||||||
# if n == goal:
|
|
||||||
# while not n == (self.x, self.y):
|
|
||||||
# self.path.insert(0, n)
|
|
||||||
# n = restaurant.tiles[n[1]][n[0]].parent
|
|
||||||
# return
|
|
||||||
# adj = restaurant.adjacent(n[1], n[0])
|
|
||||||
# for item in adj:
|
|
||||||
# x = item.x
|
|
||||||
# y = item.y
|
|
||||||
# if restaurant.tiles[y][x].canwalk and not restaurant.tiles[y][x].visited:
|
|
||||||
# queue.append((x, y))
|
|
||||||
# restaurant.tiles[y][x].parent = n
|
|
||||||
|
|
||||||
def canWalk(self, state):
|
def canWalk(self, state):
|
||||||
x = state[0]
|
x = state[0]
|
||||||
@ -397,8 +377,8 @@ class Agent:
|
|||||||
cost = restaurant.tiles[self.goal[1]][self.goal[0]].cost
|
cost = restaurant.tiles[self.goal[1]][self.goal[0]].cost
|
||||||
return heuristic((node.state[0], node.state[1]), self.goal) + cost
|
return heuristic((node.state[0], node.state[1]), self.goal) + cost
|
||||||
|
|
||||||
def astar(self):
|
def astar(self, goal):
|
||||||
print("finding path to", self.goal)
|
self.goal = goal
|
||||||
#stan = (x, y, dir)
|
#stan = (x, y, dir)
|
||||||
fringe = PriorityQueue()
|
fringe = PriorityQueue()
|
||||||
explored = []
|
explored = []
|
||||||
@ -414,7 +394,6 @@ class Agent:
|
|||||||
while elem.action is not False:
|
while elem.action is not False:
|
||||||
self.path.insert(0, elem.action)
|
self.path.insert(0, elem.action)
|
||||||
elem = elem.parent
|
elem = elem.parent
|
||||||
print(self.path)
|
|
||||||
return True
|
return True
|
||||||
explored.append(elem.state)
|
explored.append(elem.state)
|
||||||
for (akcja, stan) in self.succ(elem.state):
|
for (akcja, stan) in self.succ(elem.state):
|
||||||
@ -431,36 +410,52 @@ class Agent:
|
|||||||
self.idle = True
|
self.idle = True
|
||||||
|
|
||||||
def getTask(self):
|
def getTask(self):
|
||||||
if waiter.orders:
|
#jesli ktos chce zamowic to do niego idzie
|
||||||
self.BFS(KITCHEN)
|
if not self.orders and not self.food:
|
||||||
|
for table in restaurant.tables:
|
||||||
|
if restaurant.tiles[table[1]][table[0]].clientState == "order":
|
||||||
|
self.astar((table[0], table[1]))
|
||||||
|
self.idle = False
|
||||||
|
return True
|
||||||
|
#jesli trzyma zamowienie to idzie do kuchni
|
||||||
|
if self.orders:
|
||||||
|
self.astar(KITCHEN)
|
||||||
self.idle = False
|
self.idle = False
|
||||||
return True
|
return True
|
||||||
if FIRST == "order":
|
#jesli w kuchni jest gotowe danie to po nie idzie
|
||||||
for table in restaurant.tables:
|
for t in restaurant.kitchen:
|
||||||
if restaurant.tiles[table[1]][table[0]].clientState == "order":
|
if t[2] == 0:
|
||||||
self.BFS((table[0], table[1]))
|
self.astar(KITCHEN)
|
||||||
self.idle = False
|
self.idle = False
|
||||||
return True
|
return True
|
||||||
if not waiter.food:
|
#jesli ktos chce jedzenie a kelner je trzyma
|
||||||
for t in restaurant.kitchen:
|
for table in restaurant.tables:
|
||||||
if not t[2]:
|
if restaurant.tiles[table[1]][table[0]].clientState == "wait" and waiter.food:
|
||||||
waiter.BFS(KITCHEN)
|
self.astar((table[0], table[1]))
|
||||||
self.idle = False
|
self.idle = False
|
||||||
return True
|
return True
|
||||||
elif FIRST == "food":
|
|
||||||
if not waiter.food:
|
|
||||||
for t in restaurant.kitchen:
|
|
||||||
if not t[2]:
|
|
||||||
waiter.BFS(KITCHEN)
|
|
||||||
self.idle = False
|
|
||||||
return True
|
|
||||||
for table in restaurant.tables:
|
|
||||||
if restaurant.tiles[table[1]][table[0]].clientState == "order":
|
|
||||||
self.BFS((table[0], table[1]))
|
|
||||||
self.idle = False
|
|
||||||
return True
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def endTask(self):
|
||||||
|
#jesli sie zatrzymal na stoliku ktory chce zamowic to bierze zamowienie
|
||||||
|
if restaurant.tiles[waiter.y][waiter.x].clientState == "order" and not waiter.food and not waiter.orders:
|
||||||
|
restaurant.tiles[waiter.y][waiter.x].clientState = "wait"
|
||||||
|
waiter.orders = (waiter.x, waiter.y)
|
||||||
|
#jesli sie zatrzymal w kuchni z zamowieniem to oddaje zamowienie
|
||||||
|
if waiter.x == 1 and waiter.y == 1 and waiter.orders:
|
||||||
|
restaurant.kitchen.append([waiter.orders[0], waiter.orders[1], 50])
|
||||||
|
waiter.orders = False
|
||||||
|
#jesli sie zatrzymal w kuchni bez zamowienia to bierze jedzenie
|
||||||
|
if waiter.x == 1 and waiter.y == 1 and not waiter.orders:
|
||||||
|
for t in restaurant.kitchen:
|
||||||
|
if t[2] == 0:
|
||||||
|
restaurant.kitchen.remove(t)
|
||||||
|
waiter.food = True
|
||||||
|
#jesli sie zatrzymal na stoliku z jedzeniem to je daje
|
||||||
|
if restaurant.tiles[waiter.y][waiter.x].clientState == "wait" and waiter.food and not waiter.orders:
|
||||||
|
restaurant.tiles[waiter.y][waiter.x].clientState = "eat"
|
||||||
|
self.food = False
|
||||||
|
self.idle = True
|
||||||
|
|
||||||
def drawScreen():
|
def drawScreen():
|
||||||
pygame.draw.rect(display, (0, 0, 0), (0, 0, HEIGHT * 32, WIDTH * 32))
|
pygame.draw.rect(display, (0, 0, 0), (0, 0, HEIGHT * 32, WIDTH * 32))
|
||||||
@ -468,7 +463,8 @@ def drawScreen():
|
|||||||
for iw in range(WIDTH):
|
for iw in range(WIDTH):
|
||||||
tile = restaurant.tiles[ih][iw]
|
tile = restaurant.tiles[ih][iw]
|
||||||
if tile.canwalk:
|
if tile.canwalk:
|
||||||
pygame.draw.rect(display, (128, 128, 128), (iw * 32 + 1, ih * 32 + 1, 32 - 1, 32 - 1))
|
#pygame.draw.rect(display, (128, 128, 128), (iw * 32 + 1, ih * 32 + 1, 32 - 1, 32 - 1))
|
||||||
|
display.blit(tileFoil, (iw * 32 + 1, ih * 32 + 1, 32 - 1, 32 - 1))
|
||||||
if tile.cost == 5:
|
if tile.cost == 5:
|
||||||
pygame.draw.circle(display, (128, 128, 255), (iw * 32 + 17, ih * 32 + 17), 8)
|
pygame.draw.circle(display, (128, 128, 255), (iw * 32 + 17, ih * 32 + 17), 8)
|
||||||
if tile.table:
|
if tile.table:
|
||||||
@ -489,7 +485,8 @@ def drawScreen():
|
|||||||
# pygame.draw.rect(display, (64,0,64), (iw * 32 + 1, ih * 32+1, 14, 14))
|
# pygame.draw.rect(display, (64,0,64), (iw * 32 + 1, ih * 32+1, 14, 14))
|
||||||
else:
|
else:
|
||||||
pygame.draw.rect(display, (128, 0, 128), (iw * 32 + 1, ih * 32 + 1, 32 - 1, 32 - 1))
|
pygame.draw.rect(display, (128, 0, 128), (iw * 32 + 1, ih * 32 + 1, 32 - 1, 32 - 1))
|
||||||
pygame.draw.circle(display, (255, 255, 255), (waiter.x * 32 + 16, waiter.y * 32 + 16), 16)
|
#pygame.draw.circle(display, (255, 255, 255), (waiter.x * 32 + 16, waiter.y * 32 + 16), 16)
|
||||||
|
display.blit(waiterAct, (waiter.x * 32 + 8, waiter.y * 32 + 8))
|
||||||
#1234 NWSE
|
#1234 NWSE
|
||||||
xx = 0
|
xx = 0
|
||||||
yy = 0
|
yy = 0
|
||||||
@ -511,15 +508,13 @@ def drawScreen():
|
|||||||
display.blit(textsurface, (WIDTH * 32 + 80, 332))
|
display.blit(textsurface, (WIDTH * 32 + 80, 332))
|
||||||
|
|
||||||
|
|
||||||
restaurant = Restaurant(0, 0, 10)
|
restaurant = Restaurant(0, 0, 0, 0)
|
||||||
waiter = Agent(1,1)
|
waiter = Agent(1,1)
|
||||||
clientTime = 10
|
clientTime = 10
|
||||||
totaltime = 0
|
totaltime = 0
|
||||||
clock = pygame.time.Clock()
|
clock = pygame.time.Clock()
|
||||||
ticks = 0
|
ticks = 0
|
||||||
|
|
||||||
waiter.goal = (1,1)
|
|
||||||
waiter.astar()
|
|
||||||
|
|
||||||
# draw info
|
# draw info
|
||||||
help = True
|
help = True
|
||||||
@ -561,10 +556,14 @@ if help:
|
|||||||
while True:
|
while True:
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
if event.type == pygame.KEYDOWN:
|
if event.type == pygame.KEYDOWN:
|
||||||
|
if event.key == pygame.K_0:
|
||||||
|
project = 0
|
||||||
|
if event.key == pygame.K_1:
|
||||||
|
project = 1
|
||||||
if event.key == pygame.K_F4:
|
if event.key == pygame.K_F4:
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
if event.key == pygame.K_F5:
|
if event.key == pygame.K_F5:
|
||||||
restaurant = Restaurant(3, 1, 10)
|
restaurant = Restaurant(3, 3, 10, 3)
|
||||||
waiter = Agent(2, 2)
|
waiter = Agent(2, 2)
|
||||||
clientTime = 10
|
clientTime = 10
|
||||||
ticks = 0
|
ticks = 0
|
||||||
@ -574,6 +573,7 @@ while True:
|
|||||||
waiter.BFS(t)
|
waiter.BFS(t)
|
||||||
if event.key == pygame.K_w:
|
if event.key == pygame.K_w:
|
||||||
waiter.walk()
|
waiter.walk()
|
||||||
|
|
||||||
# update restaurant
|
# update restaurant
|
||||||
if restaurant.clients > 0:
|
if restaurant.clients > 0:
|
||||||
clientTime = clientTime - 1
|
clientTime = clientTime - 1
|
||||||
@ -598,89 +598,16 @@ while True:
|
|||||||
restaurant.tiles[table[1]][table[0]].clientState = False
|
restaurant.tiles[table[1]][table[0]].clientState = False
|
||||||
totaltime = totaltime + ticks
|
totaltime = totaltime + ticks
|
||||||
restaurant.left = restaurant.left - 1
|
restaurant.left = restaurant.left - 1
|
||||||
if restaurant.left == 0:
|
#update waiter
|
||||||
print("done in", totaltime)
|
if project == 0:
|
||||||
totaltime = 0
|
|
||||||
|
|
||||||
restaurant = Restaurant(3, 5)
|
|
||||||
waiter = Agent(2, 2)
|
|
||||||
clientTime = 10
|
|
||||||
ticks = 0
|
|
||||||
totaltime = 0
|
|
||||||
IDLE = random.choice(S_IDLE)
|
|
||||||
FIRST = random.choice(S_FIRST)
|
|
||||||
|
|
||||||
#file = open('results.csv', 'a')
|
|
||||||
#file.write("\n")
|
|
||||||
#file.write(str(S_IDLE.index(IDLE)))
|
|
||||||
#file.write(",")
|
|
||||||
#file.write(str(S_FIRST.index(FIRST)))
|
|
||||||
#file.write(",")
|
|
||||||
#if totaltime > 1076:
|
|
||||||
# file.write(str(0))
|
|
||||||
#else:
|
|
||||||
# file.write(str(1))
|
|
||||||
#file.close()
|
|
||||||
#restaurant = Restaurant(3, 5)
|
|
||||||
#waiter = Agent(2, 2)
|
|
||||||
#clientTime = 10
|
|
||||||
#ticks = 0
|
|
||||||
#IDLE = random.choice(S_IDLE)
|
|
||||||
#FIRST = random.choice(S_FIRST)
|
|
||||||
# update waiter
|
|
||||||
waiter.walk()
|
|
||||||
# old update waiter
|
|
||||||
if False:
|
|
||||||
if waiter.idle:
|
if waiter.idle:
|
||||||
if not waiter.getTask():
|
waiter.getTask()
|
||||||
if not waiter.path:
|
else:
|
||||||
if IDLE == "kitchen":
|
|
||||||
waiter.BFS(KITCHEN)
|
|
||||||
elif IDLE == "middle":
|
|
||||||
waiter.BFS(MIDDLE)
|
|
||||||
else:
|
|
||||||
waiter.wait()
|
|
||||||
else:
|
|
||||||
waiter.walk()
|
|
||||||
elif waiter.path:
|
|
||||||
waiter.walk()
|
waiter.walk()
|
||||||
if not waiter.orders and restaurant.tiles[waiter.y][waiter.x].clientState == "order" and not waiter.path:
|
if not waiter.path:
|
||||||
restaurant.tiles[waiter.y][waiter.x].clientState = "wait"
|
waiter.endTask()
|
||||||
waiter.orders = (waiter.x, waiter.y)
|
|
||||||
waiter.order_to_kitchen.append(client_ordering())
|
|
||||||
DEFINE += 1
|
|
||||||
cl = Client()
|
|
||||||
waiter.order_list.insert(0,client_ordering_food(cl))
|
|
||||||
if (waiter.x, waiter.y) == KITCHEN:
|
|
||||||
if waiter.orders:
|
|
||||||
restaurant.kitchen.append([waiter.orders[0], waiter.orders[1], 50])
|
|
||||||
waiter.orders = False
|
|
||||||
for order in waiter.order_to_kitchen:
|
|
||||||
print("Passed: %s. Prediction: %s" % (order, print_leaf(classify(order, tree))))
|
|
||||||
elif not waiter.food:
|
|
||||||
for t in restaurant.kitchen:
|
|
||||||
if not t[2]:
|
|
||||||
image_recognition()
|
|
||||||
waiter.BFS((t[0], t[1]))
|
|
||||||
restaurant.kitchen.remove(t)
|
|
||||||
waiter.food = True
|
|
||||||
waiter.idle = False
|
|
||||||
break
|
|
||||||
elif waiter.food and not waiter.path:
|
|
||||||
restaurant.tiles[waiter.y][waiter.x].clientState = "eat"
|
|
||||||
restaurant.tiles[waiter.y][waiter.x].client = 30
|
|
||||||
waiter.food = False
|
|
||||||
|
|
||||||
#if ticks > 1500:
|
|
||||||
#restaurant = Restaurant(3, 5)
|
|
||||||
#waiter = Agent(2, 2)
|
|
||||||
#clientTime = 10
|
|
||||||
#ticks = 0
|
|
||||||
#totaltime = 0
|
|
||||||
#IDLE = random.choice(S_IDLE)
|
|
||||||
#FIRST = random.choice(S_FIRST)
|
|
||||||
|
|
||||||
drawScreen()
|
drawScreen()
|
||||||
pygame.display.update()
|
pygame.display.update()
|
||||||
clock.tick(11)
|
clock.tick(15)
|
||||||
ticks = ticks + 1
|
ticks = ticks + 1
|
||||||
|
Loading…
Reference in New Issue
Block a user