def do_protect_goal_actions(self, env, gstrategy): if shortcuts.can_take_puck(env): puck_abs_speed = geometry.vector_abs(env.world.puck.speed_x, env.world.puck.speed_y) if shortcuts.take_puck_probability(env, puck_abs_speed) >= 1.: env.move.action = ActionType.TAKE_PUCK return if not assessments.puck_is_heading_to_my_net(env): env.move.action = ActionType.TAKE_PUCK return if shortcuts.can_strike_unit(env, env.world.puck): env.move.action = ActionType.STRIKE return for oh in shortcuts.opponent_field_hockeyists(env): if shortcuts.can_strike_unit(env, oh): env.move.action = ActionType.STRIKE return if self.its_dangerous(env) and env.me.get_distance_to_unit(self.precount.defence_point) < 100: basic_actions.turn_to_unit(env, env.world.puck) if geometry.distance(self.precount.defence_point, env.world.puck) <= 200: if basic_actions.turned_to_unit(env, env.world.puck): env.move.speed_up = 1. return speed_abs = geometry.vector_abs(env.me.speed_x, env.me.speed_y) if env.me.get_distance_to_unit(self.precount.defence_point) >= 20: experiments.fast_move_to_point(env, self.precount.defence_point) elif speed_abs > 0.01: experiments.do_stop(env) else: basic_actions.turn_to_unit(env, env.world.puck)
def move(self, me, world, game, move): if me.teammate_index != 0: return env = environment.Environment(me, world, game, move) if world.tick == 0: actions = [ training_actions.TakePuck(), training_actions.Stop(), # training_actions.TurnToPoint( # geometry.Point(env.game.rink_right, env.game.rink_top + 100) # ), training_actions.TurnToPoint( shortcuts.my_goalie(env) ), training_actions.Strike(20), ] self.action_list = training_actions.ActionList(*actions) if self.action_list.do(env): return puck_speed_abs = geometry.vector_abs(env.world.puck.speed_x, env.world.puck.speed_y) print env.world.tick, 'x = ', env.world.puck.speed_x, 'y = ', env.world.puck.speed_y
def do_get_puck_actions(self, env): if self.its_dangerous(env): hockeyist_with_puck = shortcuts.hockeyist_with_puck(env) if hockeyist_with_puck is not None: if shortcuts.can_strike_unit(env, hockeyist_with_puck): env.move.action = ActionType.STRIKE return env.move.speed_up = 1.0 hwp = shortcuts.hockeyist_with_puck(env) if hwp is not None: basic_actions.turn_to_unit(env, hwp) else: basic_actions.turn_to_unit(env, env.world.puck) if shortcuts.can_take_puck(env): puck_abs_speed = geometry.vector_abs(env.world.puck.speed_x, env.world.puck.speed_y) if shortcuts.take_puck_probability(env, puck_abs_speed) >= 1.0: env.move.action = ActionType.TAKE_PUCK return if not assessments.puck_is_heading_to_my_net(env): env.move.action = ActionType.TAKE_PUCK return if shortcuts.can_strike_unit(env, env.world.puck): env.move.action = ActionType.STRIKE return if hwp is not None and shortcuts.can_strike_unit(env, hwp): env.move.action = ActionType.STRIKE return
def fast_move_to_point_backward(env, point): distance = env.me.get_distance_to_unit(point) mirrow_point = geometry.Point( 2 * env.me.x - point.x, 2 * env.me.y - point.y ) angle = env.me.get_angle_to_unit(mirrow_point) if abs(angle) > geometry.degree_to_rad(1): env.move.turn = angle return v0 = geometry.vector_abs(env.me.speed_x, env.me.speed_y) vn = 0 a = -env.game.hockeyist_speed_up_factor n = prediction.count_n(v0, a, vn) if n is None: env.move.speed_up = -1.0 return n = round(n) + 1 x0 = 0. xn = prediction.count_xn(x0, v0, a, n) if xn > distance: env.move.speed_up = 1.0 else: env.move.speed_up = -1.0
def do(self, env): distance = env.me.get_distance_to_unit(self.point) angle = env.me.get_angle_to_unit(self.point) if distance < 2: self.done = True speed_abs = geometry.vector_abs(env.me.speed_x, env.me.speed_y) print ( 'tick = ', env.world.tick, 'MoveToPoint done', 'x = ', env.me.x, 'y = ', env.me.y, 'speed abs = ', speed_abs ) return if abs(angle) > geometry.degree_to_rad(1): env.move.turn = angle return v0 = geometry.vector_abs(env.me.speed_x, env.me.speed_y) vn = 0 a = -env.game.hockeyist_speed_down_factor n = prediction.count_n(v0, a, vn) if n is None: env.move.speed_up = 1.0 # print 'tick = ', env.world.tick, 'speed = 1. n is None' return n = round(n) + 1 x0 = 0. xn = prediction.count_xn(x0, v0, a, n) # print ( # 'v0 = ', v0, # 'n =', n, # 'xn =', xn, # 'dist = ', distance # ) # import ipdb; ipdb.set_trace() if xn > distance: # print 'tick = ', env.world.tick, 'speed = -1.' env.move.speed_up = -1.0 else: # print 'tick = ', env.world.tick, 'speed = 1.' env.move.speed_up = 1.0
def save_start_game_tick(self, env): puck = env.world.puck if geometry.distance(puck, shortcuts.rink_center(env)) > 0.1: return puck_abs_speed = geometry.vector_abs(puck.speed_x, puck.speed_y) if puck_abs_speed > 0.1: return self.game_start_tick = env.world.tick
def make_puck(env, x, y, speed_abs, shift): goal_point = get_goal_point(env, puck=geometry.Point(x, y), shift=shift) speed_x = goal_point.x - x speed_y = goal_point.y - y norm = geometry.vector_abs(speed_x, speed_y) speed_x = speed_x * speed_abs / norm speed_y = speed_y * speed_abs / norm return prediction.UnitShadow(x, y, speed_x, speed_y, 0)
def make_puck(env, x, y, speed_x=None, speed_y=None): goal_point = get_goal_point(env, puck=geometry.Point(x, y)) if speed_x is None: speed_x = goal_point.x - x speed_y = goal_point.y - y norm = geometry.vector_abs(speed_x, speed_y) speed_x = speed_x * 15.0 / norm speed_y = speed_y * 15.0 / norm return prediction.UnitShadow(x, y, speed_x, speed_y, 0)
def do_stop(env): speed_abs = geometry.vector_abs(env.me.speed_x, env.me.speed_y) angle = geometry.get_angle( math.cos(env.me.angle), math.sin(env.me.angle), env.me.speed_x, env.me.speed_y) if abs(geometry.rad_to_degree(angle)) < 90: env.move.turn = angle env.move.speed_up = -min(1., speed_abs / env.game.hockeyist_speed_down_factor) else: env.move.turn = -angle env.move.speed_up = min(1., speed_abs / env.game.hockeyist_speed_up_factor)
def puck_is_heading_to_unit(env, unit): if shortcuts.hockeyist_with_puck(env) is not None: return False speed_abs = geometry.vector_abs(env.world.puck.speed_x, env.world.puck.speed_y) if speed_abs < 10: return False return geometry.ray_point_distance( env.world.puck, geometry.Point( env.world.puck.speed_x, env.world.puck.speed_y ), unit) < 60
def do(self, env): speed_abs = geometry.vector_abs(env.me.speed_x, env.me.speed_y) if speed_abs < 0.0001: self.done = True print ( 'tick = ', env.world.tick, 'Stop done', 'x = ', env.me.x, 'y = ', env.me.y, 'speed abs = ', speed_abs ) return angle = geometry.get_angle( math.cos(env.me.angle), math.sin(env.me.angle), env.me.speed_x, env.me.speed_y) if abs(geometry.rad_to_degree(angle)) < 90: env.move.turn = angle env.move.speed_up = -min(1., speed_abs / env.game.hockeyist_speed_down_factor) else: env.move.turn = -angle env.move.speed_up = min(1., speed_abs / env.game.hockeyist_speed_up_factor)