ok
This commit is contained in:
parent
36b7544a1b
commit
1231a8f914
73
Customertree.md
Normal file
73
Customertree.md
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
Piotr Jakub Dębski 01.06.2020
|
||||||
|
|
||||||
|
|
||||||
|
## Automatyczny kelner: raport podprojektu indywidualnego
|
||||||
|
|
||||||
|
W tym dokumencie opisane zostały podstawy i najważniejsze informacje dotyczące powstania
|
||||||
|
oraz funkcjonowania podprojektu indywidualnego.
|
||||||
|
|
||||||
|
### Cel projektu
|
||||||
|
|
||||||
|
Celem projektu jest dodanie do projektu Zautomatyzowanego Kelnera sztucznej inteligencji u
|
||||||
|
klientów restauracji, która na podstawie kilku przypisanych do obiektu klienta cech pozwoli mu
|
||||||
|
na samodzielne wybranie zamówionego dania oraz napoju. Osobny moduł będzie miał za zadanie
|
||||||
|
stworzyć modele drzewa decyzyjnego, które będą używane w głownym pliku projektu.
|
||||||
|
|
||||||
|
### Biblioteki
|
||||||
|
|
||||||
|
Do wykonania projektu wykorzystane zostały następujące biblioteki Pythona:
|
||||||
|
- random
|
||||||
|
- joblib
|
||||||
|
- pandas
|
||||||
|
- sklearn
|
||||||
|
- pydot
|
||||||
|
oraz dodatkowo:
|
||||||
|
- graphviz
|
||||||
|
za pomocą którego wygenerowane została reprezentacja wizualna drzew decyzyjnych
|
||||||
|
food_tree.pdf oraz drink_tree.pdf znajdujących się w folderze graphs.
|
||||||
|
|
||||||
|
### Dane
|
||||||
|
|
||||||
|
Dane na których podstawie algorytm ma stworzyć modele drzew decyzyjnych umieszczone zostały w
|
||||||
|
pliku learning_db.py i podzielone na 6 binarnych kategorii:
|
||||||
|
- gender - płeć ( M - mężczyzna K - kobieta )
|
||||||
|
- age - wiek ( Adult - dorosły Child - dziecko )
|
||||||
|
- outfit - ubiór ( Casual - codzienny Elegant - reprezentacyjny )
|
||||||
|
- cash - pieniądze ( "+" - dużo "-" - mało )
|
||||||
|
- vege - dieta wegetariańska ( "Yes" "No" )
|
||||||
|
- time - czas ( "Afternoon" - popołudnie "Evening" - wieczór )
|
||||||
|
oraz na 2 kategorie, które mają zostać sklasyfikowane :
|
||||||
|
- food - dania ( 35 wyborów )
|
||||||
|
- drink - napoje ( 8 wyborów )
|
||||||
|
Dane zawierają 200 przykładów.
|
||||||
|
|
||||||
|
### Tworzenie drzewa
|
||||||
|
|
||||||
|
1. Za pomocą funkcji pandas.DataFrame() program łączy ze sobą wszystkie przykłady w
|
||||||
|
dwuwymiarową strukturę danych o wymiarach 9x200 (kategorie+index)x(przykłady).
|
||||||
|
2. Za pomocą funkcji pandas.factorize() program dostosowuje dane w każdej kolumnie do naszych
|
||||||
|
potrzeb i obliczeń.
|
||||||
|
3. Następnie model danych zostaje podzielony na X - zbiór przykładów oraz y - odpowiadający
|
||||||
|
przykładom wynik czyli rodzaj dania.
|
||||||
|
4. Zestaw danych zostaje podzielony na testowy dzięki funkcji train_test_split()
|
||||||
|
( 25% - food , 40% - drink) i treningowy ( 75% - food , 60% - drink )
|
||||||
|
5. Dzięki funkcji DecisionTreeClassifier() oraz tą samą funkcją z argumentem wymagającym przyjęcia
|
||||||
|
do kryterium entropii tworzą się dwa klasyfikatory (wyniki będą porównywane by wybrać
|
||||||
|
dokładniejszą metodę)
|
||||||
|
6. Zestaw treningowy przekazany zostaje do funkcji fit() dzięki czemu można teraz
|
||||||
|
przeprowadzić predykcję za pomocą funkcji predict(), której w miejsce argumentu wprowadzamy
|
||||||
|
zestaw testowy.
|
||||||
|
7. W wyniku wielokrotnych porównań dokładności funkcji predict() na klasyfikatorach, entropia
|
||||||
|
okazuje się lepszym kryterium od indeksu Giniego na zadanym zestawie danych, więc model drzewa
|
||||||
|
korzystający z tego kryterium zostaje zapisany do użycia w głównym ciele projektu.
|
||||||
|
8. Kroki 3-7 zostały powtórzone dla drzewa napojów, a odpowiednie wizualizacje drzew decyzyjnych
|
||||||
|
zapisane są w folderze graphs.
|
||||||
|
|
||||||
|
### Synchronizacja w projekcie
|
||||||
|
|
||||||
|
Modele food_model i drink_model zostaną załadowane do programu z folderu models.
|
||||||
|
Do obsługi stworzonego modelu stworzona jest klasa Client oraz funkcja client_ordering(ctr)
|
||||||
|
Klasa Client poprzez swój konstruktor automatycznie losuje wszystkie cechy, na podstawie
|
||||||
|
których funkcja predict() wybiera danie oraz napój, natomiast funkcja client_ordering(ctr) wymaga
|
||||||
|
w swoim argumencie posiadania obiektu klasy Client, z której pobierze wszystkie wartości cech
|
||||||
|
i przeniesie je do funkcji predict() zwracając otrzymane wyniki.
|
105
customertree.py
Normal file
105
customertree.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
import pandas as pandas
|
||||||
|
import graphviz
|
||||||
|
import pydot
|
||||||
|
from learning_db import *
|
||||||
|
from joblib import dump
|
||||||
|
from sklearn import tree
|
||||||
|
from sklearn.metrics import accuracy_score
|
||||||
|
from sklearn.externals.six import StringIO
|
||||||
|
from sklearn.tree import DecisionTreeClassifier
|
||||||
|
from sklearn.metrics import accuracy_score
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
|
||||||
|
customers = pandas.DataFrame({"gender": gender,
|
||||||
|
"age": age,
|
||||||
|
"outfit": outfit,
|
||||||
|
"cash": cash,
|
||||||
|
"time": time,
|
||||||
|
"vege": vege,
|
||||||
|
"food": food,
|
||||||
|
"drink": drink
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
customers["gender"], gender_objects = pandas.factorize(customers["gender"])
|
||||||
|
customers["age"], age_objects = pandas.factorize(customers["age"])
|
||||||
|
customers["outfit"], outfit_objects = pandas.factorize(customers["outfit"])
|
||||||
|
customers["cash"], cash_objects = pandas.factorize(customers["cash"])
|
||||||
|
customers["time"], time_objects = pandas.factorize(customers["time"])
|
||||||
|
customers["vege"], vege_objects = pandas.factorize(customers["vege"])
|
||||||
|
customers["food"], food_objects = pandas.factorize(customers["food"])
|
||||||
|
customers["drink"], drink_objects = pandas.factorize(customers["drink"])
|
||||||
|
|
||||||
|
objects = []
|
||||||
|
objects.append(gender_objects)
|
||||||
|
objects.append(age_objects)
|
||||||
|
objects.append(outfit_objects)
|
||||||
|
objects.append(cash_objects)
|
||||||
|
objects.append(time_objects)
|
||||||
|
objects.append(vege_objects)
|
||||||
|
objects.append(food_objects)
|
||||||
|
objects.append(drink_objects)
|
||||||
|
|
||||||
|
|
||||||
|
#X = customers.drop(["food","drink"], axis=1)
|
||||||
|
#y = customers["food"]
|
||||||
|
|
||||||
|
#X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=None)
|
||||||
|
|
||||||
|
#food_classifier = DecisionTreeClassifier(criterion = "entropy", random_state=1)
|
||||||
|
#food_classifier.fit(X_train, y_train)
|
||||||
|
|
||||||
|
#porównanie kryterium: index Giniego i entropia
|
||||||
|
|
||||||
|
#food_classifier1 = DecisionTreeClassifier()
|
||||||
|
#food_classifier1.fit(X_train, y_train)
|
||||||
|
|
||||||
|
#food_classifier2 = DecisionTreeClassifier(criterion = "entropy")
|
||||||
|
#food_classifier2.fit(X_train, y_train)
|
||||||
|
|
||||||
|
#y_pred1 = food_classifier1.predict(X_test)
|
||||||
|
#y_pred2 = food_classifier2.predict(X_test)
|
||||||
|
|
||||||
|
|
||||||
|
#if accuracy_score(y_test, y_pred1) > accuracy_score(y_test, y_pred2):
|
||||||
|
# dump(food_classifier,'models/food_model.joblib')
|
||||||
|
#else:
|
||||||
|
# dump(food_classifier2,'models/food_model.joblib')
|
||||||
|
|
||||||
|
#dot_data=StringIO()
|
||||||
|
#tree = tree.export_graphviz(food_classifier, out_file = dot_data,
|
||||||
|
# feature_names = X.columns,
|
||||||
|
# class_names = food_objects,
|
||||||
|
# filled = True, rounded = True)
|
||||||
|
#graph = pydot.graph_from_dot_data(dot_data.getvalue())
|
||||||
|
#graph[0].write_pdf("graphs/food_model.pdf")
|
||||||
|
|
||||||
|
#X = customers.drop(["food","drink"], axis=1)
|
||||||
|
#y = customers["drink"]
|
||||||
|
|
||||||
|
#X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.45, random_state=1)
|
||||||
|
|
||||||
|
#drink_classifier = DecisionTreeClassifier(criterion = "entropy")
|
||||||
|
#drink_classifier.fit(X_train, y_train)
|
||||||
|
|
||||||
|
#drink_classifier1 = DecisionTreeClassifier()
|
||||||
|
#drink_classifier1.fit(X_train, y_train)
|
||||||
|
|
||||||
|
#drink_classifier2 = DecisionTreeClassifier(criterion = "entropy")
|
||||||
|
#drink_classifier2.fit(X_train, y_train)
|
||||||
|
|
||||||
|
#y_pred1 = drink_classifier1.predict(X_test)
|
||||||
|
#y_pred2 = drink_classifier2.predict(X_test)
|
||||||
|
|
||||||
|
#if accuracy_score(y_test, y_pred1) > accuracy_score(y_test, y_pred2):
|
||||||
|
# dump(drink_classifier1,'models/drink_model.joblib')
|
||||||
|
#else:
|
||||||
|
# dump(drink_classifier2,'models/drink_model.joblib')
|
||||||
|
|
||||||
|
#dot_data=StringIO()
|
||||||
|
#tree = tree.export_graphviz(drink_classifier, out_file = dot_data,
|
||||||
|
# feature_names = X.columns,
|
||||||
|
# class_names = drink_objects,
|
||||||
|
# filled = True, rounded = True)
|
||||||
|
#graph = pydot.graph_from_dot_data(dot_data.getvalue())
|
||||||
|
#graph[0].write_pdf("graphs/drink_model.pdf")
|
BIN
graphs/drink_model.pdf
Normal file
BIN
graphs/drink_model.pdf
Normal file
Binary file not shown.
BIN
graphs/food_model.pdf
Normal file
BIN
graphs/food_model.pdf
Normal file
Binary file not shown.
235
learning_db.py
Normal file
235
learning_db.py
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
gender = ["M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"M","M","M","M","M","M","M","M","M","M",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W",
|
||||||
|
"W","W","W","W","W","W","W","W","W","W"
|
||||||
|
]
|
||||||
|
|
||||||
|
age = ["Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Child","Child","Child","Child","Child","Child","Child","Child","Child","Child",
|
||||||
|
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult","Adult",
|
||||||
|
"Child","Child","Child","Child","Child","Child","Child","Child","Child","Child"
|
||||||
|
]
|
||||||
|
|
||||||
|
outfit = ["Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant",
|
||||||
|
"Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Elegant","Elegant","Elegant","Elegant","Elegant",
|
||||||
|
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual","Casual",
|
||||||
|
"Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant",
|
||||||
|
"Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant","Elegant",
|
||||||
|
"Casual","Casual","Casual","Casual","Casual","Elegant","Elegant","Elegant","Elegant","Elegant"
|
||||||
|
]
|
||||||
|
|
||||||
|
cash = ["+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"-","-","-","-","-","-","-","-","-","-",
|
||||||
|
"-","-","-","-","-","-","-","-","-","-",
|
||||||
|
"-","-","-","-","-","-","-","-","-","-",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"-","+","-","+","-","+","-","+","-","+",
|
||||||
|
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"-","-","-","-","-","-","-","-","-","-",
|
||||||
|
"-","-","-","-","-","-","-","-","-","-",
|
||||||
|
"-","-","-","-","-","-","-","-","-","-",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"+","+","+","+","+","+","+","+","+","+",
|
||||||
|
"-","+","-","+","-","+","-","+","-","+"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
time = ["Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon",
|
||||||
|
"Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon",
|
||||||
|
"Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon",
|
||||||
|
"Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon",
|
||||||
|
"Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Evening","Evening","Afternoon","Afternoon","Evening","Evening","Afternoon","Afternoon",
|
||||||
|
|
||||||
|
"Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon",
|
||||||
|
"Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon",
|
||||||
|
"Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon",
|
||||||
|
"Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon","Afternoon",
|
||||||
|
"Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening","Evening",
|
||||||
|
"Afternoon","Afternoon","Evening","Evening","Afternoon","Afternoon","Evening","Evening","Afternoon","Afternoon"
|
||||||
|
]
|
||||||
|
|
||||||
|
vege = ["No","No","No","No","No","No","No","No","No","No",
|
||||||
|
"No","No","No","No","No","No","No","No","No","No",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","No","No","No","No","No",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","No","No","No","No","No",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","No","No","No","Yes","Yes",
|
||||||
|
|
||||||
|
"No","No","No","No","No","No","No","No","No","No",
|
||||||
|
"No","No","No","No","No","No","No","No","No","No",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","No","No","No","No","No",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","No","No","No","No","No",
|
||||||
|
"No","No","No","No","No","Yes","Yes","Yes","Yes","Yes",
|
||||||
|
"No","No","No","No","No","No","No","No","Yes","Yes"
|
||||||
|
]
|
||||||
|
|
||||||
|
food = ['club_sandwich','steak','hot_dog','hamburger','hot_dog',
|
||||||
|
'hot_dog','hot_dog','club_sandwich','steak','club_sandwich',
|
||||||
|
'hamburger','steak','hamburger','club_sandwich','hot_dog',
|
||||||
|
'hot_dog','steak','hot_dog','apple_pie','ice_cream',
|
||||||
|
'pizza','hot_dog','hamburger','steak','club_sandwich',
|
||||||
|
|
||||||
|
'ice_cream','waffles','greek_salad','greek_salad','greek_salad',
|
||||||
|
'lasagna','lasagna','ice_cream','ice_cream','steak',
|
||||||
|
'greek_salad','waffles','greek_salad','apple_pie','waffles',
|
||||||
|
'hamburger','pizza','lasagna','hamburger','hamburger',
|
||||||
|
'ice_cream','waffles','greek_salad','club_sandwich','ice_cream',
|
||||||
|
|
||||||
|
'pizza','ice_cream','pizza','greek_salad','ice_cream',
|
||||||
|
'lasagna','pizza','pizza','hamburger','club_sandwich',
|
||||||
|
'club_sandwich','pizza','club_sandwich','apple_pie','club_sandwich',
|
||||||
|
'ice_cream','waffles','greek_salad','apple_pie','greek_salad',
|
||||||
|
'club_sandwich','steak','pizza','hamburger','hot_dog',
|
||||||
|
|
||||||
|
'hamburger','steak','hot_dog','steak','hot_dog',
|
||||||
|
'hot_dog','hot_dog','hamburger','steak','club_sandwich',
|
||||||
|
'greek_salad','waffles','waffles','apple_pie','greek_salad',
|
||||||
|
'club_sandwich','club_sandwich','pizza','waffles','apple_pie',
|
||||||
|
'hot_dog','ice_cream','greek_salad','apple_pie','ice_cream',
|
||||||
|
|
||||||
|
'club_sandwich','steak','steak','hamburger','hot_dog',
|
||||||
|
'hot_dog','hot_dog','club_sandwich','steak','club_sandwich',
|
||||||
|
'hamburger','steak','steak','lasagna','hot_dog',
|
||||||
|
'hot_dog','ice_cream','greek_salad','pizza','ice_cream',
|
||||||
|
'hot_dog','hot_dog','hamburger','steak','club_sandwich',
|
||||||
|
|
||||||
|
'waffles','waffles','greek_salad','waffles','greek_salad',
|
||||||
|
'lasagna','lasagna','lasagna','lasagna','lasagna',
|
||||||
|
'ice_cream','waffles','waffles','apple_pie','greek_salad',
|
||||||
|
'pizza','pizza','hamburger','hamburger','ice_cream',
|
||||||
|
'ice_cream','waffles','greek_salad','apple_pie','ice_cream',
|
||||||
|
|
||||||
|
'lasagna','ice_cream','hamburger','hamburger','ice_cream',
|
||||||
|
'hamburger','hamburger','pizza','pizza','ice_cream',
|
||||||
|
'lasagna','hot_dog','hamburger','steak','club_sandwich',
|
||||||
|
'ice_cream','waffles','greek_salad','apple_pie','ice_cream',
|
||||||
|
'club_sandwich','steak','hot_dog','hamburger','hot_dog',
|
||||||
|
|
||||||
|
'hamburger','steak','hot_dog','hamburger','hot_dog',
|
||||||
|
'hot_dog','steak','hamburger','steak','club_sandwich',
|
||||||
|
'ice_cream','waffles','greek_salad','apple_pie','greek_salad',
|
||||||
|
'ice_cream','ice_cream','lasagna','apple_pie','apple_pie',
|
||||||
|
'hot_dog','ice_cream','hot_dog','apple_pie','waffles'
|
||||||
|
]
|
||||||
|
|
||||||
|
drink = ["Whisky","Whisky","Whisky","Whisky","Whisky",
|
||||||
|
"Whisky","Whisky","Beer","Beer","Beer",
|
||||||
|
"Cola","Water","Orange Juice","Water","Beer",
|
||||||
|
"Cola","Water","Orange Juice","Cola","Beer",
|
||||||
|
"Beer","Beer","Beer","Beer","Beer",
|
||||||
|
|
||||||
|
"Beer","Beer","Beer","Beer","Beer",
|
||||||
|
"Cola","Water","Orange Juice","Water","Beer",
|
||||||
|
"Cola","Water","Orange Juice","Cola","Beer",
|
||||||
|
"Beer","Beer","Beer","Beer","Beer",
|
||||||
|
"Beer","Beer","Beer","Beer","Beer",
|
||||||
|
|
||||||
|
"Cola","Water","Orange Juice","Water","Beer",
|
||||||
|
"Cola","Water","Orange Juice","Cola","Beer",
|
||||||
|
"Whisky","Whisky","Whisky","Whisky","Whisky",
|
||||||
|
"Whisky","Whisky","Whisky","Beer","Beer",
|
||||||
|
"Beer","Beer","Beer","Beer","Beer",
|
||||||
|
|
||||||
|
"Cola","Water","Orange Juice","Water","Beer",
|
||||||
|
"Beer","Beer","Beer","Beer","Beer",
|
||||||
|
"Beer","Beer","Beer","Beer","Beer",
|
||||||
|
"Orange Juice","Orange Juice","Cola","Cola","Cola",
|
||||||
|
"Cola","Cola","Cola","Cola","Cola",
|
||||||
|
|
||||||
|
"Whisky","Whisky","Whisky","Red Wine","Red Wine",
|
||||||
|
"Red Wine","Red Wine","Red Wine","Red Wine","Whisky",
|
||||||
|
"Water","Water","Orange Juice","Orange Juice","Cola",
|
||||||
|
"Water","Water","Orange Juice","Orange Juice","Cola",
|
||||||
|
"Red Wine","Red Wine","Red Wine","Red Wine","Red Wine",
|
||||||
|
|
||||||
|
"Whisky","Whisky","Whisky","Red Wine","Red Wine",
|
||||||
|
"Water","Water","Orange Juice","Orange Juice","Cola",
|
||||||
|
"Water","Water","Orange Juice","Orange Juice","Cola",
|
||||||
|
"Red Wine","Red Wine","Red Wine","Red Wine","Red Wine",
|
||||||
|
"Red Wine","Red Wine","Red Wine","Red Wine","Red Wine",
|
||||||
|
|
||||||
|
"Water","Water","Orange Juice","Orange Juice","Cola",
|
||||||
|
"Water","Water","Orange Juice","Orange Juice","Cola",
|
||||||
|
"Red Wine","Red Wine","Red Wine","Red Wine","Red Wine",
|
||||||
|
"Red Wine","Red Wine","Whisky","Whisky","Whisky",
|
||||||
|
"Water","Water","Orange Juice","Orange Juice","Cola",
|
||||||
|
|
||||||
|
"Water","Water","Orange Juice","Orange Juice","Cola",
|
||||||
|
"Red Wine","Red Wine","Red Wine","Red Wine","Red Wine",
|
||||||
|
"Red Wine","Red Wine","Red Wine","Red Wine","Red Wine",
|
||||||
|
"Orange Juice","Orange Juice","Orange Juice","Orange Juice","Orange Juice",
|
||||||
|
"Orange Juice","Orange Juice","Orange Juice","Cola","Cola"
|
||||||
|
]
|
87
main.py
87
main.py
@ -10,6 +10,9 @@ import numpy as np
|
|||||||
from data import *
|
from data import *
|
||||||
from choice_tree import *
|
from choice_tree import *
|
||||||
|
|
||||||
|
from joblib import load
|
||||||
|
from customertree import objects
|
||||||
|
|
||||||
import tensorflow as tf
|
import tensorflow as tf
|
||||||
from keras import *
|
from keras import *
|
||||||
import h5py
|
import h5py
|
||||||
@ -36,6 +39,9 @@ CATEGORIES = [
|
|||||||
"waffles"
|
"waffles"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
food_model = load("models/food_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:
|
||||||
@ -104,6 +110,84 @@ def client_ordering():
|
|||||||
###
|
###
|
||||||
|
|
||||||
|
|
||||||
|
class Client:
|
||||||
|
def __init__(self):
|
||||||
|
self.gender = random.choice(["Man","Woman"])
|
||||||
|
self.outfit = random.choice(["Casual","Elegant"])
|
||||||
|
self.cash = random.choice([20,20,20,30,30,50,50,70,80,90,100,100,120,
|
||||||
|
120,150,200,300,500])
|
||||||
|
self.time = random.choice(["Afternoon","Evening"])
|
||||||
|
self.vege = random.choice(["No","No","No","No","Yes"])
|
||||||
|
self.age = random.randint(12,80)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return (self.gender + " Age: " + str(self.age) +" "+ self.outfit+
|
||||||
|
" $"+ str(self.cash)+ " Vege: "+ self.vege)
|
||||||
|
|
||||||
|
def order_drink(clt):
|
||||||
|
frame = []
|
||||||
|
if clt.gender == "Man":
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.age > 17:
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.outfit == "Casual":
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.cash > 100:
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.time == "Evening":
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.vege == "No":
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
|
||||||
|
drink_predict = drink_model.predict([frame])
|
||||||
|
drink_index = drink_predict[0]
|
||||||
|
|
||||||
|
return objects[-1][drink_index]
|
||||||
|
|
||||||
|
def order_food(clt):
|
||||||
|
frame = []
|
||||||
|
if clt.gender == "Man":
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.age > 17:
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.outfit == "Casual":
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.cash > 100:
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.time == "Evening":
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
if clt.vege == "No":
|
||||||
|
frame.append(0)
|
||||||
|
else:
|
||||||
|
frame.append(1)
|
||||||
|
|
||||||
|
food_predict = food_model.predict([frame])
|
||||||
|
food_index = food_predict[0]
|
||||||
|
|
||||||
|
return objects[-2][food_index]
|
||||||
|
|
||||||
###
|
###
|
||||||
class Node:
|
class Node:
|
||||||
def __init__(self, state, parent, action):
|
def __init__(self, state, parent, action):
|
||||||
@ -553,7 +637,8 @@ while True:
|
|||||||
restaurant.tiles[waiter.y][waiter.x].clientState = "wait"
|
restaurant.tiles[waiter.y][waiter.x].clientState = "wait"
|
||||||
waiter.orders = (waiter.x, waiter.y)
|
waiter.orders = (waiter.x, waiter.y)
|
||||||
DEFINE += 1
|
DEFINE += 1
|
||||||
waiter.order_list.insert(0, random.choice(CATEGORIES))
|
cl = Client()
|
||||||
|
waiter.order_list.insert(0,client_ordering_food(cl))
|
||||||
if (waiter.x, waiter.y) == KITCHEN:
|
if (waiter.x, waiter.y) == KITCHEN:
|
||||||
if waiter.orders:
|
if waiter.orders:
|
||||||
restaurant.kitchen.append([waiter.orders[0], waiter.orders[1], 50])
|
restaurant.kitchen.append([waiter.orders[0], waiter.orders[1], 50])
|
||||||
|
BIN
models/drink_model.joblib
Normal file
BIN
models/drink_model.joblib
Normal file
Binary file not shown.
BIN
models/food_model.joblib
Normal file
BIN
models/food_model.joblib
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user