diff --git a/Cucumber.py b/Cucumber.py index bd5cb72..e313581 100644 --- a/Cucumber.py +++ b/Cucumber.py @@ -3,13 +3,13 @@ from Plant import Plant class Cucumber(Plant): name = 0 is_alive = True - ttl = 10000 - hydration = 40 - soil_level = 40 - dehydration_ratio = 2 + ttl = 100000 #21474836 + hydration = 900 #70 + soil_level = 800 #70 + dehydration_ratio = 1 desoil_ratio = 1 - max_soil_lvl = 40 + max_soil_lvl = 990 #40 optimal_soil_ratio = 2 - max_hydration_lvl = 40 + max_hydration_lvl = 990 # 40 optimal_hydration_ratio = 2 - ready = 11 + ready = 300 diff --git a/Plant.py b/Plant.py index ad2e548..e207d4c 100644 --- a/Plant.py +++ b/Plant.py @@ -53,14 +53,22 @@ class Plant(): def get_symbol(self): if not self.is_alive: return ('x', None) - elif self.hydration > (self.max_hydration_lvl / self.optimal_hydration_ratio) \ - and self.soil_level > (self.max_soil_lvl / self.optimal_soil_ratio): + if self.name == 1 and self.hydration > (500) and self.soil_level > (400): +# (self.max_soil_lvl / self.optimal_soil_ratio): return ('p', "green") if (self.ttl > self.ready) \ else ('P', "green") - else: - return ('p', "yellow") if (self.ttl > self.ready) \ - else ('P', "yellow") + elif self.name == 0 and self.hydration > (600) and self.soil_level > (500): + return ('o', "green") if (self.ttl > self.ready) \ + else ('O', "green") + else: + if self.name == 1: + return ('p', "yellow") if (self.ttl > self.ready) \ + else ('P', "yellow") + else: + return ('o', "yellow") if (self.ttl > self.ready) \ + else ('O', "yellow") + def tick(self, n): self.decrease_ttl(n) self.decrase_hydration(n) @@ -70,6 +78,8 @@ class Plant(): self.ttl -= n if self.ttl == 0: self.is_alive = False + if n==0: + self.is_alive = False def increase_hydration(self, n): @@ -78,7 +88,7 @@ class Plant(): self.is_alive = False def decrase_hydration(self, n): - self.hydration -= n * self.dehydration_ratio + self.hydration -= (n * self.dehydration_ratio) if self.hydration < 1: self.is_alive = False @@ -88,6 +98,8 @@ class Plant(): self.is_alive = False def decrease_soillevel(self, n): - self.soil_level -= n * self.desoil_ratio + self.soil_level -= (n * self.desoil_ratio) if self.soil_level < 1: self.is_alive = False + + diff --git a/Tomato.py b/Tomato.py index 9c7ed6f..5c2d542 100644 --- a/Tomato.py +++ b/Tomato.py @@ -3,13 +3,13 @@ from Plant import Plant class Tomato(Plant): name = 1 is_alive = True - ttl = 12000 - hydration = 41 - soil_level = 41 + ttl = 1000 #21474836 + hydration = 500 #80 + soil_level = 400 dehydration_ratio = 1 - desoil_ratio = 2 - max_soil_lvl = 40 + desoil_ratio = 1 + max_soil_lvl = 990 #40 optimal_soil_ratio = 2 - max_hydration_lvl = 100 + max_hydration_lvl = 990 #100 optimal_hydration_ratio = 2 - ready = 10 + ready = 200 diff --git a/Tree.py b/Tree.py index f02ac71..cb051a9 100644 --- a/Tree.py +++ b/Tree.py @@ -27,45 +27,93 @@ class TreeClass: def make_tree(self, plant, pl_stats): features = [ - [1, True, 60, 90, 95], - [1, True, 60, 84, 88], - [1, True, 50, 78, 77], - [1, True, 45, 63, 68], - [1, True, 37, 54, 59], - [1, True, 20, 31, 62], - [1, True, 18, 75, 39], - [1, True, 19, 24, 74], - [1, True, 24, 69, 25], - [1, True, 15, 45, 85], - [1, True, 23, 85, 48], - [1, True, 26, 41, 45], - [1, True, 21, 35, 32], - [1, True, 49, 24, 28], - [1, True, 64, 15, 14], - [1, True, 84, 4, 8], + [1, True, 199, 900, 950], + [1, True, 150, 840, 880], + [1, True, 149, 780, 770], + [1, True, 133, 630, 680], + [1, True, 185, 540, 590], + [1, True, 123, 310, 620], - [0, True, 55, 89, 84], - [0, True, 76, 91, 95], - [0, True, 45, 72, 71], - [0, True, 37, 64, 68], - [0, True, 26, 54, 59], - [0, True, 58, 42, 46], - [0, True, 20, 31, 62], - [0, True, 18, 75, 39], - [0, True, 19, 24, 74], - [0, True, 24, 69, 25], - [0, True, 15, 12, 85], - [0, True, 23, 85, 18], - [0, True, 34, 38, 36], - [0, True, 41, 24, 22], - [0, True, 34, 38, 36], - [0, True, 74, 26, 23], - [0, True, 84, 14, 19], - [0, True, 95, 7, 4] + [1, True, 3800, 450, 490], + [1, True, 290, 240, 740], + [1, True, 240, 490, 550], + [1, True, 350, 350, 850], + [1, True, 230, 349, 400], + [1, True, 260, 410, 400], + + [1, True, 260, 510, 399], + [1, True, 210, 550, 320], + [1, True, 490, 740, 280], + [1, True, 640, 500, 140], + [1, True, 840, 867, 80], + [1, True, 6789, 555, 159], + + [1, True, 37812, 489, 368], + [1, True, 3728, 387, 278], + [1, True, 1934, 134, 334], + [1, True, 13562, 499, 233], + [1, True, 1789, 289, 399], + [1, True, 201, 478, 340], + + [1, True, 1892, 996, 865], + [1, True, 6789, 555, 459], + [1, True, 37812, 789, 768], + [1, True, 3728, 987, 678], + [1, True, 199, 500, 555], + [1, True, 1892, 502, 400], + + [1, False, 6789, 672, 405], + [1, False, 37812, 589, 420], + [1, False, 3728, 890, 778], + [1, False, 799, 734, 634], + [1, False, 799, 734, 634], + [1, False, 799, 734, 634], + + + [0, True, 299, 890, 840], + [0, True, 134, 910, 950], + [0, True, 256, 720, 710], + [0, True, 87, 640, 680], + [0, True, 189, 540, 590], + [0, True, 222, 420, 460], + + [0, True, 300, 310, 620], + [0, True, 4580, 550, 590], + [0, True, 1290, 240, 740], + [0, True, 340, 290, 650], + [0, True, 7650, 120, 850], + [0, True, 3455, 599, 501], + + [0, True, 3040, 680, 360], + [0, True, 410, 740, 220], + [0, True, 340, 880, 360], + [0, True, 740, 960, 499], + [0, True, 840, 601, 190], + [0, True, 950, 765, 400], + + [0, True, 3400, 550, 360], + [0, True, 740, 260, 230], + [0, True, 840, 300, 190], + [0, True, 950, 199, 100], + [0, True, 340, 380, 460], + [0, True, 740, 560, 499], + + [0, True, 840, 690, 790], + [0, True, 950, 800, 550], + [0, True, 340, 799, 599], + [0, True, 740, 900, 501], + [0, True, 840, 645, 785], + [0, True, 950, 700, 650], + + [0, False, 190, 240, 740], + [0, False, 240, 690, 250], + [0, False, 150, 120, 850], + [0, False, 230, 850, 180], + [0, False, 2345, 21, 342], + [0, False, 2561, 244, 532] ] - labels = [0, 0, 0, 0, 0, 1, 2, 1, 2, 1, 2, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 1, 2, 1, 2, 1, 2, 3, 3, 3, 3, 3, 3] - + labels = [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5] #utwórz drzewo decyzyjne t = tree.DecisionTreeClassifier() @@ -75,7 +123,7 @@ class TreeClass: #użyj modelu aby dopasować(podjąć decyzję) #p = tree.predict([["Cucumber", True, 38, 26, 51]]) p = t.predict([[pl_stats["name"], pl_stats["is_alive"], pl_stats["ttl"], pl_stats["hydration"], pl_stats["soil_level"]]]) - + return p # if p == 0: @@ -91,7 +139,7 @@ class TreeClass: # plant.increase_soillevel(plant.max_soil_lvl - plant.soil_level) #wyświetlamy dopasowaną wartość - print(p) + # print(p) T = TreeClass() diff --git a/env.py b/env.py index 7511ed0..eb8611e 100755 --- a/env.py +++ b/env.py @@ -159,11 +159,15 @@ if __name__ == "__main__": elif message[0] == "inc_soil": x = int(message[1]) y = int(message[2]) - field[x][y].increase_soillevel(1) + field[x][y].increase_soillevel(field[x][y].max_soil_lvl - field[x][y].soil_level) elif message[0] == "inc_hydration": x = int(message[1]) y = int(message[2]) - field[x][y].increase_hydration(1) + field[x][y].increase_hydration(field[x][y].max_hydration_lvl - field[x][y].hydration) + elif message[0] == "dec_ttl": + x = int(message[1]) + y = int(message[2]) + field[x][y].decrease_ttl(0) print_field(field, tractor) diff --git a/tractor.py b/tractor.py index 12a5924..a4d3a4a 100755 --- a/tractor.py +++ b/tractor.py @@ -37,6 +37,14 @@ class Tractor(TreeClass): await reader.readline() time.sleep(self.sleep_time) writer.close() + + async def decrease_ttl(self, location): + reader, writer = await asyncio.open_connection('127.0.0.1', 8887) + writer.write(("dec_ttl " + str(location[0]) + " " + str(location[1]) + "\n").encode()) + await reader.readline() + time.sleep(self.sleep_time) + writer.close() + async def rotate(self, direction): reader, writer = await asyncio.open_connection('127.0.0.1', 8887) @@ -243,14 +251,21 @@ class Tractor(TreeClass): if p == 0: print("Ready to cut") - # t.Harvest() + await self.decrease_ttl(i) elif p == 1: + print("I'm increasing hydration") await self.increase_hydration(i) elif p == 2: + print("I'm increasing soil level") await self.increase_soil_lvl(i) elif p == 3: + print("I'm increasing hydration and soil level") await self.increase_hydration(i) await self.increase_soil_lvl(i) + elif p == 4: + print ("Nothing to do") + elif p == 5: + print ("There's nothing here") "tutaj trzeba zapytac env z jakimi roslinami sie styka traktor i je obsłuzyc"