def __init__(self): self.side = "l" #l or r self.unum = -1 self.playerType = playerType.PlayerType() self.pos = pos.Pos(-1000, -1000) self.vel = pos.Pos(-1000, -1000) self.body = 361 self.head = 361 self.stamina_l = -10 self.stamina_s = -2
def make(self, line, pt): details = line.split("|") # Cycle and Ball self.cycle = int(details[1]) self.ball.set_data(details[2]) # make Players for ply_str in details: if ply_str == '': continue if ply_str[0] != "r" and ply_str[0] != "l": continue playerobj = player.Player() playerobj.set_data(ply_str, pt) self.players.append(playerobj) self.set_side() self.set_kicker() # make Polars pos for players for i in range(len(self.players)): self.players[i].features.polar = pos.make_polar( pos.vector(self.kicker.pos, self.players[i].pos)) # find open tm angle for pass FFFFFFFFFFFFFFFFFFFFFFFFFFFFFUCCCCCKKKKKKKKKKKKKKKKKKKkk opp_angles = [p.features.polar for p in self.players if p.side == "r"] for p in self.players: if p.side == "r": continue less = [] for angle in opp_angles: if angle.r > p.features.polar.r: continue if angle.teta <= p.features.polar.teta: less.append(angle.teta) more = [] for angle in opp_angles: if angle.r > p.features.polar.r: continue if angle.teta > p.features.polar.teta: more.append(angle.teta) # for i in range(len(players)): #tm # left_ang = 10 # right_ang = -10 # if players[i].side != kicker.side: continue # # for j in range(len(players)): #opp # if j == i: continue # if j == n: continue # if players[j].side == players[i].side: continue # if players[i].pos.dist(kicker.pos) + 2 < players[j].pos.dist(kicker.pos): continue # if left_ang > players[j].features.polar.teta and players[j].features.polar.teta > players[i].features.polar.teta: # left_ang = players[j].features.polar.teta # if right_ang < players[j].features.polar.teta and players[j].features.polar.teta < players[i].features.polar.teta: # right_ang = players[j].features.polar.teta # open_ang = (left_ang - right_ang) # players[i].features.open_angle = open_ang # make vector to goals for i in range(len(self.players)): playerToGoal = pos.vector(self.players[i].pos, pos.Pos(52.5, 0)) self.players[i].features.goal_vector = pos.make_polar(playerToGoal)
def set_data(self, string): dt = string.split(" ") self.pos.x = float(dt[0]) self.pos.y = float(dt[1]) self.vel.x = float(dt[2]) self.vel.y = float(dt[3]) teta_vb = self.vel.teta(pos.Pos(0, 0)) r_vb = self.vel.r() self.vel_p = pos.Polar(r_vb, teta_vb)
def __init__(self): self.pos = pos.Pos(-1000, -1000) self.vel = pos.Pos(-1000, -1000)
def __init__(self): self.pos = pos.Pos(-1000, -1000) self.vel = pos.Pos(-1000, -1000) self.vel_p = pos.Polar(-100, 10)
def extractFeatur(log, player_types): os.chdir("../features") file_name = str(counter()) new_log = open(file_name + ".rcb", "w") # write types in file for pt in player_types: new_log.write("pt " + str(pt.id) + " " + str(pt.kickAble_area) + "\n") lines = log.split("\n") last_kickAble_cycle = -10 last_kickAble_unum = -1 for line in lines: #Reading a cycle data if line.find("*") != -1: last_kickAble_unum = -1 last_kickAble_cycle = -10 if (line.find("R") == -1): continue details = line.split("|") cycle = int(details[1]) ballobj = ball.Ball() ballobj.set_data(details[2]) players = [] for ply_str in details: if ply_str == '': continue if ply_str[0] != "r" and ply_str[0] != "l": continue playerobj = player.Player() playerobj.set_data(ply_str, player_types) players.append(playerobj) if not side(players, ballobj, "l"): if side(players, ballobj, "r"): last_kickAble_unum = -1 last_kickAble_cycle = -10 continue n = 0 for i in range(len(players)): if players[i].is_kickAble(ballobj.pos) and players[i].side == "l": n = i break polars = [] polars_n = [] kicker = players[n] for plyr in players: teta = plyr.pos.teta(kicker.pos) r = plyr.pos.dist(kicker.pos) polar = pos.Polar(r, teta) polars.append(polar) next_pos = pos.plus(plyr.pos, plyr.vel) teta_n = next_pos.teta(kicker.pos) r_n = next_pos.dist(kicker.pos) polar_n = pos.Polar(r_n, teta_n) polars_n.append(polar_n) new_line = "" new_line += "R|" + str(cycle) + "|" #find polar pos and vel of ball teta_b = ballobj.pos.teta(kicker.pos) r_b = ballobj.pos.dist(kicker.pos) polar_b = pos.Polar(r_b, teta_b) next_ballpos = pos.Pos(ballobj.pos.x + ballobj.vel.x, ballobj.pos.y + ballobj.vel.y) teta_vb = next_ballpos.teta(ballobj.pos) r_vb = ballobj.vel.r() polar_vb = pos.Polar(r_vb, teta_vb) new_line += str(polar_b.r) + " " + str(polar_b.teta) + " " + str( polar_vb.r) + " " + str(polar_vb.teta) + "|" for i_p in range(len(polars)): new_line += str(polars[i_p].r) + " " + str(polars[i_p].teta) + "|" # new_line += str(polars_n[i_p].r) + " " + str(polars_n[i_p].teta) + "|" # for plyr in players: # new_line += str(plyr.pos.x/52.5) + " " + str(plyr.pos.y/34) + "|" new_line += str(last_kickAble_unum) + " " + str(kicker.unum) + "|" if last_kickAble_unum != -1: new_log.write(new_line + "\n") last_kickAble_unum = kicker.unum # print("feature:",cycle) new_log.close() f_log = open(file_name + ".rcb", "r").read() new_log = open(file_name + ".rcb", "w") lines = f_log.split("\n") for i in range(len(lines) - 2): if lines[i].find("pt") != -1: continue line = lines[i].split("|")[:-1] next_line = lines[i + 1].split("|")[:-1] line[-1] = next_line[-1] newline = "" for w in line: newline += w + "|" new_log.write(newline + "\n") os.chdir("../samples")