From d13fa47643c24024eac6a369620de4672c0f3830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Jab=C5=82o=C5=84ski?= Date: Mon, 3 Jun 2019 14:42:39 +0200 Subject: [PATCH] XD --- Cucumber.py | 6 ++-- Tomato.py | 6 ++-- Tree.py | 91 +++++++++++++++++++++++++++-------------------------- env.py | 10 +++++- tractor.py | 31 +++++++++++++++--- 5 files changed, 88 insertions(+), 56 deletions(-) diff --git a/Cucumber.py b/Cucumber.py index 5845c7d..bd5cb72 100644 --- a/Cucumber.py +++ b/Cucumber.py @@ -1,13 +1,13 @@ from Plant import Plant class Cucumber(Plant): - name = "Cucumber" + name = 0 is_alive = True ttl = 10000 hydration = 40 soil_level = 40 - dehydration_ratio = 0.8 - desoil_ratio = 0.7 + dehydration_ratio = 2 + desoil_ratio = 1 max_soil_lvl = 40 optimal_soil_ratio = 2 max_hydration_lvl = 40 diff --git a/Tomato.py b/Tomato.py index 2c65511..9c7ed6f 100644 --- a/Tomato.py +++ b/Tomato.py @@ -1,13 +1,13 @@ from Plant import Plant class Tomato(Plant): - name = "Tomato" + name = 1 is_alive = True ttl = 12000 hydration = 41 soil_level = 41 - dehydration_ratio = 0.7 - desoil_ratio = 0.8 + dehydration_ratio = 1 + desoil_ratio = 2 max_soil_lvl = 40 optimal_soil_ratio = 2 max_hydration_lvl = 100 diff --git a/Tree.py b/Tree.py index 2c52f5e..f02ac71 100644 --- a/Tree.py +++ b/Tree.py @@ -1,6 +1,5 @@ + from sklearn import tree -import collections -import subprocess class TreeClass: #file = open("probne.pl", 'r').read() @@ -27,41 +26,42 @@ class TreeClass: #print(com) def make_tree(self, plant, pl_stats): - features = [[0, True, 60, 90, 95], - [0, True, 60, 84, 88], - [0, True, 50, 78, 77], - [0, True, 45, 63, 68], - [0, True, 37, 54, 59], - [0, True, 20, 31, 62], - [0, True, 18, 75, 39], - [0, True, 19, 24, 74], - [0, True, 24, 69, 25], - [0, True, 15, 45, 85], - [0, True, 23, 85, 48], - [0, True, 26, 41, 45], - [0, True, 21, 35, 32], - [0, True, 49, 24, 28], - [0, True, 64, 15, 14], - [0, True, 84, 4, 8], - - [1, True, 55, 89, 84], - [1, True, 76, 91, 95], - [1, True, 45, 72, 71], - [1, True, 37, 64, 68], - [1, True, 26, 54, 59], - [1, True, 58, 42, 46], + 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, 12, 85], - [1, True, 23, 85, 18], - [1, True, 34, 38, 36], - [1, True, 41, 24, 22], - [1, True, 34, 38, 36], - [1, True, 74, 26, 23], - [1, True, 84, 14, 19], - [1, True, 95, 7, 4] + [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], + + [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] ] 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] @@ -74,18 +74,21 @@ class TreeClass: #użyj modelu aby dopasować(podjąć decyzję) #p = tree.predict([["Cucumber", True, 38, 26, 51]]) - p = t.predict([pl_stats[0], pl_stats[1]], pl_stats[2], pl_stats[3], pl_stats[4]) + p = t.predict([[pl_stats["name"], pl_stats["is_alive"], pl_stats["ttl"], pl_stats["hydration"], pl_stats["soil_level"]]]) - if p == 0: - print("Ready to cut") - t.Harvest() - elif p == 1: - plant.increase_hydration(plant.max_hydration_lvl - plant.hydration) - elif p == 2: - plant.increase_soillevel(plant.max_soil_lvl - plant.soil_level) - elif p == 3: - plant.increase_hydration(plant.max_hydration_lvl - plant.hydration) - plant.increase_soillevel(plant.max_soil_lvl - plant.soil_level) + return p + + # if p == 0: + # print("Ready to cut") + # return 0 + # # t.Harvest() + # elif p == 1: + # plant.increase_hydration(plant.max_hydration_lvl - plant.hydration) + # elif p == 2: + # plant.increase_soillevel(plant.max_soil_lvl - plant.soil_level) + # elif p == 3: + # plant.increase_hydration(plant.max_hydration_lvl - plant.hydration) + # plant.increase_soillevel(plant.max_soil_lvl - plant.soil_level) #wyświetlamy dopasowaną wartość print(p) diff --git a/env.py b/env.py index 274d3dc..11fd76f 100755 --- a/env.py +++ b/env.py @@ -111,7 +111,7 @@ def send_stats(field, location): y = location[1] stats = field[x][y].get_stats() str_stats = str(stats["ttl"]) + " " + str(stats["is_alive"]) + " " + str(stats["hydration"]) + " " \ - + str(stats["soil_level"]) + " " + str(stats["ready"]) + "\n" + + str(stats["soil_level"]) + " " + str(stats["ready"]) + " " + str(stats["name"]) + "\n" return str_stats @@ -146,6 +146,14 @@ if __name__ == "__main__": y = int(message[2]) stats = send_stats(field, (x, y)).encode() writer.write(stats) + elif message[0] == "inc_soil": + x = int(message[1]) + y = int(message[2]) + field[x][y].increase_soillevel(1) + elif message[0] == "inc_hydration": + x = int(message[1]) + y = int(message[2]) + field[x][y].increase_hydration(1) print_field(field, tractor) diff --git a/tractor.py b/tractor.py index dfb1626..12a5924 100755 --- a/tractor.py +++ b/tractor.py @@ -24,10 +24,19 @@ class Tractor(TreeClass): (x2, y2) = b return abs(x1 - x2) + abs(y1 - y2) - # def look_at_plats(field, location): - - + async def increase_soil_lvl(self, location): + reader, writer = await asyncio.open_connection('127.0.0.1', 8887) + writer.write(("inc_soil " + str(location[0]) + " " + str(location[1]) + "\n").encode()) + await reader.readline() + time.sleep(self.sleep_time) + writer.close() + async def increase_hydration(self, location): + reader, writer = await asyncio.open_connection('127.0.0.1', 8887) + writer.write(("inc_hydration " + 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) @@ -222,14 +231,26 @@ class Tractor(TreeClass): hydration = int(parsed_data[2]) soil_level = int(parsed_data[3]) ready = int(parsed_data[4]) + name = int(parsed_data[5]) # return {"ttl": int(parsed_data[0]), "is_alive": ((parsed_data[1]=="True")?True:False), "hydration": int(parsed_data[2]), "soil_level": int(parsed_data[3]), "ready": int(parsed_data[4])} - return ({"ttl": ttl,"is_alive": is_alive,"hydration": hydration,"soil_level": soil_level,"ready": ready}) + return ({"ttl": ttl,"is_alive": is_alive,"hydration": hydration,"soil_level": soil_level,"ready": ready ,"name": name}) async def service(self): plant_location = await self.look_at_plants(self.current_location) for i in plant_location: plant_stats = await self.get_stats(i) - TreeClass.make_tree(self, i, plant_stats) + p = TreeClass.make_tree(self, i, plant_stats) + + if p == 0: + print("Ready to cut") + # t.Harvest() + elif p == 1: + await self.increase_hydration(i) + elif p == 2: + await self.increase_soil_lvl(i) + elif p == 3: + await self.increase_hydration(i) + await self.increase_soil_lvl(i) "tutaj trzeba zapytac env z jakimi roslinami sie styka traktor i je obsłuzyc"