# Podprojekt Podprojekt polegający na użyciu metody drzew decyzyjnych aby otrzymać optymalne ustawienia agenta na podstawie danych z losowo generowanych sytuacji. # Implementacja Agent po obsłużeniu wszystkich klientów zapisuje jakie ustawienia używał oraz czy całkowity czas działania jest większy od pożądanego. ##### if restaurant.left == 0: file.write(str(S_IDLE.index(IDLE))) file.write(str(S_FIRST.index(FIRST))) if totaltime > 1076: file.write(str(0)) else: file.write(str(1)) Pożądany czas działania w obecnym zestawie wielkości planszy i ilości klientów ustawiłem na 1076j na podstawie średniego czasu wszystkich ustawień. Agent czasami błędnie wykonuje zadania więc po upływie 1500j plansza jest resetowana. if ticks > 1500: restaurant = Restaurant(3, 5) waiter = Agent(2,2) .. Ustawienia agenta to decyzja gdzie stać gdy nie ma zadania (kuchnia, środek planszy, stać w miejscu) oraz czy najpierw obsłużyć klientów chcących zamówić czy klientów czekających na gotowe zamówienie. ##### S_IDLE = ("kitchen", "middle", "inplace") S_FIRST = ("order", "food") # Dane Po uruchomieniu programu tworzony jest plik results.csv zawierający sformatowane dane wynikowe. idle,first,good 0,1,0 0,0,1 2,0,1 .. # Drzewo decyzyjne Do utworzenia drzewa decyzyjnego użyłem biblioteki sklearn oraz graphviz do zobrazowania wyniku. #decisiontree.py col_names = ['idle','first','good'] data = pd.read_csv("results.csv", header=None, names=col_names) data = data.iloc[1:] data.head() feature_cols = ['idle','first'] X = data[feature_cols] y = data.good Plik results.csv jest ładowany, jako klasę główną ustawiłem .good, czyli czy czas wykonania zadania był zadowalający. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=1) clf = DecisionTreeClassifier(criterion="gini", max_depth=4) clf = clf.fit(X_train,y_train) Dane są dzielone na 25% do testowania a następnie tworzone i trenowane jest drzewo o głębokości 4. Na końcu drzewo jest wizualizowane za pomocą grafu.![](https://i.imgur.com/2lWRH0w.png) Z grafu można odczytać że na podstawie 909 wyników dla obecnych ustawień planszy i agenta najlepszymi ustawieniami są idle == 2 i w równej mierze first == 0 i first == 1, czyli ustawienia IDLE = "inplace" FIRST = "order" --- IDLE = "inplace" FIRST = "food"