diff --git a/pyreason_gym/pyreason_grid_world/graph/game_graph.graphml b/pyreason_gym/pyreason_grid_world/graph/game_graph.graphml index dcfe857..6798475 100644 --- a/pyreason_gym/pyreason_grid_world/graph/game_graph.graphml +++ b/pyreason_gym/pyreason_grid_world/graph/game_graph.graphml @@ -7,12 +7,16 @@ + + + + @@ -240,6 +244,7 @@ 0 1 0,0 + 1 1 @@ -253,6 +258,7 @@ 0 1 0,0 + 1 1 @@ -262,6 +268,42 @@ 1 1 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0,0 + 1 + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0,0 + 1 + + + 1 + 1 + + + 1 + 1 + 1 @@ -357,6 +399,9 @@ 1 + + 1 + 1 @@ -964,6 +1009,9 @@ 1 + + 1 + 1 @@ -1070,5 +1118,23 @@ 1 + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + diff --git a/pyreason_gym/pyreason_grid_world/pyreason_grid_world.py b/pyreason_gym/pyreason_grid_world/pyreason_grid_world.py index 3ce1ac0..218e668 100644 --- a/pyreason_gym/pyreason_grid_world/pyreason_grid_world.py +++ b/pyreason_gym/pyreason_grid_world/pyreason_grid_world.py @@ -11,14 +11,14 @@ def __init__(self, grid_size, num_agents_per_team): # Keep track of the next timestep to start self.next_time = 0 - + # Pyreason settings pr.settings.verbose = False pr.settings.atom_trace = False pr.settings.canonical = True pr.settings.inconsistency_check = False pr.settings.static_graph_facts = False - pr.settings.store_interpretation_changes = False + # pr.settings.store_interpretation_changes = True current_path = os.path.abspath(os.path.dirname(__file__)) # Load the graph @@ -49,20 +49,21 @@ def move(self, action): fact_off = pr.fact_node.Fact(f'red_action_{i+1}_off', f'red-soldier-{i+1}', pr.label.Label(red_available_actions[a]), pr.interval.closed(0,0), self.next_time+1, self.next_time+1) facts.append(fact_on) facts.append(fact_off) - + for i, a in enumerate(blue_team_actions): if a != 8: fact_on = pr.fact_node.Fact(f'blue_action_{i+1}', f'blue-soldier-{i+1}', pr.label.Label(blue_available_actions[a]), pr.interval.closed(1,1), self.next_time, self.next_time) fact_off = pr.fact_node.Fact(f'blue_action_{i+1}_off', f'blue-soldier-{i+1}', pr.label.Label(blue_available_actions[a]), pr.interval.closed(0,0), self.next_time+1, self.next_time+1) facts.append(fact_on) facts.append(fact_off) - + self.interpretation = pr.reason(1, again=True, node_facts=facts) + # pr.save_rule_trace(self.interpretation) self.next_time = self.interpretation.time + 1 def get_obs(self): observation = {'red_team': [], 'blue_team': [], 'red_bullets': [], 'blue_bullets': []} - + # Gather bullet info for red and blue bullets (red_bullet_positions, blue_bullet_positions), (red_bullet_directions, blue_bullet_directions), (red_killed_who, blue_killed_who) = self._get_bullet_info() for red_pos, red_dir in zip(red_bullet_positions, red_bullet_directions): @@ -99,14 +100,14 @@ def get_obs(self): observation['blue_team'].append({'pos': np.array(blue_pos_coords, dtype=np.int32), 'health': np.array([blue_health], dtype=np.float32), 'killed': list(blue_killed_who[i-1])}) return observation - + def get_obstacle_locations(self): # Return the coordinates of all the mountains in the grid to be able to draw them relevant_edges = [edge for edge in self.interpretation.edges if edge[1]=='mountain'] obstacle_positions = [int(edge[0]) for edge in relevant_edges] obstacle_positions_coords = np.array([[pos%self.grid_size, pos//self.grid_size] for pos in obstacle_positions]) return obstacle_positions_coords - + def get_base_locations(self): # Return the locations of the two bases relevant_edges = [edge for edge in self.interpretation.edges if 'base' in edge[0]] @@ -127,7 +128,8 @@ def _get_bullet_info(self): positions = (red_bullet_positions_coords, blue_bullet_positions_coords) # Get info about who killed whom. Stored in the form a list for every agent: (red-killer: [blue-casualties]) or (blue-killer: [red-casualties]) - kill_info_edges = [edge for edge in self.interpretation.edges if pr.label.Label('killed') in self.interpretation.interpretations_edge[edge].world] + kill_info_edges = [edge for edge in self.interpretation.edges if pr.label.Label('killed') in self.interpretation.interpretations_edge[edge].world + and self.interpretation.interpretations_edge[edge].world[pr.label.Label('killed')] == pr.interval.closed(1, 1)] kill_info_edges = sorted(kill_info_edges, key=lambda x: int(x[0][-1])) red_killed_who_tuple = [(int(edge[0][-1]), int(edge[1][-1])) for edge in kill_info_edges if 'red' in edge[0]] blue_killed_who_tuple = [(int(edge[0][-1]), int(edge[1][-1])) for edge in kill_info_edges if 'blue' in edge[0]] diff --git a/pyreason_gym/pyreason_grid_world/yamls/rules.yaml b/pyreason_gym/pyreason_grid_world/yamls/rules.yaml index 5580c7e..adccc8e 100644 --- a/pyreason_gym/pyreason_grid_world/yamls/rules.yaml +++ b/pyreason_gym/pyreason_grid_world/yamls/rules.yaml @@ -45,28 +45,26 @@ bullet_hit_just_died_red_rule: bullet_hit_just_died_off_blue_rule: target: justDied target_criteria: - - [health, 0.1, 1] + - [health, 0, 0] + - [justDied, 1, 1] - [teamBlue, 1, 1] delta_t: 1 - immediate: true neigh_criteria: - [edge, [target, loc], atLoc, [1,1]] - [edge, [loc, bullet], atLoc, [1,1]] - - [edge, [loc, bullet], life, [0.1, 1]] - [node, [bullet], teamRed, [1,1]] ann_fn: [0, 0] bullet_hit_just_died_off_red_rule: target: justDied target_criteria: - - [health, 0.1, 1] + - [health, 0, 0] + - [justDied, 1, 1] - [teamRed, 1, 1] delta_t: 1 - immediate: true neigh_criteria: - [edge, [target, loc], atLoc, [1,1]] - [edge, [loc, bullet], atLoc, [1,1]] - - [edge, [loc, bullet], life, [0.1, 1]] - [node, [bullet], teamBlue, [1,1]] ann_fn: [0, 0] @@ -79,7 +77,7 @@ bullet_hit_rule: immediate: true neigh_criteria: ann_fn: [0, 0] - + add_kill_blue_info_rule: target: target_criteria: @@ -108,6 +106,14 @@ add_kill_red_info_rule: edges: [target, player, killed] ann_fn: [1, 1] +remove_kill_info_rule: + target: killed + target_criteria: + - [killed, 1, 1] + delta_t: 1 + neigh_criteria: + ann_fn: [0, 0] + remove_bullet_after_hit_blue_rule: target: life target_criteria: @@ -122,6 +128,20 @@ remove_bullet_after_hit_blue_rule: ann_fn: [0, 0] +# Sometimes a bullet is scheduled to move to a location twice before it has actually moved +# This prevents the bullet from re-appearing +remove_bullet_after_hit_blue_rule_2: + target: life + target_criteria: + - [life, 0, 0] + delta_t: 1 + neigh_criteria: + - [node, [player], justDied, [1,1]] + - [node, [target], teamRed, [1,1]] + - [node, [player], teamBlue, [1,1]] + + ann_fn: [0, 0] + remove_bullet_after_hit_red_rule: target: life target_criteria: @@ -136,11 +156,28 @@ remove_bullet_after_hit_red_rule: ann_fn: [0, 0] +# Sometimes a bullet is scheduled to move to a location twice before it has actually moved +# This prevents the bullet from re-appearing +remove_bullet_after_hit_red_rule_2: + target: life + target_criteria: + - [life, 0, 0] + delta_t: 1 + neigh_criteria: + - [node, [player], justDied, [1,1]] + - [node, [target], teamBlue, [1,1]] + - [node, [player], teamRed, [1,1]] + + ann_fn: [0, 0] + + +# Blue-agent-1 # Moving rules # Move UP -move_up_rule_1: +move_up_rule_1_b1: target: target_criteria: + - [blue-soldier-1, 1, 1] - [moveUp, 1, 1] - [health, 0.1, 1] delta_t: 0 @@ -153,9 +190,10 @@ move_up_rule_1: edges: [target, newLoc, atLoc] ann_fn: [0.5,0.5] -move_up_rule_2: +move_up_rule_2_b1: target: target_criteria: + - [blue-soldier-1, 1, 1] - [moveUp, 1, 1] - [health, 0.1, 1] delta_t: 0 @@ -168,34 +206,37 @@ move_up_rule_2: edges: [newLoc, target, atLoc] ann_fn: [0.5,0.5] -move_up_change_prev_rule_1: +move_up_change_prev_rule_1_b1: target: atLoc target_criteria: - [atLoc, 1, 1] delta_t: 0 immediate: true neigh_criteria: + - [node, [source], blue-soldier-1, [1,1]] - [edge, [target, newLoc], up, [1,1]] - [edge, [source, newLoc], atLoc, [0.5,0.5]] ann_fn: [0,0] -move_up_change_prev_rule_2: +move_up_change_prev_rule_2_b1: target: atLoc target_criteria: - [atLoc, 1, 1] delta_t: 0 immediate: true neigh_criteria: + - [node, [target], blue-soldier-1, [1,1]] - [edge, [source, newLoc], up, [1,1]] - [edge, [newLoc, target], atLoc, [0.5,0.5]] ann_fn: [0,0] # Move DOWN -move_down_rule_1: +move_down_rule_1_b1: target: target_criteria: + - [blue-soldier-1, 1, 1] - [moveDown, 1, 1] - [health, 0.1, 1] delta_t: 0 @@ -208,9 +249,10 @@ move_down_rule_1: edges: [target, newLoc, atLoc] ann_fn: [0.5,0.5] -move_down_rule_2: +move_down_rule_2_b1: target: target_criteria: + - [blue-soldier-1, 1, 1] - [moveDown, 1, 1] - [health, 0.1, 1] delta_t: 0 @@ -223,34 +265,37 @@ move_down_rule_2: edges: [newLoc, target, atLoc] ann_fn: [0.5,0.5] -move_down_change_prev_rule_1: +move_down_change_prev_rule_1_b1: target: atLoc target_criteria: - [atLoc, 1, 1] delta_t: 0 immediate: true neigh_criteria: + - [node, [source], blue-soldier-1, [1,1]] - [edge, [target, newLoc], down, [1,1]] - [edge, [source, newLoc], atLoc, [0.5,0.5]] ann_fn: [0,0] -move_down_change_prev_rule_2: +move_down_change_prev_rule_2_b1: target: atLoc target_criteria: - [atLoc, 1, 1] delta_t: 0 immediate: true neigh_criteria: + - [node, [target], blue-soldier-1, [1,1]] - [edge, [source, newLoc], down, [1,1]] - [edge, [newLoc, target], atLoc, [0.5,0.5]] ann_fn: [0,0] # Move LEFT -move_left_rule_1: +move_left_rule_1_b1: target: target_criteria: + - [blue-soldier-1, 1, 1] - [moveLeft, 1, 1] - [health, 0.1, 1] delta_t: 0 @@ -263,9 +308,10 @@ move_left_rule_1: edges: [target, newLoc, atLoc] ann_fn: [0.5,0.5] -move_left_rule_2: +move_left_rule_2_b1: target: target_criteria: + - [blue-soldier-1, 1, 1] - [moveLeft, 1, 1] - [health, 0.1, 1] delta_t: 0 @@ -278,34 +324,53 @@ move_left_rule_2: edges: [newLoc, target, atLoc] ann_fn: [0.5,0.5] -move_left_change_prev_rule_1: +move_left_change_prev_rule_1_b1: target: atLoc target_criteria: - [atLoc, 1, 1] delta_t: 0 immediate: true neigh_criteria: + - [node, [source], blue-soldier-1, [1,1]] - [edge, [target, newLoc], left, [1,1]] - [edge, [source, newLoc], atLoc, [0.5,0.5]] ann_fn: [0,0] -move_left_change_prev_rule_2: +move_left_change_prev_rule_2_b1: target: atLoc target_criteria: - [atLoc, 1, 1] delta_t: 0 immediate: true neigh_criteria: + - [node, [target], blue-soldier-1, [1,1]] - [edge, [source, newLoc], left, [1,1]] - [edge, [newLoc, target], atLoc, [0.5,0.5]] ann_fn: [0,0] # Move RIGHT -move_right_rule_1: +move_right_rule_1_b1: + target: + target_criteria: + - [blue-soldier-1, 1, 1] + - [moveRight, 1, 1] + - [health, 0.1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], right, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_right_rule_2_b1: target: target_criteria: + - [blue-soldier-1, 1, 1] - [moveRight, 1, 1] - [health, 0.1, 1] delta_t: 0 @@ -315,16 +380,716 @@ move_right_rule_1: - [edge, [oldLoc, newLoc], right, [1,1]] - [node, [newLoc], blocked, [0,0]] + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_right_change_prev_rule_1_b1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], blue-soldier-1, [1,1]] + - [edge, [target, newLoc], right, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_right_change_prev_rule_2_b1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], blue-soldier-1, [1,1]] + - [edge, [source, newLoc], right, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Blue-agent-2 +# Moving rules +# Move UP +move_up_rule_1_b2: + target: + target_criteria: + - [blue-soldier-2, 1, 1] + - [moveUp, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], up, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_up_rule_2_b2: + target: + target_criteria: + - [blue-soldier-2, 1, 1] + - [moveUp, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], up, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_up_change_prev_rule_1_b2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], blue-soldier-2, [1,1]] + - [edge, [target, newLoc], up, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_up_change_prev_rule_2_b2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], blue-soldier-2, [1,1]] + - [edge, [source, newLoc], up, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Move DOWN +move_down_rule_1_b2: + target: + target_criteria: + - [blue-soldier-2, 1, 1] + - [moveDown, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], down, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_down_rule_2_b2: + target: + target_criteria: + - [blue-soldier-2, 1, 1] + - [moveDown, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], down, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_down_change_prev_rule_1_b2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], blue-soldier-2, [1,1]] + - [edge, [target, newLoc], down, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_down_change_prev_rule_2_b2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], blue-soldier-2, [1,1]] + - [edge, [source, newLoc], down, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Move LEFT +move_left_rule_1_b2: + target: + target_criteria: + - [blue-soldier-2, 1, 1] + - [moveLeft, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], left, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_left_rule_2_b2: + target: + target_criteria: + - [blue-soldier-2, 1, 1] + - [moveLeft, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], left, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_left_change_prev_rule_1_b2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], blue-soldier-2, [1,1]] + - [edge, [target, newLoc], left, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_left_change_prev_rule_2_b2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], blue-soldier-2, [1,1]] + - [edge, [source, newLoc], left, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Move RIGHT +move_right_rule_1_b2: + target: + target_criteria: + - [blue-soldier-2, 1, 1] + - [moveRight, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], right, [1,1]] + - [node, [newLoc], blocked, [0,0]] + edges: [target, newLoc, atLoc] ann_fn: [0.5,0.5] -move_right_rule_2: +move_right_rule_2_b2: target: target_criteria: + - [blue-soldier-2, 1, 1] - [moveRight, 1, 1] - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], right, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_right_change_prev_rule_1_b2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] delta_t: 0 immediate: true + neigh_criteria: + - [node, [source], blue-soldier-2, [1,1]] + - [edge, [target, newLoc], right, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_right_change_prev_rule_2_b2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], blue-soldier-2, [1,1]] + - [edge, [source, newLoc], right, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# red-agent-1 +# Moving rules +# Move UP +move_up_rule_1_r1: + target: + target_criteria: + - [red-soldier-1, 1, 1] + - [moveUp, 1, 1] + - [health, 0.1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], up, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_up_rule_2_r1: + target: + target_criteria: + - [red-soldier-1, 1, 1] + - [moveUp, 1, 1] + - [health, 0.1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], up, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_up_change_prev_rule_1_r1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], red-soldier-1, [1,1]] + - [edge, [target, newLoc], up, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_up_change_prev_rule_2_r1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], red-soldier-1, [1,1]] + - [edge, [source, newLoc], up, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Move DOWN +move_down_rule_1_r1: + target: + target_criteria: + - [red-soldier-1, 1, 1] + - [moveDown, 1, 1] + - [health, 0.1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], down, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_down_rule_2_r1: + target: + target_criteria: + - [red-soldier-1, 1, 1] + - [moveDown, 1, 1] + - [health, 0.1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], down, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_down_change_prev_rule_1_r1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], red-soldier-1, [1,1]] + - [edge, [target, newLoc], down, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_down_change_prev_rule_2_r1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], red-soldier-1, [1,1]] + - [edge, [source, newLoc], down, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Move LEFT +move_left_rule_1_r1: + target: + target_criteria: + - [red-soldier-1, 1, 1] + - [moveLeft, 1, 1] + - [health, 0.1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], left, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_left_rule_2_r1: + target: + target_criteria: + - [red-soldier-1, 1, 1] + - [moveLeft, 1, 1] + - [health, 0.1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], left, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_left_change_prev_rule_1_r1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], red-soldier-1, [1,1]] + - [edge, [target, newLoc], left, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_left_change_prev_rule_2_r1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], red-soldier-1, [1,1]] + - [edge, [source, newLoc], left, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Move RIGHT +move_right_rule_1_r1: + target: + target_criteria: + - [red-soldier-1, 1, 1] + - [moveRight, 1, 1] + - [health, 0.1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], right, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_right_rule_2_r1: + target: + target_criteria: + - [red-soldier-1, 1, 1] + - [moveRight, 1, 1] + - [health, 0.1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], right, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_right_change_prev_rule_1_r1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], red-soldier-1, [1,1]] + - [edge, [target, newLoc], right, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_right_change_prev_rule_2_r1: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], red-soldier-1, [1,1]] + - [edge, [source, newLoc], right, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + + +# red-agent-2 +# Moving rules +# Move UP +move_up_rule_1_r2: + target: + target_criteria: + - [red-soldier-2, 1, 1] + - [moveUp, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], up, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_up_rule_2_r2: + target: + target_criteria: + - [red-soldier-2, 1, 1] + - [moveUp, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], up, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_up_change_prev_rule_1_r2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], red-soldier-2, [1,1]] + - [edge, [target, newLoc], up, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_up_change_prev_rule_2_r2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], red-soldier-2, [1,1]] + - [edge, [source, newLoc], up, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Move DOWN +move_down_rule_1_r2: + target: + target_criteria: + - [red-soldier-2, 1, 1] + - [moveDown, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], down, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_down_rule_2_r2: + target: + target_criteria: + - [red-soldier-2, 1, 1] + - [moveDown, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], down, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_down_change_prev_rule_1_r2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], red-soldier-2, [1,1]] + - [edge, [target, newLoc], down, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_down_change_prev_rule_2_r2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], red-soldier-2, [1,1]] + - [edge, [source, newLoc], down, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Move LEFT +move_left_rule_1_r2: + target: + target_criteria: + - [red-soldier-2, 1, 1] + - [moveLeft, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], left, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_left_rule_2_r2: + target: + target_criteria: + - [red-soldier-2, 1, 1] + - [moveLeft, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], left, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [newLoc, target, atLoc] + ann_fn: [0.5,0.5] + +move_left_change_prev_rule_1_r2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [source], red-soldier-2, [1,1]] + - [edge, [target, newLoc], left, [1,1]] + - [edge, [source, newLoc], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +move_left_change_prev_rule_2_r2: + target: atLoc + target_criteria: + - [atLoc, 1, 1] + delta_t: 0 + immediate: true + neigh_criteria: + - [node, [target], red-soldier-2, [1,1]] + - [edge, [source, newLoc], left, [1,1]] + - [edge, [newLoc, target], atLoc, [0.5,0.5]] + + ann_fn: [0,0] + +# Move RIGHT +move_right_rule_1_r2: + target: + target_criteria: + - [red-soldier-2, 1, 1] + - [moveRight, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true + neigh_criteria: + - [edge, [target, oldLoc], atLoc, [1,1]] + - [edge, [oldLoc, newLoc], right, [1,1]] + - [node, [newLoc], blocked, [0,0]] + + edges: [target, newLoc, atLoc] + ann_fn: [0.5,0.5] + +move_right_rule_2_r2: + target: + target_criteria: + - [red-soldier-2, 1, 1] + - [moveRight, 1, 1] + - [health, 0.1, 1] + delta_t: 1 + immediate: true neigh_criteria: - [edge, [target, oldLoc], atLoc, [1,1]] - [edge, [oldLoc, newLoc], right, [1,1]] @@ -333,25 +1098,27 @@ move_right_rule_2: edges: [newLoc, target, atLoc] ann_fn: [0.5,0.5] -move_right_change_prev_rule_1: +move_right_change_prev_rule_1_r2: target: atLoc target_criteria: - [atLoc, 1, 1] delta_t: 0 immediate: true neigh_criteria: + - [node, [source], red-soldier-2, [1,1]] - [edge, [target, newLoc], right, [1,1]] - [edge, [source, newLoc], atLoc, [0.5,0.5]] ann_fn: [0,0] -move_right_change_prev_rule_2: +move_right_change_prev_rule_2_r2: target: atLoc target_criteria: - [atLoc, 1, 1] delta_t: 0 immediate: true neigh_criteria: + - [node, [target], red-soldier-2, [1,1]] - [edge, [source, newLoc], right, [1,1]] - [edge, [newLoc, target], atLoc, [0.5,0.5]] diff --git a/tests/multi_agent_shoot/gen_graph_test.py b/tests/multi_agent_shoot/gen_graph_test.py index 893ace2..e22e816 100644 --- a/tests/multi_agent_shoot/gen_graph_test.py +++ b/tests/multi_agent_shoot/gen_graph_test.py @@ -72,10 +72,12 @@ def generate_graph(grid_dim, num_agents_per_team, base_loc, start_loc, obstacle_ # ======================================================================= # Initialize players health, action choice and team for i in range(1, num_agents_per_team + 1): + dict1 = {f'red-soldier-{i}': 1} + dict2 = {f'blue-soldier-{i}': 1} g.add_node(f'red-soldier-{i}', health=1, moveUp=0, moveDown=0, moveLeft=0, moveRight=0, shootUpRed=0, - shootDownRed=0, shootLeftRed=0, shootRightRed=0, teamRed=1, justDied='0,0') + shootDownRed=0, shootLeftRed=0, shootRightRed=0, teamRed=1, justDied='0,0', **dict1) g.add_node(f'blue-soldier-{i}', health=1, moveUp=0, moveDown=0, moveLeft=0, moveRight=0, shootUpBlue=0, - shootDownBlue=0, shootLeftBlue=0, shootRightBlue=0, teamBlue=1, justDied='0,0') + shootDownBlue=0, shootLeftBlue=0, shootRightBlue=0, teamBlue=1, justDied='0,0', **dict2) # Teams g.add_edge(f'red-soldier-{i}', 'red-base', team=1) g.add_edge(f'blue-soldier-{i}', 'blue-base', team=1) @@ -97,7 +99,7 @@ def generate_graph(grid_dim, num_agents_per_team, base_loc, start_loc, obstacle_ def main(): ## Red is first then Blue - generate_graph(grid_dim=8, num_agents_per_team=2, base_loc=[7, 56], start_loc=[[2,16], [5, 21]], + generate_graph(grid_dim=8, num_agents_per_team=2, base_loc=[7, 56], start_loc=[[0,16], [5, 21]], obstacle_loc=[26, 27, 34, 35, 36, 44]) diff --git a/tests/multi_agent_shoot/test.py b/tests/multi_agent_shoot/test.py index 171c484..93c8da2 100644 --- a/tests/multi_agent_shoot/test.py +++ b/tests/multi_agent_shoot/test.py @@ -7,42 +7,63 @@ action = { 'red_team': [7,7], - 'blue_team': [1,3] + 'blue_team': [6,6] } obs = env.step(action) print(obs) time.sleep(1) action = { - 'red_team': [0,0], - 'blue_team': [1,0] + 'red_team': [2,8], + 'blue_team': [1,8] } obs = env.step(action) print(obs) time.sleep(1) action = { - 'red_team': [1,2], - 'blue_team': [1,0] + 'red_team': [2,2], + 'blue_team': [6,6] } obs = env.step(action) print(obs) time.sleep(1) action = { - 'red_team': [1,2], - 'blue_team': [1,0] + 'red_team': [2,8], + 'blue_team': [1,8] } obs = env.step(action) print(obs) time.sleep(1) action = { 'red_team': [2,2], - 'blue_team': [1,0] + 'blue_team': [1,1] +} +obs = env.step(action) +print(obs) +time.sleep(1) +action = { + 'red_team': [2,8], + 'blue_team': [1,8] +} +obs = env.step(action) +print(obs) +time.sleep(1) +action = { + 'red_team': [2,2], + 'blue_team': [1,1] +} +obs = env.step(action) +print(obs) +time.sleep(1) +action = { + 'red_team': [2,8], + 'blue_team': [1,8] } obs = env.step(action) print(obs) time.sleep(1) action = { 'red_team': [2,2], - 'blue_team': [1,0] + 'blue_team': [1,1] } obs = env.step(action) print(obs) diff --git a/tests/non_markov_map/gen_graph_test.py b/tests/non_markov_map/gen_graph_test.py new file mode 100644 index 0000000..c5860d7 --- /dev/null +++ b/tests/non_markov_map/gen_graph_test.py @@ -0,0 +1,107 @@ +import networkx as nx + + +def generate_graph(grid_dim, num_agents_per_team, base_loc, start_loc, obstacle_loc): + # Check parameters + assert len(base_loc) == 2, 'There are only two bases--supply two locations' + assert len(start_loc) == 2, 'There are only two teams--supply lists of start positions for each team in a nested list' + assert len(start_loc[0]) == num_agents_per_team and len(start_loc[1]) == num_agents_per_team, 'Supply correct number of start locations' + + g = nx.DiGraph() + + # Game variables + game_height = grid_dim + game_width = grid_dim + + # ======================================================================= + # Add a node for each grid location in the game + nodes = list(range(0, game_height * game_width)) + g.add_nodes_from([str(node) for node in nodes], blocked='0,0') + + # ======================================================================= + # Add edges connecting each of the grid nodes. Add up, down, left, right attributes to correct edges + # Right edges + for node in g.nodes: + if (int(node) + 1) % game_width != 0: + g.add_edge(node, str(int(node) + 1), right=1) + + # Left edges + for node in g.nodes: + if int(node) % game_width != 0: + g.add_edge(node, str(int(node) - 1), left=1) + + # Up edges + for node in g.nodes: + if (int(node) // game_width) + 1 != game_height: + g.add_edge(node, str(int(node) + game_width), up=1) + + # Down edges + for node in g.nodes: + if int(node) // game_width != 0: + g.add_edge(node, str(int(node) - game_width), down=1) + + # Add edges between border nodes and end nodes to demarcate the end of the grid world. Bullets will disappear after it crosses this end + g.add_node('end', blocked=1) + # Bottom border + for i in range(game_width): + g.add_edge(f'{i}', 'end', down=1) + # Top border + for i in range(game_width): + g.add_edge(f'{i + game_width * (game_height - 1)}', 'end', up=1) + # Left border + for i in range(game_height): + g.add_edge(f'{i * game_width}', 'end', left=1) + # Right border + for i in range(game_height): + g.add_edge(f'{i * game_width + game_width - 1}', 'end', right=1) + + # ======================================================================= + # Add the bases and connect them to the correct location: bottom right and top left + g.add_node('red-base') + g.add_node('blue-base') + g.add_edge('red-base', str(base_loc[0]), atLoc=1) + g.add_edge('blue-base', str(base_loc[1]), atLoc=1) + + # ======================================================================= + # Add mountains and obstacle attributes + mountain_loc = obstacle_loc + g.add_node('mountain', isMountain=1) + for i in mountain_loc: + g.add_edge(str(i), 'mountain', atLoc=1) + + # ======================================================================= + # Initialize players health, action choice and team + for i in range(1, num_agents_per_team + 1): + dict1 = {f'red-soldier-{i}': 1} + dict2 = {f'blue-soldier-{i}': 1} + g.add_node(f'red-soldier-{i}', health=1, moveUp=0, moveDown=0, moveLeft=0, moveRight=0, shootUpRed=0, + shootDownRed=0, shootLeftRed=0, shootRightRed=0, teamRed=1, justDied='0,0', **dict1) + g.add_node(f'blue-soldier-{i}', health=1, moveUp=0, moveDown=0, moveLeft=0, moveRight=0, shootUpBlue=0, + shootDownBlue=0, shootLeftBlue=0, shootRightBlue=0, teamBlue=1, justDied='0,0', **dict2) + # Teams + g.add_edge(f'red-soldier-{i}', 'red-base', team=1) + g.add_edge(f'blue-soldier-{i}', 'blue-base', team=1) + # Soldier Start Locations (dual edge) + g.add_edge(f'red-soldier-{i}', str(start_loc[0][i - 1]), atLoc=1) + g.add_edge(f'blue-soldier-{i}', str(start_loc[1][i - 1]), atLoc=1) + g.add_edge(str(start_loc[0][i - 1]), f'red-soldier-{i}', atLoc=1) + g.add_edge(str(start_loc[1][i - 1]), f'blue-soldier-{i}', atLoc=1) + # Bullets + g.add_node(f'red-bullet-{i}', teamRed=1, bullet=1) + g.add_node(f'blue-bullet-{i}', teamBlue=1, bullet=1) + g.add_edge(f'red-soldier-{i}', f'red-bullet-{i}', bullet=1) + g.add_edge(f'blue-soldier-{i}', f'blue-bullet-{i}', bullet=1) + + # ======================================================================= + + nx.write_graphml_lxml(g, 'pyreason_gym/pyreason_grid_world/graph/game_graph.graphml', named_key_ids=True) + + +def main(): + ## Red is first then Blue + generate_graph(grid_dim=8, num_agents_per_team=2, base_loc=[7, 56], start_loc=[[7,7], [56, 56]], + obstacle_loc=[26, 27, 34, 35, 36, 44]) + + +if __name__ == '__main__': + main() diff --git a/tests/non_markov_test/gen_graph_test.py b/tests/non_markov_test/gen_graph_test.py new file mode 100644 index 0000000..7e2b699 --- /dev/null +++ b/tests/non_markov_test/gen_graph_test.py @@ -0,0 +1,107 @@ +import networkx as nx + + +def generate_graph(grid_dim, num_agents_per_team, base_loc, start_loc, obstacle_loc): + # Check parameters + assert len(base_loc) == 2, 'There are only two bases--supply two locations' + assert len(start_loc) == 2, 'There are only two teams--supply lists of start positions for each team in a nested list' + assert len(start_loc[0]) == num_agents_per_team and len(start_loc[1]) == num_agents_per_team, 'Supply correct number of start locations' + + g = nx.DiGraph() + + # Game variables + game_height = grid_dim + game_width = grid_dim + + # ======================================================================= + # Add a node for each grid location in the game + nodes = list(range(0, game_height * game_width)) + g.add_nodes_from([str(node) for node in nodes], blocked='0,0') + + # ======================================================================= + # Add edges connecting each of the grid nodes. Add up, down, left, right attributes to correct edges + # Right edges + for node in g.nodes: + if (int(node) + 1) % game_width != 0: + g.add_edge(node, str(int(node) + 1), right=1) + + # Left edges + for node in g.nodes: + if int(node) % game_width != 0: + g.add_edge(node, str(int(node) - 1), left=1) + + # Up edges + for node in g.nodes: + if (int(node) // game_width) + 1 != game_height: + g.add_edge(node, str(int(node) + game_width), up=1) + + # Down edges + for node in g.nodes: + if int(node) // game_width != 0: + g.add_edge(node, str(int(node) - game_width), down=1) + + # Add edges between border nodes and end nodes to demarcate the end of the grid world. Bullets will disappear after it crosses this end + g.add_node('end', blocked=1) + # Bottom border + for i in range(game_width): + g.add_edge(f'{i}', 'end', down=1) + # Top border + for i in range(game_width): + g.add_edge(f'{i + game_width * (game_height - 1)}', 'end', up=1) + # Left border + for i in range(game_height): + g.add_edge(f'{i * game_width}', 'end', left=1) + # Right border + for i in range(game_height): + g.add_edge(f'{i * game_width + game_width - 1}', 'end', right=1) + + # ======================================================================= + # Add the bases and connect them to the correct location: bottom right and top left + g.add_node('red-base') + g.add_node('blue-base') + g.add_edge('red-base', str(base_loc[0]), atLoc=1) + g.add_edge('blue-base', str(base_loc[1]), atLoc=1) + + # ======================================================================= + # Add mountains and obstacle attributes + mountain_loc = obstacle_loc + g.add_node('mountain', isMountain=1) + for i in mountain_loc: + g.add_edge(str(i), 'mountain', atLoc=1) + + # ======================================================================= + # Initialize players health, action choice and team + for i in range(1, num_agents_per_team + 1): + dict1 = {f'red-soldier-{i}': 1} + dict2 = {f'blue-soldier-{i}': 1} + g.add_node(f'red-soldier-{i}', health=1, moveUp=0, moveDown=0, moveLeft=0, moveRight=0, shootUpRed=0, + shootDownRed=0, shootLeftRed=0, shootRightRed=0, teamRed=1, justDied='0,0', **dict1) + g.add_node(f'blue-soldier-{i}', health=1, moveUp=0, moveDown=0, moveLeft=0, moveRight=0, shootUpBlue=0, + shootDownBlue=0, shootLeftBlue=0, shootRightBlue=0, teamBlue=1, justDied='0,0', **dict2) + # Teams + g.add_edge(f'red-soldier-{i}', 'red-base', team=1) + g.add_edge(f'blue-soldier-{i}', 'blue-base', team=1) + # Soldier Start Locations (dual edge) + g.add_edge(f'red-soldier-{i}', str(start_loc[0][i - 1]), atLoc=1) + g.add_edge(f'blue-soldier-{i}', str(start_loc[1][i - 1]), atLoc=1) + g.add_edge(str(start_loc[0][i - 1]), f'red-soldier-{i}', atLoc=1) + g.add_edge(str(start_loc[1][i - 1]), f'blue-soldier-{i}', atLoc=1) + # Bullets + g.add_node(f'red-bullet-{i}', teamRed=1, bullet=1) + g.add_node(f'blue-bullet-{i}', teamBlue=1, bullet=1) + g.add_edge(f'red-soldier-{i}', f'red-bullet-{i}', bullet=1) + g.add_edge(f'blue-soldier-{i}', f'blue-bullet-{i}', bullet=1) + + # ======================================================================= + + nx.write_graphml_lxml(g, 'pyreason_gym/pyreason_grid_world/graph/game_graph.graphml', named_key_ids=True) + + +def main(): + ## Red is first then Blue + generate_graph(grid_dim=8, num_agents_per_team=2, base_loc=[7, 56], start_loc=[[48,56], [55, 63]], + obstacle_loc=[26, 27, 34, 35, 36, 44]) + + +if __name__ == '__main__': + main() diff --git a/tests/non_markov_test/test.py b/tests/non_markov_test/test.py new file mode 100644 index 0000000..6cffbfe --- /dev/null +++ b/tests/non_markov_test/test.py @@ -0,0 +1,38 @@ +import pyreason_gym +import gym +import time + +env = gym.make('PyReasonGridWorld-v0', render_mode='human', num_agents_per_team=2) +obs = env.reset() +print("\n") +print("Starting Experiment with init obs:") +print(obs) +print("\n") +action = { + 'red_team': [7, 7], + 'blue_team': [2, 2] + } +obs = env.step(action) +print(obs) +print("\n") +time.sleep(1) +for ss in range(6): + print("Step", ss) + if ss % 2 == 0: + print("Taking both actions") + action = { + 'red_team': [2, 2], + 'blue_team': [2, 2] + } + else: + print("Taking first agent actions") + action = { + 'red_team': [2,2], + 'blue_team': [8,2] + } + obs = env.step(action) + print(obs) + print("\n") + time.sleep(1) + +env.close() \ No newline at end of file diff --git a/tests/same_location_shoot_all_dir/test.py b/tests/same_location_shoot_all_dir/test.py index e6dacad..1215b20 100644 --- a/tests/same_location_shoot_all_dir/test.py +++ b/tests/same_location_shoot_all_dir/test.py @@ -2,7 +2,7 @@ import gym import time -env = gym.make('PyReasonGridWorld-v0', render_mode='human') +env = gym.make('PyReasonGridWorld-v0', render_mode='human', num_agents_per_team=1) obs = env.reset() action = { 'red_team': [3], @@ -39,11 +39,4 @@ obs = env.step(action) print(obs) time.sleep(1) -action = { - 'red_team': [2], - 'blue_team': [1] -} -obs = env.step(action) -print(obs) -time.sleep(1) env.close() \ No newline at end of file