diff --git a/Gym_new.py b/Gym_new.py index 9015dfa2ed992ecc6a37e81f8e6ad8401e12e423..94537764944b3909dff96b06ef5a008166c2ce25 100644 --- a/Gym_new.py +++ b/Gym_new.py @@ -1,155 +1,82 @@ -import asyncio -import random -import json -from socket import socket - -import websockets - -#from ActionSpace import ActionSpace -import logging - - -class Gym: - host = None - port = None - player = None - families = None - types = None - protocols = None - logger = None - # Create a TCP/IP socket - sock = None - last_recieved_JSON = None - loop = None - maxaction = 5 - #websocket = None - - def __init__(self, host ='localhost', port =9080, player ="player1"): - self.host = host - self.port = port - self.player = player - #self.loop = loop - random.seed() - - # self.families = self.get_constants('AF_') - # self.types = self.get_constants('SOCK_') - # self.protocols = self.get_constants('IPPROTO_') - - self.logger = logging.getLogger('websockets') - self.logger.setLevel(logging.INFO) - self.logger.addHandler(logging.StreamHandler()) - print('New gym instance IP:', host, 'Port:', port, 'Playername:', player) - - # Call reset function of environment and returns observation - # Send data to reset enviroment - async def reset(self, delta): - message = json.dumps([['reset'], delta], sort_keys=True, indent=4) - data = [] - #print('send_action:',message) - await self.send_websocket(message, data) - test = json.loads(data[0]) - # print(test) - # print(test[0]) - # print(test[1]) - reward = test[3] - observation = test[0:3] - done = test[4] - info = 0 - # print(data) - # print(data[0][0]) - return observation, reward, done, info - - # send action to env returns observation, reward, done, info - # creates JSON object - async def step(self, action, delta): - global maxaction - # Test ob die Action im richtigen Bereich ist!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - test_message = [] - if action.find("accelerate")!=-1:#(action>=0) and (action < maxaction): - test_message.append( "accelerate") - #message = json.dumps({'action': action, 'delta': delta}, sort_keys=True, indent=4) - #message = json.dumps([action], sort_keys=True, indent=4) - #message2 = str(action) - - - #hier data aufteilen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - #test = json.loads(data) - #print(test) - #x = data.split(',') - #print(x) - if action.find("left")!= -1: - test_message.append( "steer_left") - if action.find("right")!= -1: - test_message.append("steer_right") - if action.find("brake")!= -1: - test_message.append("brake") - if action.find("reverse")!= -1: - test_message.append("reverse") - if action.find("screen_on")!= -1: - test_message.append("screen_on") - if action.find("screen_off")!= -1: - test_message.append("screen_off") - - - else: - pass - #print("Action is not a valid Step") - - message = json.dumps([test_message,delta], sort_keys=True, indent=4) - #message = json.dumps([action], sort_keys=True, indent=4) - data = [] - #print('send_action:', message) - - await self.send_websocket(message, data) - #print("awaited send_action") - test = json.loads(data[0]) - # print(test) - # print(test[0]) - # print(test[1]) - reward = test[3] - observation = test[0:3] - done = test[4] - info = test[5] - # print(data) - # print(data[0][0]) - return observation, reward, done, info - - - """ Returns a random action of action space - """ - # Gibt jetzt eine Action zurück als Zahlenwert - def get_sample_action(self): - global maxaction - action = random.randrange(0, maxaction) - return action - - # socket_echo_client_easy.py - - - # Wird jetzt nicht mehr benutzt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # async def send_action(self, next_action): - # message = '["' + next_action.name + '"]' - # data = [] - # print('send_action:',message) - # await self.send_websocket(message, data) - # print("awaited send_action") - # print(data) - # return data - async def connect_websocket(self): - print("creating Websocket ") - uri = "ws://localhost:9080" - self.websocket = await websockets.connect(uri) - # async with websockets.connect(uri) as websocket: - # print("Websocket created ") - # self.websocket = websocket - - async def send_websocket(self, message, data): - - await self.websocket.send(message) - # print(f"> {name}") - data.append(await self.websocket.recv()) - #print(f"< {data}") - #print(data) - - async def close_websocket(self): - await self.websocket.close() \ No newline at end of file +import asyncio +import random +import json + +import websockets +import logging + + +class Gym: + host = None + port = None + player = None + logger = None + + + def __init__(self, host ='localhost', port =9080, player ="player1"): + self.host = host + self.port = port + self.player = player + random.seed() + + self.logger = logging.getLogger('websockets') + self.logger.setLevel(logging.INFO) + self.logger.addHandler(logging.StreamHandler()) + print('New gym instance IP:', host, 'Port:', port, 'Playername:', player) + + # Call reset function of environment and returns observation + # Send data to reset enviroment + async def reset(self, delta): + message = json.dumps([['reset'], delta], sort_keys=True, indent=4) + data = [] + await self.send_websocket(message, data) + test = json.loads(data[0]) + reward = test[3] + observation = test[0:3] + done = test[4] + info = 0 + return observation, reward, done, info + + # send action to env returns observation, reward, done, info + # creates JSON object + async def step(self, action, delta): + global maxaction + test_message = [] + if action.find("accelerate")!=-1: + test_message.append( "accelerate") + if action.find("left")!= -1: + test_message.append( "steer_left") + if action.find("right")!= -1: + test_message.append("steer_right") + if action.find("brake")!= -1: + test_message.append("brake") + if action.find("reverse")!= -1: + test_message.append("reverse") + if action.find("screen_on")!= -1: + test_message.append("screen_on") + if action.find("screen_off")!= -1: + test_message.append("screen_off") + + message = json.dumps([test_message,delta], sort_keys=True, indent=4) + data = [] + + await self.send_websocket(message, data) + test = json.loads(data[0]) + reward = test[3] + observation = test[0:3] + done = test[4] + info = test[5] + return observation, reward, done, info + + async def connect_websocket(self): + print("creating Websocket ") + uri = "ws://localhost:9080" + self.websocket = await websockets.connect(uri) + + + async def send_websocket(self, message, data): + await self.websocket.send(message) + data.append(await self.websocket.recv()) + + async def close_websocket(self): + await self.websocket.close()