From 3a4fcf611eb54bfeb33a7da8559cf7190bfe47ac Mon Sep 17 00:00:00 2001 From: s473632 Date: Sun, 4 Jun 2023 22:10:50 +0200 Subject: [PATCH] =?UTF-8?q?Podpi=C4=99cie=20drzewa=20do=20agenta,=20podpi?= =?UTF-8?q?=C4=99cie=20klasyfikatora=20do=20agenta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/__pycache__/agent.cpython-311.pyc | Bin 12477 -> 0 bytes src/__pycache__/simulation.cpython-311.pyc | Bin 18976 -> 0 bytes src/agent.py | 117 ++++++++++++++++++++- src/simulation.py | 73 ++++++++----- 4 files changed, 159 insertions(+), 31 deletions(-) delete mode 100644 src/__pycache__/agent.cpython-311.pyc delete mode 100644 src/__pycache__/simulation.cpython-311.pyc diff --git a/src/__pycache__/agent.cpython-311.pyc b/src/__pycache__/agent.cpython-311.pyc deleted file mode 100644 index d5b84d519a7e6d1d18ef9fa773c6feeb5a8b1be6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12477 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

3EEa#_SKIS zXtB)TaYX|5wH{!Mv9enf+;&wL@+m4>JnE@fnI4Beg;wFS@7=W&>D%CKOd7rBJHqqZ z;4K@7p%3s@i`+TUD`kKMpAzi|F-xrE{a@Sxb)R{M3)oD0jX&;;Ibu$7nz(daUXZJ} ze(;pmG>A2UU-hs19@Yt+Lt^I;??0AsNmaFC)t-!juk1|Nx4rI^7cGsb|a6Ieo;oUt_ZGEy# zs%n9!X%&YhU){aYyQAqra5Alj#MajZ-x1Mwg!dhhT6@ISL&VinDtV>Pv zzTHWBtGe!|XVRC2`Yy4)OQ`M^tGjtm_qNmb<8wbcm#P=WR&)d2awd@Ux;b^6cHSsoBh%g72{CJDjA! zTS~}0npqZnM@8RJ$f|Eh(?1zW+P3PO(zTh1jUz(+h*%F9fAmzYmZxr|ZwsD2(bLD1 zFV{!8E6L>K4pJUpBDzy7BS#Xk+@WY48kdNZndV$D&FAOOcFZUYkZf(Lpi6i|5w4HzwPnx^LIm7W;=U35LD$A`9dQ64@= z{L)3Ss_&B~?l0W*dG{(g_Tlb~Y;m%?M}Vl8_*&bs%5DG!PlBtUo|3ylcBjMDT6iP3 zT%LC(RPb=KRE`HOUch z!PoQdcFE&gb)<&H`hB9O>yc+5>lxTMFAk0hp0`EM+kD~6xhdyPcZMBV!>-h8eZ`31Wz#Un__|8K)XRi7J%JM!!ygB c;0fk^Q!MbDH_|v=&;NO%lzsDpDr8pw5AetBhX4Qo diff --git a/src/__pycache__/simulation.cpython-311.pyc b/src/__pycache__/simulation.cpython-311.pyc deleted file mode 100644 index 98e4d19ec8bf9f57fabdf7814e2194042bc77014..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18976 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 LPu8g=^5*{mGt6z> diff --git a/src/agent.py b/src/agent.py index 6f72c71..662db94 100644 --- a/src/agent.py +++ b/src/agent.py @@ -1,6 +1,10 @@ import random import pygame as pg import heapq +from decisiontree import decision +from trashtype import trash_type_def + +HOUSE_NUMBER = {'House_number': 0} class Node: @@ -12,11 +16,13 @@ class Node: def __lt__(self, other): return self.cost < other.cost + class State: def __init__(self, position, house_list): self.position = position self.house_list = house_list + def vector_to_tuple(vector): tup = (int(vector.x), int(vector.y)) return tup @@ -24,10 +30,109 @@ def vector_to_tuple(vector): class HousePOI: def __init__(self): - self.bins = None + from simulation import Interface + self.season = Interface.season.season + self.day = Interface.day.day + self.truck_fullness = None + self.payment = None + self.bin_fullness = None + self.trash_type = None + self.trash = 1 + self.dump_fullness = 0 - def discover_bins(self, bins): - self.bins = bins + def discover_bins(self, bin_fullness, trash_type, payment): + from simulation import Interface + + season_autumn = 0 + season_spring = 0 + season_summer = 0 + season_winter = 0 + day_friday = 0 + day_monday = 0 + day_wednesday = 0 + trash_types_glass = 0 + trash_types_biological = 0 + trash_types_paper = 0 + trash_types_plastic = 0 + truck_fullness = 0 + + guessed_trash_type = trash_type_def(trash_type) + + self.truck_fullness = Interface.truck_fullness.fullness + self.payment = payment + self.bin_fullness = bin_fullness + self.trash_type = guessed_trash_type + + if self.season == 'autumn': + season_autumn = 1 + if self.season == 'spring': + season_spring = 1 + if self.season == 'summer': + season_summer = 1 + if self.season == 'winter': + season_winter = 1 + if self.day == 'friday': + day_friday = 1 + if self.day == 'monday': + day_monday = 1 + if self.day == 'wednesday': + day_wednesday = 1 + if self.trash_type == 'glass': + trash_types_glass = 1 + truck_fullness = self.truck_fullness["glass"] + if self.trash_type == 'biological': + trash_types_biological = 1 + truck_fullness = self.truck_fullness["biological"] + if self.trash_type == 'paper': + trash_types_paper = 1 + truck_fullness = self.truck_fullness["paper"] + if self.trash_type == 'plastic': + trash_types_plastic = 1 + truck_fullness = self.truck_fullness["plastic"] + if truck_fullness < 1: + truck_fullness = 0 + if truck_fullness == 1: + truck_fullness = 1 + dec_tree = {'dump_fullness': [self.dump_fullness], + 'truck_fullness': [truck_fullness], + 'trash': [self.trash], + 'payment': [payment], + 'bin_fullness': [bin_fullness], + 'trash_types_glass': [trash_types_glass], + 'trash_types_mixed': [trash_types_biological], + 'trash_types_paper': [trash_types_paper], + 'trash_types_plastic': [trash_types_plastic], + 'season_autumn': [season_autumn], + 'season_spring': [season_spring], + 'season_summer': [season_summer], + 'season_winter': [season_winter], + 'day_friday': [day_friday], + 'day_monday': [day_monday], + 'day_wednesday': [day_wednesday] + } + outcome = decision(dec_tree) + if outcome == 1: + Interface.truck_fullness.fullness[trash_type] += 0.25 # 0.25 + + debug(dec_tree, outcome, trash_type, guessed_trash_type, self.season, self.day, self.bin_fullness, + self.truck_fullness) + + +def debug(dec_tree, outcome, trash_type, guessed_trash_type, season, day, bin_fullness, truck_fullness): + HOUSE_NUMBER['House_number'] += 1 + print("Domek nr: " + str(HOUSE_NUMBER['House_number'])) + if outcome == 1: + print("Odebrano śmieci") + if outcome == 0: + print("Nie odebrano śmieci") + print("Pora: " + season) + print("Dzień: " + day) + print("Typ śmieci: " + trash_type) + print("Zaobserwowane: " + guessed_trash_type) + print("Zapełnienie domu: " + str(bin_fullness)) + print(truck_fullness) + print(dec_tree) + print("####################################################################################") class Agent: @@ -234,5 +339,7 @@ class Agent: if entity.entity_type == 'house' and vector_to_tuple(entity.position) == self.current_pos: current_house = entity break - if current_house is not None: - self.houses[self.current_pos].discover_bins(current_house.bins) + if current_house is not None and current_house.visited == False: + current_house.visited = True + self.houses[self.current_pos].discover_bins(current_house.bins[0], current_house.bins[1], + current_house.bins[2]) diff --git a/src/simulation.py b/src/simulation.py index e29db27..cec8eb7 100644 --- a/src/simulation.py +++ b/src/simulation.py @@ -1,5 +1,6 @@ from pathlib import Path from random import randint +import random import pygame as pg from agent import Agent @@ -13,9 +14,9 @@ HOUSE_SPRITES = {0: HOUSE_WITHOUT_TRASH_SPRITE, 1: HOUSE_WITH_TRASH_SPRITE} TRUCK_SPRITE_R = pg.Vector2(2, 0) -TRUCK_SPRITE_D = pg.Vector2(2,1) -TRUCK_SPRITE_L = pg.Vector2(2,2) -TRUCK_SPRITE_U = pg.Vector2(2,3) +TRUCK_SPRITE_D = pg.Vector2(2, 1) +TRUCK_SPRITE_L = pg.Vector2(2, 2) +TRUCK_SPRITE_U = pg.Vector2(2, 3) PAPER_DUMP_SPRITE = pg.Vector2(3, 0) PLASTIC_DUMP_SPRITE = pg.Vector2(3, 1) @@ -26,7 +27,24 @@ DUMP_SPRITES = {'paper': PAPER_DUMP_SPRITE, 'plastic': PLASTIC_DUMP_SPRITE, 'mixed': MIXED_DUMP_SPRITE} -TRASH_TYPES = ['paper', 'plastic', 'glass', 'mixed'] +TRASH_TYPES = ['paper', 'plastic', 'glass', 'biological'] +DAYS = ['friday', 'monday', 'wednesday'] +SEASONS = ['autumn', 'spring', 'summer', 'winter'] + + +class Season: + def __init__(self, season): + self.season = season + + +class Day: + def __init__(self, day): + self.day = day + + +class TruckFullness: + def __init__(self, fullness): + self.fullness = fullness class Entity: @@ -40,12 +58,9 @@ class TruckEntity(Entity): super().__init__(state, position) self.entity_type = 'truck' self.tile = TRUCK_SPRITE_R - self.fullness = {'paper': 0, - 'glass': 0, - 'plastic': 0, - 'mixed': 0} + self.fullness = None self.orientation = 90 - + def rotate_img(self, orientation): self.orientation = orientation if orientation == 0: @@ -76,13 +91,11 @@ class TruckEntity(Entity): class Bin: - def __init__(self, size, trash_type): - self.size = size - self.trash_type = trash_type - self.fullness = randint(0, 100) + def __init__(self, items): + self.items = items - def __str__(self): - return self.trash_type + " bin" + def __getitem__(self, index): + return self.items[index] class HouseEntity(Entity): @@ -90,7 +103,8 @@ class HouseEntity(Entity): super().__init__(state, position) self.tile = HOUSE_SPRITES[0] self.entity_type = 'house' - self.bins = [Bin(randint(1, 2), trash_type) for trash_type in TRASH_TYPES] + self.visited = False + self.bins = Bin([randint(0, 1), random.choice(TRASH_TYPES), randint(0, 1)]) class DumpEntity(Entity): @@ -125,7 +139,7 @@ class SimulationState: if tile == "R": self.road_pos_r.append(pg.Vector2(x, y)) if tile == "G": - self.road_pos_g.append(pg.Vector2(x,y)) + self.road_pos_g.append(pg.Vector2(x, y)) if tile == "H": self.houses_pos.append(pg.Vector2(x, y)) self.entities.append(HouseEntity(self, pg.Vector2(x, y))) @@ -165,7 +179,7 @@ class Layer: self.sim = sim self.texture_atlas = pg.image.load(texture_file) - def renderTile(self, surface, position, tile, orientation = 90, rotate=False): + def renderTile(self, surface, position, tile, orientation=90, rotate=False): # pozycja na ekranie sprite_pos = position.elementwise() * self.sim.cell_size @@ -175,7 +189,6 @@ class Layer: int(pos_in_atlas.y), self.sim.cell_size.x, self.sim.cell_size.y) - # render surface.blit(self.texture_atlas, sprite_pos, texture) @@ -211,6 +224,13 @@ class StructureLayer(Layer): class Interface: + truck_fullness = TruckFullness({'paper': 0, + 'glass': 0, + 'plastic': 0, + 'biological': 0}) + season = Season(random.choice(SEASONS)) + day = Day(random.choice(DAYS)) + def __init__(self): pg.init() @@ -224,8 +244,8 @@ class Interface: # rendering self.cell_size = pg.Vector2(64, 64) texture_file = Path(r"..\res\tiles.png") - self.layers = [StructureLayer(self, texture_file, self.state, self.state.road_pos_r, ROAD_SPRITE_R ), - StructureLayer(self, texture_file, self.state, self.state.road_pos_g, ROAD_SPRITE_G ), + self.layers = [StructureLayer(self, texture_file, self.state, self.state.road_pos_r, ROAD_SPRITE_R), + StructureLayer(self, texture_file, self.state, self.state.road_pos_g, ROAD_SPRITE_G), EntityLayer(self, texture_file, self.state, self.state.entities)] # okno @@ -257,16 +277,16 @@ class Interface: if self.debug_mode: if event.key == pg.K_RIGHT: self.move_truck.x = 1 - + if event.key == pg.K_LEFT: self.move_truck.x = -1 - + if event.key == pg.K_DOWN: self.move_truck.y = 1 - + if event.key == pg.K_UP: self.move_truck.y = -1 - + if event.key == pg.K_d: self.agent.discover() @@ -276,6 +296,7 @@ class Interface: def update(self): self.state.update(self.move_truck) self.agent.update() + self.agent.discover() '''if isinstance(self.move_truck, int): self.state.update(self.move_truck) self.agent.update()''' @@ -298,5 +319,5 @@ class Interface: self.processAgentInput() self.update() self.render() - self.clock.tick(12) + self.clock.tick(50) pg.quit()