Sztuczna_Inteligencja_2020/main.py

273 lines
9.5 KiB
Python
Raw Permalink Normal View History

2020-04-27 21:56:17 +02:00
import secrets
import sys
2020-04-06 22:10:21 +02:00
2020-05-27 09:13:23 +02:00
from random import randrange
2020-05-19 18:19:34 +02:00
from src.decisionTree import *
from src.plate import *
from src.SubprojectMaksymilianKierski.PlateRecognition import use_model_to_predict, text_speech
2020-04-06 22:10:21 +02:00
2020-05-27 09:13:23 +02:00
# Marcin Dobrowolski
from src.SubprojectMarcinDobrowolski.suggestionDecisionTree import *
from src.SubprojectMarcinDobrowolski.utility import generateTestData, generateTestExample
2020-06-08 18:05:05 +02:00
from src.guest import *
2020-05-27 09:13:23 +02:00
2020-04-06 22:10:21 +02:00
if __name__ == "__main__":
# SETUP
pygame.init()
clock = pygame.time.Clock()
graphics = Graphics()
waiter = Waiter(graphics)
2020-05-19 18:28:40 +02:00
tree = DecisionTree()
2020-04-06 22:10:21 +02:00
2020-05-27 09:13:23 +02:00
# Init functions
2020-04-06 22:10:21 +02:00
graphics.drawBackground(waiter.matrix)
2020-04-29 11:12:18 +02:00
graphics.update(waiter)
2020-04-06 22:10:21 +02:00
2020-05-27 09:13:23 +02:00
# AStar
2020-04-27 21:56:17 +02:00
goal = None
2020-04-29 11:12:18 +02:00
path = ''
# Dominik
2020-06-05 14:18:45 +02:00
queue = []
2020-06-09 14:26:23 +02:00
fromBar = 0
barNode = (3, 12)
node = ()
2020-06-09 18:35:00 +02:00
goalList = [0, 0]
2020-05-27 09:13:23 +02:00
# Marcin Dobrowolski
suggestionTreeRoot = SuggestionTree.buildTree(trainingData)
2020-06-08 18:05:05 +02:00
newGuests = []
actions = []
2020-05-27 09:13:23 +02:00
2020-05-26 15:02:34 +02:00
# Maksymilian
go = 0
2020-06-09 19:26:53 +02:00
randomPlate = None
2020-06-09 18:35:00 +02:00
plate = 0
2020-06-09 20:43:27 +02:00
changePlateVar = 0
waitPos = [[1, 2], [1, 5], [1, 8], [5, 4], [5, 8],
[8, 2], [8, 5], [8, 8], [12, 3], [12, 7]]
tabPos = [[1, 2], [1, 5], [1, 8], [5, 4], [5, 8],
[8, 2], [8, 5], [8, 8], [12, 3], [12, 7]]
pltPos = [[2, 3], [2, 6], [2, 9], [4, 4], [4, 8],
2020-06-09 18:35:00 +02:00
[9, 3], [9, 6], [9, 9], [11, 4], [11, 8]]
plateArr = []
def changePlate():
if plateArr and len(plateArr) > 0:
if randrange(30) == 17:
plate = random.choice(plateArr)
if not plate.empty:
2020-06-09 19:26:53 +02:00
randomPlate = randrange(4) + 11
plate.changePlate('plate-empty.png', 'test-{}'.format(randomPlate))
2020-06-09 19:26:53 +02:00
2020-06-09 16:00:26 +02:00
def addGuest():
2020-06-09 16:21:26 +02:00
if randrange(10) == 5 and path == '':
2020-06-09 16:00:26 +02:00
newGuests.append(Guest(graphics))
2020-06-09 16:21:26 +02:00
guest = newGuests[len(newGuests) - 1]
2020-06-09 16:00:26 +02:00
goal = [0, 0]
2020-06-09 16:21:26 +02:00
goal[0] = guest.cord[0]
goal[1] = guest.cord[1]
2020-06-09 16:00:26 +02:00
tree.TasksList('order', goal, [waiter.X, waiter.Y])
tree.print()
print(actions)
return tree.ReturnQueueList()
2020-04-06 22:10:21 +02:00
while True:
changePlate()
2020-06-09 19:26:53 +02:00
# queue = addGuest()
2020-05-13 09:22:12 +02:00
2020-04-06 22:10:21 +02:00
for event in pygame.event.get():
2020-05-13 09:22:12 +02:00
# rabbit.check(waiter.matrix, waiter.X, waiter.Y)
2020-04-06 22:10:21 +02:00
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
break
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit()
break
2020-05-19 18:19:34 +02:00
if event.key == pygame.K_s:
2020-06-09 15:32:39 +02:00
waitPosition = [waiter.X, waiter.Y]
tree.TasksList('check', [2, 3], waitPosition)
tree.TasksList('eat', [9, 6], waitPosition)
tree.TasksList('order', [4, 8], waitPosition)
tree.TasksList('goToBar', [11, 4], waitPosition)
tree.TasksList('check', [2, 9], waitPosition)
tree.TasksList('eat', [1, 1], waitPosition)
2020-06-05 14:18:45 +02:00
queue = tree.ReturnQueueList()
2020-05-19 18:19:34 +02:00
tree.print()
2020-04-06 22:10:21 +02:00
2020-05-27 09:13:23 +02:00
# Marcin Dobrowolski
if event.key == pygame.K_0:
2020-06-08 18:05:05 +02:00
newGuests.append(Guest(graphics))
2020-05-27 09:13:23 +02:00
# Marcin Dobrowolski
if event.key == pygame.K_1:
2020-06-08 18:05:05 +02:00
guest = newGuests[0]
goal = [0, 0]
2020-05-27 09:13:23 +02:00
2020-06-08 18:05:05 +02:00
if guest.cord[0] == 2 or guest.cord[1] == 9:
goal[0] = guest.cord[0] - 1
goal[1] = guest.cord[1]
else:
goal[0] = guest.cord[0] + 1
goal[1] = guest.cord[1]
2020-05-27 09:13:23 +02:00
2020-06-08 18:05:05 +02:00
actions.append(('takeOrder', goal))
print(actions)
2020-05-27 09:13:23 +02:00
# AStar
2020-04-27 21:56:17 +02:00
if event.key == pygame.K_r:
temp = False
while not temp:
x = secrets.randbelow(graphics.width)
y = secrets.randbelow(graphics.height)
print(x, y)
2020-04-27 21:56:17 +02:00
if waiter.matrix.matrix[x][y].walk_through == 1:
temp = True
goal = (x, y)
path = waiter.findPath(goal)
2020-04-29 11:12:18 +02:00
path = waiter.translatePath(path)
2020-06-09 18:35:00 +02:00
if event.key == pygame.K_a:
if path == '':
newGuests.append(Guest(graphics))
guest = newGuests[len(newGuests) - 1]
goalList[0] = guest.cord[0]
goalList[1] = guest.cord[1]
tree.TasksList('order', goalList, [waiter.X, waiter.Y])
tree.TasksList('goToBar', goalList, [waiter.X, waiter.Y])
queue = tree.ReturnQueueList()
2020-06-09 19:26:53 +02:00
if plateArr and event.key == pygame.K_m:
randomPlate = random.choice(plateArr)
if (not [waiter.X, waiter.Y] == randomPlate.table) or go == 0:
print(waiter.X, waiter.Y)
print(randomPlate.table)
print(go)
print([waiter.X, waiter.Y] in randomPlate.table)
if [waiter.X, waiter.Y] in waitPos:
model = 'waiter_' + waiter.direction
for x in range(-1, 2):
waiterX = waiter.X + (x * 0.1)
graphics.clear(waiterX, waiter.Y - 1)
print(randomPlate)
2020-06-09 20:43:27 +02:00
changePlateVar = 0
2020-06-09 19:26:53 +02:00
# if this plate is exists
goal = (randomPlate.table[0], randomPlate.table[1])
path = waiter.findPath(goal)
path = waiter.translatePath(path)
print('sec-1')
go = 1
plate = 0
2020-06-09 18:35:00 +02:00
else:
2020-06-09 19:26:53 +02:00
if randomPlate.checked:
predict = 'CHECKED'
else:
predict = use_model_to_predict(randomPlate.pictureAI)
if predict == 1:
predict = 'EMPTY'
randomPlate.clearTable()
plateArr.remove(randomPlate)
2020-06-09 20:43:27 +02:00
tree.TasksList('goToBar', barNode, [waiter.X, waiter.Y])
queue = tree.ReturnQueueList()
changePlateVar = 1
2020-06-09 19:26:53 +02:00
else:
predict = 'FOOD'
print('sec-3')
text_speech('arialnarrow.ttf', 25, predict, (255, 255, 255), (0, 128, 0),
(waiter.X * 50 + 25), (waiter.Y * 50 - 25), False, False, screen=graphics.screen)
pygame.display.flip()
go = 0
plate = 0
if plate == 1 and (goalList == [waiter.X - 1, waiter.Y] or goalList == [waiter.X + 1, waiter.Y]):
randTable = goalList
randIndex = pltPos.index(goalList)
tableCord = tabPos[randIndex]
plateCord = pltPos[randIndex]
print('rand{}'.format(randIndex))
pictureAI = 'test-{}'.format(randIndex)
plateArr.append(Plate(graphics, plateCord, tableCord, 'plate-full.png', pictureAI))
tabPos.pop(randIndex)
pltPos.pop(randIndex)
print(plateArr, pltPos)
goal = (plateArr[len(plateArr) - 1].table[0], plateArr[len(plateArr) - 1].table[1])
randGo = len(plateArr) - 1
path = waiter.findPath(goal)
path = waiter.translatePath(path)
print('sec-2')
go = 1
plate = 0
2020-06-09 18:35:00 +02:00
2020-06-05 14:18:45 +02:00
# Dominik
2020-06-09 16:00:26 +02:00
if queue and path == '' and fromBar == 0:
2020-06-09 17:56:24 +02:00
print(queue)
2020-06-05 14:18:45 +02:00
task = queue.pop(0)
2020-06-09 17:56:24 +02:00
print('tasks.{}'.format(task))
2020-06-09 14:26:23 +02:00
tree.RemoveTask()
node = (task[2][0], task[2][1])
if task[0] == "goToBar":
path = waiter.findPath(barNode)
fromBar = 1
else:
2020-06-09 20:43:27 +02:00
changePlateVar = 0
2020-06-09 14:26:23 +02:00
path = waiter.findPath(node)
2020-06-05 14:18:45 +02:00
path = waiter.translatePath(path)
2020-06-09 20:43:27 +02:00
if path == '' and fromBar == 1 and changePlateVar == 0:
2020-06-09 14:26:23 +02:00
path = waiter.findPath(node)
path = waiter.translatePath(path)
fromBar = 0
2020-06-09 18:35:00 +02:00
plate = 1
2020-06-09 20:43:27 +02:00
if path == '' and fromBar == 1:
path = waiter.findPath(node)
path = waiter.translatePath(path)
fromBar = 0
print(plate)
2020-05-27 09:13:23 +02:00
# AStar
2020-06-08 18:05:05 +02:00
if path == '' and actions:
print('Goal: {}'.format(actions[0][1]))
path = waiter.findPath(actions[0][1])
print('Path: {}'.format(path))
path = waiter.translatePath(path)
print('Translated path: {}'.format(path))
2020-04-29 11:12:18 +02:00
if path != '':
nextStep = path[0]
path = path[1:]
2020-04-28 18:56:50 +02:00
waiter.travel(nextStep, graphics)
2020-06-08 18:05:05 +02:00
if path == '':
print('')
# action = actions.pop(0)
# if action[0] == 'takeOrder':
# guest = newGuests.pop(0)
# waiter.takeOrder(suggestionTreeRoot, guest)
# graphics.clearGuest(guest)
# tables.append(guest.cord)
2020-04-28 18:56:50 +02:00
2020-04-06 22:10:21 +02:00
pygame.display.flip()
2020-05-13 09:22:12 +02:00
clock.tick(graphics.fps)