def next_action(self, percept, random_generator):
        if {"x": 0, "y": 0, "looks_like": "dirt"} in percept["entities"]:
            return PickUp()

        targets = set()
        obstructions = set()

        for key in self.passable:
            coords = key[1:-1].split(",")
            x = int(coords[0])
            y = int(coords[1])
            if self.passable[key]:
                for pos in [(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)]:
                    if str(pos) not in self.passable:
                        targets.add(pos)
            else:
                obstructions.add((x, y))
        if not targets:
            return DoNothing()
        my_x = percept["position"]["x"]
        my_y = percept["position"]["y"]
        problem = PathfindingProblem((my_x, my_y), targets, obstructions, [])
        try:
            plan = a_star_graph(problem, get_heuristic(problem))
            return Move(direction=plan[0])
        except NoSolutionError:
            return DoNothing()
Exemplo n.º 2
0
 def next_action(self, percept, random_generator):
     if {"x": 0, "y": 0, "looks_like": "dirt"} in percept["entities"]:
         return PickUp()
     if percept["position"]["x"] == 1 and not self.moved:
         return Move(direction="right")
     if percept["position"]["x"] == 2 and not self.moved:
         return Move(direction="left")
     return DoNothing()
    def next_action(self, percept, random_generator):
        dirt_count = len(
            [e for e in percept["entities"] if e["looks_like"] == "dirt"])

        if {"x": 0, "y": 0, "looks_like": "dirt"} in percept["entities"]:
            return PickUp()
        if percept["position"]["x"] == 1 and dirt_count > 0:
            return Move(direction="right")
        if percept["position"]["x"] == 2 and dirt_count > 0:
            return Move(direction="left")
        return DoNothing()
Exemplo n.º 4
0
def test_vanish_pickup():
    system = PickUpSystem()
    pickupper_components = {"pickupper": Pickupper(mode="action")}
    inventory_components = {}
    actions = {"pickupper": PickUp()}
    position_components = PositionDict({
        "pickupper": Position(x=0, y=0),
        "item": Position(x=0, y=0)
    })
    pickup_components = {"item": VanishPickup(kind="vanish")}
    score_components = {}
    removed_entities = system.pick_up_items(
        pickupper_components, actions, position_components,
        pickup_components, score_components, inventory_components)
    assert removed_entities == set(["item"])
Exemplo n.º 5
0
def test_pickup_item():
    system = PickUpSystem()
    pickupper_components = {"pickupper": Pickupper(mode="action")}
    inventory_components = {"pickupper": Inventory()}
    actions = {"pickupper": PickUp()}
    position_components = PositionDict({
        "pickupper": Position(x=0, y=0),
        "item": Position(x=0, y=0)
    })
    pickup_components = {"item": ItemPickup(kind="item")}
    score_components = {}
    removed_entities = system.pick_up_items(
        pickupper_components, actions, position_components,
        pickup_components, score_components, inventory_components)
    assert inventory_components["pickupper"] == Inventory(items=["item"])
    assert "item" not in position_components
    assert removed_entities == set()
Exemplo n.º 6
0
    def next_action(self, percept, random_generator):
        if (self.manual_pickup and {"x": 0, "y": 0, "looks_like": "coin"}
                in percept["entities"]):
            return PickUp()

        walls = [(e["x"], e["y"]) for e in percept["entities"]
                 if e["looks_like"] == "wall"]
        coins = [(e["x"], e["y"]) for e in percept["entities"]
                 if e["looks_like"] == "coin"]
        if not coins:
            return DoNothing()
        problem = PathfindingProblem((0, 0), coins, walls, [])
        try:
            plan = a_star_graph(problem, get_heuristic(problem))
            return Move(direction=plan[0])
        except NoSolutionError:
            return DoNothing()
    def next_action(self, percept, random_generator):
        if not self.plan:
            return DoNothing()

        # Parse percept
        missionaries = set((e["x"], e["y"]) for e in percept["entities"]
                           if e["looks_like"] == "coin")
        cannibals = set((e["x"], e["y"]) for e in percept["entities"]
                        if e["looks_like"] == "evilCoin")
        grass = set((e["x"], e["y"]) for e in percept["entities"]
                    if e["looks_like"] == "grass")
        dirt = set((e["x"], e["y"]) for e in percept["entities"]
                   if e["looks_like"] == "dirt")
        empty_shore = (grass | dirt) - missionaries - cannibals
        walls = set((e["x"], e["y"]) for e in percept["entities"]
                    if e["looks_like"] == "wall")
        water = set((e["x"], e["y"]) for e in percept["entities"]
                    if e["looks_like"] == "water")
        goal = self.plan[0]
        # First, ensure inventory is correct
        too_many_missionaries = percept["inventory"].count(
            "coin") > goal.missionaries
        too_many_cannibals = percept["inventory"].count(
            "evilCoin") > goal.cannibals
        if too_many_missionaries or too_many_cannibals:

            if (0, 0) in empty_shore:
                if too_many_missionaries:
                    return Drop(index=percept["inventory"].index("coin"))
                if too_many_cannibals:
                    return Drop(index=percept["inventory"].index("evilCoin"))

            problem = PathfindingProblem((0, 0), empty_shore, walls | water,
                                         [])
            return Move(
                direction=a_star_graph(problem, get_heuristic(problem))[0])

        too_few_missionaries = percept["inventory"].count(
            "coin") < goal.missionaries
        if too_few_missionaries:
            if (0, 0) in missionaries:
                return PickUp()
            problem = PathfindingProblem((0, 0), missionaries, walls | water,
                                         [])
            return Move(
                direction=a_star_graph(problem, get_heuristic(problem))[0])

        too_few_cannibals = percept["inventory"].count(
            "evilCoin") < goal.cannibals
        if too_few_cannibals:
            if (0, 0) in cannibals:
                return PickUp()
            problem = PathfindingProblem((0, 0), cannibals, walls | water, [])
            return Move(
                direction=a_star_graph(problem, get_heuristic(problem))[0])

        # Then, go to the correct shore
        if goal.destination == "dirt":
            problem = PathfindingProblem((0, 0), dirt, walls, [])
            return Move(
                direction=a_star_graph(problem, get_heuristic(problem))[0])
        else:
            problem = PathfindingProblem((0, 0), grass, walls, [])
            return Move(
                direction=a_star_graph(problem, get_heuristic(problem))[0])
Exemplo n.º 8
0
 def next_action(self, percept, random_generator):
     if {"x": 0, "y": 0, "looks_like": "dirt"} in percept["entities"]:
         return PickUp()
     direction = random_generator.choice(["up", "down", "left", "right"])
     return Move(direction=direction)