diff --git a/agents4e.py b/agents4e.py index 75369a69a..e59103bad 100644 --- a/agents4e.py +++ b/agents4e.py @@ -84,12 +84,15 @@ class Agent(Thing): There is an optional slot, .performance, which is a number giving the performance measure of the agent in its environment.""" - def __init__(self, program=None): + def __init__(self, program=None, direction = None): self.alive = True self.bump = False self.holding = [] self.performance = 0 - if program is None or not isinstance(program, collections.abc.Callable): + if program is None: + # or \ + # (not isinstance(program, collections.abc.Callable) \ + # and not isinstance(program, function)): print("Can't find a valid program for {}, falling back to default.".format(self.__class__.__name__)) def program(percept): @@ -97,6 +100,9 @@ def program(percept): self.program = program + + self.direction = direction + def can_grab(self, thing): """Return True if this agent can grab this thing. Override for appropriate subclasses of Agent and Thing.""" @@ -110,7 +116,8 @@ def TraceAgent(agent): def new_program(percept): action = old_program(percept) - print('{} perceives {} and does {}'.format(agent, percept, action)) + print('{} perceives {} and does {} with performance {}'\ + .format(agent, percept, action, agent.performance)) return action agent.program = new_program @@ -662,7 +669,7 @@ def run(self, steps=1000, delay=1): self.reveal() """ - def run(self, steps=1000, delay=1): + def run(self, steps=2000, delay=1): """Run the Environment for given number of time steps, but update the GUI too.""" for step in range(steps): @@ -743,7 +750,7 @@ def __init__(self, width=10, height=10): self.add_walls() def thing_classes(self): - return [Wall, Dirt, ReflexVacuumAgent, RandomVacuumAgent, + return [Wall, Dirt, XYReflexVacuumAgent, ReflexVacuumAgent, RandomVacuumAgent, TableDrivenVacuumAgent, ModelBasedVacuumAgent] def percept(self, agent): @@ -768,6 +775,15 @@ def execute_action(self, agent, action): if action != 'NoOp': agent.performance -= 1 + def is_done(self): + # Elsa defined + num_dirty = 0 + for idx in range(10): + num_dirty += len([self.some_things_at([idx,j], Dirt) \ + for j in range(10)]) + return False if num_dirty else True + + class TrivialVacuumEnvironment(Environment): """This environment has two locations, A and B. Each can be Dirty diff --git a/aibc_agents.elsa.ipynb b/aibc_agents.elsa.ipynb new file mode 100644 index 000000000..dfcd8292b --- /dev/null +++ b/aibc_agents.elsa.ipynb @@ -0,0 +1,8373 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from agents4e import *\n", + "from notebook import psource\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Constructing Environments" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Environment class\n", + "Is a shell for all environments. It owns **things** and **agents**. It specifies:\n", + "* The thing classes it can hold. These things can be just things (like dirt) or agents (like vacuums that can do stuff)\n", + "* What it can perceive (percept classes -- like what sensors are on my robot?)\n", + "* What it can do. Like if a vacuum sucks up dirt, then it can change the amount of dirt in its environment.\n", + "* Specify a default location for new things, like where more dirt might go.\n", + "* Specify changes we won't allow (\"exogenous_change\")\n", + "* Tell us if all of the agents are dead\n", + "* Perform one time step in our environmental \"game\" definition.\n", + " * Each agent gets to perceive its state\n", + " * Each agent gets to perform an action\n", + "* Perform a bunch of steps\n", + "* List all the things at a location\n", + "* List some things at a location?\n", + "* Add a thing at a location (or default location)\n", + "* Delete a specified thing" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class Environment:\n",
+       "    """Abstract class representing an Environment. 'Real' Environment classes\n",
+       "    inherit from this. Your Environment will typically need to implement:\n",
+       "        percept:           Define the percept that an agent sees.\n",
+       "        execute_action:    Define the effects of executing an action.\n",
+       "                           Also update the agent.performance slot.\n",
+       "    The environment keeps a list of .things and .agents (which is a subset\n",
+       "    of .things). Each agent has a .performance slot, initialized to 0.\n",
+       "    Each thing has a .location slot, even though some environments may not\n",
+       "    need this."""\n",
+       "\n",
+       "    def __init__(self):\n",
+       "        self.things = []\n",
+       "        self.agents = []\n",
+       "\n",
+       "    def thing_classes(self):\n",
+       "        return []  # List of classes that can go into environment\n",
+       "\n",
+       "    def percept(self, agent):\n",
+       "        """Return the percept that the agent sees at this point. (Implement this.)"""\n",
+       "        raise NotImplementedError\n",
+       "\n",
+       "    def execute_action(self, agent, action):\n",
+       "        """Change the world to reflect this action. (Implement this.)"""\n",
+       "        raise NotImplementedError\n",
+       "\n",
+       "    def default_location(self, thing):\n",
+       "        """Default location to place a new thing with unspecified location."""\n",
+       "        return None\n",
+       "\n",
+       "    def exogenous_change(self):\n",
+       "        """If there is spontaneous change in the world, override this."""\n",
+       "        pass\n",
+       "\n",
+       "    def is_done(self):\n",
+       "        """By default, we're done when we can't find a live agent."""\n",
+       "        return not any(agent.is_alive() for agent in self.agents)\n",
+       "\n",
+       "    def step(self):\n",
+       "        """Run the environment for one time step. If the\n",
+       "        actions and exogenous changes are independent, this method will\n",
+       "        do. If there are interactions between them, you'll need to\n",
+       "        override this method."""\n",
+       "        if not self.is_done():\n",
+       "            actions = []\n",
+       "            for agent in self.agents:\n",
+       "                if agent.alive:\n",
+       "                    actions.append(agent.program(self.percept(agent)))\n",
+       "                else:\n",
+       "                    actions.append("")\n",
+       "            for (agent, action) in zip(self.agents, actions):\n",
+       "                self.execute_action(agent, action)\n",
+       "            self.exogenous_change()\n",
+       "\n",
+       "    def run(self, steps=1000):\n",
+       "        """Run the Environment for given number of time steps."""\n",
+       "        for step in range(steps):\n",
+       "            if self.is_done():\n",
+       "                return\n",
+       "            self.step()\n",
+       "\n",
+       "    def list_things_at(self, location, tclass=Thing):\n",
+       "        """Return all things exactly at a given location."""\n",
+       "        if isinstance(location, numbers.Number):\n",
+       "            return [thing for thing in self.things\n",
+       "                    if thing.location == location and isinstance(thing, tclass)]\n",
+       "        return [thing for thing in self.things\n",
+       "                if all(x == y for x, y in zip(thing.location, location)) and isinstance(thing, tclass)]\n",
+       "\n",
+       "    def some_things_at(self, location, tclass=Thing):\n",
+       "        """Return true if at least one of the things at location\n",
+       "        is an instance of class tclass (or a subclass)."""\n",
+       "        return self.list_things_at(location, tclass) != []\n",
+       "\n",
+       "    def add_thing(self, thing, location=None):\n",
+       "        """Add a thing to the environment, setting its location. For\n",
+       "        convenience, if thing is an agent program we make a new agent\n",
+       "        for it. (Shouldn't need to override this.)"""\n",
+       "        if not isinstance(thing, Thing):\n",
+       "            thing = Agent(thing)\n",
+       "        if thing in self.things:\n",
+       "            print("Can't add the same thing twice")\n",
+       "        else:\n",
+       "            thing.location = location if location is not None else self.default_location(thing)\n",
+       "            self.things.append(thing)\n",
+       "            if isinstance(thing, Agent):\n",
+       "                thing.performance = 0\n",
+       "                self.agents.append(thing)\n",
+       "\n",
+       "    def delete_thing(self, thing):\n",
+       "        """Remove a thing from the environment."""\n",
+       "        try:\n",
+       "            self.things.remove(thing)\n",
+       "        except ValueError as e:\n",
+       "            print(e)\n",
+       "            print("  in Environment delete_thing")\n",
+       "            print("  Thing to be removed: {} at {}".format(thing, thing.location))\n",
+       "            print("  from list: {}".format([(thing, thing.location) for thing in self.things]))\n",
+       "        if thing in self.agents:\n",
+       "            self.agents.remove(thing)\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(Environment)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Direction Class\n", + "* Specify a heading (**R**ight, **L**eft, **U**p, **Do**wn)\n", + "* Move Forward" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class Direction:\n",
+       "    """A direction class for agents that want to move in a 2D plane\n",
+       "        Usage:\n",
+       "            d = Direction("down")\n",
+       "            To change directions:\n",
+       "            d = d + "right" or d = d + Direction.R #Both do the same thing\n",
+       "            Note that the argument to __add__ must be a string and not a Direction object.\n",
+       "            Also, it (the argument) can only be right or left."""\n",
+       "\n",
+       "    R = "right"\n",
+       "    L = "left"\n",
+       "    U = "up"\n",
+       "    D = "down"\n",
+       "\n",
+       "    def __init__(self, direction):\n",
+       "        self.direction = direction\n",
+       "\n",
+       "    def __add__(self, heading):\n",
+       "        """\n",
+       "        >>> d = Direction('right')\n",
+       "        >>> l1 = d.__add__(Direction.L)\n",
+       "        >>> l2 = d.__add__(Direction.R)\n",
+       "        >>> l1.direction\n",
+       "        'up'\n",
+       "        >>> l2.direction\n",
+       "        'down'\n",
+       "        >>> d = Direction('down')\n",
+       "        >>> l1 = d.__add__('right')\n",
+       "        >>> l2 = d.__add__('left')\n",
+       "        >>> l1.direction == Direction.L\n",
+       "        True\n",
+       "        >>> l2.direction == Direction.R\n",
+       "        True\n",
+       "        """\n",
+       "        if self.direction == self.R:\n",
+       "            return {\n",
+       "                self.R: Direction(self.D),\n",
+       "                self.L: Direction(self.U),\n",
+       "            }.get(heading, None)\n",
+       "        elif self.direction == self.L:\n",
+       "            return {\n",
+       "                self.R: Direction(self.U),\n",
+       "                self.L: Direction(self.D),\n",
+       "            }.get(heading, None)\n",
+       "        elif self.direction == self.U:\n",
+       "            return {\n",
+       "                self.R: Direction(self.R),\n",
+       "                self.L: Direction(self.L),\n",
+       "            }.get(heading, None)\n",
+       "        elif self.direction == self.D:\n",
+       "            return {\n",
+       "                self.R: Direction(self.L),\n",
+       "                self.L: Direction(self.R),\n",
+       "            }.get(heading, None)\n",
+       "\n",
+       "    def move_forward(self, from_location):\n",
+       "        """\n",
+       "        >>> d = Direction('up')\n",
+       "        >>> l1 = d.move_forward((0, 0))\n",
+       "        >>> l1\n",
+       "        (0, -1)\n",
+       "        >>> d = Direction(Direction.R)\n",
+       "        >>> l1 = d.move_forward((0, 0))\n",
+       "        >>> l1\n",
+       "        (1, 0)\n",
+       "        """\n",
+       "        # get the iterable class to return\n",
+       "        iclass = from_location.__class__\n",
+       "        x, y = from_location\n",
+       "        if self.direction == self.R:\n",
+       "            return iclass((x + 1, y))\n",
+       "        elif self.direction == self.L:\n",
+       "            return iclass((x - 1, y))\n",
+       "        elif self.direction == self.U:\n",
+       "            return iclass((x, y - 1))\n",
+       "        elif self.direction == self.D:\n",
+       "            return iclass((x, y + 1))\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(Direction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Environments on a plane XYEnvironment\n", + "* Rectangle with width and height\n", + " * also initialize a list of observers -- this might be a list provided to the GUI that tells us when things change\n", + "* Things near a location (based on perceptible_distance = 1 or specified radius)\n", + "* Return what things I can see\n", + "* Execute an action\n", + " * bump against an edge\n", + " * turn left or right\n", + " * move forward\n", + " * grab a thing\n", + " * release a thing\n", + "* Add observers who get to find out what's happened\n", + "* Move to where I say to move:\n", + " * If there's an *Obstacle* at my destination I bump. Obstacles are their own trivial class that can be extended into more \n", + " complicated obstacles that are sets of coordinates.\n", + " * Otherwise tell all observers the thing moved and remove the thing from the old destination and put it in the new one\n", + " * Return True/False for whether or not I moved the thing\n", + "* Add a thing to a location. Say what to do if there's a thing there.\n", + "* Check to see if the location some jerk specified is actually in my rectangle.\n", + "* Randomly choose a location in my rectangle, and maybe I'll list some patches that aren't allowed.\n", + "* Delete a thing from the environment. If that thing is an agent drop everything it's holding.\n", + "* Add walls so the vacuum doesn't fall down the stairs. A *Wall* is its own trivial class.\n", + "* Describe the new heading after a turn happens" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class XYEnvironment(Environment):\n",
+       "    """This class is for environments on a 2D plane, with locations\n",
+       "    labelled by (x, y) points, either discrete or continuous.\n",
+       "\n",
+       "    Agents perceive things within a radius. Each agent in the\n",
+       "    environment has a .location slot which should be a location such\n",
+       "    as (0, 1), and a .holding slot, which should be a list of things\n",
+       "    that are held."""\n",
+       "\n",
+       "    def __init__(self, width=10, height=10):\n",
+       "        super().__init__()\n",
+       "\n",
+       "        self.width = width\n",
+       "        self.height = height\n",
+       "        self.observers = []\n",
+       "        # Sets iteration start and end (no walls).\n",
+       "        self.x_start, self.y_start = (0, 0)\n",
+       "        self.x_end, self.y_end = (self.width, self.height)\n",
+       "\n",
+       "    perceptible_distance = 1\n",
+       "\n",
+       "    def things_near(self, location, radius=None):\n",
+       "        """Return all things within radius of location."""\n",
+       "        if radius is None:\n",
+       "            radius = self.perceptible_distance\n",
+       "        radius2 = radius * radius\n",
+       "        return [(thing, radius2 - distance_squared(location, thing.location))\n",
+       "                for thing in self.things if distance_squared(\n",
+       "                location, thing.location) <= radius2]\n",
+       "\n",
+       "    def percept(self, agent):\n",
+       "        """By default, agent perceives things within a default radius."""\n",
+       "        return self.things_near(agent.location)\n",
+       "\n",
+       "    def execute_action(self, agent, action):\n",
+       "        agent.bump = False\n",
+       "        if action == 'TurnRight':\n",
+       "            agent.direction += Direction.R\n",
+       "        elif action == 'TurnLeft':\n",
+       "            agent.direction += Direction.L\n",
+       "        elif action == 'Forward':\n",
+       "            agent.bump = self.move_to(agent, agent.direction.move_forward(agent.location))\n",
+       "        #         elif action == 'Grab':\n",
+       "        #             things = [thing for thing in self.list_things_at(agent.location)\n",
+       "        #                     if agent.can_grab(thing)]\n",
+       "        #             if things:\n",
+       "        #                 agent.holding.append(things[0])\n",
+       "        elif action == 'Release':\n",
+       "            if agent.holding:\n",
+       "                agent.holding.pop()\n",
+       "\n",
+       "    def default_location(self, thing):\n",
+       "        location = self.random_location_inbounds()\n",
+       "        while self.some_things_at(location, Obstacle):\n",
+       "            # we will find a random location with no obstacles\n",
+       "            location = self.random_location_inbounds()\n",
+       "        return location\n",
+       "\n",
+       "    def move_to(self, thing, destination):\n",
+       "        """Move a thing to a new location. Returns True on success or False if there is an Obstacle.\n",
+       "        If thing is holding anything, they move with him."""\n",
+       "        thing.bump = self.some_things_at(destination, Obstacle)\n",
+       "        if not thing.bump:\n",
+       "            thing.location = destination\n",
+       "            for o in self.observers:\n",
+       "                o.thing_moved(thing)\n",
+       "            for t in thing.holding:\n",
+       "                self.delete_thing(t)\n",
+       "                self.add_thing(t, destination)\n",
+       "                t.location = destination\n",
+       "        return thing.bump\n",
+       "\n",
+       "    def add_thing(self, thing, location=None, exclude_duplicate_class_items=False):\n",
+       "        """Add things to the world. If (exclude_duplicate_class_items) then the item won't be\n",
+       "        added if the location has at least one item of the same class."""\n",
+       "        if location is None:\n",
+       "            super().add_thing(thing)\n",
+       "        elif self.is_inbounds(location):\n",
+       "            if (exclude_duplicate_class_items and\n",
+       "                    any(isinstance(t, thing.__class__) for t in self.list_things_at(location))):\n",
+       "                return\n",
+       "            super().add_thing(thing, location)\n",
+       "\n",
+       "    def is_inbounds(self, location):\n",
+       "        """Checks to make sure that the location is inbounds (within walls if we have walls)"""\n",
+       "        x, y = location\n",
+       "        return not (x < self.x_start or x > self.x_end or y < self.y_start or y > self.y_end)\n",
+       "\n",
+       "    def random_location_inbounds(self, exclude=None):\n",
+       "        """Returns a random location that is inbounds (within walls if we have walls)"""\n",
+       "        location = (random.randint(self.x_start, self.x_end),\n",
+       "                    random.randint(self.y_start, self.y_end))\n",
+       "        if exclude is not None:\n",
+       "            while location == exclude:\n",
+       "                location = (random.randint(self.x_start, self.x_end),\n",
+       "                            random.randint(self.y_start, self.y_end))\n",
+       "        return location\n",
+       "\n",
+       "    def delete_thing(self, thing):\n",
+       "        """Deletes thing, and everything it is holding (if thing is an agent)"""\n",
+       "        if isinstance(thing, Agent):\n",
+       "            for obj in thing.holding:\n",
+       "                super().delete_thing(obj)\n",
+       "                for obs in self.observers:\n",
+       "                    obs.thing_deleted(obj)\n",
+       "\n",
+       "        super().delete_thing(thing)\n",
+       "        for obs in self.observers:\n",
+       "            obs.thing_deleted(thing)\n",
+       "\n",
+       "    def add_walls(self):\n",
+       "        """Put walls around the entire perimeter of the grid."""\n",
+       "        for x in range(self.width):\n",
+       "            self.add_thing(Wall(), (x, 0))\n",
+       "            self.add_thing(Wall(), (x, self.height - 1))\n",
+       "        for y in range(1, self.height - 1):\n",
+       "            self.add_thing(Wall(), (0, y))\n",
+       "            self.add_thing(Wall(), (self.width - 1, y))\n",
+       "\n",
+       "        # Updates iteration start and end (with walls).\n",
+       "        self.x_start, self.y_start = (1, 1)\n",
+       "        self.x_end, self.y_end = (self.width - 1, self.height - 1)\n",
+       "\n",
+       "    def add_observer(self, observer):\n",
+       "        """Adds an observer to the list of observers.\n",
+       "        An observer is typically an EnvGUI.\n",
+       "\n",
+       "        Each observer is notified of changes in move_to and add_thing,\n",
+       "        by calling the observer's methods thing_moved(thing)\n",
+       "        and thing_added(thing, loc)."""\n",
+       "        self.observers.append(observer)\n",
+       "\n",
+       "    def turn_heading(self, heading, inc):\n",
+       "        """Return the heading to the left (inc=+1) or right (inc=-1) of heading."""\n",
+       "        return turn_heading(heading, inc)\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(XYEnvironment)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## GraphicEnvironment(XYEnvironment)\n", + "Handles the GUI" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class GraphicEnvironment(XYEnvironment):\n",
+       "    def __init__(self, width=10, height=10, boundary=True, color={}, display=False):\n",
+       "        """Define all the usual XYEnvironment characteristics,\n",
+       "        but initialise a BlockGrid for GUI too."""\n",
+       "        super().__init__(width, height)\n",
+       "        self.grid = BlockGrid(width, height, fill=(200, 200, 200))\n",
+       "        if display:\n",
+       "            self.grid.show()\n",
+       "            self.visible = True\n",
+       "        else:\n",
+       "            self.visible = False\n",
+       "        self.bounded = boundary\n",
+       "        self.colors = color\n",
+       "\n",
+       "    def get_world(self):\n",
+       "        """Returns all the items in the world in a format\n",
+       "        understandable by the ipythonblocks BlockGrid."""\n",
+       "        result = []\n",
+       "        x_start, y_start = (0, 0)\n",
+       "        x_end, y_end = self.width, self.height\n",
+       "        for x in range(x_start, x_end):\n",
+       "            row = []\n",
+       "            for y in range(y_start, y_end):\n",
+       "                row.append(self.list_things_at((x, y)))\n",
+       "            result.append(row)\n",
+       "        return result\n",
+       "\n",
+       "    """\n",
+       "    def run(self, steps=1000, delay=1):\n",
+       "        "" "Run the Environment for given number of time steps,\n",
+       "        but update the GUI too." ""\n",
+       "        for step in range(steps):\n",
+       "            sleep(delay)\n",
+       "            if self.visible:\n",
+       "                self.reveal()\n",
+       "            if self.is_done():\n",
+       "                if self.visible:\n",
+       "                    self.reveal()\n",
+       "                return\n",
+       "            self.step()\n",
+       "        if self.visible:\n",
+       "            self.reveal()\n",
+       "    """\n",
+       "\n",
+       "    def run(self, steps=2000, delay=1):\n",
+       "        """Run the Environment for given number of time steps,\n",
+       "        but update the GUI too."""\n",
+       "        for step in range(steps):\n",
+       "            self.update(delay)\n",
+       "            if self.is_done():\n",
+       "                break\n",
+       "            self.step()\n",
+       "        self.update(delay)\n",
+       "\n",
+       "    def update(self, delay=1):\n",
+       "        sleep(delay)\n",
+       "        self.reveal()\n",
+       "\n",
+       "    def reveal(self):\n",
+       "        """Display the BlockGrid for this world - the last thing to be added\n",
+       "        at a location defines the location color."""\n",
+       "        self.draw_world()\n",
+       "        # wait for the world to update and\n",
+       "        # apply changes to the same grid instead\n",
+       "        # of making a new one.\n",
+       "        clear_output(1)\n",
+       "        self.grid.show()\n",
+       "        self.visible = True\n",
+       "\n",
+       "    def draw_world(self):\n",
+       "        self.grid[:] = (200, 200, 200)\n",
+       "        world = self.get_world()\n",
+       "        for x in range(0, len(world)):\n",
+       "            for y in range(0, len(world[x])):\n",
+       "                if len(world[x][y]):\n",
+       "                    self.grid[y, x] = self.colors[world[x][y][-1].__class__.__name__]\n",
+       "\n",
+       "    def conceal(self):\n",
+       "        """Hide the BlockGrid for this world"""\n",
+       "        self.visible = False\n",
+       "        display(HTML(''))\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(GraphicEnvironment)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Let's make a vacuum environment\n", + "

\n", + "\n", + "

\n", + "\n", + "* Initialize Dirt as a Trivial thing\n", + "\n", + "* Start with a trivial 2-grid environment\n", + "\n", + "* Extend the XYEnvironment to **VacuumEnvironment**:\n", + " * The things are Wall, Dirt, and Four agents (reflux, random, tabledriven, and modelbased) for vacuum behavior. We'll get to those.\n", + " * The environment knows if an agent (a.k.a. a vacuum) is standing in dirt and if it will bump into something if it moves forward.\n", + " * An agent can execute an action:\n", + " * If the action is suck it gets 100 points (**performance**) and it deletes the dirt, otherwise the performance is -1 and the action is exected according to the agent's logic." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Trivial Vacuum Environment\n", + "\n", + "This one just moves between two grids -- no headings or looking for obstacles is needed, and it can suck if the floor is dirty." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class TrivialVacuumEnvironment(Environment):\n",
+       "    """This environment has two locations, A and B. Each can be Dirty\n",
+       "    or Clean. The agent perceives its location and the location's\n",
+       "    status. This serves as an example of how to implement a simple\n",
+       "    Environment."""\n",
+       "\n",
+       "    def __init__(self):\n",
+       "        super().__init__()\n",
+       "        self.status = {loc_A: random.choice(['Clean', 'Dirty']),\n",
+       "                       loc_B: random.choice(['Clean', 'Dirty'])}\n",
+       "\n",
+       "    def thing_classes(self):\n",
+       "        return [Wall, Dirt, ReflexVacuumAgent, RandomVacuumAgent, TableDrivenVacuumAgent, ModelBasedVacuumAgent]\n",
+       "\n",
+       "    def percept(self, agent):\n",
+       "        """Returns the agent's location, and the location status (Dirty/Clean)."""\n",
+       "        return agent.location, self.status[agent.location]\n",
+       "\n",
+       "    def execute_action(self, agent, action):\n",
+       "        """Change agent's location and/or location's status; track performance.\n",
+       "        Score 10 for each dirt cleaned; -1 for each move."""\n",
+       "        if action == 'Right':\n",
+       "            agent.location = loc_B\n",
+       "            agent.performance -= 1\n",
+       "        elif action == 'Left':\n",
+       "            agent.location = loc_A\n",
+       "            agent.performance -= 1\n",
+       "        elif action == 'Suck':\n",
+       "            if self.status[agent.location] == 'Dirty':\n",
+       "                agent.performance += 10\n",
+       "            self.status[agent.location] = 'Clean'\n",
+       "\n",
+       "    def default_location(self, thing):\n",
+       "        """Agents start in either location at random."""\n",
+       "        return random.choice([loc_A, loc_B])\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(TrivialVacuumEnvironment)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Nontrivial vacuum environment\n", + "\n", + "Note that this environment can\n", + "* Tell if the floor is dirty or not\n", + "* Tell if the agent is bumping against an obstacle\n", + "* Execute the \"suck\" action and assign an award **if** that action is successful/possible\n", + "\n", + "You'll see the `execute_action` refers to the XYEnvironment that already handled how the robot vacuum will handle movement (checking for obstacles).\n", + "\n", + "You'll also see that this basic environment can handle multiple types of vacuum agents, and we're going to pay attention to the differing behaviors of allowed agents.\n", + "\n", + "Also let's pay attention to rewards. There's a \"NoOp\" action that is neutral. Otherwise, the only reward is actually picking up dirt (+100) and the costs of movement are a reward of -1." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class VacuumEnvironment(XYEnvironment):\n",
+       "    """The environment of [Ex. 2.12]. Agent perceives dirty or clean,\n",
+       "    and bump (into obstacle) or not; 2D discrete world of unknown size;\n",
+       "    performance measure is 100 for each dirt cleaned, and -1 for\n",
+       "    each turn taken."""\n",
+       "\n",
+       "    def __init__(self, width=10, height=10):\n",
+       "        super().__init__(width, height)\n",
+       "        self.add_walls()\n",
+       "\n",
+       "    def thing_classes(self):\n",
+       "        return [Wall, Dirt, XYReflexVacuumAgent, ReflexVacuumAgent, RandomVacuumAgent,\n",
+       "                TableDrivenVacuumAgent, ModelBasedVacuumAgent]\n",
+       "\n",
+       "    def percept(self, agent):\n",
+       "        """The percept is a tuple of ('Dirty' or 'Clean', 'Bump' or 'None').\n",
+       "        Unlike the TrivialVacuumEnvironment, location is NOT perceived."""\n",
+       "        status = ('Dirty' if self.some_things_at(\n",
+       "            agent.location, Dirt) else 'Clean')\n",
+       "        bump = ('Bump' if agent.bump else 'None')\n",
+       "        return status, bump\n",
+       "\n",
+       "    def execute_action(self, agent, action):\n",
+       "        agent.bump = False\n",
+       "        if action == 'Suck':\n",
+       "            dirt_list = self.list_things_at(agent.location, Dirt)\n",
+       "            if dirt_list != []:\n",
+       "                dirt = dirt_list[0]\n",
+       "                agent.performance += 100\n",
+       "                self.delete_thing(dirt)\n",
+       "        else:\n",
+       "            super().execute_action(agent, action)\n",
+       "\n",
+       "        if action != 'NoOp':\n",
+       "            agent.performance -= 1\n",
+       "\n",
+       "    def is_done(self):\n",
+       "        # Elsa defined\n",
+       "        num_dirty = 0\n",
+       "        for idx in range(10):\n",
+       "            num_dirty += len([self.some_things_at([idx,j], Dirt) \\\n",
+       "                for j in range(10)])\n",
+       "        return False if num_dirty else True\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(VacuumEnvironment)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Defining Agents" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## An agent is a thing inside your environnment\n", + "\n", + "The initial **Thing** class is really just a shell. We'll want to define whether the thing is *alive*, how to display our thing's state, and how to display maybe a picture of our thing, like if our thing were a function we could make a picture. The **Agent** class is a subclass that performs actions based on what it perceives in the environment. To keep things general, this agent class will take in a user-defined FUNCTION that turns perceptions into actions." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class Thing:\n",
+       "    """This represents any physical object that can appear in an Environment.\n",
+       "    You subclass Thing to get the things you want. Each thing can have a\n",
+       "    .__name__  slot (used for output only)."""\n",
+       "\n",
+       "    def __repr__(self):\n",
+       "        return '<{}>'.format(getattr(self, '__name__', self.__class__.__name__))\n",
+       "\n",
+       "    def is_alive(self):\n",
+       "        """Things that are 'alive' should return true."""\n",
+       "        return hasattr(self, 'alive') and self.alive\n",
+       "\n",
+       "    def show_state(self):\n",
+       "        """Display the agent's internal state. Subclasses should override."""\n",
+       "        print("I don't know how to show_state.")\n",
+       "\n",
+       "    def display(self, canvas, x, y, width, height):\n",
+       "        """Display an image of this Thing on the canvas."""\n",
+       "        # Do we need this?\n",
+       "        pass\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(Thing)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class Agent(Thing):\n",
+       "    """An Agent is a subclass of Thing with one required slot,\n",
+       "    .program, which should hold a function that takes one argument, the\n",
+       "    percept, and returns an action. (What counts as a percept or action\n",
+       "    will depend on the specific environment in which the agent exists.)\n",
+       "    Note that 'program' is a slot, not a method. If it were a method,\n",
+       "    then the program could 'cheat' and look at aspects of the agent.\n",
+       "    It's not supposed to do that: the program can only look at the\n",
+       "    percepts. An agent program that needs a model of the world (and of\n",
+       "    the agent itself) will have to build and maintain its own model.\n",
+       "    There is an optional slot, .performance, which is a number giving\n",
+       "    the performance measure of the agent in its environment."""\n",
+       "\n",
+       "    def __init__(self, program=None, direction = None):\n",
+       "        self.alive = True\n",
+       "        self.bump = False\n",
+       "        self.holding = []\n",
+       "        self.performance = 0\n",
+       "        if program is None:\n",
+       "                #  or \\\n",
+       "                # (not isinstance(program, collections.abc.Callable) \\\n",
+       "                # and not isinstance(program, function)):\n",
+       "            print("Can't find a valid program for {}, falling back to default.".format(self.__class__.__name__))\n",
+       "\n",
+       "            def program(percept):\n",
+       "                return eval(input('Percept={}; action? '.format(percept)))\n",
+       "\n",
+       "        self.program = program\n",
+       "\n",
+       "\n",
+       "        self.direction = direction \n",
+       "\n",
+       "    def can_grab(self, thing):\n",
+       "        """Return True if this agent can grab this thing.\n",
+       "        Override for appropriate subclasses of Agent and Thing."""\n",
+       "        return False\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(Agent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How do we know what the agent did?" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def TraceAgent(agent):\n",
+       "    """Wrap the agent's program to print its input and output. This will let\n",
+       "    you see what the agent is doing in the environment."""\n",
+       "    old_program = agent.program\n",
+       "\n",
+       "    def new_program(percept):\n",
+       "        action = old_program(percept)\n",
+       "        print('{} perceives {} and does {} with performance {}'\\\n",
+       "            .format(agent, percept, action, agent.performance))\n",
+       "        return action\n",
+       "\n",
+       "    agent.program = new_program\n",
+       "    return agent\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(TraceAgent)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## BORING AGENT EXAMPLES" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Random" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def RandomAgentProgram(actions):\n",
+       "    """An agent that chooses an action at random, ignoring all percepts.\n",
+       "    >>> list = ['Right', 'Left', 'Suck', 'NoOp']\n",
+       "    >>> program = RandomAgentProgram(list)\n",
+       "    >>> agent = Agent(program)\n",
+       "    >>> environment = TrivialVacuumEnvironment()\n",
+       "    >>> environment.add_thing(agent)\n",
+       "    >>> environment.run()\n",
+       "    >>> environment.status == {(1, 0): 'Clean' , (0, 0): 'Clean'}\n",
+       "    True\n",
+       "    """\n",
+       "    return lambda percept: random.choice(actions)\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(RandomAgentProgram)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def RandomVacuumAgent():\n",
+       "    """Randomly choose one of the actions from the vacuum environment.\n",
+       "    >>> agent = RandomVacuumAgent()\n",
+       "    >>> environment = TrivialVacuumEnvironment()\n",
+       "    >>> environment.add_thing(agent)\n",
+       "    >>> environment.run()\n",
+       "    >>> environment.status == {(1,0):'Clean' , (0,0) : 'Clean'}\n",
+       "    True\n",
+       "    """\n",
+       "    return Agent(RandomAgentProgram(['Right', 'Left', 'Suck', 'NoOp']))\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(RandomVacuumAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Table-driven agents" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def TableDrivenAgentProgram(table):\n",
+       "    """\n",
+       "    [Figure 2.7]\n",
+       "    This agent selects an action based on the percept sequence.\n",
+       "    It is practical only for tiny domains.\n",
+       "    To customize it, provide as table a dictionary of all\n",
+       "    {percept_sequence:action} pairs.\n",
+       "    """\n",
+       "    percepts = []\n",
+       "\n",
+       "    def program(percept):\n",
+       "        percepts.append(percept)\n",
+       "        action = table.get(tuple(percepts))\n",
+       "        return action\n",
+       "\n",
+       "    return program\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(TableDrivenAgentProgram)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def TableDrivenVacuumAgent():\n",
+       "    """Tabular approach towards vacuum world as mentioned in [Figure 2.3]\n",
+       "    >>> agent = TableDrivenVacuumAgent()\n",
+       "    >>> environment = TrivialVacuumEnvironment()\n",
+       "    >>> environment.add_thing(agent)\n",
+       "    >>> environment.run()\n",
+       "    >>> environment.status == {(1,0):'Clean' , (0,0) : 'Clean'}\n",
+       "    True\n",
+       "    """\n",
+       "    table = {((loc_A, 'Clean'),): 'Right',\n",
+       "             ((loc_A, 'Dirty'),): 'Suck',\n",
+       "             ((loc_B, 'Clean'),): 'Left',\n",
+       "             ((loc_B, 'Dirty'),): 'Suck',\n",
+       "             ((loc_A, 'Dirty'), (loc_A, 'Clean')): 'Right',\n",
+       "             ((loc_A, 'Clean'), (loc_B, 'Dirty')): 'Suck',\n",
+       "             ((loc_B, 'Clean'), (loc_A, 'Dirty')): 'Suck',\n",
+       "             ((loc_B, 'Dirty'), (loc_B, 'Clean')): 'Left',\n",
+       "             ((loc_A, 'Dirty'), (loc_A, 'Clean'), (loc_B, 'Dirty')): 'Suck',\n",
+       "             ((loc_B, 'Dirty'), (loc_B, 'Clean'), (loc_A, 'Dirty')): 'Suck'}\n",
+       "    return Agent(TableDrivenAgentProgram(table))\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(TableDrivenVacuumAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Can you imagine making a table for the 2D environment? This is just not scalable!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## REFLEX AGENTS\n", + "\n", + "Here's the take-away: a reflex agent has rules for its behavior based on what it perceives in its environment. In reinforcement learning, we typically call those rules a **policy** for actions." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def SimpleReflexAgentProgram(rules, interpret_input):\n",
+       "    """\n",
+       "    [Figure 2.10]\n",
+       "    This agent takes action based solely on the percept.\n",
+       "    """\n",
+       "\n",
+       "    def program(percept):\n",
+       "        state = interpret_input(percept)\n",
+       "        rule = rule_match(state, rules)\n",
+       "        action = rule.action\n",
+       "        return action\n",
+       "\n",
+       "    return program\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(SimpleReflexAgentProgram)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The ReflexVacuumAgent\n", + "\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "Perceive the location and status\n", + "* If the status is dirty, suck\n", + "* Otherwise move to the other location\n", + "\n", + "#### Trivial Reflex Vacuum Agent\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def ReflexVacuumAgent():\n",
+       "    """\n",
+       "    [Figure 2.8]\n",
+       "    A reflex agent for the two-state vacuum environment.\n",
+       "    >>> agent = ReflexVacuumAgent()\n",
+       "    >>> environment = TrivialVacuumEnvironment()\n",
+       "    >>> environment.add_thing(agent)\n",
+       "    >>> environment.run()\n",
+       "    >>> environment.status == {(1,0):'Clean' , (0,0) : 'Clean'}\n",
+       "    True\n",
+       "    """\n",
+       "\n",
+       "    def program(percept):\n",
+       "        location, status = percept\n",
+       "        if status == 'Dirty':\n",
+       "            return 'Suck'\n",
+       "        elif location == loc_A:\n",
+       "            return 'Right'\n",
+       "        elif location == loc_B:\n",
+       "            return 'Left'\n",
+       "\n",
+       "    return Agent(program)\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(ReflexVacuumAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Running the trivial reflex vacuum agent" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{(0, 0): 'Dirty', (1, 0): 'Clean'}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agent = ReflexVacuumAgent()\n", + "dirt = Dirt()\n", + "environment = TrivialVacuumEnvironment()\n", + "environment.add_thing(agent)\n", + "environment.status\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{(0, 0): 'Clean', (1, 0): 'Clean'}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "environment.run()\n", + "environment.status\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Nontrivial Vacuum Agent\n", + "\n", + "I wanted to think this through before I saw their solution.\n", + "\n", + "So maybe we'd say\n", + "* if the location is dirty, suck (performance +100)\n", + "* Otherwise if no bump move forward (performance -1)\n", + "* Otherwise move heading to the left or right -- probably want to be random (performance -1)\n", + "\n", + "The agent itself is tracking its direction and an internal concept of location using the \"Direction\" class that's defined above. That class is already integrated into the XYEnvironment defining `TurnLeft`, `TurnRight`, and `Forward`." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "from agents4e import Agent\n", + "\n", + "def XYReflexVacuumAgent():\n", + " \"\"\" Extend trivial example\n", + "\n", + " The XY environment returns the state\n", + " ('Dirty'/'Clean', 'Bump'/'None')\n", + "\n", + " The agent itself is tracking its location.\n", + " \n", + " \"\"\"\n", + "\n", + " def program(percept):\n", + " status, bump = percept\n", + " if status == 'Dirty':\n", + " return 'Suck'\n", + " elif bump == 'Bump': \n", + " # return 'TurnLeft'\n", + " return random.choice(['TurnLeft', 'TurnRight'])\n", + " else:\n", + " return 'Forward'\n", + "\n", + "\n", + " return Agent(program = program, \\\n", + " direction = Direction(random.choice([\"left\", \"right\", \"up\", \"down\"])))\n", + "\n", + "\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'vacuum' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\elsa.schaefer\\Documents\\dev\\aima\\aima-python\\aibc_agents.elsa.ipynb Cell 39'\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[0m TraceAgent(vacuum)\n", + "\u001b[1;31mNameError\u001b[0m: name 'vacuum' is not defined" + ] + } + ], + "source": [ + "TraceAgent(vacuum)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 237, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dirt = Dirt()\n", + "dirt.is_alive()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 238, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vacuum = XYReflexVacuumAgent()\n", + "environment = VacuumEnvironment()\n", + "environment.add_thing(vacuum)\n", + "for idx in range(10):\n", + " dirt = Dirt()\n", + " environment.add_thing(dirt, [random.randint(0,9),random.randint(0,9)])\n", + "vacuum.performance\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def stat(tf):\n", + " return \"DIRT\" if tf == True else \" c \"\n", + "\n", + "def show_dirt(env):\n", + " for idx in range(10):\n", + " dirt_print = [stat(env.some_things_at([idx, j], Dirt)) for j in range(10)]\n", + " print(dirt_print)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', 'DIRT', 'DIRT', ' c ', ' c ', 'DIRT', 'DIRT', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', 'DIRT', ' c ', ' c ', ' c ', ' c ', ' c ', 'DIRT', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', 'DIRT', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', 'DIRT', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', 'DIRT', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n" + ] + } + ], + "source": [ + "show_dirt(environment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " perceives ('Clean', 'None') and does Forward with performance 0\n", + " perceives ('Clean', 'None') and does Forward with performance -1\n", + " perceives ('Dirty', 'None') and does Suck with performance -2\n", + " perceives ('Clean', 'None') and does Forward with performance 97\n", + " perceives ('Clean', 'None') and does Forward with performance 96\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 95\n", + " perceives ('Clean', 'None') and does Forward with performance 94\n", + " perceives ('Clean', 'None') and does Forward with performance 93\n", + " perceives ('Clean', 'None') and does Forward with performance 92\n", + " perceives ('Clean', 'None') and does Forward with performance 91\n", + " perceives ('Clean', 'None') and does Forward with performance 90\n", + " perceives ('Clean', 'None') and does Forward with performance 89\n", + " perceives ('Clean', 'None') and does Forward with performance 88\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 87\n", + " perceives ('Clean', 'None') and does Forward with performance 86\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 85\n", + " perceives ('Clean', 'None') and does Forward with performance 84\n", + " perceives ('Clean', 'None') and does Forward with performance 83\n", + " perceives ('Clean', 'None') and does Forward with performance 82\n", + " perceives ('Clean', 'None') and does Forward with performance 81\n", + " perceives ('Clean', 'None') and does Forward with performance 80\n", + " perceives ('Clean', 'None') and does Forward with performance 79\n", + " perceives ('Clean', 'None') and does Forward with performance 78\n", + " perceives ('Clean', 'None') and does Forward with performance 77\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 76\n", + " perceives ('Clean', 'None') and does Forward with performance 75\n", + " perceives ('Dirty', 'None') and does Suck with performance 74\n", + " perceives ('Clean', 'None') and does Forward with performance 173\n", + " perceives ('Clean', 'None') and does Forward with performance 172\n", + " perceives ('Clean', 'None') and does Forward with performance 171\n", + " perceives ('Dirty', 'None') and does Suck with performance 170\n", + " perceives ('Clean', 'None') and does Forward with performance 269\n", + " perceives ('Clean', 'None') and does Forward with performance 268\n", + " perceives ('Clean', 'None') and does Forward with performance 267\n", + " perceives ('Clean', 'None') and does Forward with performance 266\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 265\n", + " perceives ('Clean', 'None') and does Forward with performance 264\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 263\n", + " perceives ('Clean', 'None') and does Forward with performance 262\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 261\n", + " perceives ('Clean', 'None') and does Forward with performance 260\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 259\n", + " perceives ('Clean', 'None') and does Forward with performance 258\n", + " perceives ('Clean', 'None') and does Forward with performance 257\n", + " perceives ('Clean', 'None') and does Forward with performance 256\n", + " perceives ('Clean', 'None') and does Forward with performance 255\n", + " perceives ('Clean', 'None') and does Forward with performance 254\n", + " perceives ('Clean', 'None') and does Forward with performance 253\n", + " perceives ('Clean', 'None') and does Forward with performance 252\n", + " perceives ('Clean', 'None') and does Forward with performance 251\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 250\n", + " perceives ('Clean', 'None') and does Forward with performance 249\n", + " perceives ('Clean', 'None') and does Forward with performance 248\n", + " perceives ('Clean', 'None') and does Forward with performance 247\n", + " perceives ('Clean', 'None') and does Forward with performance 246\n", + " perceives ('Clean', 'None') and does Forward with performance 245\n", + " perceives ('Clean', 'None') and does Forward with performance 244\n", + " perceives ('Clean', 'None') and does Forward with performance 243\n", + " perceives ('Clean', 'None') and does Forward with performance 242\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 241\n", + " perceives ('Clean', 'None') and does Forward with performance 240\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 239\n", + " perceives ('Clean', 'None') and does Forward with performance 238\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 237\n", + " perceives ('Clean', 'None') and does Forward with performance 236\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 235\n", + " perceives ('Clean', 'None') and does Forward with performance 234\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 233\n", + " perceives ('Clean', 'None') and does Forward with performance 232\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 231\n", + " perceives ('Clean', 'None') and does Forward with performance 230\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 229\n", + " perceives ('Clean', 'None') and does Forward with performance 228\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 227\n", + " perceives ('Clean', 'None') and does Forward with performance 226\n", + " perceives ('Clean', 'None') and does Forward with performance 225\n", + " perceives ('Clean', 'None') and does Forward with performance 224\n", + " perceives ('Clean', 'None') and does Forward with performance 223\n", + " perceives ('Clean', 'None') and does Forward with performance 222\n", + " perceives ('Clean', 'None') and does Forward with performance 221\n", + " perceives ('Clean', 'None') and does Forward with performance 220\n", + " perceives ('Clean', 'None') and does Forward with performance 219\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 218\n", + " perceives ('Clean', 'None') and does Forward with performance 217\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 216\n", + " perceives ('Clean', 'None') and does Forward with performance 215\n", + " perceives ('Clean', 'None') and does Forward with performance 214\n", + " perceives ('Clean', 'None') and does Forward with performance 213\n", + " perceives ('Clean', 'None') and does Forward with performance 212\n", + " perceives ('Clean', 'None') and does Forward with performance 211\n", + " perceives ('Clean', 'None') and does Forward with performance 210\n", + " perceives ('Clean', 'None') and does Forward with performance 209\n", + " perceives ('Clean', 'None') and does Forward with performance 208\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 207\n", + " perceives ('Clean', 'None') and does Forward with performance 206\n", + " perceives ('Clean', 'None') and does Forward with performance 205\n", + " perceives ('Clean', 'None') and does Forward with performance 204\n", + " perceives ('Clean', 'None') and does Forward with performance 203\n", + " perceives ('Clean', 'None') and does Forward with performance 202\n", + " perceives ('Clean', 'None') and does Forward with performance 201\n", + " perceives ('Dirty', 'None') and does Suck with performance 200\n", + " perceives ('Clean', 'None') and does Forward with performance 299\n", + " perceives ('Clean', 'None') and does Forward with performance 298\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 297\n", + " perceives ('Clean', 'None') and does Forward with performance 296\n", + " perceives ('Clean', 'None') and does Forward with performance 295\n", + " perceives ('Clean', 'None') and does Forward with performance 294\n", + " perceives ('Clean', 'None') and does Forward with performance 293\n", + " perceives ('Clean', 'None') and does Forward with performance 292\n", + " perceives ('Clean', 'None') and does Forward with performance 291\n", + " perceives ('Clean', 'None') and does Forward with performance 290\n", + " perceives ('Clean', 'None') and does Forward with performance 289\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 288\n", + " perceives ('Clean', 'None') and does Forward with performance 287\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 286\n", + " perceives ('Clean', 'None') and does Forward with performance 285\n", + " perceives ('Clean', 'None') and does Forward with performance 284\n", + " perceives ('Clean', 'None') and does Forward with performance 283\n", + " perceives ('Clean', 'None') and does Forward with performance 282\n", + " perceives ('Clean', 'None') and does Forward with performance 281\n", + " perceives ('Clean', 'None') and does Forward with performance 280\n", + " perceives ('Clean', 'None') and does Forward with performance 279\n", + " perceives ('Clean', 'None') and does Forward with performance 278\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 277\n", + " perceives ('Clean', 'None') and does Forward with performance 276\n", + " perceives ('Clean', 'None') and does Forward with performance 275\n", + " perceives ('Clean', 'None') and does Forward with performance 274\n", + " perceives ('Clean', 'None') and does Forward with performance 273\n", + " perceives ('Clean', 'None') and does Forward with performance 272\n", + " perceives ('Clean', 'None') and does Forward with performance 271\n", + " perceives ('Clean', 'None') and does Forward with performance 270\n", + " perceives ('Clean', 'None') and does Forward with performance 269\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 268\n", + " perceives ('Clean', 'None') and does Forward with performance 267\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 266\n", + " perceives ('Clean', 'None') and does Forward with performance 265\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 264\n", + " perceives ('Clean', 'None') and does Forward with performance 263\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 262\n", + " perceives ('Clean', 'None') and does Forward with performance 261\n", + " perceives ('Clean', 'None') and does Forward with performance 260\n", + " perceives ('Clean', 'None') and does Forward with performance 259\n", + " perceives ('Clean', 'None') and does Forward with performance 258\n", + " perceives ('Clean', 'None') and does Forward with performance 257\n", + " perceives ('Clean', 'None') and does Forward with performance 256\n", + " perceives ('Clean', 'None') and does Forward with performance 255\n", + " perceives ('Clean', 'None') and does Forward with performance 254\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 253\n", + " perceives ('Clean', 'None') and does Forward with performance 252\n", + " perceives ('Clean', 'None') and does Forward with performance 251\n", + " perceives ('Clean', 'None') and does Forward with performance 250\n", + " perceives ('Clean', 'None') and does Forward with performance 249\n", + " perceives ('Clean', 'None') and does Forward with performance 248\n", + " perceives ('Clean', 'None') and does Forward with performance 247\n", + " perceives ('Clean', 'None') and does Forward with performance 246\n", + " perceives ('Clean', 'None') and does Forward with performance 245\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 244\n", + " perceives ('Clean', 'None') and does Forward with performance 243\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 242\n", + " perceives ('Clean', 'None') and does Forward with performance 241\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 240\n", + " perceives ('Clean', 'None') and does Forward with performance 239\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 238\n", + " perceives ('Clean', 'None') and does Forward with performance 237\n", + " perceives ('Clean', 'None') and does Forward with performance 236\n", + " perceives ('Clean', 'None') and does Forward with performance 235\n", + " perceives ('Clean', 'None') and does Forward with performance 234\n", + " perceives ('Clean', 'None') and does Forward with performance 233\n", + " perceives ('Clean', 'None') and does Forward with performance 232\n", + " perceives ('Clean', 'None') and does Forward with performance 231\n", + " perceives ('Clean', 'None') and does Forward with performance 230\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 229\n", + " perceives ('Clean', 'None') and does Forward with performance 228\n", + " perceives ('Clean', 'None') and does Forward with performance 227\n", + " perceives ('Clean', 'None') and does Forward with performance 226\n", + " perceives ('Clean', 'None') and does Forward with performance 225\n", + " perceives ('Clean', 'None') and does Forward with performance 224\n", + " perceives ('Clean', 'None') and does Forward with performance 223\n", + " perceives ('Clean', 'None') and does Forward with performance 222\n", + " perceives ('Clean', 'None') and does Forward with performance 221\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 220\n", + " perceives ('Clean', 'None') and does Forward with performance 219\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 218\n", + " perceives ('Clean', 'None') and does Forward with performance 217\n", + " perceives ('Clean', 'None') and does Forward with performance 216\n", + " perceives ('Clean', 'None') and does Forward with performance 215\n", + " perceives ('Clean', 'None') and does Forward with performance 214\n", + " perceives ('Clean', 'None') and does Forward with performance 213\n", + " perceives ('Clean', 'None') and does Forward with performance 212\n", + " perceives ('Clean', 'None') and does Forward with performance 211\n", + " perceives ('Clean', 'None') and does Forward with performance 210\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 209\n", + " perceives ('Clean', 'None') and does Forward with performance 208\n", + " perceives ('Clean', 'None') and does Forward with performance 207\n", + " perceives ('Clean', 'None') and does Forward with performance 206\n", + " perceives ('Clean', 'None') and does Forward with performance 205\n", + " perceives ('Clean', 'None') and does Forward with performance 204\n", + " perceives ('Clean', 'None') and does Forward with performance 203\n", + " perceives ('Clean', 'None') and does Forward with performance 202\n", + " perceives ('Clean', 'None') and does Forward with performance 201\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 200\n", + " perceives ('Clean', 'None') and does Forward with performance 199\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 198\n", + " perceives ('Clean', 'None') and does Forward with performance 197\n", + " perceives ('Clean', 'None') and does Forward with performance 196\n", + " perceives ('Clean', 'None') and does Forward with performance 195\n", + " perceives ('Clean', 'None') and does Forward with performance 194\n", + " perceives ('Clean', 'None') and does Forward with performance 193\n", + " perceives ('Clean', 'None') and does Forward with performance 192\n", + " perceives ('Clean', 'None') and does Forward with performance 191\n", + " perceives ('Clean', 'None') and does Forward with performance 190\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 189\n", + " perceives ('Clean', 'None') and does Forward with performance 188\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 187\n", + " perceives ('Clean', 'None') and does Forward with performance 186\n", + " perceives ('Clean', 'None') and does Forward with performance 185\n", + " perceives ('Clean', 'None') and does Forward with performance 184\n", + " perceives ('Clean', 'None') and does Forward with performance 183\n", + " perceives ('Clean', 'None') and does Forward with performance 182\n", + " perceives ('Clean', 'None') and does Forward with performance 181\n", + " perceives ('Clean', 'None') and does Forward with performance 180\n", + " perceives ('Clean', 'None') and does Forward with performance 179\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 178\n", + " perceives ('Clean', 'None') and does Forward with performance 177\n", + " perceives ('Clean', 'None') and does Forward with performance 176\n", + " perceives ('Clean', 'None') and does Forward with performance 175\n", + " perceives ('Clean', 'None') and does Forward with performance 174\n", + " perceives ('Clean', 'None') and does Forward with performance 173\n", + " perceives ('Clean', 'None') and does Forward with performance 172\n", + " perceives ('Clean', 'None') and does Forward with performance 171\n", + " perceives ('Clean', 'None') and does Forward with performance 170\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 169\n", + " perceives ('Clean', 'None') and does Forward with performance 168\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 167\n", + " perceives ('Clean', 'None') and does Forward with performance 166\n", + " perceives ('Clean', 'None') and does Forward with performance 165\n", + " perceives ('Clean', 'None') and does Forward with performance 164\n", + " perceives ('Clean', 'None') and does Forward with performance 163\n", + " perceives ('Clean', 'None') and does Forward with performance 162\n", + " perceives ('Clean', 'None') and does Forward with performance 161\n", + " perceives ('Clean', 'None') and does Forward with performance 160\n", + " perceives ('Clean', 'None') and does Forward with performance 159\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 158\n", + " perceives ('Clean', 'None') and does Forward with performance 157\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 156\n", + " perceives ('Clean', 'None') and does Forward with performance 155\n", + " perceives ('Clean', 'None') and does Forward with performance 154\n", + " perceives ('Clean', 'None') and does Forward with performance 153\n", + " perceives ('Clean', 'None') and does Forward with performance 152\n", + " perceives ('Clean', 'None') and does Forward with performance 151\n", + " perceives ('Clean', 'None') and does Forward with performance 150\n", + " perceives ('Clean', 'None') and does Forward with performance 149\n", + " perceives ('Clean', 'None') and does Forward with performance 148\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 147\n", + " perceives ('Clean', 'None') and does Forward with performance 146\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 145\n", + " perceives ('Clean', 'None') and does Forward with performance 144\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 143\n", + " perceives ('Clean', 'None') and does Forward with performance 142\n", + " perceives ('Clean', 'None') and does Forward with performance 141\n", + " perceives ('Clean', 'None') and does Forward with performance 140\n", + " perceives ('Clean', 'None') and does Forward with performance 139\n", + " perceives ('Clean', 'None') and does Forward with performance 138\n", + " perceives ('Clean', 'None') and does Forward with performance 137\n", + " perceives ('Clean', 'None') and does Forward with performance 136\n", + " perceives ('Clean', 'None') and does Forward with performance 135\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 134\n", + " perceives ('Clean', 'None') and does Forward with performance 133\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 132\n", + " perceives ('Clean', 'None') and does Forward with performance 131\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 130\n", + " perceives ('Clean', 'None') and does Forward with performance 129\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 128\n", + " perceives ('Clean', 'None') and does Forward with performance 127\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 126\n", + " perceives ('Clean', 'None') and does Forward with performance 125\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 124\n", + " perceives ('Clean', 'None') and does Forward with performance 123\n", + " perceives ('Clean', 'None') and does Forward with performance 122\n", + " perceives ('Clean', 'None') and does Forward with performance 121\n", + " perceives ('Clean', 'None') and does Forward with performance 120\n", + " perceives ('Clean', 'None') and does Forward with performance 119\n", + " perceives ('Clean', 'None') and does Forward with performance 118\n", + " perceives ('Clean', 'None') and does Forward with performance 117\n", + " perceives ('Clean', 'None') and does Forward with performance 116\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 115\n", + " perceives ('Clean', 'None') and does Forward with performance 114\n", + " perceives ('Clean', 'None') and does Forward with performance 113\n", + " perceives ('Clean', 'None') and does Forward with performance 112\n", + " perceives ('Clean', 'None') and does Forward with performance 111\n", + " perceives ('Clean', 'None') and does Forward with performance 110\n", + " perceives ('Clean', 'None') and does Forward with performance 109\n", + " perceives ('Clean', 'None') and does Forward with performance 108\n", + " perceives ('Clean', 'None') and does Forward with performance 107\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 106\n", + " perceives ('Clean', 'None') and does Forward with performance 105\n", + " perceives ('Clean', 'None') and does Forward with performance 104\n", + " perceives ('Clean', 'None') and does Forward with performance 103\n", + " perceives ('Clean', 'None') and does Forward with performance 102\n", + " perceives ('Clean', 'None') and does Forward with performance 101\n", + " perceives ('Clean', 'None') and does Forward with performance 100\n", + " perceives ('Clean', 'None') and does Forward with performance 99\n", + " perceives ('Clean', 'None') and does Forward with performance 98\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 97\n", + " perceives ('Clean', 'None') and does Forward with performance 96\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 95\n", + " perceives ('Clean', 'None') and does Forward with performance 94\n", + " perceives ('Clean', 'None') and does Forward with performance 93\n", + " perceives ('Clean', 'None') and does Forward with performance 92\n", + " perceives ('Clean', 'None') and does Forward with performance 91\n", + " perceives ('Clean', 'None') and does Forward with performance 90\n", + " perceives ('Clean', 'None') and does Forward with performance 89\n", + " perceives ('Clean', 'None') and does Forward with performance 88\n", + " perceives ('Clean', 'None') and does Forward with performance 87\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 86\n", + " perceives ('Clean', 'None') and does Forward with performance 85\n", + " perceives ('Clean', 'None') and does Forward with performance 84\n", + " perceives ('Clean', 'None') and does Forward with performance 83\n", + " perceives ('Clean', 'None') and does Forward with performance 82\n", + " perceives ('Clean', 'None') and does Forward with performance 81\n", + " perceives ('Clean', 'None') and does Forward with performance 80\n", + " perceives ('Clean', 'None') and does Forward with performance 79\n", + " perceives ('Clean', 'None') and does Forward with performance 78\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 77\n", + " perceives ('Clean', 'None') and does Forward with performance 76\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 75\n", + " perceives ('Clean', 'None') and does Forward with performance 74\n", + " perceives ('Clean', 'None') and does Forward with performance 73\n", + " perceives ('Clean', 'None') and does Forward with performance 72\n", + " perceives ('Clean', 'None') and does Forward with performance 71\n", + " perceives ('Clean', 'None') and does Forward with performance 70\n", + " perceives ('Clean', 'None') and does Forward with performance 69\n", + " perceives ('Clean', 'None') and does Forward with performance 68\n", + " perceives ('Clean', 'None') and does Forward with performance 67\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 66\n", + " perceives ('Clean', 'None') and does Forward with performance 65\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 64\n", + " perceives ('Clean', 'None') and does Forward with performance 63\n", + " perceives ('Clean', 'None') and does Forward with performance 62\n", + " perceives ('Clean', 'None') and does Forward with performance 61\n", + " perceives ('Clean', 'None') and does Forward with performance 60\n", + " perceives ('Clean', 'None') and does Forward with performance 59\n", + " perceives ('Clean', 'None') and does Forward with performance 58\n", + " perceives ('Clean', 'None') and does Forward with performance 57\n", + " perceives ('Clean', 'None') and does Forward with performance 56\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 55\n", + " perceives ('Clean', 'None') and does Forward with performance 54\n", + " perceives ('Clean', 'None') and does Forward with performance 53\n", + " perceives ('Clean', 'None') and does Forward with performance 52\n", + " perceives ('Clean', 'None') and does Forward with performance 51\n", + " perceives ('Clean', 'None') and does Forward with performance 50\n", + " perceives ('Clean', 'None') and does Forward with performance 49\n", + " perceives ('Clean', 'None') and does Forward with performance 48\n", + " perceives ('Clean', 'None') and does Forward with performance 47\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 46\n", + " perceives ('Clean', 'None') and does Forward with performance 45\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 44\n", + " perceives ('Clean', 'None') and does Forward with performance 43\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 42\n", + " perceives ('Clean', 'None') and does Forward with performance 41\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 40\n", + " perceives ('Clean', 'None') and does Forward with performance 39\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 38\n", + " perceives ('Clean', 'None') and does Forward with performance 37\n", + " perceives ('Clean', 'None') and does Forward with performance 36\n", + " perceives ('Clean', 'None') and does Forward with performance 35\n", + " perceives ('Clean', 'None') and does Forward with performance 34\n", + " perceives ('Clean', 'None') and does Forward with performance 33\n", + " perceives ('Clean', 'None') and does Forward with performance 32\n", + " perceives ('Clean', 'None') and does Forward with performance 31\n", + " perceives ('Clean', 'None') and does Forward with performance 30\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 29\n", + " perceives ('Clean', 'None') and does Forward with performance 28\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 27\n", + " perceives ('Clean', 'None') and does Forward with performance 26\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 25\n", + " perceives ('Clean', 'None') and does Forward with performance 24\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 23\n", + " perceives ('Clean', 'None') and does Forward with performance 22\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 21\n", + " perceives ('Clean', 'None') and does Forward with performance 20\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 19\n", + " perceives ('Clean', 'None') and does Forward with performance 18\n", + " perceives ('Clean', 'None') and does Forward with performance 17\n", + " perceives ('Clean', 'None') and does Forward with performance 16\n", + " perceives ('Clean', 'None') and does Forward with performance 15\n", + " perceives ('Clean', 'None') and does Forward with performance 14\n", + " perceives ('Clean', 'None') and does Forward with performance 13\n", + " perceives ('Clean', 'None') and does Forward with performance 12\n", + " perceives ('Clean', 'None') and does Forward with performance 11\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 10\n", + " perceives ('Clean', 'None') and does Forward with performance 9\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 8\n", + " perceives ('Clean', 'None') and does Forward with performance 7\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance 6\n", + " perceives ('Clean', 'None') and does Forward with performance 5\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 4\n", + " perceives ('Clean', 'None') and does Forward with performance 3\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance 2\n", + " perceives ('Clean', 'None') and does Forward with performance 1\n", + " perceives ('Clean', 'None') and does Forward with performance 0\n", + " perceives ('Clean', 'None') and does Forward with performance -1\n", + " perceives ('Clean', 'None') and does Forward with performance -2\n", + " perceives ('Clean', 'None') and does Forward with performance -3\n", + " perceives ('Clean', 'None') and does Forward with performance -4\n", + " perceives ('Clean', 'None') and does Forward with performance -5\n", + " perceives ('Clean', 'None') and does Forward with performance -6\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -7\n", + " perceives ('Clean', 'None') and does Forward with performance -8\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -9\n", + " perceives ('Clean', 'None') and does Forward with performance -10\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -11\n", + " perceives ('Clean', 'None') and does Forward with performance -12\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -13\n", + " perceives ('Clean', 'None') and does Forward with performance -14\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -15\n", + " perceives ('Clean', 'None') and does Forward with performance -16\n", + " perceives ('Clean', 'None') and does Forward with performance -17\n", + " perceives ('Clean', 'None') and does Forward with performance -18\n", + " perceives ('Clean', 'None') and does Forward with performance -19\n", + " perceives ('Clean', 'None') and does Forward with performance -20\n", + " perceives ('Clean', 'None') and does Forward with performance -21\n", + " perceives ('Clean', 'None') and does Forward with performance -22\n", + " perceives ('Clean', 'None') and does Forward with performance -23\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -24\n", + " perceives ('Clean', 'None') and does Forward with performance -25\n", + " perceives ('Clean', 'None') and does Forward with performance -26\n", + " perceives ('Clean', 'None') and does Forward with performance -27\n", + " perceives ('Clean', 'None') and does Forward with performance -28\n", + " perceives ('Clean', 'None') and does Forward with performance -29\n", + " perceives ('Clean', 'None') and does Forward with performance -30\n", + " perceives ('Clean', 'None') and does Forward with performance -31\n", + " perceives ('Clean', 'None') and does Forward with performance -32\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -33\n", + " perceives ('Clean', 'None') and does Forward with performance -34\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -35\n", + " perceives ('Clean', 'None') and does Forward with performance -36\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -37\n", + " perceives ('Clean', 'None') and does Forward with performance -38\n", + " perceives ('Clean', 'None') and does Forward with performance -39\n", + " perceives ('Clean', 'None') and does Forward with performance -40\n", + " perceives ('Clean', 'None') and does Forward with performance -41\n", + " perceives ('Clean', 'None') and does Forward with performance -42\n", + " perceives ('Clean', 'None') and does Forward with performance -43\n", + " perceives ('Clean', 'None') and does Forward with performance -44\n", + " perceives ('Clean', 'None') and does Forward with performance -45\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -46\n", + " perceives ('Clean', 'None') and does Forward with performance -47\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -48\n", + " perceives ('Clean', 'None') and does Forward with performance -49\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -50\n", + " perceives ('Clean', 'None') and does Forward with performance -51\n", + " perceives ('Clean', 'None') and does Forward with performance -52\n", + " perceives ('Clean', 'None') and does Forward with performance -53\n", + " perceives ('Clean', 'None') and does Forward with performance -54\n", + " perceives ('Clean', 'None') and does Forward with performance -55\n", + " perceives ('Clean', 'None') and does Forward with performance -56\n", + " perceives ('Clean', 'None') and does Forward with performance -57\n", + " perceives ('Clean', 'None') and does Forward with performance -58\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -59\n", + " perceives ('Clean', 'None') and does Forward with performance -60\n", + " perceives ('Clean', 'None') and does Forward with performance -61\n", + " perceives ('Clean', 'None') and does Forward with performance -62\n", + " perceives ('Clean', 'None') and does Forward with performance -63\n", + " perceives ('Clean', 'None') and does Forward with performance -64\n", + " perceives ('Clean', 'None') and does Forward with performance -65\n", + " perceives ('Clean', 'None') and does Forward with performance -66\n", + " perceives ('Clean', 'None') and does Forward with performance -67\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -68\n", + " perceives ('Clean', 'None') and does Forward with performance -69\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -70\n", + " perceives ('Clean', 'None') and does Forward with performance -71\n", + " perceives ('Clean', 'None') and does Forward with performance -72\n", + " perceives ('Clean', 'None') and does Forward with performance -73\n", + " perceives ('Clean', 'None') and does Forward with performance -74\n", + " perceives ('Clean', 'None') and does Forward with performance -75\n", + " perceives ('Clean', 'None') and does Forward with performance -76\n", + " perceives ('Clean', 'None') and does Forward with performance -77\n", + " perceives ('Clean', 'None') and does Forward with performance -78\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -79\n", + " perceives ('Clean', 'None') and does Forward with performance -80\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -81\n", + " perceives ('Clean', 'None') and does Forward with performance -82\n", + " perceives ('Clean', 'None') and does Forward with performance -83\n", + " perceives ('Clean', 'None') and does Forward with performance -84\n", + " perceives ('Clean', 'None') and does Forward with performance -85\n", + " perceives ('Clean', 'None') and does Forward with performance -86\n", + " perceives ('Clean', 'None') and does Forward with performance -87\n", + " perceives ('Clean', 'None') and does Forward with performance -88\n", + " perceives ('Clean', 'None') and does Forward with performance -89\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -90\n", + " perceives ('Clean', 'None') and does Forward with performance -91\n", + " perceives ('Clean', 'None') and does Forward with performance -92\n", + " perceives ('Clean', 'None') and does Forward with performance -93\n", + " perceives ('Clean', 'None') and does Forward with performance -94\n", + " perceives ('Clean', 'None') and does Forward with performance -95\n", + " perceives ('Clean', 'None') and does Forward with performance -96\n", + " perceives ('Clean', 'None') and does Forward with performance -97\n", + " perceives ('Clean', 'None') and does Forward with performance -98\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -99\n", + " perceives ('Clean', 'None') and does Forward with performance -100\n", + " perceives ('Clean', 'None') and does Forward with performance -101\n", + " perceives ('Clean', 'None') and does Forward with performance -102\n", + " perceives ('Clean', 'None') and does Forward with performance -103\n", + " perceives ('Clean', 'None') and does Forward with performance -104\n", + " perceives ('Clean', 'None') and does Forward with performance -105\n", + " perceives ('Clean', 'None') and does Forward with performance -106\n", + " perceives ('Clean', 'None') and does Forward with performance -107\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -108\n", + " perceives ('Clean', 'None') and does Forward with performance -109\n", + " perceives ('Clean', 'None') and does Forward with performance -110\n", + " perceives ('Clean', 'None') and does Forward with performance -111\n", + " perceives ('Clean', 'None') and does Forward with performance -112\n", + " perceives ('Clean', 'None') and does Forward with performance -113\n", + " perceives ('Clean', 'None') and does Forward with performance -114\n", + " perceives ('Clean', 'None') and does Forward with performance -115\n", + " perceives ('Clean', 'None') and does Forward with performance -116\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -117\n", + " perceives ('Clean', 'None') and does Forward with performance -118\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -119\n", + " perceives ('Clean', 'None') and does Forward with performance -120\n", + " perceives ('Clean', 'None') and does Forward with performance -121\n", + " perceives ('Clean', 'None') and does Forward with performance -122\n", + " perceives ('Clean', 'None') and does Forward with performance -123\n", + " perceives ('Clean', 'None') and does Forward with performance -124\n", + " perceives ('Clean', 'None') and does Forward with performance -125\n", + " perceives ('Clean', 'None') and does Forward with performance -126\n", + " perceives ('Clean', 'None') and does Forward with performance -127\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -128\n", + " perceives ('Clean', 'None') and does Forward with performance -129\n", + " perceives ('Clean', 'None') and does Forward with performance -130\n", + " perceives ('Clean', 'None') and does Forward with performance -131\n", + " perceives ('Clean', 'None') and does Forward with performance -132\n", + " perceives ('Clean', 'None') and does Forward with performance -133\n", + " perceives ('Clean', 'None') and does Forward with performance -134\n", + " perceives ('Clean', 'None') and does Forward with performance -135\n", + " perceives ('Clean', 'None') and does Forward with performance -136\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -137\n", + " perceives ('Clean', 'None') and does Forward with performance -138\n", + " perceives ('Clean', 'None') and does Forward with performance -139\n", + " perceives ('Clean', 'None') and does Forward with performance -140\n", + " perceives ('Clean', 'None') and does Forward with performance -141\n", + " perceives ('Clean', 'None') and does Forward with performance -142\n", + " perceives ('Clean', 'None') and does Forward with performance -143\n", + " perceives ('Clean', 'None') and does Forward with performance -144\n", + " perceives ('Clean', 'None') and does Forward with performance -145\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -146\n", + " perceives ('Clean', 'None') and does Forward with performance -147\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -148\n", + " perceives ('Clean', 'None') and does Forward with performance -149\n", + " perceives ('Clean', 'None') and does Forward with performance -150\n", + " perceives ('Clean', 'None') and does Forward with performance -151\n", + " perceives ('Clean', 'None') and does Forward with performance -152\n", + " perceives ('Clean', 'None') and does Forward with performance -153\n", + " perceives ('Clean', 'None') and does Forward with performance -154\n", + " perceives ('Clean', 'None') and does Forward with performance -155\n", + " perceives ('Clean', 'None') and does Forward with performance -156\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -157\n", + " perceives ('Clean', 'None') and does Forward with performance -158\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -159\n", + " perceives ('Clean', 'None') and does Forward with performance -160\n", + " perceives ('Clean', 'None') and does Forward with performance -161\n", + " perceives ('Clean', 'None') and does Forward with performance -162\n", + " perceives ('Clean', 'None') and does Forward with performance -163\n", + " perceives ('Clean', 'None') and does Forward with performance -164\n", + " perceives ('Clean', 'None') and does Forward with performance -165\n", + " perceives ('Clean', 'None') and does Forward with performance -166\n", + " perceives ('Clean', 'None') and does Forward with performance -167\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -168\n", + " perceives ('Clean', 'None') and does Forward with performance -169\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -170\n", + " perceives ('Clean', 'None') and does Forward with performance -171\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -172\n", + " perceives ('Clean', 'None') and does Forward with performance -173\n", + " perceives ('Clean', 'None') and does Forward with performance -174\n", + " perceives ('Clean', 'None') and does Forward with performance -175\n", + " perceives ('Clean', 'None') and does Forward with performance -176\n", + " perceives ('Clean', 'None') and does Forward with performance -177\n", + " perceives ('Clean', 'None') and does Forward with performance -178\n", + " perceives ('Clean', 'None') and does Forward with performance -179\n", + " perceives ('Clean', 'None') and does Forward with performance -180\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -181\n", + " perceives ('Clean', 'None') and does Forward with performance -182\n", + " perceives ('Clean', 'None') and does Forward with performance -183\n", + " perceives ('Clean', 'None') and does Forward with performance -184\n", + " perceives ('Clean', 'None') and does Forward with performance -185\n", + " perceives ('Clean', 'None') and does Forward with performance -186\n", + " perceives ('Clean', 'None') and does Forward with performance -187\n", + " perceives ('Clean', 'None') and does Forward with performance -188\n", + " perceives ('Clean', 'None') and does Forward with performance -189\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -190\n", + " perceives ('Clean', 'None') and does Forward with performance -191\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -192\n", + " perceives ('Clean', 'None') and does Forward with performance -193\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -194\n", + " perceives ('Clean', 'None') and does Forward with performance -195\n", + " perceives ('Clean', 'None') and does Forward with performance -196\n", + " perceives ('Clean', 'None') and does Forward with performance -197\n", + " perceives ('Clean', 'None') and does Forward with performance -198\n", + " perceives ('Clean', 'None') and does Forward with performance -199\n", + " perceives ('Clean', 'None') and does Forward with performance -200\n", + " perceives ('Clean', 'None') and does Forward with performance -201\n", + " perceives ('Clean', 'None') and does Forward with performance -202\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -203\n", + " perceives ('Clean', 'None') and does Forward with performance -204\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -205\n", + " perceives ('Clean', 'None') and does Forward with performance -206\n", + " perceives ('Clean', 'None') and does Forward with performance -207\n", + " perceives ('Clean', 'None') and does Forward with performance -208\n", + " perceives ('Clean', 'None') and does Forward with performance -209\n", + " perceives ('Clean', 'None') and does Forward with performance -210\n", + " perceives ('Clean', 'None') and does Forward with performance -211\n", + " perceives ('Clean', 'None') and does Forward with performance -212\n", + " perceives ('Clean', 'None') and does Forward with performance -213\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -214\n", + " perceives ('Clean', 'None') and does Forward with performance -215\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -216\n", + " perceives ('Clean', 'None') and does Forward with performance -217\n", + " perceives ('Clean', 'None') and does Forward with performance -218\n", + " perceives ('Clean', 'None') and does Forward with performance -219\n", + " perceives ('Clean', 'None') and does Forward with performance -220\n", + " perceives ('Clean', 'None') and does Forward with performance -221\n", + " perceives ('Clean', 'None') and does Forward with performance -222\n", + " perceives ('Clean', 'None') and does Forward with performance -223\n", + " perceives ('Clean', 'None') and does Forward with performance -224\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -225\n", + " perceives ('Clean', 'None') and does Forward with performance -226\n", + " perceives ('Clean', 'None') and does Forward with performance -227\n", + " perceives ('Clean', 'None') and does Forward with performance -228\n", + " perceives ('Clean', 'None') and does Forward with performance -229\n", + " perceives ('Clean', 'None') and does Forward with performance -230\n", + " perceives ('Clean', 'None') and does Forward with performance -231\n", + " perceives ('Clean', 'None') and does Forward with performance -232\n", + " perceives ('Clean', 'None') and does Forward with performance -233\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -234\n", + " perceives ('Clean', 'None') and does Forward with performance -235\n", + " perceives ('Clean', 'None') and does Forward with performance -236\n", + " perceives ('Clean', 'None') and does Forward with performance -237\n", + " perceives ('Clean', 'None') and does Forward with performance -238\n", + " perceives ('Clean', 'None') and does Forward with performance -239\n", + " perceives ('Clean', 'None') and does Forward with performance -240\n", + " perceives ('Clean', 'None') and does Forward with performance -241\n", + " perceives ('Clean', 'None') and does Forward with performance -242\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -243\n", + " perceives ('Clean', 'None') and does Forward with performance -244\n", + " perceives ('Clean', 'None') and does Forward with performance -245\n", + " perceives ('Clean', 'None') and does Forward with performance -246\n", + " perceives ('Clean', 'None') and does Forward with performance -247\n", + " perceives ('Clean', 'None') and does Forward with performance -248\n", + " perceives ('Clean', 'None') and does Forward with performance -249\n", + " perceives ('Clean', 'None') and does Forward with performance -250\n", + " perceives ('Clean', 'None') and does Forward with performance -251\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -252\n", + " perceives ('Clean', 'None') and does Forward with performance -253\n", + " perceives ('Clean', 'None') and does Forward with performance -254\n", + " perceives ('Clean', 'None') and does Forward with performance -255\n", + " perceives ('Clean', 'None') and does Forward with performance -256\n", + " perceives ('Clean', 'None') and does Forward with performance -257\n", + " perceives ('Clean', 'None') and does Forward with performance -258\n", + " perceives ('Clean', 'None') and does Forward with performance -259\n", + " perceives ('Clean', 'None') and does Forward with performance -260\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -261\n", + " perceives ('Clean', 'None') and does Forward with performance -262\n", + " perceives ('Clean', 'None') and does Forward with performance -263\n", + " perceives ('Clean', 'None') and does Forward with performance -264\n", + " perceives ('Clean', 'None') and does Forward with performance -265\n", + " perceives ('Clean', 'None') and does Forward with performance -266\n", + " perceives ('Clean', 'None') and does Forward with performance -267\n", + " perceives ('Clean', 'None') and does Forward with performance -268\n", + " perceives ('Clean', 'None') and does Forward with performance -269\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -270\n", + " perceives ('Clean', 'None') and does Forward with performance -271\n", + " perceives ('Clean', 'None') and does Forward with performance -272\n", + " perceives ('Clean', 'None') and does Forward with performance -273\n", + " perceives ('Clean', 'None') and does Forward with performance -274\n", + " perceives ('Clean', 'None') and does Forward with performance -275\n", + " perceives ('Clean', 'None') and does Forward with performance -276\n", + " perceives ('Clean', 'None') and does Forward with performance -277\n", + " perceives ('Clean', 'None') and does Forward with performance -278\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -279\n", + " perceives ('Clean', 'None') and does Forward with performance -280\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -281\n", + " perceives ('Clean', 'None') and does Forward with performance -282\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -283\n", + " perceives ('Clean', 'None') and does Forward with performance -284\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -285\n", + " perceives ('Clean', 'None') and does Forward with performance -286\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -287\n", + " perceives ('Clean', 'None') and does Forward with performance -288\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -289\n", + " perceives ('Clean', 'None') and does Forward with performance -290\n", + " perceives ('Clean', 'None') and does Forward with performance -291\n", + " perceives ('Clean', 'None') and does Forward with performance -292\n", + " perceives ('Clean', 'None') and does Forward with performance -293\n", + " perceives ('Clean', 'None') and does Forward with performance -294\n", + " perceives ('Clean', 'None') and does Forward with performance -295\n", + " perceives ('Clean', 'None') and does Forward with performance -296\n", + " perceives ('Clean', 'None') and does Forward with performance -297\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -298\n", + " perceives ('Clean', 'None') and does Forward with performance -299\n", + " perceives ('Clean', 'None') and does Forward with performance -300\n", + " perceives ('Clean', 'None') and does Forward with performance -301\n", + " perceives ('Clean', 'None') and does Forward with performance -302\n", + " perceives ('Clean', 'None') and does Forward with performance -303\n", + " perceives ('Clean', 'None') and does Forward with performance -304\n", + " perceives ('Clean', 'None') and does Forward with performance -305\n", + " perceives ('Clean', 'None') and does Forward with performance -306\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -307\n", + " perceives ('Clean', 'None') and does Forward with performance -308\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -309\n", + " perceives ('Clean', 'None') and does Forward with performance -310\n", + " perceives ('Clean', 'None') and does Forward with performance -311\n", + " perceives ('Clean', 'None') and does Forward with performance -312\n", + " perceives ('Clean', 'None') and does Forward with performance -313\n", + " perceives ('Clean', 'None') and does Forward with performance -314\n", + " perceives ('Clean', 'None') and does Forward with performance -315\n", + " perceives ('Clean', 'None') and does Forward with performance -316\n", + " perceives ('Clean', 'None') and does Forward with performance -317\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -318\n", + " perceives ('Clean', 'None') and does Forward with performance -319\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -320\n", + " perceives ('Clean', 'None') and does Forward with performance -321\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -322\n", + " perceives ('Clean', 'None') and does Forward with performance -323\n", + " perceives ('Clean', 'None') and does Forward with performance -324\n", + " perceives ('Clean', 'None') and does Forward with performance -325\n", + " perceives ('Clean', 'None') and does Forward with performance -326\n", + " perceives ('Clean', 'None') and does Forward with performance -327\n", + " perceives ('Clean', 'None') and does Forward with performance -328\n", + " perceives ('Clean', 'None') and does Forward with performance -329\n", + " perceives ('Clean', 'None') and does Forward with performance -330\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -331\n", + " perceives ('Clean', 'None') and does Forward with performance -332\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -333\n", + " perceives ('Clean', 'None') and does Forward with performance -334\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -335\n", + " perceives ('Clean', 'None') and does Forward with performance -336\n", + " perceives ('Clean', 'None') and does Forward with performance -337\n", + " perceives ('Clean', 'None') and does Forward with performance -338\n", + " perceives ('Clean', 'None') and does Forward with performance -339\n", + " perceives ('Clean', 'None') and does Forward with performance -340\n", + " perceives ('Clean', 'None') and does Forward with performance -341\n", + " perceives ('Clean', 'None') and does Forward with performance -342\n", + " perceives ('Clean', 'None') and does Forward with performance -343\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -344\n", + " perceives ('Clean', 'None') and does Forward with performance -345\n", + " perceives ('Clean', 'None') and does Forward with performance -346\n", + " perceives ('Clean', 'None') and does Forward with performance -347\n", + " perceives ('Clean', 'None') and does Forward with performance -348\n", + " perceives ('Clean', 'None') and does Forward with performance -349\n", + " perceives ('Clean', 'None') and does Forward with performance -350\n", + " perceives ('Clean', 'None') and does Forward with performance -351\n", + " perceives ('Clean', 'None') and does Forward with performance -352\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -353\n", + " perceives ('Clean', 'None') and does Forward with performance -354\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -355\n", + " perceives ('Clean', 'None') and does Forward with performance -356\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -357\n", + " perceives ('Clean', 'None') and does Forward with performance -358\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -359\n", + " perceives ('Clean', 'None') and does Forward with performance -360\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -361\n", + " perceives ('Clean', 'None') and does Forward with performance -362\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -363\n", + " perceives ('Clean', 'None') and does Forward with performance -364\n", + " perceives ('Clean', 'None') and does Forward with performance -365\n", + " perceives ('Clean', 'None') and does Forward with performance -366\n", + " perceives ('Clean', 'None') and does Forward with performance -367\n", + " perceives ('Clean', 'None') and does Forward with performance -368\n", + " perceives ('Clean', 'None') and does Forward with performance -369\n", + " perceives ('Clean', 'None') and does Forward with performance -370\n", + " perceives ('Clean', 'None') and does Forward with performance -371\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -372\n", + " perceives ('Clean', 'None') and does Forward with performance -373\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -374\n", + " perceives ('Clean', 'None') and does Forward with performance -375\n", + " perceives ('Clean', 'None') and does Forward with performance -376\n", + " perceives ('Clean', 'None') and does Forward with performance -377\n", + " perceives ('Clean', 'None') and does Forward with performance -378\n", + " perceives ('Clean', 'None') and does Forward with performance -379\n", + " perceives ('Clean', 'None') and does Forward with performance -380\n", + " perceives ('Clean', 'None') and does Forward with performance -381\n", + " perceives ('Clean', 'None') and does Forward with performance -382\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -383\n", + " perceives ('Clean', 'None') and does Forward with performance -384\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -385\n", + " perceives ('Clean', 'None') and does Forward with performance -386\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -387\n", + " perceives ('Clean', 'None') and does Forward with performance -388\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -389\n", + " perceives ('Clean', 'None') and does Forward with performance -390\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -391\n", + " perceives ('Clean', 'None') and does Forward with performance -392\n", + " perceives ('Clean', 'None') and does Forward with performance -393\n", + " perceives ('Clean', 'None') and does Forward with performance -394\n", + " perceives ('Clean', 'None') and does Forward with performance -395\n", + " perceives ('Clean', 'None') and does Forward with performance -396\n", + " perceives ('Clean', 'None') and does Forward with performance -397\n", + " perceives ('Clean', 'None') and does Forward with performance -398\n", + " perceives ('Clean', 'None') and does Forward with performance -399\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -400\n", + " perceives ('Clean', 'None') and does Forward with performance -401\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -402\n", + " perceives ('Clean', 'None') and does Forward with performance -403\n", + " perceives ('Clean', 'None') and does Forward with performance -404\n", + " perceives ('Clean', 'None') and does Forward with performance -405\n", + " perceives ('Clean', 'None') and does Forward with performance -406\n", + " perceives ('Clean', 'None') and does Forward with performance -407\n", + " perceives ('Clean', 'None') and does Forward with performance -408\n", + " perceives ('Clean', 'None') and does Forward with performance -409\n", + " perceives ('Clean', 'None') and does Forward with performance -410\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -411\n", + " perceives ('Clean', 'None') and does Forward with performance -412\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -413\n", + " perceives ('Clean', 'None') and does Forward with performance -414\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -415\n", + " perceives ('Clean', 'None') and does Forward with performance -416\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -417\n", + " perceives ('Clean', 'None') and does Forward with performance -418\n", + " perceives ('Clean', 'None') and does Forward with performance -419\n", + " perceives ('Clean', 'None') and does Forward with performance -420\n", + " perceives ('Clean', 'None') and does Forward with performance -421\n", + " perceives ('Clean', 'None') and does Forward with performance -422\n", + " perceives ('Clean', 'None') and does Forward with performance -423\n", + " perceives ('Clean', 'None') and does Forward with performance -424\n", + " perceives ('Clean', 'None') and does Forward with performance -425\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -426\n", + " perceives ('Clean', 'None') and does Forward with performance -427\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -428\n", + " perceives ('Clean', 'None') and does Forward with performance -429\n", + " perceives ('Clean', 'None') and does Forward with performance -430\n", + " perceives ('Clean', 'None') and does Forward with performance -431\n", + " perceives ('Clean', 'None') and does Forward with performance -432\n", + " perceives ('Clean', 'None') and does Forward with performance -433\n", + " perceives ('Clean', 'None') and does Forward with performance -434\n", + " perceives ('Clean', 'None') and does Forward with performance -435\n", + " perceives ('Clean', 'None') and does Forward with performance -436\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -437\n", + " perceives ('Clean', 'None') and does Forward with performance -438\n", + " perceives ('Clean', 'None') and does Forward with performance -439\n", + " perceives ('Clean', 'None') and does Forward with performance -440\n", + " perceives ('Clean', 'None') and does Forward with performance -441\n", + " perceives ('Clean', 'None') and does Forward with performance -442\n", + " perceives ('Clean', 'None') and does Forward with performance -443\n", + " perceives ('Clean', 'None') and does Forward with performance -444\n", + " perceives ('Clean', 'None') and does Forward with performance -445\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -446\n", + " perceives ('Clean', 'None') and does Forward with performance -447\n", + " perceives ('Clean', 'None') and does Forward with performance -448\n", + " perceives ('Clean', 'None') and does Forward with performance -449\n", + " perceives ('Clean', 'None') and does Forward with performance -450\n", + " perceives ('Clean', 'None') and does Forward with performance -451\n", + " perceives ('Clean', 'None') and does Forward with performance -452\n", + " perceives ('Clean', 'None') and does Forward with performance -453\n", + " perceives ('Clean', 'None') and does Forward with performance -454\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -455\n", + " perceives ('Clean', 'None') and does Forward with performance -456\n", + " perceives ('Clean', 'None') and does Forward with performance -457\n", + " perceives ('Clean', 'None') and does Forward with performance -458\n", + " perceives ('Clean', 'None') and does Forward with performance -459\n", + " perceives ('Clean', 'None') and does Forward with performance -460\n", + " perceives ('Clean', 'None') and does Forward with performance -461\n", + " perceives ('Clean', 'None') and does Forward with performance -462\n", + " perceives ('Clean', 'None') and does Forward with performance -463\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -464\n", + " perceives ('Clean', 'None') and does Forward with performance -465\n", + " perceives ('Clean', 'None') and does Forward with performance -466\n", + " perceives ('Clean', 'None') and does Forward with performance -467\n", + " perceives ('Clean', 'None') and does Forward with performance -468\n", + " perceives ('Clean', 'None') and does Forward with performance -469\n", + " perceives ('Clean', 'None') and does Forward with performance -470\n", + " perceives ('Clean', 'None') and does Forward with performance -471\n", + " perceives ('Clean', 'None') and does Forward with performance -472\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -473\n", + " perceives ('Clean', 'None') and does Forward with performance -474\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -475\n", + " perceives ('Clean', 'None') and does Forward with performance -476\n", + " perceives ('Clean', 'None') and does Forward with performance -477\n", + " perceives ('Clean', 'None') and does Forward with performance -478\n", + " perceives ('Clean', 'None') and does Forward with performance -479\n", + " perceives ('Clean', 'None') and does Forward with performance -480\n", + " perceives ('Clean', 'None') and does Forward with performance -481\n", + " perceives ('Clean', 'None') and does Forward with performance -482\n", + " perceives ('Clean', 'None') and does Forward with performance -483\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -484\n", + " perceives ('Clean', 'None') and does Forward with performance -485\n", + " perceives ('Clean', 'None') and does Forward with performance -486\n", + " perceives ('Clean', 'None') and does Forward with performance -487\n", + " perceives ('Clean', 'None') and does Forward with performance -488\n", + " perceives ('Clean', 'None') and does Forward with performance -489\n", + " perceives ('Clean', 'None') and does Forward with performance -490\n", + " perceives ('Clean', 'None') and does Forward with performance -491\n", + " perceives ('Clean', 'None') and does Forward with performance -492\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -493\n", + " perceives ('Clean', 'None') and does Forward with performance -494\n", + " perceives ('Clean', 'None') and does Forward with performance -495\n", + " perceives ('Clean', 'None') and does Forward with performance -496\n", + " perceives ('Clean', 'None') and does Forward with performance -497\n", + " perceives ('Clean', 'None') and does Forward with performance -498\n", + " perceives ('Clean', 'None') and does Forward with performance -499\n", + " perceives ('Clean', 'None') and does Forward with performance -500\n", + " perceives ('Clean', 'None') and does Forward with performance -501\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -502\n", + " perceives ('Clean', 'None') and does Forward with performance -503\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -504\n", + " perceives ('Clean', 'None') and does Forward with performance -505\n", + " perceives ('Clean', 'None') and does Forward with performance -506\n", + " perceives ('Clean', 'None') and does Forward with performance -507\n", + " perceives ('Clean', 'None') and does Forward with performance -508\n", + " perceives ('Clean', 'None') and does Forward with performance -509\n", + " perceives ('Clean', 'None') and does Forward with performance -510\n", + " perceives ('Clean', 'None') and does Forward with performance -511\n", + " perceives ('Clean', 'None') and does Forward with performance -512\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -513\n", + " perceives ('Clean', 'None') and does Forward with performance -514\n", + " perceives ('Clean', 'None') and does Forward with performance -515\n", + " perceives ('Clean', 'None') and does Forward with performance -516\n", + " perceives ('Clean', 'None') and does Forward with performance -517\n", + " perceives ('Clean', 'None') and does Forward with performance -518\n", + " perceives ('Clean', 'None') and does Forward with performance -519\n", + " perceives ('Clean', 'None') and does Forward with performance -520\n", + " perceives ('Clean', 'None') and does Forward with performance -521\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -522\n", + " perceives ('Clean', 'None') and does Forward with performance -523\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -524\n", + " perceives ('Clean', 'None') and does Forward with performance -525\n", + " perceives ('Clean', 'None') and does Forward with performance -526\n", + " perceives ('Clean', 'None') and does Forward with performance -527\n", + " perceives ('Clean', 'None') and does Forward with performance -528\n", + " perceives ('Clean', 'None') and does Forward with performance -529\n", + " perceives ('Clean', 'None') and does Forward with performance -530\n", + " perceives ('Clean', 'None') and does Forward with performance -531\n", + " perceives ('Clean', 'None') and does Forward with performance -532\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -533\n", + " perceives ('Clean', 'None') and does Forward with performance -534\n", + " perceives ('Clean', 'None') and does Forward with performance -535\n", + " perceives ('Clean', 'None') and does Forward with performance -536\n", + " perceives ('Clean', 'None') and does Forward with performance -537\n", + " perceives ('Clean', 'None') and does Forward with performance -538\n", + " perceives ('Clean', 'None') and does Forward with performance -539\n", + " perceives ('Clean', 'None') and does Forward with performance -540\n", + " perceives ('Clean', 'None') and does Forward with performance -541\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -542\n", + " perceives ('Clean', 'None') and does Forward with performance -543\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -544\n", + " perceives ('Clean', 'None') and does Forward with performance -545\n", + " perceives ('Clean', 'None') and does Forward with performance -546\n", + " perceives ('Clean', 'None') and does Forward with performance -547\n", + " perceives ('Clean', 'None') and does Forward with performance -548\n", + " perceives ('Clean', 'None') and does Forward with performance -549\n", + " perceives ('Clean', 'None') and does Forward with performance -550\n", + " perceives ('Clean', 'None') and does Forward with performance -551\n", + " perceives ('Clean', 'None') and does Forward with performance -552\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -553\n", + " perceives ('Clean', 'None') and does Forward with performance -554\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -555\n", + " perceives ('Clean', 'None') and does Forward with performance -556\n", + " perceives ('Clean', 'None') and does Forward with performance -557\n", + " perceives ('Clean', 'None') and does Forward with performance -558\n", + " perceives ('Clean', 'None') and does Forward with performance -559\n", + " perceives ('Clean', 'None') and does Forward with performance -560\n", + " perceives ('Clean', 'None') and does Forward with performance -561\n", + " perceives ('Clean', 'None') and does Forward with performance -562\n", + " perceives ('Clean', 'None') and does Forward with performance -563\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -564\n", + " perceives ('Clean', 'None') and does Forward with performance -565\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -566\n", + " perceives ('Clean', 'None') and does Forward with performance -567\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -568\n", + " perceives ('Clean', 'None') and does Forward with performance -569\n", + " perceives ('Clean', 'None') and does Forward with performance -570\n", + " perceives ('Clean', 'None') and does Forward with performance -571\n", + " perceives ('Clean', 'None') and does Forward with performance -572\n", + " perceives ('Clean', 'None') and does Forward with performance -573\n", + " perceives ('Clean', 'None') and does Forward with performance -574\n", + " perceives ('Clean', 'None') and does Forward with performance -575\n", + " perceives ('Clean', 'None') and does Forward with performance -576\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -577\n", + " perceives ('Clean', 'None') and does Forward with performance -578\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -579\n", + " perceives ('Clean', 'None') and does Forward with performance -580\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -581\n", + " perceives ('Clean', 'None') and does Forward with performance -582\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -583\n", + " perceives ('Clean', 'None') and does Forward with performance -584\n", + " perceives ('Clean', 'None') and does Forward with performance -585\n", + " perceives ('Clean', 'None') and does Forward with performance -586\n", + " perceives ('Clean', 'None') and does Forward with performance -587\n", + " perceives ('Clean', 'None') and does Forward with performance -588\n", + " perceives ('Clean', 'None') and does Forward with performance -589\n", + " perceives ('Clean', 'None') and does Forward with performance -590\n", + " perceives ('Clean', 'None') and does Forward with performance -591\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -592\n", + " perceives ('Clean', 'None') and does Forward with performance -593\n", + " perceives ('Clean', 'None') and does Forward with performance -594\n", + " perceives ('Clean', 'None') and does Forward with performance -595\n", + " perceives ('Clean', 'None') and does Forward with performance -596\n", + " perceives ('Clean', 'None') and does Forward with performance -597\n", + " perceives ('Clean', 'None') and does Forward with performance -598\n", + " perceives ('Clean', 'None') and does Forward with performance -599\n", + " perceives ('Clean', 'None') and does Forward with performance -600\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -601\n", + " perceives ('Clean', 'None') and does Forward with performance -602\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -603\n", + " perceives ('Clean', 'None') and does Forward with performance -604\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -605\n", + " perceives ('Clean', 'None') and does Forward with performance -606\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -607\n", + " perceives ('Clean', 'None') and does Forward with performance -608\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -609\n", + " perceives ('Clean', 'None') and does Forward with performance -610\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -611\n", + " perceives ('Clean', 'None') and does Forward with performance -612\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -613\n", + " perceives ('Clean', 'None') and does Forward with performance -614\n", + " perceives ('Clean', 'None') and does Forward with performance -615\n", + " perceives ('Clean', 'None') and does Forward with performance -616\n", + " perceives ('Clean', 'None') and does Forward with performance -617\n", + " perceives ('Clean', 'None') and does Forward with performance -618\n", + " perceives ('Clean', 'None') and does Forward with performance -619\n", + " perceives ('Clean', 'None') and does Forward with performance -620\n", + " perceives ('Clean', 'None') and does Forward with performance -621\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -622\n", + " perceives ('Clean', 'None') and does Forward with performance -623\n", + " perceives ('Clean', 'None') and does Forward with performance -624\n", + " perceives ('Clean', 'None') and does Forward with performance -625\n", + " perceives ('Clean', 'None') and does Forward with performance -626\n", + " perceives ('Clean', 'None') and does Forward with performance -627\n", + " perceives ('Clean', 'None') and does Forward with performance -628\n", + " perceives ('Clean', 'None') and does Forward with performance -629\n", + " perceives ('Clean', 'None') and does Forward with performance -630\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -631\n", + " perceives ('Clean', 'None') and does Forward with performance -632\n", + " perceives ('Clean', 'None') and does Forward with performance -633\n", + " perceives ('Clean', 'None') and does Forward with performance -634\n", + " perceives ('Clean', 'None') and does Forward with performance -635\n", + " perceives ('Clean', 'None') and does Forward with performance -636\n", + " perceives ('Clean', 'None') and does Forward with performance -637\n", + " perceives ('Clean', 'None') and does Forward with performance -638\n", + " perceives ('Clean', 'None') and does Forward with performance -639\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -640\n", + " perceives ('Clean', 'None') and does Forward with performance -641\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -642\n", + " perceives ('Clean', 'None') and does Forward with performance -643\n", + " perceives ('Clean', 'None') and does Forward with performance -644\n", + " perceives ('Clean', 'None') and does Forward with performance -645\n", + " perceives ('Clean', 'None') and does Forward with performance -646\n", + " perceives ('Clean', 'None') and does Forward with performance -647\n", + " perceives ('Clean', 'None') and does Forward with performance -648\n", + " perceives ('Clean', 'None') and does Forward with performance -649\n", + " perceives ('Clean', 'None') and does Forward with performance -650\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -651\n", + " perceives ('Clean', 'None') and does Forward with performance -652\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -653\n", + " perceives ('Clean', 'None') and does Forward with performance -654\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -655\n", + " perceives ('Clean', 'None') and does Forward with performance -656\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -657\n", + " perceives ('Clean', 'None') and does Forward with performance -658\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -659\n", + " perceives ('Clean', 'None') and does Forward with performance -660\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -661\n", + " perceives ('Clean', 'None') and does Forward with performance -662\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -663\n", + " perceives ('Clean', 'None') and does Forward with performance -664\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -665\n", + " perceives ('Clean', 'None') and does Forward with performance -666\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -667\n", + " perceives ('Clean', 'None') and does Forward with performance -668\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -669\n", + " perceives ('Clean', 'None') and does Forward with performance -670\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -671\n", + " perceives ('Clean', 'None') and does Forward with performance -672\n", + " perceives ('Clean', 'None') and does Forward with performance -673\n", + " perceives ('Clean', 'None') and does Forward with performance -674\n", + " perceives ('Clean', 'None') and does Forward with performance -675\n", + " perceives ('Clean', 'None') and does Forward with performance -676\n", + " perceives ('Clean', 'None') and does Forward with performance -677\n", + " perceives ('Clean', 'None') and does Forward with performance -678\n", + " perceives ('Clean', 'None') and does Forward with performance -679\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -680\n", + " perceives ('Clean', 'None') and does Forward with performance -681\n", + " perceives ('Clean', 'None') and does Forward with performance -682\n", + " perceives ('Clean', 'None') and does Forward with performance -683\n", + " perceives ('Clean', 'None') and does Forward with performance -684\n", + " perceives ('Clean', 'None') and does Forward with performance -685\n", + " perceives ('Clean', 'None') and does Forward with performance -686\n", + " perceives ('Clean', 'None') and does Forward with performance -687\n", + " perceives ('Clean', 'None') and does Forward with performance -688\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -689\n", + " perceives ('Clean', 'None') and does Forward with performance -690\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -691\n", + " perceives ('Clean', 'None') and does Forward with performance -692\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -693\n", + " perceives ('Clean', 'None') and does Forward with performance -694\n", + " perceives ('Clean', 'None') and does Forward with performance -695\n", + " perceives ('Clean', 'None') and does Forward with performance -696\n", + " perceives ('Clean', 'None') and does Forward with performance -697\n", + " perceives ('Clean', 'None') and does Forward with performance -698\n", + " perceives ('Clean', 'None') and does Forward with performance -699\n", + " perceives ('Clean', 'None') and does Forward with performance -700\n", + " perceives ('Clean', 'None') and does Forward with performance -701\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -702\n", + " perceives ('Clean', 'None') and does Forward with performance -703\n", + " perceives ('Clean', 'None') and does Forward with performance -704\n", + " perceives ('Clean', 'None') and does Forward with performance -705\n", + " perceives ('Clean', 'None') and does Forward with performance -706\n", + " perceives ('Clean', 'None') and does Forward with performance -707\n", + " perceives ('Clean', 'None') and does Forward with performance -708\n", + " perceives ('Clean', 'None') and does Forward with performance -709\n", + " perceives ('Clean', 'None') and does Forward with performance -710\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -711\n", + " perceives ('Clean', 'None') and does Forward with performance -712\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -713\n", + " perceives ('Clean', 'None') and does Forward with performance -714\n", + " perceives ('Clean', 'None') and does Forward with performance -715\n", + " perceives ('Clean', 'None') and does Forward with performance -716\n", + " perceives ('Clean', 'None') and does Forward with performance -717\n", + " perceives ('Clean', 'None') and does Forward with performance -718\n", + " perceives ('Clean', 'None') and does Forward with performance -719\n", + " perceives ('Clean', 'None') and does Forward with performance -720\n", + " perceives ('Clean', 'None') and does Forward with performance -721\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -722\n", + " perceives ('Clean', 'None') and does Forward with performance -723\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -724\n", + " perceives ('Clean', 'None') and does Forward with performance -725\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -726\n", + " perceives ('Clean', 'None') and does Forward with performance -727\n", + " perceives ('Clean', 'None') and does Forward with performance -728\n", + " perceives ('Clean', 'None') and does Forward with performance -729\n", + " perceives ('Clean', 'None') and does Forward with performance -730\n", + " perceives ('Clean', 'None') and does Forward with performance -731\n", + " perceives ('Clean', 'None') and does Forward with performance -732\n", + " perceives ('Clean', 'None') and does Forward with performance -733\n", + " perceives ('Clean', 'None') and does Forward with performance -734\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -735\n", + " perceives ('Clean', 'None') and does Forward with performance -736\n", + " perceives ('Clean', 'None') and does Forward with performance -737\n", + " perceives ('Clean', 'None') and does Forward with performance -738\n", + " perceives ('Clean', 'None') and does Forward with performance -739\n", + " perceives ('Clean', 'None') and does Forward with performance -740\n", + " perceives ('Clean', 'None') and does Forward with performance -741\n", + " perceives ('Clean', 'None') and does Forward with performance -742\n", + " perceives ('Clean', 'None') and does Forward with performance -743\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -744\n", + " perceives ('Clean', 'None') and does Forward with performance -745\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -746\n", + " perceives ('Clean', 'None') and does Forward with performance -747\n", + " perceives ('Clean', 'None') and does Forward with performance -748\n", + " perceives ('Clean', 'None') and does Forward with performance -749\n", + " perceives ('Clean', 'None') and does Forward with performance -750\n", + " perceives ('Clean', 'None') and does Forward with performance -751\n", + " perceives ('Clean', 'None') and does Forward with performance -752\n", + " perceives ('Clean', 'None') and does Forward with performance -753\n", + " perceives ('Clean', 'None') and does Forward with performance -754\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -755\n", + " perceives ('Clean', 'None') and does Forward with performance -756\n", + " perceives ('Clean', 'None') and does Forward with performance -757\n", + " perceives ('Clean', 'None') and does Forward with performance -758\n", + " perceives ('Clean', 'None') and does Forward with performance -759\n", + " perceives ('Clean', 'None') and does Forward with performance -760\n", + " perceives ('Clean', 'None') and does Forward with performance -761\n", + " perceives ('Clean', 'None') and does Forward with performance -762\n", + " perceives ('Clean', 'None') and does Forward with performance -763\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -764\n", + " perceives ('Clean', 'None') and does Forward with performance -765\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -766\n", + " perceives ('Clean', 'None') and does Forward with performance -767\n", + " perceives ('Clean', 'None') and does Forward with performance -768\n", + " perceives ('Clean', 'None') and does Forward with performance -769\n", + " perceives ('Clean', 'None') and does Forward with performance -770\n", + " perceives ('Clean', 'None') and does Forward with performance -771\n", + " perceives ('Clean', 'None') and does Forward with performance -772\n", + " perceives ('Clean', 'None') and does Forward with performance -773\n", + " perceives ('Clean', 'None') and does Forward with performance -774\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -775\n", + " perceives ('Clean', 'None') and does Forward with performance -776\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -777\n", + " perceives ('Clean', 'None') and does Forward with performance -778\n", + " perceives ('Clean', 'None') and does Forward with performance -779\n", + " perceives ('Clean', 'None') and does Forward with performance -780\n", + " perceives ('Clean', 'None') and does Forward with performance -781\n", + " perceives ('Clean', 'None') and does Forward with performance -782\n", + " perceives ('Clean', 'None') and does Forward with performance -783\n", + " perceives ('Clean', 'None') and does Forward with performance -784\n", + " perceives ('Clean', 'None') and does Forward with performance -785\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -786\n", + " perceives ('Clean', 'None') and does Forward with performance -787\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -788\n", + " perceives ('Clean', 'None') and does Forward with performance -789\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -790\n", + " perceives ('Clean', 'None') and does Forward with performance -791\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -792\n", + " perceives ('Clean', 'None') and does Forward with performance -793\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -794\n", + " perceives ('Clean', 'None') and does Forward with performance -795\n", + " perceives ('Clean', 'None') and does Forward with performance -796\n", + " perceives ('Clean', 'None') and does Forward with performance -797\n", + " perceives ('Clean', 'None') and does Forward with performance -798\n", + " perceives ('Clean', 'None') and does Forward with performance -799\n", + " perceives ('Clean', 'None') and does Forward with performance -800\n", + " perceives ('Clean', 'None') and does Forward with performance -801\n", + " perceives ('Clean', 'None') and does Forward with performance -802\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -803\n", + " perceives ('Clean', 'None') and does Forward with performance -804\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -805\n", + " perceives ('Clean', 'None') and does Forward with performance -806\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -807\n", + " perceives ('Clean', 'None') and does Forward with performance -808\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -809\n", + " perceives ('Clean', 'None') and does Forward with performance -810\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -811\n", + " perceives ('Clean', 'None') and does Forward with performance -812\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -813\n", + " perceives ('Clean', 'None') and does Forward with performance -814\n", + " perceives ('Clean', 'None') and does Forward with performance -815\n", + " perceives ('Clean', 'None') and does Forward with performance -816\n", + " perceives ('Clean', 'None') and does Forward with performance -817\n", + " perceives ('Clean', 'None') and does Forward with performance -818\n", + " perceives ('Clean', 'None') and does Forward with performance -819\n", + " perceives ('Clean', 'None') and does Forward with performance -820\n", + " perceives ('Clean', 'None') and does Forward with performance -821\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -822\n", + " perceives ('Clean', 'None') and does Forward with performance -823\n", + " perceives ('Clean', 'None') and does Forward with performance -824\n", + " perceives ('Clean', 'None') and does Forward with performance -825\n", + " perceives ('Clean', 'None') and does Forward with performance -826\n", + " perceives ('Clean', 'None') and does Forward with performance -827\n", + " perceives ('Clean', 'None') and does Forward with performance -828\n", + " perceives ('Clean', 'None') and does Forward with performance -829\n", + " perceives ('Clean', 'None') and does Forward with performance -830\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -831\n", + " perceives ('Clean', 'None') and does Forward with performance -832\n", + " perceives ('Clean', 'None') and does Forward with performance -833\n", + " perceives ('Clean', 'None') and does Forward with performance -834\n", + " perceives ('Clean', 'None') and does Forward with performance -835\n", + " perceives ('Clean', 'None') and does Forward with performance -836\n", + " perceives ('Clean', 'None') and does Forward with performance -837\n", + " perceives ('Clean', 'None') and does Forward with performance -838\n", + " perceives ('Clean', 'None') and does Forward with performance -839\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -840\n", + " perceives ('Clean', 'None') and does Forward with performance -841\n", + " perceives ('Clean', 'None') and does Forward with performance -842\n", + " perceives ('Clean', 'None') and does Forward with performance -843\n", + " perceives ('Clean', 'None') and does Forward with performance -844\n", + " perceives ('Clean', 'None') and does Forward with performance -845\n", + " perceives ('Clean', 'None') and does Forward with performance -846\n", + " perceives ('Clean', 'None') and does Forward with performance -847\n", + " perceives ('Clean', 'None') and does Forward with performance -848\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -849\n", + " perceives ('Clean', 'None') and does Forward with performance -850\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -851\n", + " perceives ('Clean', 'None') and does Forward with performance -852\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -853\n", + " perceives ('Clean', 'None') and does Forward with performance -854\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -855\n", + " perceives ('Clean', 'None') and does Forward with performance -856\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -857\n", + " perceives ('Clean', 'None') and does Forward with performance -858\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -859\n", + " perceives ('Clean', 'None') and does Forward with performance -860\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -861\n", + " perceives ('Clean', 'None') and does Forward with performance -862\n", + " perceives ('Clean', 'None') and does Forward with performance -863\n", + " perceives ('Clean', 'None') and does Forward with performance -864\n", + " perceives ('Clean', 'None') and does Forward with performance -865\n", + " perceives ('Clean', 'None') and does Forward with performance -866\n", + " perceives ('Clean', 'None') and does Forward with performance -867\n", + " perceives ('Clean', 'None') and does Forward with performance -868\n", + " perceives ('Clean', 'None') and does Forward with performance -869\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -870\n", + " perceives ('Clean', 'None') and does Forward with performance -871\n", + " perceives ('Clean', 'None') and does Forward with performance -872\n", + " perceives ('Clean', 'None') and does Forward with performance -873\n", + " perceives ('Clean', 'None') and does Forward with performance -874\n", + " perceives ('Clean', 'None') and does Forward with performance -875\n", + " perceives ('Clean', 'None') and does Forward with performance -876\n", + " perceives ('Clean', 'None') and does Forward with performance -877\n", + " perceives ('Clean', 'None') and does Forward with performance -878\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -879\n", + " perceives ('Clean', 'None') and does Forward with performance -880\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -881\n", + " perceives ('Clean', 'None') and does Forward with performance -882\n", + " perceives ('Clean', 'None') and does Forward with performance -883\n", + " perceives ('Clean', 'None') and does Forward with performance -884\n", + " perceives ('Clean', 'None') and does Forward with performance -885\n", + " perceives ('Clean', 'None') and does Forward with performance -886\n", + " perceives ('Clean', 'None') and does Forward with performance -887\n", + " perceives ('Clean', 'None') and does Forward with performance -888\n", + " perceives ('Clean', 'None') and does Forward with performance -889\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -890\n", + " perceives ('Clean', 'None') and does Forward with performance -891\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -892\n", + " perceives ('Clean', 'None') and does Forward with performance -893\n", + " perceives ('Clean', 'None') and does Forward with performance -894\n", + " perceives ('Clean', 'None') and does Forward with performance -895\n", + " perceives ('Clean', 'None') and does Forward with performance -896\n", + " perceives ('Clean', 'None') and does Forward with performance -897\n", + " perceives ('Clean', 'None') and does Forward with performance -898\n", + " perceives ('Clean', 'None') and does Forward with performance -899\n", + " perceives ('Clean', 'None') and does Forward with performance -900\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -901\n", + " perceives ('Clean', 'None') and does Forward with performance -902\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -903\n", + " perceives ('Clean', 'None') and does Forward with performance -904\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -905\n", + " perceives ('Clean', 'None') and does Forward with performance -906\n", + " perceives ('Clean', 'None') and does Forward with performance -907\n", + " perceives ('Clean', 'None') and does Forward with performance -908\n", + " perceives ('Clean', 'None') and does Forward with performance -909\n", + " perceives ('Clean', 'None') and does Forward with performance -910\n", + " perceives ('Clean', 'None') and does Forward with performance -911\n", + " perceives ('Clean', 'None') and does Forward with performance -912\n", + " perceives ('Clean', 'None') and does Forward with performance -913\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -914\n", + " perceives ('Clean', 'None') and does Forward with performance -915\n", + " perceives ('Clean', 'None') and does Forward with performance -916\n", + " perceives ('Clean', 'None') and does Forward with performance -917\n", + " perceives ('Clean', 'None') and does Forward with performance -918\n", + " perceives ('Clean', 'None') and does Forward with performance -919\n", + " perceives ('Clean', 'None') and does Forward with performance -920\n", + " perceives ('Clean', 'None') and does Forward with performance -921\n", + " perceives ('Clean', 'None') and does Forward with performance -922\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -923\n", + " perceives ('Clean', 'None') and does Forward with performance -924\n", + " perceives ('Clean', 'None') and does Forward with performance -925\n", + " perceives ('Clean', 'None') and does Forward with performance -926\n", + " perceives ('Clean', 'None') and does Forward with performance -927\n", + " perceives ('Clean', 'None') and does Forward with performance -928\n", + " perceives ('Clean', 'None') and does Forward with performance -929\n", + " perceives ('Clean', 'None') and does Forward with performance -930\n", + " perceives ('Clean', 'None') and does Forward with performance -931\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -932\n", + " perceives ('Clean', 'None') and does Forward with performance -933\n", + " perceives ('Clean', 'None') and does Forward with performance -934\n", + " perceives ('Clean', 'None') and does Forward with performance -935\n", + " perceives ('Clean', 'None') and does Forward with performance -936\n", + " perceives ('Clean', 'None') and does Forward with performance -937\n", + " perceives ('Clean', 'None') and does Forward with performance -938\n", + " perceives ('Clean', 'None') and does Forward with performance -939\n", + " perceives ('Clean', 'None') and does Forward with performance -940\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -941\n", + " perceives ('Clean', 'None') and does Forward with performance -942\n", + " perceives ('Clean', 'None') and does Forward with performance -943\n", + " perceives ('Clean', 'None') and does Forward with performance -944\n", + " perceives ('Clean', 'None') and does Forward with performance -945\n", + " perceives ('Clean', 'None') and does Forward with performance -946\n", + " perceives ('Clean', 'None') and does Forward with performance -947\n", + " perceives ('Clean', 'None') and does Forward with performance -948\n", + " perceives ('Clean', 'None') and does Forward with performance -949\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -950\n", + " perceives ('Clean', 'None') and does Forward with performance -951\n", + " perceives ('Clean', 'None') and does Forward with performance -952\n", + " perceives ('Clean', 'None') and does Forward with performance -953\n", + " perceives ('Clean', 'None') and does Forward with performance -954\n", + " perceives ('Clean', 'None') and does Forward with performance -955\n", + " perceives ('Clean', 'None') and does Forward with performance -956\n", + " perceives ('Clean', 'None') and does Forward with performance -957\n", + " perceives ('Clean', 'None') and does Forward with performance -958\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -959\n", + " perceives ('Clean', 'None') and does Forward with performance -960\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -961\n", + " perceives ('Clean', 'None') and does Forward with performance -962\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -963\n", + " perceives ('Clean', 'None') and does Forward with performance -964\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -965\n", + " perceives ('Clean', 'None') and does Forward with performance -966\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -967\n", + " perceives ('Clean', 'None') and does Forward with performance -968\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -969\n", + " perceives ('Clean', 'None') and does Forward with performance -970\n", + " perceives ('Clean', 'None') and does Forward with performance -971\n", + " perceives ('Clean', 'None') and does Forward with performance -972\n", + " perceives ('Clean', 'None') and does Forward with performance -973\n", + " perceives ('Clean', 'None') and does Forward with performance -974\n", + " perceives ('Clean', 'None') and does Forward with performance -975\n", + " perceives ('Clean', 'None') and does Forward with performance -976\n", + " perceives ('Clean', 'None') and does Forward with performance -977\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -978\n", + " perceives ('Clean', 'None') and does Forward with performance -979\n", + " perceives ('Clean', 'None') and does Forward with performance -980\n", + " perceives ('Clean', 'None') and does Forward with performance -981\n", + " perceives ('Clean', 'None') and does Forward with performance -982\n", + " perceives ('Clean', 'None') and does Forward with performance -983\n", + " perceives ('Clean', 'None') and does Forward with performance -984\n", + " perceives ('Clean', 'None') and does Forward with performance -985\n", + " perceives ('Clean', 'None') and does Forward with performance -986\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -987\n", + " perceives ('Clean', 'None') and does Forward with performance -988\n", + " perceives ('Clean', 'None') and does Forward with performance -989\n", + " perceives ('Clean', 'None') and does Forward with performance -990\n", + " perceives ('Clean', 'None') and does Forward with performance -991\n", + " perceives ('Clean', 'None') and does Forward with performance -992\n", + " perceives ('Clean', 'None') and does Forward with performance -993\n", + " perceives ('Clean', 'None') and does Forward with performance -994\n", + " perceives ('Clean', 'None') and does Forward with performance -995\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -996\n", + " perceives ('Clean', 'None') and does Forward with performance -997\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -998\n", + " perceives ('Clean', 'None') and does Forward with performance -999\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1000\n", + " perceives ('Clean', 'None') and does Forward with performance -1001\n", + " perceives ('Clean', 'None') and does Forward with performance -1002\n", + " perceives ('Clean', 'None') and does Forward with performance -1003\n", + " perceives ('Clean', 'None') and does Forward with performance -1004\n", + " perceives ('Clean', 'None') and does Forward with performance -1005\n", + " perceives ('Clean', 'None') and does Forward with performance -1006\n", + " perceives ('Clean', 'None') and does Forward with performance -1007\n", + " perceives ('Clean', 'None') and does Forward with performance -1008\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1009\n", + " perceives ('Clean', 'None') and does Forward with performance -1010\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1011\n", + " perceives ('Clean', 'None') and does Forward with performance -1012\n", + " perceives ('Clean', 'None') and does Forward with performance -1013\n", + " perceives ('Clean', 'None') and does Forward with performance -1014\n", + " perceives ('Clean', 'None') and does Forward with performance -1015\n", + " perceives ('Clean', 'None') and does Forward with performance -1016\n", + " perceives ('Clean', 'None') and does Forward with performance -1017\n", + " perceives ('Clean', 'None') and does Forward with performance -1018\n", + " perceives ('Clean', 'None') and does Forward with performance -1019\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1020\n", + " perceives ('Clean', 'None') and does Forward with performance -1021\n", + " perceives ('Clean', 'None') and does Forward with performance -1022\n", + " perceives ('Clean', 'None') and does Forward with performance -1023\n", + " perceives ('Clean', 'None') and does Forward with performance -1024\n", + " perceives ('Clean', 'None') and does Forward with performance -1025\n", + " perceives ('Clean', 'None') and does Forward with performance -1026\n", + " perceives ('Clean', 'None') and does Forward with performance -1027\n", + " perceives ('Clean', 'None') and does Forward with performance -1028\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1029\n", + " perceives ('Clean', 'None') and does Forward with performance -1030\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1031\n", + " perceives ('Clean', 'None') and does Forward with performance -1032\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1033\n", + " perceives ('Clean', 'None') and does Forward with performance -1034\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1035\n", + " perceives ('Clean', 'None') and does Forward with performance -1036\n", + " perceives ('Clean', 'None') and does Forward with performance -1037\n", + " perceives ('Clean', 'None') and does Forward with performance -1038\n", + " perceives ('Clean', 'None') and does Forward with performance -1039\n", + " perceives ('Clean', 'None') and does Forward with performance -1040\n", + " perceives ('Clean', 'None') and does Forward with performance -1041\n", + " perceives ('Clean', 'None') and does Forward with performance -1042\n", + " perceives ('Clean', 'None') and does Forward with performance -1043\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1044\n", + " perceives ('Clean', 'None') and does Forward with performance -1045\n", + " perceives ('Clean', 'None') and does Forward with performance -1046\n", + " perceives ('Clean', 'None') and does Forward with performance -1047\n", + " perceives ('Clean', 'None') and does Forward with performance -1048\n", + " perceives ('Clean', 'None') and does Forward with performance -1049\n", + " perceives ('Clean', 'None') and does Forward with performance -1050\n", + " perceives ('Clean', 'None') and does Forward with performance -1051\n", + " perceives ('Clean', 'None') and does Forward with performance -1052\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1053\n", + " perceives ('Clean', 'None') and does Forward with performance -1054\n", + " perceives ('Clean', 'None') and does Forward with performance -1055\n", + " perceives ('Clean', 'None') and does Forward with performance -1056\n", + " perceives ('Clean', 'None') and does Forward with performance -1057\n", + " perceives ('Clean', 'None') and does Forward with performance -1058\n", + " perceives ('Clean', 'None') and does Forward with performance -1059\n", + " perceives ('Clean', 'None') and does Forward with performance -1060\n", + " perceives ('Clean', 'None') and does Forward with performance -1061\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1062\n", + " perceives ('Clean', 'None') and does Forward with performance -1063\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1064\n", + " perceives ('Clean', 'None') and does Forward with performance -1065\n", + " perceives ('Clean', 'None') and does Forward with performance -1066\n", + " perceives ('Clean', 'None') and does Forward with performance -1067\n", + " perceives ('Clean', 'None') and does Forward with performance -1068\n", + " perceives ('Clean', 'None') and does Forward with performance -1069\n", + " perceives ('Clean', 'None') and does Forward with performance -1070\n", + " perceives ('Clean', 'None') and does Forward with performance -1071\n", + " perceives ('Clean', 'None') and does Forward with performance -1072\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1073\n", + " perceives ('Clean', 'None') and does Forward with performance -1074\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1075\n", + " perceives ('Clean', 'None') and does Forward with performance -1076\n", + " perceives ('Clean', 'None') and does Forward with performance -1077\n", + " perceives ('Clean', 'None') and does Forward with performance -1078\n", + " perceives ('Clean', 'None') and does Forward with performance -1079\n", + " perceives ('Clean', 'None') and does Forward with performance -1080\n", + " perceives ('Clean', 'None') and does Forward with performance -1081\n", + " perceives ('Clean', 'None') and does Forward with performance -1082\n", + " perceives ('Clean', 'None') and does Forward with performance -1083\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1084\n", + " perceives ('Clean', 'None') and does Forward with performance -1085\n", + " perceives ('Clean', 'None') and does Forward with performance -1086\n", + " perceives ('Clean', 'None') and does Forward with performance -1087\n", + " perceives ('Clean', 'None') and does Forward with performance -1088\n", + " perceives ('Clean', 'None') and does Forward with performance -1089\n", + " perceives ('Clean', 'None') and does Forward with performance -1090\n", + " perceives ('Clean', 'None') and does Forward with performance -1091\n", + " perceives ('Clean', 'None') and does Forward with performance -1092\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1093\n", + " perceives ('Clean', 'None') and does Forward with performance -1094\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1095\n", + " perceives ('Clean', 'None') and does Forward with performance -1096\n", + " perceives ('Clean', 'None') and does Forward with performance -1097\n", + " perceives ('Clean', 'None') and does Forward with performance -1098\n", + " perceives ('Clean', 'None') and does Forward with performance -1099\n", + " perceives ('Clean', 'None') and does Forward with performance -1100\n", + " perceives ('Clean', 'None') and does Forward with performance -1101\n", + " perceives ('Clean', 'None') and does Forward with performance -1102\n", + " perceives ('Clean', 'None') and does Forward with performance -1103\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1104\n", + " perceives ('Clean', 'None') and does Forward with performance -1105\n", + " perceives ('Clean', 'None') and does Forward with performance -1106\n", + " perceives ('Clean', 'None') and does Forward with performance -1107\n", + " perceives ('Clean', 'None') and does Forward with performance -1108\n", + " perceives ('Clean', 'None') and does Forward with performance -1109\n", + " perceives ('Clean', 'None') and does Forward with performance -1110\n", + " perceives ('Clean', 'None') and does Forward with performance -1111\n", + " perceives ('Clean', 'None') and does Forward with performance -1112\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1113\n", + " perceives ('Clean', 'None') and does Forward with performance -1114\n", + " perceives ('Clean', 'None') and does Forward with performance -1115\n", + " perceives ('Clean', 'None') and does Forward with performance -1116\n", + " perceives ('Clean', 'None') and does Forward with performance -1117\n", + " perceives ('Clean', 'None') and does Forward with performance -1118\n", + " perceives ('Clean', 'None') and does Forward with performance -1119\n", + " perceives ('Clean', 'None') and does Forward with performance -1120\n", + " perceives ('Clean', 'None') and does Forward with performance -1121\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1122\n", + " perceives ('Clean', 'None') and does Forward with performance -1123\n", + " perceives ('Clean', 'None') and does Forward with performance -1124\n", + " perceives ('Clean', 'None') and does Forward with performance -1125\n", + " perceives ('Clean', 'None') and does Forward with performance -1126\n", + " perceives ('Clean', 'None') and does Forward with performance -1127\n", + " perceives ('Clean', 'None') and does Forward with performance -1128\n", + " perceives ('Clean', 'None') and does Forward with performance -1129\n", + " perceives ('Clean', 'None') and does Forward with performance -1130\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1131\n", + " perceives ('Clean', 'None') and does Forward with performance -1132\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1133\n", + " perceives ('Clean', 'None') and does Forward with performance -1134\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1135\n", + " perceives ('Clean', 'None') and does Forward with performance -1136\n", + " perceives ('Clean', 'None') and does Forward with performance -1137\n", + " perceives ('Clean', 'None') and does Forward with performance -1138\n", + " perceives ('Clean', 'None') and does Forward with performance -1139\n", + " perceives ('Clean', 'None') and does Forward with performance -1140\n", + " perceives ('Clean', 'None') and does Forward with performance -1141\n", + " perceives ('Clean', 'None') and does Forward with performance -1142\n", + " perceives ('Clean', 'None') and does Forward with performance -1143\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1144\n", + " perceives ('Clean', 'None') and does Forward with performance -1145\n", + " perceives ('Clean', 'None') and does Forward with performance -1146\n", + " perceives ('Clean', 'None') and does Forward with performance -1147\n", + " perceives ('Clean', 'None') and does Forward with performance -1148\n", + " perceives ('Clean', 'None') and does Forward with performance -1149\n", + " perceives ('Clean', 'None') and does Forward with performance -1150\n", + " perceives ('Clean', 'None') and does Forward with performance -1151\n", + " perceives ('Clean', 'None') and does Forward with performance -1152\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1153\n", + " perceives ('Clean', 'None') and does Forward with performance -1154\n", + " perceives ('Clean', 'None') and does Forward with performance -1155\n", + " perceives ('Clean', 'None') and does Forward with performance -1156\n", + " perceives ('Clean', 'None') and does Forward with performance -1157\n", + " perceives ('Clean', 'None') and does Forward with performance -1158\n", + " perceives ('Clean', 'None') and does Forward with performance -1159\n", + " perceives ('Clean', 'None') and does Forward with performance -1160\n", + " perceives ('Clean', 'None') and does Forward with performance -1161\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1162\n", + " perceives ('Clean', 'None') and does Forward with performance -1163\n", + " perceives ('Clean', 'None') and does Forward with performance -1164\n", + " perceives ('Clean', 'None') and does Forward with performance -1165\n", + " perceives ('Clean', 'None') and does Forward with performance -1166\n", + " perceives ('Clean', 'None') and does Forward with performance -1167\n", + " perceives ('Clean', 'None') and does Forward with performance -1168\n", + " perceives ('Clean', 'None') and does Forward with performance -1169\n", + " perceives ('Clean', 'None') and does Forward with performance -1170\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1171\n", + " perceives ('Clean', 'None') and does Forward with performance -1172\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1173\n", + " perceives ('Clean', 'None') and does Forward with performance -1174\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1175\n", + " perceives ('Clean', 'None') and does Forward with performance -1176\n", + " perceives ('Clean', 'None') and does Forward with performance -1177\n", + " perceives ('Clean', 'None') and does Forward with performance -1178\n", + " perceives ('Clean', 'None') and does Forward with performance -1179\n", + " perceives ('Clean', 'None') and does Forward with performance -1180\n", + " perceives ('Clean', 'None') and does Forward with performance -1181\n", + " perceives ('Clean', 'None') and does Forward with performance -1182\n", + " perceives ('Clean', 'None') and does Forward with performance -1183\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1184\n", + " perceives ('Clean', 'None') and does Forward with performance -1185\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1186\n", + " perceives ('Clean', 'None') and does Forward with performance -1187\n", + " perceives ('Clean', 'None') and does Forward with performance -1188\n", + " perceives ('Clean', 'None') and does Forward with performance -1189\n", + " perceives ('Clean', 'None') and does Forward with performance -1190\n", + " perceives ('Clean', 'None') and does Forward with performance -1191\n", + " perceives ('Clean', 'None') and does Forward with performance -1192\n", + " perceives ('Clean', 'None') and does Forward with performance -1193\n", + " perceives ('Clean', 'None') and does Forward with performance -1194\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1195\n", + " perceives ('Clean', 'None') and does Forward with performance -1196\n", + " perceives ('Clean', 'None') and does Forward with performance -1197\n", + " perceives ('Clean', 'None') and does Forward with performance -1198\n", + " perceives ('Clean', 'None') and does Forward with performance -1199\n", + " perceives ('Clean', 'None') and does Forward with performance -1200\n", + " perceives ('Clean', 'None') and does Forward with performance -1201\n", + " perceives ('Clean', 'None') and does Forward with performance -1202\n", + " perceives ('Clean', 'None') and does Forward with performance -1203\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1204\n", + " perceives ('Clean', 'None') and does Forward with performance -1205\n", + " perceives ('Clean', 'None') and does Forward with performance -1206\n", + " perceives ('Clean', 'None') and does Forward with performance -1207\n", + " perceives ('Clean', 'None') and does Forward with performance -1208\n", + " perceives ('Clean', 'None') and does Forward with performance -1209\n", + " perceives ('Clean', 'None') and does Forward with performance -1210\n", + " perceives ('Clean', 'None') and does Forward with performance -1211\n", + " perceives ('Clean', 'None') and does Forward with performance -1212\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1213\n", + " perceives ('Clean', 'None') and does Forward with performance -1214\n", + " perceives ('Clean', 'None') and does Forward with performance -1215\n", + " perceives ('Clean', 'None') and does Forward with performance -1216\n", + " perceives ('Clean', 'None') and does Forward with performance -1217\n", + " perceives ('Clean', 'None') and does Forward with performance -1218\n", + " perceives ('Clean', 'None') and does Forward with performance -1219\n", + " perceives ('Clean', 'None') and does Forward with performance -1220\n", + " perceives ('Clean', 'None') and does Forward with performance -1221\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1222\n", + " perceives ('Clean', 'None') and does Forward with performance -1223\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1224\n", + " perceives ('Clean', 'None') and does Forward with performance -1225\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1226\n", + " perceives ('Clean', 'None') and does Forward with performance -1227\n", + " perceives ('Clean', 'None') and does Forward with performance -1228\n", + " perceives ('Clean', 'None') and does Forward with performance -1229\n", + " perceives ('Clean', 'None') and does Forward with performance -1230\n", + " perceives ('Clean', 'None') and does Forward with performance -1231\n", + " perceives ('Clean', 'None') and does Forward with performance -1232\n", + " perceives ('Clean', 'None') and does Forward with performance -1233\n", + " perceives ('Clean', 'None') and does Forward with performance -1234\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1235\n", + " perceives ('Clean', 'None') and does Forward with performance -1236\n", + " perceives ('Clean', 'None') and does Forward with performance -1237\n", + " perceives ('Clean', 'None') and does Forward with performance -1238\n", + " perceives ('Clean', 'None') and does Forward with performance -1239\n", + " perceives ('Clean', 'None') and does Forward with performance -1240\n", + " perceives ('Clean', 'None') and does Forward with performance -1241\n", + " perceives ('Clean', 'None') and does Forward with performance -1242\n", + " perceives ('Clean', 'None') and does Forward with performance -1243\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1244\n", + " perceives ('Clean', 'None') and does Forward with performance -1245\n", + " perceives ('Clean', 'None') and does Forward with performance -1246\n", + " perceives ('Clean', 'None') and does Forward with performance -1247\n", + " perceives ('Clean', 'None') and does Forward with performance -1248\n", + " perceives ('Clean', 'None') and does Forward with performance -1249\n", + " perceives ('Clean', 'None') and does Forward with performance -1250\n", + " perceives ('Clean', 'None') and does Forward with performance -1251\n", + " perceives ('Clean', 'None') and does Forward with performance -1252\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1253\n", + " perceives ('Clean', 'None') and does Forward with performance -1254\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1255\n", + " perceives ('Clean', 'None') and does Forward with performance -1256\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1257\n", + " perceives ('Clean', 'None') and does Forward with performance -1258\n", + " perceives ('Clean', 'None') and does Forward with performance -1259\n", + " perceives ('Clean', 'None') and does Forward with performance -1260\n", + " perceives ('Clean', 'None') and does Forward with performance -1261\n", + " perceives ('Clean', 'None') and does Forward with performance -1262\n", + " perceives ('Clean', 'None') and does Forward with performance -1263\n", + " perceives ('Clean', 'None') and does Forward with performance -1264\n", + " perceives ('Clean', 'None') and does Forward with performance -1265\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1266\n", + " perceives ('Clean', 'None') and does Forward with performance -1267\n", + " perceives ('Clean', 'None') and does Forward with performance -1268\n", + " perceives ('Clean', 'None') and does Forward with performance -1269\n", + " perceives ('Clean', 'None') and does Forward with performance -1270\n", + " perceives ('Clean', 'None') and does Forward with performance -1271\n", + " perceives ('Clean', 'None') and does Forward with performance -1272\n", + " perceives ('Clean', 'None') and does Forward with performance -1273\n", + " perceives ('Clean', 'None') and does Forward with performance -1274\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1275\n", + " perceives ('Clean', 'None') and does Forward with performance -1276\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1277\n", + " perceives ('Clean', 'None') and does Forward with performance -1278\n", + " perceives ('Clean', 'None') and does Forward with performance -1279\n", + " perceives ('Clean', 'None') and does Forward with performance -1280\n", + " perceives ('Clean', 'None') and does Forward with performance -1281\n", + " perceives ('Clean', 'None') and does Forward with performance -1282\n", + " perceives ('Clean', 'None') and does Forward with performance -1283\n", + " perceives ('Clean', 'None') and does Forward with performance -1284\n", + " perceives ('Clean', 'None') and does Forward with performance -1285\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1286\n", + " perceives ('Clean', 'None') and does Forward with performance -1287\n", + " perceives ('Clean', 'None') and does Forward with performance -1288\n", + " perceives ('Clean', 'None') and does Forward with performance -1289\n", + " perceives ('Clean', 'None') and does Forward with performance -1290\n", + " perceives ('Clean', 'None') and does Forward with performance -1291\n", + " perceives ('Clean', 'None') and does Forward with performance -1292\n", + " perceives ('Clean', 'None') and does Forward with performance -1293\n", + " perceives ('Clean', 'None') and does Forward with performance -1294\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1295\n", + " perceives ('Clean', 'None') and does Forward with performance -1296\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1297\n", + " perceives ('Clean', 'None') and does Forward with performance -1298\n", + " perceives ('Clean', 'None') and does Forward with performance -1299\n", + " perceives ('Clean', 'None') and does Forward with performance -1300\n", + " perceives ('Clean', 'None') and does Forward with performance -1301\n", + " perceives ('Clean', 'None') and does Forward with performance -1302\n", + " perceives ('Clean', 'None') and does Forward with performance -1303\n", + " perceives ('Clean', 'None') and does Forward with performance -1304\n", + " perceives ('Clean', 'None') and does Forward with performance -1305\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1306\n", + " perceives ('Clean', 'None') and does Forward with performance -1307\n", + " perceives ('Clean', 'None') and does Forward with performance -1308\n", + " perceives ('Clean', 'None') and does Forward with performance -1309\n", + " perceives ('Clean', 'None') and does Forward with performance -1310\n", + " perceives ('Clean', 'None') and does Forward with performance -1311\n", + " perceives ('Clean', 'None') and does Forward with performance -1312\n", + " perceives ('Clean', 'None') and does Forward with performance -1313\n", + " perceives ('Clean', 'None') and does Forward with performance -1314\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1315\n", + " perceives ('Clean', 'None') and does Forward with performance -1316\n", + " perceives ('Clean', 'None') and does Forward with performance -1317\n", + " perceives ('Clean', 'None') and does Forward with performance -1318\n", + " perceives ('Clean', 'None') and does Forward with performance -1319\n", + " perceives ('Clean', 'None') and does Forward with performance -1320\n", + " perceives ('Clean', 'None') and does Forward with performance -1321\n", + " perceives ('Clean', 'None') and does Forward with performance -1322\n", + " perceives ('Clean', 'None') and does Forward with performance -1323\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1324\n", + " perceives ('Clean', 'None') and does Forward with performance -1325\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1326\n", + " perceives ('Clean', 'None') and does Forward with performance -1327\n", + " perceives ('Clean', 'None') and does Forward with performance -1328\n", + " perceives ('Clean', 'None') and does Forward with performance -1329\n", + " perceives ('Clean', 'None') and does Forward with performance -1330\n", + " perceives ('Clean', 'None') and does Forward with performance -1331\n", + " perceives ('Clean', 'None') and does Forward with performance -1332\n", + " perceives ('Clean', 'None') and does Forward with performance -1333\n", + " perceives ('Clean', 'None') and does Forward with performance -1334\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1335\n", + " perceives ('Clean', 'None') and does Forward with performance -1336\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1337\n", + " perceives ('Clean', 'None') and does Forward with performance -1338\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1339\n", + " perceives ('Clean', 'None') and does Forward with performance -1340\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1341\n", + " perceives ('Clean', 'None') and does Forward with performance -1342\n", + " perceives ('Clean', 'None') and does Forward with performance -1343\n", + " perceives ('Clean', 'None') and does Forward with performance -1344\n", + " perceives ('Clean', 'None') and does Forward with performance -1345\n", + " perceives ('Clean', 'None') and does Forward with performance -1346\n", + " perceives ('Clean', 'None') and does Forward with performance -1347\n", + " perceives ('Clean', 'None') and does Forward with performance -1348\n", + " perceives ('Clean', 'None') and does Forward with performance -1349\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1350\n", + " perceives ('Clean', 'None') and does Forward with performance -1351\n", + " perceives ('Clean', 'None') and does Forward with performance -1352\n", + " perceives ('Clean', 'None') and does Forward with performance -1353\n", + " perceives ('Clean', 'None') and does Forward with performance -1354\n", + " perceives ('Clean', 'None') and does Forward with performance -1355\n", + " perceives ('Clean', 'None') and does Forward with performance -1356\n", + " perceives ('Clean', 'None') and does Forward with performance -1357\n", + " perceives ('Clean', 'None') and does Forward with performance -1358\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1359\n", + " perceives ('Clean', 'None') and does Forward with performance -1360\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1361\n", + " perceives ('Clean', 'None') and does Forward with performance -1362\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1363\n", + " perceives ('Clean', 'None') and does Forward with performance -1364\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1365\n", + " perceives ('Clean', 'None') and does Forward with performance -1366\n", + " perceives ('Clean', 'None') and does Forward with performance -1367\n", + " perceives ('Clean', 'None') and does Forward with performance -1368\n", + " perceives ('Clean', 'None') and does Forward with performance -1369\n", + " perceives ('Clean', 'None') and does Forward with performance -1370\n", + " perceives ('Clean', 'None') and does Forward with performance -1371\n", + " perceives ('Clean', 'None') and does Forward with performance -1372\n", + " perceives ('Clean', 'None') and does Forward with performance -1373\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1374\n", + " perceives ('Clean', 'None') and does Forward with performance -1375\n", + " perceives ('Clean', 'None') and does Forward with performance -1376\n", + " perceives ('Clean', 'None') and does Forward with performance -1377\n", + " perceives ('Clean', 'None') and does Forward with performance -1378\n", + " perceives ('Clean', 'None') and does Forward with performance -1379\n", + " perceives ('Clean', 'None') and does Forward with performance -1380\n", + " perceives ('Clean', 'None') and does Forward with performance -1381\n", + " perceives ('Clean', 'None') and does Forward with performance -1382\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1383\n", + " perceives ('Clean', 'None') and does Forward with performance -1384\n", + " perceives ('Clean', 'None') and does Forward with performance -1385\n", + " perceives ('Clean', 'None') and does Forward with performance -1386\n", + " perceives ('Clean', 'None') and does Forward with performance -1387\n", + " perceives ('Clean', 'None') and does Forward with performance -1388\n", + " perceives ('Clean', 'None') and does Forward with performance -1389\n", + " perceives ('Clean', 'None') and does Forward with performance -1390\n", + " perceives ('Clean', 'None') and does Forward with performance -1391\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1392\n", + " perceives ('Clean', 'None') and does Forward with performance -1393\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1394\n", + " perceives ('Clean', 'None') and does Forward with performance -1395\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1396\n", + " perceives ('Clean', 'None') and does Forward with performance -1397\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1398\n", + " perceives ('Clean', 'None') and does Forward with performance -1399\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1400\n", + " perceives ('Clean', 'None') and does Forward with performance -1401\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1402\n", + " perceives ('Clean', 'None') and does Forward with performance -1403\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1404\n", + " perceives ('Clean', 'None') and does Forward with performance -1405\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1406\n", + " perceives ('Clean', 'None') and does Forward with performance -1407\n", + " perceives ('Clean', 'None') and does Forward with performance -1408\n", + " perceives ('Clean', 'None') and does Forward with performance -1409\n", + " perceives ('Clean', 'None') and does Forward with performance -1410\n", + " perceives ('Clean', 'None') and does Forward with performance -1411\n", + " perceives ('Clean', 'None') and does Forward with performance -1412\n", + " perceives ('Clean', 'None') and does Forward with performance -1413\n", + " perceives ('Clean', 'None') and does Forward with performance -1414\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1415\n", + " perceives ('Clean', 'None') and does Forward with performance -1416\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1417\n", + " perceives ('Clean', 'None') and does Forward with performance -1418\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1419\n", + " perceives ('Clean', 'None') and does Forward with performance -1420\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1421\n", + " perceives ('Clean', 'None') and does Forward with performance -1422\n", + " perceives ('Clean', 'None') and does Forward with performance -1423\n", + " perceives ('Clean', 'None') and does Forward with performance -1424\n", + " perceives ('Clean', 'None') and does Forward with performance -1425\n", + " perceives ('Clean', 'None') and does Forward with performance -1426\n", + " perceives ('Clean', 'None') and does Forward with performance -1427\n", + " perceives ('Clean', 'None') and does Forward with performance -1428\n", + " perceives ('Clean', 'None') and does Forward with performance -1429\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1430\n", + " perceives ('Clean', 'None') and does Forward with performance -1431\n", + " perceives ('Clean', 'None') and does Forward with performance -1432\n", + " perceives ('Clean', 'None') and does Forward with performance -1433\n", + " perceives ('Clean', 'None') and does Forward with performance -1434\n", + " perceives ('Clean', 'None') and does Forward with performance -1435\n", + " perceives ('Clean', 'None') and does Forward with performance -1436\n", + " perceives ('Clean', 'None') and does Forward with performance -1437\n", + " perceives ('Clean', 'None') and does Forward with performance -1438\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1439\n", + " perceives ('Clean', 'None') and does Forward with performance -1440\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1441\n", + " perceives ('Clean', 'None') and does Forward with performance -1442\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1443\n", + " perceives ('Clean', 'None') and does Forward with performance -1444\n", + " perceives ('Clean', 'None') and does Forward with performance -1445\n", + " perceives ('Clean', 'None') and does Forward with performance -1446\n", + " perceives ('Clean', 'None') and does Forward with performance -1447\n", + " perceives ('Clean', 'None') and does Forward with performance -1448\n", + " perceives ('Clean', 'None') and does Forward with performance -1449\n", + " perceives ('Clean', 'None') and does Forward with performance -1450\n", + " perceives ('Clean', 'None') and does Forward with performance -1451\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1452\n", + " perceives ('Clean', 'None') and does Forward with performance -1453\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1454\n", + " perceives ('Clean', 'None') and does Forward with performance -1455\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1456\n", + " perceives ('Clean', 'None') and does Forward with performance -1457\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1458\n", + " perceives ('Clean', 'None') and does Forward with performance -1459\n", + " perceives ('Clean', 'None') and does Forward with performance -1460\n", + " perceives ('Clean', 'None') and does Forward with performance -1461\n", + " perceives ('Clean', 'None') and does Forward with performance -1462\n", + " perceives ('Clean', 'None') and does Forward with performance -1463\n", + " perceives ('Clean', 'None') and does Forward with performance -1464\n", + " perceives ('Clean', 'None') and does Forward with performance -1465\n", + " perceives ('Clean', 'None') and does Forward with performance -1466\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1467\n", + " perceives ('Clean', 'None') and does Forward with performance -1468\n", + " perceives ('Clean', 'None') and does Forward with performance -1469\n", + " perceives ('Clean', 'None') and does Forward with performance -1470\n", + " perceives ('Clean', 'None') and does Forward with performance -1471\n", + " perceives ('Clean', 'None') and does Forward with performance -1472\n", + " perceives ('Clean', 'None') and does Forward with performance -1473\n", + " perceives ('Clean', 'None') and does Forward with performance -1474\n", + " perceives ('Clean', 'None') and does Forward with performance -1475\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1476\n", + " perceives ('Clean', 'None') and does Forward with performance -1477\n", + " perceives ('Clean', 'None') and does Forward with performance -1478\n", + " perceives ('Clean', 'None') and does Forward with performance -1479\n", + " perceives ('Clean', 'None') and does Forward with performance -1480\n", + " perceives ('Clean', 'None') and does Forward with performance -1481\n", + " perceives ('Clean', 'None') and does Forward with performance -1482\n", + " perceives ('Clean', 'None') and does Forward with performance -1483\n", + " perceives ('Clean', 'None') and does Forward with performance -1484\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1485\n", + " perceives ('Clean', 'None') and does Forward with performance -1486\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1487\n", + " perceives ('Clean', 'None') and does Forward with performance -1488\n", + " perceives ('Clean', 'None') and does Forward with performance -1489\n", + " perceives ('Clean', 'None') and does Forward with performance -1490\n", + " perceives ('Clean', 'None') and does Forward with performance -1491\n", + " perceives ('Clean', 'None') and does Forward with performance -1492\n", + " perceives ('Clean', 'None') and does Forward with performance -1493\n", + " perceives ('Clean', 'None') and does Forward with performance -1494\n", + " perceives ('Clean', 'None') and does Forward with performance -1495\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1496\n", + " perceives ('Clean', 'None') and does Forward with performance -1497\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1498\n", + " perceives ('Clean', 'None') and does Forward with performance -1499\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1500\n", + " perceives ('Clean', 'None') and does Forward with performance -1501\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1502\n", + " perceives ('Clean', 'None') and does Forward with performance -1503\n", + " perceives ('Clean', 'None') and does Forward with performance -1504\n", + " perceives ('Clean', 'None') and does Forward with performance -1505\n", + " perceives ('Clean', 'None') and does Forward with performance -1506\n", + " perceives ('Clean', 'None') and does Forward with performance -1507\n", + " perceives ('Clean', 'None') and does Forward with performance -1508\n", + " perceives ('Clean', 'None') and does Forward with performance -1509\n", + " perceives ('Clean', 'None') and does Forward with performance -1510\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1511\n", + " perceives ('Clean', 'None') and does Forward with performance -1512\n", + " perceives ('Clean', 'None') and does Forward with performance -1513\n", + " perceives ('Clean', 'None') and does Forward with performance -1514\n", + " perceives ('Clean', 'None') and does Forward with performance -1515\n", + " perceives ('Clean', 'None') and does Forward with performance -1516\n", + " perceives ('Clean', 'None') and does Forward with performance -1517\n", + " perceives ('Clean', 'None') and does Forward with performance -1518\n", + " perceives ('Clean', 'None') and does Forward with performance -1519\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1520\n", + " perceives ('Clean', 'None') and does Forward with performance -1521\n", + " perceives ('Clean', 'None') and does Forward with performance -1522\n", + " perceives ('Clean', 'None') and does Forward with performance -1523\n", + " perceives ('Clean', 'None') and does Forward with performance -1524\n", + " perceives ('Clean', 'None') and does Forward with performance -1525\n", + " perceives ('Clean', 'None') and does Forward with performance -1526\n", + " perceives ('Clean', 'None') and does Forward with performance -1527\n", + " perceives ('Clean', 'None') and does Forward with performance -1528\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1529\n", + " perceives ('Clean', 'None') and does Forward with performance -1530\n", + " perceives ('Clean', 'None') and does Forward with performance -1531\n", + " perceives ('Clean', 'None') and does Forward with performance -1532\n", + " perceives ('Clean', 'None') and does Forward with performance -1533\n", + " perceives ('Clean', 'None') and does Forward with performance -1534\n", + " perceives ('Clean', 'None') and does Forward with performance -1535\n", + " perceives ('Clean', 'None') and does Forward with performance -1536\n", + " perceives ('Clean', 'None') and does Forward with performance -1537\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1538\n", + " perceives ('Clean', 'None') and does Forward with performance -1539\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1540\n", + " perceives ('Clean', 'None') and does Forward with performance -1541\n", + " perceives ('Clean', 'None') and does Forward with performance -1542\n", + " perceives ('Clean', 'None') and does Forward with performance -1543\n", + " perceives ('Clean', 'None') and does Forward with performance -1544\n", + " perceives ('Clean', 'None') and does Forward with performance -1545\n", + " perceives ('Clean', 'None') and does Forward with performance -1546\n", + " perceives ('Clean', 'None') and does Forward with performance -1547\n", + " perceives ('Clean', 'None') and does Forward with performance -1548\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1549\n", + " perceives ('Clean', 'None') and does Forward with performance -1550\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1551\n", + " perceives ('Clean', 'None') and does Forward with performance -1552\n", + " perceives ('Clean', 'None') and does Forward with performance -1553\n", + " perceives ('Clean', 'None') and does Forward with performance -1554\n", + " perceives ('Clean', 'None') and does Forward with performance -1555\n", + " perceives ('Clean', 'None') and does Forward with performance -1556\n", + " perceives ('Clean', 'None') and does Forward with performance -1557\n", + " perceives ('Clean', 'None') and does Forward with performance -1558\n", + " perceives ('Clean', 'None') and does Forward with performance -1559\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1560\n", + " perceives ('Clean', 'None') and does Forward with performance -1561\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1562\n", + " perceives ('Clean', 'None') and does Forward with performance -1563\n", + " perceives ('Clean', 'None') and does Forward with performance -1564\n", + " perceives ('Clean', 'None') and does Forward with performance -1565\n", + " perceives ('Clean', 'None') and does Forward with performance -1566\n", + " perceives ('Clean', 'None') and does Forward with performance -1567\n", + " perceives ('Clean', 'None') and does Forward with performance -1568\n", + " perceives ('Clean', 'None') and does Forward with performance -1569\n", + " perceives ('Clean', 'None') and does Forward with performance -1570\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1571\n", + " perceives ('Clean', 'None') and does Forward with performance -1572\n", + " perceives ('Clean', 'None') and does Forward with performance -1573\n", + " perceives ('Clean', 'None') and does Forward with performance -1574\n", + " perceives ('Clean', 'None') and does Forward with performance -1575\n", + " perceives ('Clean', 'None') and does Forward with performance -1576\n", + " perceives ('Clean', 'None') and does Forward with performance -1577\n", + " perceives ('Clean', 'None') and does Forward with performance -1578\n", + " perceives ('Clean', 'None') and does Forward with performance -1579\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1580\n", + " perceives ('Clean', 'None') and does Forward with performance -1581\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1582\n", + " perceives ('Clean', 'None') and does Forward with performance -1583\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1584\n", + " perceives ('Clean', 'None') and does Forward with performance -1585\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1586\n", + " perceives ('Clean', 'None') and does Forward with performance -1587\n", + " perceives ('Clean', 'None') and does Forward with performance -1588\n", + " perceives ('Clean', 'None') and does Forward with performance -1589\n", + " perceives ('Clean', 'None') and does Forward with performance -1590\n", + " perceives ('Clean', 'None') and does Forward with performance -1591\n", + " perceives ('Clean', 'None') and does Forward with performance -1592\n", + " perceives ('Clean', 'None') and does Forward with performance -1593\n", + " perceives ('Clean', 'None') and does Forward with performance -1594\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1595\n", + " perceives ('Clean', 'None') and does Forward with performance -1596\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1597\n", + " perceives ('Clean', 'None') and does Forward with performance -1598\n", + " perceives ('Clean', 'None') and does Forward with performance -1599\n", + " perceives ('Clean', 'None') and does Forward with performance -1600\n", + " perceives ('Clean', 'None') and does Forward with performance -1601\n", + " perceives ('Clean', 'None') and does Forward with performance -1602\n", + " perceives ('Clean', 'None') and does Forward with performance -1603\n", + " perceives ('Clean', 'None') and does Forward with performance -1604\n", + " perceives ('Clean', 'None') and does Forward with performance -1605\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1606\n", + " perceives ('Clean', 'None') and does Forward with performance -1607\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1608\n", + " perceives ('Clean', 'None') and does Forward with performance -1609\n", + " perceives ('Clean', 'None') and does Forward with performance -1610\n", + " perceives ('Clean', 'None') and does Forward with performance -1611\n", + " perceives ('Clean', 'None') and does Forward with performance -1612\n", + " perceives ('Clean', 'None') and does Forward with performance -1613\n", + " perceives ('Clean', 'None') and does Forward with performance -1614\n", + " perceives ('Clean', 'None') and does Forward with performance -1615\n", + " perceives ('Clean', 'None') and does Forward with performance -1616\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1617\n", + " perceives ('Clean', 'None') and does Forward with performance -1618\n", + " perceives ('Clean', 'None') and does Forward with performance -1619\n", + " perceives ('Clean', 'None') and does Forward with performance -1620\n", + " perceives ('Clean', 'None') and does Forward with performance -1621\n", + " perceives ('Clean', 'None') and does Forward with performance -1622\n", + " perceives ('Clean', 'None') and does Forward with performance -1623\n", + " perceives ('Clean', 'None') and does Forward with performance -1624\n", + " perceives ('Clean', 'None') and does Forward with performance -1625\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1626\n", + " perceives ('Clean', 'None') and does Forward with performance -1627\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1628\n", + " perceives ('Clean', 'None') and does Forward with performance -1629\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1630\n", + " perceives ('Clean', 'None') and does Forward with performance -1631\n", + " perceives ('Clean', 'None') and does Forward with performance -1632\n", + " perceives ('Clean', 'None') and does Forward with performance -1633\n", + " perceives ('Clean', 'None') and does Forward with performance -1634\n", + " perceives ('Clean', 'None') and does Forward with performance -1635\n", + " perceives ('Clean', 'None') and does Forward with performance -1636\n", + " perceives ('Clean', 'None') and does Forward with performance -1637\n", + " perceives ('Clean', 'None') and does Forward with performance -1638\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1639\n", + " perceives ('Clean', 'None') and does Forward with performance -1640\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1641\n", + " perceives ('Clean', 'None') and does Forward with performance -1642\n", + " perceives ('Clean', 'None') and does Forward with performance -1643\n", + " perceives ('Clean', 'None') and does Forward with performance -1644\n", + " perceives ('Clean', 'None') and does Forward with performance -1645\n", + " perceives ('Clean', 'None') and does Forward with performance -1646\n", + " perceives ('Clean', 'None') and does Forward with performance -1647\n", + " perceives ('Clean', 'None') and does Forward with performance -1648\n", + " perceives ('Clean', 'None') and does Forward with performance -1649\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1650\n", + " perceives ('Clean', 'None') and does Forward with performance -1651\n", + " perceives ('Clean', 'None') and does Forward with performance -1652\n", + " perceives ('Clean', 'None') and does Forward with performance -1653\n", + " perceives ('Clean', 'None') and does Forward with performance -1654\n", + " perceives ('Clean', 'None') and does Forward with performance -1655\n", + " perceives ('Clean', 'None') and does Forward with performance -1656\n", + " perceives ('Clean', 'None') and does Forward with performance -1657\n", + " perceives ('Clean', 'None') and does Forward with performance -1658\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1659\n", + " perceives ('Clean', 'None') and does Forward with performance -1660\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1661\n", + " perceives ('Clean', 'None') and does Forward with performance -1662\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1663\n", + " perceives ('Clean', 'None') and does Forward with performance -1664\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1665\n", + " perceives ('Clean', 'None') and does Forward with performance -1666\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1667\n", + " perceives ('Clean', 'None') and does Forward with performance -1668\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1669\n", + " perceives ('Clean', 'None') and does Forward with performance -1670\n", + " perceives ('Clean', 'None') and does Forward with performance -1671\n", + " perceives ('Clean', 'None') and does Forward with performance -1672\n", + " perceives ('Clean', 'None') and does Forward with performance -1673\n", + " perceives ('Clean', 'None') and does Forward with performance -1674\n", + " perceives ('Clean', 'None') and does Forward with performance -1675\n", + " perceives ('Clean', 'None') and does Forward with performance -1676\n", + " perceives ('Clean', 'None') and does Forward with performance -1677\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1678\n", + " perceives ('Clean', 'None') and does Forward with performance -1679\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1680\n", + " perceives ('Clean', 'None') and does Forward with performance -1681\n", + " perceives ('Clean', 'None') and does Forward with performance -1682\n", + " perceives ('Clean', 'None') and does Forward with performance -1683\n", + " perceives ('Clean', 'None') and does Forward with performance -1684\n", + " perceives ('Clean', 'None') and does Forward with performance -1685\n", + " perceives ('Clean', 'None') and does Forward with performance -1686\n", + " perceives ('Clean', 'None') and does Forward with performance -1687\n", + " perceives ('Clean', 'None') and does Forward with performance -1688\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1689\n", + " perceives ('Clean', 'None') and does Forward with performance -1690\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1691\n", + " perceives ('Clean', 'None') and does Forward with performance -1692\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1693\n", + " perceives ('Clean', 'None') and does Forward with performance -1694\n", + " perceives ('Clean', 'None') and does Forward with performance -1695\n", + " perceives ('Clean', 'None') and does Forward with performance -1696\n", + " perceives ('Clean', 'None') and does Forward with performance -1697\n", + " perceives ('Clean', 'None') and does Forward with performance -1698\n", + " perceives ('Clean', 'None') and does Forward with performance -1699\n", + " perceives ('Clean', 'None') and does Forward with performance -1700\n", + " perceives ('Clean', 'None') and does Forward with performance -1701\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1702\n", + " perceives ('Clean', 'None') and does Forward with performance -1703\n", + " perceives ('Clean', 'None') and does Forward with performance -1704\n", + " perceives ('Clean', 'None') and does Forward with performance -1705\n", + " perceives ('Clean', 'None') and does Forward with performance -1706\n", + " perceives ('Clean', 'None') and does Forward with performance -1707\n", + " perceives ('Clean', 'None') and does Forward with performance -1708\n", + " perceives ('Clean', 'None') and does Forward with performance -1709\n", + " perceives ('Clean', 'None') and does Forward with performance -1710\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1711\n", + " perceives ('Clean', 'None') and does Forward with performance -1712\n", + " perceives ('Clean', 'None') and does Forward with performance -1713\n", + " perceives ('Clean', 'None') and does Forward with performance -1714\n", + " perceives ('Clean', 'None') and does Forward with performance -1715\n", + " perceives ('Clean', 'None') and does Forward with performance -1716\n", + " perceives ('Clean', 'None') and does Forward with performance -1717\n", + " perceives ('Clean', 'None') and does Forward with performance -1718\n", + " perceives ('Clean', 'None') and does Forward with performance -1719\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1720\n", + " perceives ('Clean', 'None') and does Forward with performance -1721\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1722\n", + " perceives ('Clean', 'None') and does Forward with performance -1723\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1724\n", + " perceives ('Clean', 'None') and does Forward with performance -1725\n", + " perceives ('Clean', 'None') and does Forward with performance -1726\n", + " perceives ('Clean', 'None') and does Forward with performance -1727\n", + " perceives ('Clean', 'None') and does Forward with performance -1728\n", + " perceives ('Clean', 'None') and does Forward with performance -1729\n", + " perceives ('Clean', 'None') and does Forward with performance -1730\n", + " perceives ('Clean', 'None') and does Forward with performance -1731\n", + " perceives ('Clean', 'None') and does Forward with performance -1732\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1733\n", + " perceives ('Clean', 'None') and does Forward with performance -1734\n", + " perceives ('Clean', 'None') and does Forward with performance -1735\n", + " perceives ('Clean', 'None') and does Forward with performance -1736\n", + " perceives ('Clean', 'None') and does Forward with performance -1737\n", + " perceives ('Clean', 'None') and does Forward with performance -1738\n", + " perceives ('Clean', 'None') and does Forward with performance -1739\n", + " perceives ('Clean', 'None') and does Forward with performance -1740\n", + " perceives ('Clean', 'None') and does Forward with performance -1741\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1742\n", + " perceives ('Clean', 'None') and does Forward with performance -1743\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1744\n", + " perceives ('Clean', 'None') and does Forward with performance -1745\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1746\n", + " perceives ('Clean', 'None') and does Forward with performance -1747\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1748\n", + " perceives ('Clean', 'None') and does Forward with performance -1749\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1750\n", + " perceives ('Clean', 'None') and does Forward with performance -1751\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1752\n", + " perceives ('Clean', 'None') and does Forward with performance -1753\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1754\n", + " perceives ('Clean', 'None') and does Forward with performance -1755\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1756\n", + " perceives ('Clean', 'None') and does Forward with performance -1757\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1758\n", + " perceives ('Clean', 'None') and does Forward with performance -1759\n", + " perceives ('Clean', 'None') and does Forward with performance -1760\n", + " perceives ('Clean', 'None') and does Forward with performance -1761\n", + " perceives ('Clean', 'None') and does Forward with performance -1762\n", + " perceives ('Clean', 'None') and does Forward with performance -1763\n", + " perceives ('Clean', 'None') and does Forward with performance -1764\n", + " perceives ('Clean', 'None') and does Forward with performance -1765\n", + " perceives ('Clean', 'None') and does Forward with performance -1766\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1767\n", + " perceives ('Clean', 'None') and does Forward with performance -1768\n", + " perceives ('Clean', 'None') and does Forward with performance -1769\n", + " perceives ('Clean', 'None') and does Forward with performance -1770\n", + " perceives ('Clean', 'None') and does Forward with performance -1771\n", + " perceives ('Clean', 'None') and does Forward with performance -1772\n", + " perceives ('Clean', 'None') and does Forward with performance -1773\n", + " perceives ('Clean', 'None') and does Forward with performance -1774\n", + " perceives ('Clean', 'None') and does Forward with performance -1775\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1776\n", + " perceives ('Clean', 'None') and does Forward with performance -1777\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1778\n", + " perceives ('Clean', 'None') and does Forward with performance -1779\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1780\n", + " perceives ('Clean', 'None') and does Forward with performance -1781\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1782\n", + " perceives ('Clean', 'None') and does Forward with performance -1783\n", + " perceives ('Clean', 'None') and does Forward with performance -1784\n", + " perceives ('Clean', 'None') and does Forward with performance -1785\n", + " perceives ('Clean', 'None') and does Forward with performance -1786\n", + " perceives ('Clean', 'None') and does Forward with performance -1787\n", + " perceives ('Clean', 'None') and does Forward with performance -1788\n", + " perceives ('Clean', 'None') and does Forward with performance -1789\n", + " perceives ('Clean', 'None') and does Forward with performance -1790\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1791\n", + " perceives ('Clean', 'None') and does Forward with performance -1792\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1793\n", + " perceives ('Clean', 'None') and does Forward with performance -1794\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1795\n", + " perceives ('Clean', 'None') and does Forward with performance -1796\n", + " perceives ('Clean', 'None') and does Forward with performance -1797\n", + " perceives ('Clean', 'None') and does Forward with performance -1798\n", + " perceives ('Clean', 'None') and does Forward with performance -1799\n", + " perceives ('Clean', 'None') and does Forward with performance -1800\n", + " perceives ('Clean', 'None') and does Forward with performance -1801\n", + " perceives ('Clean', 'None') and does Forward with performance -1802\n", + " perceives ('Clean', 'None') and does Forward with performance -1803\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1804\n", + " perceives ('Clean', 'None') and does Forward with performance -1805\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1806\n", + " perceives ('Clean', 'None') and does Forward with performance -1807\n", + " perceives ('Clean', 'None') and does Forward with performance -1808\n", + " perceives ('Clean', 'None') and does Forward with performance -1809\n", + " perceives ('Clean', 'None') and does Forward with performance -1810\n", + " perceives ('Clean', 'None') and does Forward with performance -1811\n", + " perceives ('Clean', 'None') and does Forward with performance -1812\n", + " perceives ('Clean', 'None') and does Forward with performance -1813\n", + " perceives ('Clean', 'None') and does Forward with performance -1814\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1815\n", + " perceives ('Clean', 'None') and does Forward with performance -1816\n", + " perceives ('Clean', 'None') and does Forward with performance -1817\n", + " perceives ('Clean', 'None') and does Forward with performance -1818\n", + " perceives ('Clean', 'None') and does Forward with performance -1819\n", + " perceives ('Clean', 'None') and does Forward with performance -1820\n", + " perceives ('Clean', 'None') and does Forward with performance -1821\n", + " perceives ('Clean', 'None') and does Forward with performance -1822\n", + " perceives ('Clean', 'None') and does Forward with performance -1823\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1824\n", + " perceives ('Clean', 'None') and does Forward with performance -1825\n", + " perceives ('Clean', 'None') and does Forward with performance -1826\n", + " perceives ('Clean', 'None') and does Forward with performance -1827\n", + " perceives ('Clean', 'None') and does Forward with performance -1828\n", + " perceives ('Clean', 'None') and does Forward with performance -1829\n", + " perceives ('Clean', 'None') and does Forward with performance -1830\n", + " perceives ('Clean', 'None') and does Forward with performance -1831\n", + " perceives ('Clean', 'None') and does Forward with performance -1832\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1833\n", + " perceives ('Clean', 'None') and does Forward with performance -1834\n", + " perceives ('Clean', 'None') and does Forward with performance -1835\n", + " perceives ('Clean', 'None') and does Forward with performance -1836\n", + " perceives ('Clean', 'None') and does Forward with performance -1837\n", + " perceives ('Clean', 'None') and does Forward with performance -1838\n", + " perceives ('Clean', 'None') and does Forward with performance -1839\n", + " perceives ('Clean', 'None') and does Forward with performance -1840\n", + " perceives ('Clean', 'None') and does Forward with performance -1841\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1842\n", + " perceives ('Clean', 'None') and does Forward with performance -1843\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1844\n", + " perceives ('Clean', 'None') and does Forward with performance -1845\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1846\n", + " perceives ('Clean', 'None') and does Forward with performance -1847\n", + " perceives ('Clean', 'None') and does Forward with performance -1848\n", + " perceives ('Clean', 'None') and does Forward with performance -1849\n", + " perceives ('Clean', 'None') and does Forward with performance -1850\n", + " perceives ('Clean', 'None') and does Forward with performance -1851\n", + " perceives ('Clean', 'None') and does Forward with performance -1852\n", + " perceives ('Clean', 'None') and does Forward with performance -1853\n", + " perceives ('Clean', 'None') and does Forward with performance -1854\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1855\n", + " perceives ('Clean', 'None') and does Forward with performance -1856\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1857\n", + " perceives ('Clean', 'None') and does Forward with performance -1858\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1859\n", + " perceives ('Clean', 'None') and does Forward with performance -1860\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1861\n", + " perceives ('Clean', 'None') and does Forward with performance -1862\n", + " perceives ('Clean', 'None') and does Forward with performance -1863\n", + " perceives ('Clean', 'None') and does Forward with performance -1864\n", + " perceives ('Clean', 'None') and does Forward with performance -1865\n", + " perceives ('Clean', 'None') and does Forward with performance -1866\n", + " perceives ('Clean', 'None') and does Forward with performance -1867\n", + " perceives ('Clean', 'None') and does Forward with performance -1868\n", + " perceives ('Clean', 'None') and does Forward with performance -1869\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1870\n", + " perceives ('Clean', 'None') and does Forward with performance -1871\n", + " perceives ('Clean', 'None') and does Forward with performance -1872\n", + " perceives ('Clean', 'None') and does Forward with performance -1873\n", + " perceives ('Clean', 'None') and does Forward with performance -1874\n", + " perceives ('Clean', 'None') and does Forward with performance -1875\n", + " perceives ('Clean', 'None') and does Forward with performance -1876\n", + " perceives ('Clean', 'None') and does Forward with performance -1877\n", + " perceives ('Clean', 'None') and does Forward with performance -1878\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1879\n", + " perceives ('Clean', 'None') and does Forward with performance -1880\n", + " perceives ('Clean', 'None') and does Forward with performance -1881\n", + " perceives ('Clean', 'None') and does Forward with performance -1882\n", + " perceives ('Clean', 'None') and does Forward with performance -1883\n", + " perceives ('Clean', 'None') and does Forward with performance -1884\n", + " perceives ('Clean', 'None') and does Forward with performance -1885\n", + " perceives ('Clean', 'None') and does Forward with performance -1886\n", + " perceives ('Clean', 'None') and does Forward with performance -1887\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1888\n", + " perceives ('Clean', 'None') and does Forward with performance -1889\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1890\n", + " perceives ('Clean', 'None') and does Forward with performance -1891\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1892\n", + " perceives ('Clean', 'None') and does Forward with performance -1893\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1894\n", + " perceives ('Clean', 'None') and does Forward with performance -1895\n", + " perceives ('Clean', 'None') and does Forward with performance -1896\n", + " perceives ('Clean', 'None') and does Forward with performance -1897\n", + " perceives ('Clean', 'None') and does Forward with performance -1898\n", + " perceives ('Clean', 'None') and does Forward with performance -1899\n", + " perceives ('Clean', 'None') and does Forward with performance -1900\n", + " perceives ('Clean', 'None') and does Forward with performance -1901\n", + " perceives ('Clean', 'None') and does Forward with performance -1902\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1903\n", + " perceives ('Clean', 'None') and does Forward with performance -1904\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1905\n", + " perceives ('Clean', 'None') and does Forward with performance -1906\n", + " perceives ('Clean', 'None') and does Forward with performance -1907\n", + " perceives ('Clean', 'None') and does Forward with performance -1908\n", + " perceives ('Clean', 'None') and does Forward with performance -1909\n", + " perceives ('Clean', 'None') and does Forward with performance -1910\n", + " perceives ('Clean', 'None') and does Forward with performance -1911\n", + " perceives ('Clean', 'None') and does Forward with performance -1912\n", + " perceives ('Clean', 'None') and does Forward with performance -1913\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1914\n", + " perceives ('Clean', 'None') and does Forward with performance -1915\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1916\n", + " perceives ('Clean', 'None') and does Forward with performance -1917\n", + " perceives ('Clean', 'None') and does Forward with performance -1918\n", + " perceives ('Clean', 'None') and does Forward with performance -1919\n", + " perceives ('Clean', 'None') and does Forward with performance -1920\n", + " perceives ('Clean', 'None') and does Forward with performance -1921\n", + " perceives ('Clean', 'None') and does Forward with performance -1922\n", + " perceives ('Clean', 'None') and does Forward with performance -1923\n", + " perceives ('Clean', 'None') and does Forward with performance -1924\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1925\n", + " perceives ('Clean', 'None') and does Forward with performance -1926\n", + " perceives ('Clean', 'None') and does Forward with performance -1927\n", + " perceives ('Clean', 'None') and does Forward with performance -1928\n", + " perceives ('Clean', 'None') and does Forward with performance -1929\n", + " perceives ('Clean', 'None') and does Forward with performance -1930\n", + " perceives ('Clean', 'None') and does Forward with performance -1931\n", + " perceives ('Clean', 'None') and does Forward with performance -1932\n", + " perceives ('Clean', 'None') and does Forward with performance -1933\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1934\n", + " perceives ('Clean', 'None') and does Forward with performance -1935\n", + " perceives ('Clean', 'None') and does Forward with performance -1936\n", + " perceives ('Clean', 'None') and does Forward with performance -1937\n", + " perceives ('Clean', 'None') and does Forward with performance -1938\n", + " perceives ('Clean', 'None') and does Forward with performance -1939\n", + " perceives ('Clean', 'None') and does Forward with performance -1940\n", + " perceives ('Clean', 'None') and does Forward with performance -1941\n", + " perceives ('Clean', 'None') and does Forward with performance -1942\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1943\n", + " perceives ('Clean', 'None') and does Forward with performance -1944\n", + " perceives ('Clean', 'None') and does Forward with performance -1945\n", + " perceives ('Clean', 'None') and does Forward with performance -1946\n", + " perceives ('Clean', 'None') and does Forward with performance -1947\n", + " perceives ('Clean', 'None') and does Forward with performance -1948\n", + " perceives ('Clean', 'None') and does Forward with performance -1949\n", + " perceives ('Clean', 'None') and does Forward with performance -1950\n", + " perceives ('Clean', 'None') and does Forward with performance -1951\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1952\n", + " perceives ('Clean', 'None') and does Forward with performance -1953\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1954\n", + " perceives ('Clean', 'None') and does Forward with performance -1955\n", + " perceives ('Clean', 'None') and does Forward with performance -1956\n", + " perceives ('Clean', 'None') and does Forward with performance -1957\n", + " perceives ('Clean', 'None') and does Forward with performance -1958\n", + " perceives ('Clean', 'None') and does Forward with performance -1959\n", + " perceives ('Clean', 'None') and does Forward with performance -1960\n", + " perceives ('Clean', 'None') and does Forward with performance -1961\n", + " perceives ('Clean', 'None') and does Forward with performance -1962\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -1963\n", + " perceives ('Clean', 'None') and does Forward with performance -1964\n", + " perceives ('Clean', 'None') and does Forward with performance -1965\n", + " perceives ('Clean', 'None') and does Forward with performance -1966\n", + " perceives ('Clean', 'None') and does Forward with performance -1967\n", + " perceives ('Clean', 'None') and does Forward with performance -1968\n", + " perceives ('Clean', 'None') and does Forward with performance -1969\n", + " perceives ('Clean', 'None') and does Forward with performance -1970\n", + " perceives ('Clean', 'None') and does Forward with performance -1971\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1972\n", + " perceives ('Clean', 'None') and does Forward with performance -1973\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1974\n", + " perceives ('Clean', 'None') and does Forward with performance -1975\n", + " perceives ('Clean', 'None') and does Forward with performance -1976\n", + " perceives ('Clean', 'None') and does Forward with performance -1977\n", + " perceives ('Clean', 'None') and does Forward with performance -1978\n", + " perceives ('Clean', 'None') and does Forward with performance -1979\n", + " perceives ('Clean', 'None') and does Forward with performance -1980\n", + " perceives ('Clean', 'None') and does Forward with performance -1981\n", + " perceives ('Clean', 'None') and does Forward with performance -1982\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1983\n", + " perceives ('Clean', 'None') and does Forward with performance -1984\n", + " perceives ('Clean', 'None') and does Forward with performance -1985\n", + " perceives ('Clean', 'None') and does Forward with performance -1986\n", + " perceives ('Clean', 'None') and does Forward with performance -1987\n", + " perceives ('Clean', 'None') and does Forward with performance -1988\n", + " perceives ('Clean', 'None') and does Forward with performance -1989\n", + " perceives ('Clean', 'None') and does Forward with performance -1990\n", + " perceives ('Clean', 'None') and does Forward with performance -1991\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -1992\n", + " perceives ('Clean', 'None') and does Forward with performance -1993\n", + " perceives ('Clean', 'None') and does Forward with performance -1994\n", + " perceives ('Clean', 'None') and does Forward with performance -1995\n", + " perceives ('Clean', 'None') and does Forward with performance -1996\n", + " perceives ('Clean', 'None') and does Forward with performance -1997\n", + " perceives ('Clean', 'None') and does Forward with performance -1998\n", + " perceives ('Clean', 'None') and does Forward with performance -1999\n", + " perceives ('Clean', 'None') and does Forward with performance -2000\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2001\n", + " perceives ('Clean', 'None') and does Forward with performance -2002\n", + " perceives ('Clean', 'None') and does Forward with performance -2003\n", + " perceives ('Clean', 'None') and does Forward with performance -2004\n", + " perceives ('Clean', 'None') and does Forward with performance -2005\n", + " perceives ('Clean', 'None') and does Forward with performance -2006\n", + " perceives ('Clean', 'None') and does Forward with performance -2007\n", + " perceives ('Clean', 'None') and does Forward with performance -2008\n", + " perceives ('Clean', 'None') and does Forward with performance -2009\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2010\n", + " perceives ('Clean', 'None') and does Forward with performance -2011\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2012\n", + " perceives ('Clean', 'None') and does Forward with performance -2013\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2014\n", + " perceives ('Clean', 'None') and does Forward with performance -2015\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2016\n", + " perceives ('Clean', 'None') and does Forward with performance -2017\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2018\n", + " perceives ('Clean', 'None') and does Forward with performance -2019\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2020\n", + " perceives ('Clean', 'None') and does Forward with performance -2021\n", + " perceives ('Clean', 'None') and does Forward with performance -2022\n", + " perceives ('Clean', 'None') and does Forward with performance -2023\n", + " perceives ('Clean', 'None') and does Forward with performance -2024\n", + " perceives ('Clean', 'None') and does Forward with performance -2025\n", + " perceives ('Clean', 'None') and does Forward with performance -2026\n", + " perceives ('Clean', 'None') and does Forward with performance -2027\n", + " perceives ('Clean', 'None') and does Forward with performance -2028\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2029\n", + " perceives ('Clean', 'None') and does Forward with performance -2030\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2031\n", + " perceives ('Clean', 'None') and does Forward with performance -2032\n", + " perceives ('Clean', 'None') and does Forward with performance -2033\n", + " perceives ('Clean', 'None') and does Forward with performance -2034\n", + " perceives ('Clean', 'None') and does Forward with performance -2035\n", + " perceives ('Clean', 'None') and does Forward with performance -2036\n", + " perceives ('Clean', 'None') and does Forward with performance -2037\n", + " perceives ('Clean', 'None') and does Forward with performance -2038\n", + " perceives ('Clean', 'None') and does Forward with performance -2039\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2040\n", + " perceives ('Clean', 'None') and does Forward with performance -2041\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2042\n", + " perceives ('Clean', 'None') and does Forward with performance -2043\n", + " perceives ('Clean', 'None') and does Forward with performance -2044\n", + " perceives ('Clean', 'None') and does Forward with performance -2045\n", + " perceives ('Clean', 'None') and does Forward with performance -2046\n", + " perceives ('Clean', 'None') and does Forward with performance -2047\n", + " perceives ('Clean', 'None') and does Forward with performance -2048\n", + " perceives ('Clean', 'None') and does Forward with performance -2049\n", + " perceives ('Clean', 'None') and does Forward with performance -2050\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2051\n", + " perceives ('Clean', 'None') and does Forward with performance -2052\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2053\n", + " perceives ('Clean', 'None') and does Forward with performance -2054\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2055\n", + " perceives ('Clean', 'None') and does Forward with performance -2056\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2057\n", + " perceives ('Clean', 'None') and does Forward with performance -2058\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2059\n", + " perceives ('Clean', 'None') and does Forward with performance -2060\n", + " perceives ('Clean', 'None') and does Forward with performance -2061\n", + " perceives ('Clean', 'None') and does Forward with performance -2062\n", + " perceives ('Clean', 'None') and does Forward with performance -2063\n", + " perceives ('Clean', 'None') and does Forward with performance -2064\n", + " perceives ('Clean', 'None') and does Forward with performance -2065\n", + " perceives ('Clean', 'None') and does Forward with performance -2066\n", + " perceives ('Clean', 'None') and does Forward with performance -2067\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2068\n", + " perceives ('Clean', 'None') and does Forward with performance -2069\n", + " perceives ('Clean', 'None') and does Forward with performance -2070\n", + " perceives ('Clean', 'None') and does Forward with performance -2071\n", + " perceives ('Clean', 'None') and does Forward with performance -2072\n", + " perceives ('Clean', 'None') and does Forward with performance -2073\n", + " perceives ('Clean', 'None') and does Forward with performance -2074\n", + " perceives ('Clean', 'None') and does Forward with performance -2075\n", + " perceives ('Clean', 'None') and does Forward with performance -2076\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2077\n", + " perceives ('Clean', 'None') and does Forward with performance -2078\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2079\n", + " perceives ('Clean', 'None') and does Forward with performance -2080\n", + " perceives ('Clean', 'None') and does Forward with performance -2081\n", + " perceives ('Clean', 'None') and does Forward with performance -2082\n", + " perceives ('Clean', 'None') and does Forward with performance -2083\n", + " perceives ('Clean', 'None') and does Forward with performance -2084\n", + " perceives ('Clean', 'None') and does Forward with performance -2085\n", + " perceives ('Clean', 'None') and does Forward with performance -2086\n", + " perceives ('Clean', 'None') and does Forward with performance -2087\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2088\n", + " perceives ('Clean', 'None') and does Forward with performance -2089\n", + " perceives ('Clean', 'None') and does Forward with performance -2090\n", + " perceives ('Clean', 'None') and does Forward with performance -2091\n", + " perceives ('Clean', 'None') and does Forward with performance -2092\n", + " perceives ('Clean', 'None') and does Forward with performance -2093\n", + " perceives ('Clean', 'None') and does Forward with performance -2094\n", + " perceives ('Clean', 'None') and does Forward with performance -2095\n", + " perceives ('Clean', 'None') and does Forward with performance -2096\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2097\n", + " perceives ('Clean', 'None') and does Forward with performance -2098\n", + " perceives ('Clean', 'None') and does Forward with performance -2099\n", + " perceives ('Clean', 'None') and does Forward with performance -2100\n", + " perceives ('Clean', 'None') and does Forward with performance -2101\n", + " perceives ('Clean', 'None') and does Forward with performance -2102\n", + " perceives ('Clean', 'None') and does Forward with performance -2103\n", + " perceives ('Clean', 'None') and does Forward with performance -2104\n", + " perceives ('Clean', 'None') and does Forward with performance -2105\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2106\n", + " perceives ('Clean', 'None') and does Forward with performance -2107\n", + " perceives ('Clean', 'None') and does Forward with performance -2108\n", + " perceives ('Clean', 'None') and does Forward with performance -2109\n", + " perceives ('Clean', 'None') and does Forward with performance -2110\n", + " perceives ('Clean', 'None') and does Forward with performance -2111\n", + " perceives ('Clean', 'None') and does Forward with performance -2112\n", + " perceives ('Clean', 'None') and does Forward with performance -2113\n", + " perceives ('Clean', 'None') and does Forward with performance -2114\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2115\n", + " perceives ('Clean', 'None') and does Forward with performance -2116\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2117\n", + " perceives ('Clean', 'None') and does Forward with performance -2118\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2119\n", + " perceives ('Clean', 'None') and does Forward with performance -2120\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2121\n", + " perceives ('Clean', 'None') and does Forward with performance -2122\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2123\n", + " perceives ('Clean', 'None') and does Forward with performance -2124\n", + " perceives ('Clean', 'None') and does Forward with performance -2125\n", + " perceives ('Clean', 'None') and does Forward with performance -2126\n", + " perceives ('Clean', 'None') and does Forward with performance -2127\n", + " perceives ('Clean', 'None') and does Forward with performance -2128\n", + " perceives ('Clean', 'None') and does Forward with performance -2129\n", + " perceives ('Clean', 'None') and does Forward with performance -2130\n", + " perceives ('Clean', 'None') and does Forward with performance -2131\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2132\n", + " perceives ('Clean', 'None') and does Forward with performance -2133\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2134\n", + " perceives ('Clean', 'None') and does Forward with performance -2135\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2136\n", + " perceives ('Clean', 'None') and does Forward with performance -2137\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2138\n", + " perceives ('Clean', 'None') and does Forward with performance -2139\n", + " perceives ('Clean', 'None') and does Forward with performance -2140\n", + " perceives ('Clean', 'None') and does Forward with performance -2141\n", + " perceives ('Clean', 'None') and does Forward with performance -2142\n", + " perceives ('Clean', 'None') and does Forward with performance -2143\n", + " perceives ('Clean', 'None') and does Forward with performance -2144\n", + " perceives ('Clean', 'None') and does Forward with performance -2145\n", + " perceives ('Clean', 'None') and does Forward with performance -2146\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2147\n", + " perceives ('Clean', 'None') and does Forward with performance -2148\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2149\n", + " perceives ('Clean', 'None') and does Forward with performance -2150\n", + " perceives ('Clean', 'None') and does Forward with performance -2151\n", + " perceives ('Clean', 'None') and does Forward with performance -2152\n", + " perceives ('Clean', 'None') and does Forward with performance -2153\n", + " perceives ('Clean', 'None') and does Forward with performance -2154\n", + " perceives ('Clean', 'None') and does Forward with performance -2155\n", + " perceives ('Clean', 'None') and does Forward with performance -2156\n", + " perceives ('Clean', 'None') and does Forward with performance -2157\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2158\n", + " perceives ('Clean', 'None') and does Forward with performance -2159\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2160\n", + " perceives ('Clean', 'None') and does Forward with performance -2161\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2162\n", + " perceives ('Clean', 'None') and does Forward with performance -2163\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2164\n", + " perceives ('Clean', 'None') and does Forward with performance -2165\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2166\n", + " perceives ('Clean', 'None') and does Forward with performance -2167\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2168\n", + " perceives ('Clean', 'None') and does Forward with performance -2169\n", + " perceives ('Clean', 'None') and does Forward with performance -2170\n", + " perceives ('Clean', 'None') and does Forward with performance -2171\n", + " perceives ('Clean', 'None') and does Forward with performance -2172\n", + " perceives ('Clean', 'None') and does Forward with performance -2173\n", + " perceives ('Clean', 'None') and does Forward with performance -2174\n", + " perceives ('Clean', 'None') and does Forward with performance -2175\n", + " perceives ('Clean', 'None') and does Forward with performance -2176\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2177\n", + " perceives ('Clean', 'None') and does Forward with performance -2178\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2179\n", + " perceives ('Clean', 'None') and does Forward with performance -2180\n", + " perceives ('Clean', 'None') and does Forward with performance -2181\n", + " perceives ('Clean', 'None') and does Forward with performance -2182\n", + " perceives ('Clean', 'None') and does Forward with performance -2183\n", + " perceives ('Clean', 'None') and does Forward with performance -2184\n", + " perceives ('Clean', 'None') and does Forward with performance -2185\n", + " perceives ('Clean', 'None') and does Forward with performance -2186\n", + " perceives ('Clean', 'None') and does Forward with performance -2187\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2188\n", + " perceives ('Clean', 'None') and does Forward with performance -2189\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2190\n", + " perceives ('Clean', 'None') and does Forward with performance -2191\n", + " perceives ('Clean', 'None') and does Forward with performance -2192\n", + " perceives ('Clean', 'None') and does Forward with performance -2193\n", + " perceives ('Clean', 'None') and does Forward with performance -2194\n", + " perceives ('Clean', 'None') and does Forward with performance -2195\n", + " perceives ('Clean', 'None') and does Forward with performance -2196\n", + " perceives ('Clean', 'None') and does Forward with performance -2197\n", + " perceives ('Clean', 'None') and does Forward with performance -2198\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2199\n", + " perceives ('Clean', 'None') and does Forward with performance -2200\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2201\n", + " perceives ('Clean', 'None') and does Forward with performance -2202\n", + " perceives ('Clean', 'None') and does Forward with performance -2203\n", + " perceives ('Clean', 'None') and does Forward with performance -2204\n", + " perceives ('Clean', 'None') and does Forward with performance -2205\n", + " perceives ('Clean', 'None') and does Forward with performance -2206\n", + " perceives ('Clean', 'None') and does Forward with performance -2207\n", + " perceives ('Clean', 'None') and does Forward with performance -2208\n", + " perceives ('Clean', 'None') and does Forward with performance -2209\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2210\n", + " perceives ('Clean', 'None') and does Forward with performance -2211\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2212\n", + " perceives ('Clean', 'None') and does Forward with performance -2213\n", + " perceives ('Clean', 'None') and does Forward with performance -2214\n", + " perceives ('Clean', 'None') and does Forward with performance -2215\n", + " perceives ('Clean', 'None') and does Forward with performance -2216\n", + " perceives ('Clean', 'None') and does Forward with performance -2217\n", + " perceives ('Clean', 'None') and does Forward with performance -2218\n", + " perceives ('Clean', 'None') and does Forward with performance -2219\n", + " perceives ('Clean', 'None') and does Forward with performance -2220\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2221\n", + " perceives ('Clean', 'None') and does Forward with performance -2222\n", + " perceives ('Clean', 'None') and does Forward with performance -2223\n", + " perceives ('Clean', 'None') and does Forward with performance -2224\n", + " perceives ('Clean', 'None') and does Forward with performance -2225\n", + " perceives ('Clean', 'None') and does Forward with performance -2226\n", + " perceives ('Clean', 'None') and does Forward with performance -2227\n", + " perceives ('Clean', 'None') and does Forward with performance -2228\n", + " perceives ('Clean', 'None') and does Forward with performance -2229\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2230\n", + " perceives ('Clean', 'None') and does Forward with performance -2231\n", + " perceives ('Clean', 'None') and does Forward with performance -2232\n", + " perceives ('Clean', 'None') and does Forward with performance -2233\n", + " perceives ('Clean', 'None') and does Forward with performance -2234\n", + " perceives ('Clean', 'None') and does Forward with performance -2235\n", + " perceives ('Clean', 'None') and does Forward with performance -2236\n", + " perceives ('Clean', 'None') and does Forward with performance -2237\n", + " perceives ('Clean', 'None') and does Forward with performance -2238\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2239\n", + " perceives ('Clean', 'None') and does Forward with performance -2240\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2241\n", + " perceives ('Clean', 'None') and does Forward with performance -2242\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2243\n", + " perceives ('Clean', 'None') and does Forward with performance -2244\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2245\n", + " perceives ('Clean', 'None') and does Forward with performance -2246\n", + " perceives ('Clean', 'None') and does Forward with performance -2247\n", + " perceives ('Clean', 'None') and does Forward with performance -2248\n", + " perceives ('Clean', 'None') and does Forward with performance -2249\n", + " perceives ('Clean', 'None') and does Forward with performance -2250\n", + " perceives ('Clean', 'None') and does Forward with performance -2251\n", + " perceives ('Clean', 'None') and does Forward with performance -2252\n", + " perceives ('Clean', 'None') and does Forward with performance -2253\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2254\n", + " perceives ('Clean', 'None') and does Forward with performance -2255\n", + " perceives ('Clean', 'None') and does Forward with performance -2256\n", + " perceives ('Clean', 'None') and does Forward with performance -2257\n", + " perceives ('Clean', 'None') and does Forward with performance -2258\n", + " perceives ('Clean', 'None') and does Forward with performance -2259\n", + " perceives ('Clean', 'None') and does Forward with performance -2260\n", + " perceives ('Clean', 'None') and does Forward with performance -2261\n", + " perceives ('Clean', 'None') and does Forward with performance -2262\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2263\n", + " perceives ('Clean', 'None') and does Forward with performance -2264\n", + " perceives ('Clean', 'None') and does Forward with performance -2265\n", + " perceives ('Clean', 'None') and does Forward with performance -2266\n", + " perceives ('Clean', 'None') and does Forward with performance -2267\n", + " perceives ('Clean', 'None') and does Forward with performance -2268\n", + " perceives ('Clean', 'None') and does Forward with performance -2269\n", + " perceives ('Clean', 'None') and does Forward with performance -2270\n", + " perceives ('Clean', 'None') and does Forward with performance -2271\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2272\n", + " perceives ('Clean', 'None') and does Forward with performance -2273\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2274\n", + " perceives ('Clean', 'None') and does Forward with performance -2275\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2276\n", + " perceives ('Clean', 'None') and does Forward with performance -2277\n", + " perceives ('Clean', 'None') and does Forward with performance -2278\n", + " perceives ('Clean', 'None') and does Forward with performance -2279\n", + " perceives ('Clean', 'None') and does Forward with performance -2280\n", + " perceives ('Clean', 'None') and does Forward with performance -2281\n", + " perceives ('Clean', 'None') and does Forward with performance -2282\n", + " perceives ('Clean', 'None') and does Forward with performance -2283\n", + " perceives ('Clean', 'None') and does Forward with performance -2284\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2285\n", + " perceives ('Clean', 'None') and does Forward with performance -2286\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2287\n", + " perceives ('Clean', 'None') and does Forward with performance -2288\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2289\n", + " perceives ('Clean', 'None') and does Forward with performance -2290\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2291\n", + " perceives ('Clean', 'None') and does Forward with performance -2292\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2293\n", + " perceives ('Clean', 'None') and does Forward with performance -2294\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2295\n", + " perceives ('Clean', 'None') and does Forward with performance -2296\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2297\n", + " perceives ('Clean', 'None') and does Forward with performance -2298\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2299\n", + " perceives ('Clean', 'None') and does Forward with performance -2300\n", + " perceives ('Clean', 'None') and does Forward with performance -2301\n", + " perceives ('Clean', 'None') and does Forward with performance -2302\n", + " perceives ('Clean', 'None') and does Forward with performance -2303\n", + " perceives ('Clean', 'None') and does Forward with performance -2304\n", + " perceives ('Clean', 'None') and does Forward with performance -2305\n", + " perceives ('Clean', 'None') and does Forward with performance -2306\n", + " perceives ('Clean', 'None') and does Forward with performance -2307\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2308\n", + " perceives ('Clean', 'None') and does Forward with performance -2309\n", + " perceives ('Clean', 'None') and does Forward with performance -2310\n", + " perceives ('Clean', 'None') and does Forward with performance -2311\n", + " perceives ('Clean', 'None') and does Forward with performance -2312\n", + " perceives ('Clean', 'None') and does Forward with performance -2313\n", + " perceives ('Clean', 'None') and does Forward with performance -2314\n", + " perceives ('Clean', 'None') and does Forward with performance -2315\n", + " perceives ('Clean', 'None') and does Forward with performance -2316\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2317\n", + " perceives ('Clean', 'None') and does Forward with performance -2318\n", + " perceives ('Clean', 'None') and does Forward with performance -2319\n", + " perceives ('Clean', 'None') and does Forward with performance -2320\n", + " perceives ('Clean', 'None') and does Forward with performance -2321\n", + " perceives ('Clean', 'None') and does Forward with performance -2322\n", + " perceives ('Clean', 'None') and does Forward with performance -2323\n", + " perceives ('Clean', 'None') and does Forward with performance -2324\n", + " perceives ('Clean', 'None') and does Forward with performance -2325\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2326\n", + " perceives ('Clean', 'None') and does Forward with performance -2327\n", + " perceives ('Clean', 'None') and does Forward with performance -2328\n", + " perceives ('Clean', 'None') and does Forward with performance -2329\n", + " perceives ('Clean', 'None') and does Forward with performance -2330\n", + " perceives ('Clean', 'None') and does Forward with performance -2331\n", + " perceives ('Clean', 'None') and does Forward with performance -2332\n", + " perceives ('Clean', 'None') and does Forward with performance -2333\n", + " perceives ('Clean', 'None') and does Forward with performance -2334\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2335\n", + " perceives ('Clean', 'None') and does Forward with performance -2336\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2337\n", + " perceives ('Clean', 'None') and does Forward with performance -2338\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2339\n", + " perceives ('Clean', 'None') and does Forward with performance -2340\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2341\n", + " perceives ('Clean', 'None') and does Forward with performance -2342\n", + " perceives ('Clean', 'None') and does Forward with performance -2343\n", + " perceives ('Clean', 'None') and does Forward with performance -2344\n", + " perceives ('Clean', 'None') and does Forward with performance -2345\n", + " perceives ('Clean', 'None') and does Forward with performance -2346\n", + " perceives ('Clean', 'None') and does Forward with performance -2347\n", + " perceives ('Clean', 'None') and does Forward with performance -2348\n", + " perceives ('Clean', 'None') and does Forward with performance -2349\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2350\n", + " perceives ('Clean', 'None') and does Forward with performance -2351\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2352\n", + " perceives ('Clean', 'None') and does Forward with performance -2353\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2354\n", + " perceives ('Clean', 'None') and does Forward with performance -2355\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2356\n", + " perceives ('Clean', 'None') and does Forward with performance -2357\n", + " perceives ('Clean', 'None') and does Forward with performance -2358\n", + " perceives ('Clean', 'None') and does Forward with performance -2359\n", + " perceives ('Clean', 'None') and does Forward with performance -2360\n", + " perceives ('Clean', 'None') and does Forward with performance -2361\n", + " perceives ('Clean', 'None') and does Forward with performance -2362\n", + " perceives ('Clean', 'None') and does Forward with performance -2363\n", + " perceives ('Clean', 'None') and does Forward with performance -2364\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2365\n", + " perceives ('Clean', 'None') and does Forward with performance -2366\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2367\n", + " perceives ('Clean', 'None') and does Forward with performance -2368\n", + " perceives ('Clean', 'None') and does Forward with performance -2369\n", + " perceives ('Clean', 'None') and does Forward with performance -2370\n", + " perceives ('Clean', 'None') and does Forward with performance -2371\n", + " perceives ('Clean', 'None') and does Forward with performance -2372\n", + " perceives ('Clean', 'None') and does Forward with performance -2373\n", + " perceives ('Clean', 'None') and does Forward with performance -2374\n", + " perceives ('Clean', 'None') and does Forward with performance -2375\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2376\n", + " perceives ('Clean', 'None') and does Forward with performance -2377\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2378\n", + " perceives ('Clean', 'None') and does Forward with performance -2379\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2380\n", + " perceives ('Clean', 'None') and does Forward with performance -2381\n", + " perceives ('Clean', 'None') and does Forward with performance -2382\n", + " perceives ('Clean', 'None') and does Forward with performance -2383\n", + " perceives ('Clean', 'None') and does Forward with performance -2384\n", + " perceives ('Clean', 'None') and does Forward with performance -2385\n", + " perceives ('Clean', 'None') and does Forward with performance -2386\n", + " perceives ('Clean', 'None') and does Forward with performance -2387\n", + " perceives ('Clean', 'None') and does Forward with performance -2388\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2389\n", + " perceives ('Clean', 'None') and does Forward with performance -2390\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2391\n", + " perceives ('Clean', 'None') and does Forward with performance -2392\n", + " perceives ('Clean', 'None') and does Forward with performance -2393\n", + " perceives ('Clean', 'None') and does Forward with performance -2394\n", + " perceives ('Clean', 'None') and does Forward with performance -2395\n", + " perceives ('Clean', 'None') and does Forward with performance -2396\n", + " perceives ('Clean', 'None') and does Forward with performance -2397\n", + " perceives ('Clean', 'None') and does Forward with performance -2398\n", + " perceives ('Clean', 'None') and does Forward with performance -2399\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2400\n", + " perceives ('Clean', 'None') and does Forward with performance -2401\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2402\n", + " perceives ('Clean', 'None') and does Forward with performance -2403\n", + " perceives ('Clean', 'None') and does Forward with performance -2404\n", + " perceives ('Clean', 'None') and does Forward with performance -2405\n", + " perceives ('Clean', 'None') and does Forward with performance -2406\n", + " perceives ('Clean', 'None') and does Forward with performance -2407\n", + " perceives ('Clean', 'None') and does Forward with performance -2408\n", + " perceives ('Clean', 'None') and does Forward with performance -2409\n", + " perceives ('Clean', 'None') and does Forward with performance -2410\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2411\n", + " perceives ('Clean', 'None') and does Forward with performance -2412\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2413\n", + " perceives ('Clean', 'None') and does Forward with performance -2414\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2415\n", + " perceives ('Clean', 'None') and does Forward with performance -2416\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2417\n", + " perceives ('Clean', 'None') and does Forward with performance -2418\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2419\n", + " perceives ('Clean', 'None') and does Forward with performance -2420\n", + " perceives ('Clean', 'None') and does Forward with performance -2421\n", + " perceives ('Clean', 'None') and does Forward with performance -2422\n", + " perceives ('Clean', 'None') and does Forward with performance -2423\n", + " perceives ('Clean', 'None') and does Forward with performance -2424\n", + " perceives ('Clean', 'None') and does Forward with performance -2425\n", + " perceives ('Clean', 'None') and does Forward with performance -2426\n", + " perceives ('Clean', 'None') and does Forward with performance -2427\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2428\n", + " perceives ('Clean', 'None') and does Forward with performance -2429\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2430\n", + " perceives ('Clean', 'None') and does Forward with performance -2431\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2432\n", + " perceives ('Clean', 'None') and does Forward with performance -2433\n", + " perceives ('Clean', 'None') and does Forward with performance -2434\n", + " perceives ('Clean', 'None') and does Forward with performance -2435\n", + " perceives ('Clean', 'None') and does Forward with performance -2436\n", + " perceives ('Clean', 'None') and does Forward with performance -2437\n", + " perceives ('Clean', 'None') and does Forward with performance -2438\n", + " perceives ('Clean', 'None') and does Forward with performance -2439\n", + " perceives ('Clean', 'None') and does Forward with performance -2440\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2441\n", + " perceives ('Clean', 'None') and does Forward with performance -2442\n", + " perceives ('Clean', 'None') and does Forward with performance -2443\n", + " perceives ('Clean', 'None') and does Forward with performance -2444\n", + " perceives ('Clean', 'None') and does Forward with performance -2445\n", + " perceives ('Clean', 'None') and does Forward with performance -2446\n", + " perceives ('Clean', 'None') and does Forward with performance -2447\n", + " perceives ('Clean', 'None') and does Forward with performance -2448\n", + " perceives ('Clean', 'None') and does Forward with performance -2449\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2450\n", + " perceives ('Clean', 'None') and does Forward with performance -2451\n", + " perceives ('Clean', 'None') and does Forward with performance -2452\n", + " perceives ('Clean', 'None') and does Forward with performance -2453\n", + " perceives ('Clean', 'None') and does Forward with performance -2454\n", + " perceives ('Clean', 'None') and does Forward with performance -2455\n", + " perceives ('Clean', 'None') and does Forward with performance -2456\n", + " perceives ('Clean', 'None') and does Forward with performance -2457\n", + " perceives ('Clean', 'None') and does Forward with performance -2458\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2459\n", + " perceives ('Clean', 'None') and does Forward with performance -2460\n", + " perceives ('Clean', 'None') and does Forward with performance -2461\n", + " perceives ('Clean', 'None') and does Forward with performance -2462\n", + " perceives ('Clean', 'None') and does Forward with performance -2463\n", + " perceives ('Clean', 'None') and does Forward with performance -2464\n", + " perceives ('Clean', 'None') and does Forward with performance -2465\n", + " perceives ('Clean', 'None') and does Forward with performance -2466\n", + " perceives ('Clean', 'None') and does Forward with performance -2467\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2468\n", + " perceives ('Clean', 'None') and does Forward with performance -2469\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2470\n", + " perceives ('Clean', 'None') and does Forward with performance -2471\n", + " perceives ('Clean', 'None') and does Forward with performance -2472\n", + " perceives ('Clean', 'None') and does Forward with performance -2473\n", + " perceives ('Clean', 'None') and does Forward with performance -2474\n", + " perceives ('Clean', 'None') and does Forward with performance -2475\n", + " perceives ('Clean', 'None') and does Forward with performance -2476\n", + " perceives ('Clean', 'None') and does Forward with performance -2477\n", + " perceives ('Clean', 'None') and does Forward with performance -2478\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2479\n", + " perceives ('Clean', 'None') and does Forward with performance -2480\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2481\n", + " perceives ('Clean', 'None') and does Forward with performance -2482\n", + " perceives ('Clean', 'None') and does Forward with performance -2483\n", + " perceives ('Clean', 'None') and does Forward with performance -2484\n", + " perceives ('Clean', 'None') and does Forward with performance -2485\n", + " perceives ('Clean', 'None') and does Forward with performance -2486\n", + " perceives ('Clean', 'None') and does Forward with performance -2487\n", + " perceives ('Clean', 'None') and does Forward with performance -2488\n", + " perceives ('Clean', 'None') and does Forward with performance -2489\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2490\n", + " perceives ('Clean', 'None') and does Forward with performance -2491\n", + " perceives ('Clean', 'None') and does Forward with performance -2492\n", + " perceives ('Clean', 'None') and does Forward with performance -2493\n", + " perceives ('Clean', 'None') and does Forward with performance -2494\n", + " perceives ('Clean', 'None') and does Forward with performance -2495\n", + " perceives ('Clean', 'None') and does Forward with performance -2496\n", + " perceives ('Clean', 'None') and does Forward with performance -2497\n", + " perceives ('Clean', 'None') and does Forward with performance -2498\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2499\n", + " perceives ('Clean', 'None') and does Forward with performance -2500\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2501\n", + " perceives ('Clean', 'None') and does Forward with performance -2502\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2503\n", + " perceives ('Clean', 'None') and does Forward with performance -2504\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2505\n", + " perceives ('Clean', 'None') and does Forward with performance -2506\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2507\n", + " perceives ('Clean', 'None') and does Forward with performance -2508\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2509\n", + " perceives ('Clean', 'None') and does Forward with performance -2510\n", + " perceives ('Clean', 'None') and does Forward with performance -2511\n", + " perceives ('Clean', 'None') and does Forward with performance -2512\n", + " perceives ('Clean', 'None') and does Forward with performance -2513\n", + " perceives ('Clean', 'None') and does Forward with performance -2514\n", + " perceives ('Clean', 'None') and does Forward with performance -2515\n", + " perceives ('Clean', 'None') and does Forward with performance -2516\n", + " perceives ('Clean', 'None') and does Forward with performance -2517\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2518\n", + " perceives ('Clean', 'None') and does Forward with performance -2519\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2520\n", + " perceives ('Clean', 'None') and does Forward with performance -2521\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2522\n", + " perceives ('Clean', 'None') and does Forward with performance -2523\n", + " perceives ('Clean', 'None') and does Forward with performance -2524\n", + " perceives ('Clean', 'None') and does Forward with performance -2525\n", + " perceives ('Clean', 'None') and does Forward with performance -2526\n", + " perceives ('Clean', 'None') and does Forward with performance -2527\n", + " perceives ('Clean', 'None') and does Forward with performance -2528\n", + " perceives ('Clean', 'None') and does Forward with performance -2529\n", + " perceives ('Clean', 'None') and does Forward with performance -2530\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2531\n", + " perceives ('Clean', 'None') and does Forward with performance -2532\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2533\n", + " perceives ('Clean', 'None') and does Forward with performance -2534\n", + " perceives ('Clean', 'None') and does Forward with performance -2535\n", + " perceives ('Clean', 'None') and does Forward with performance -2536\n", + " perceives ('Clean', 'None') and does Forward with performance -2537\n", + " perceives ('Clean', 'None') and does Forward with performance -2538\n", + " perceives ('Clean', 'None') and does Forward with performance -2539\n", + " perceives ('Clean', 'None') and does Forward with performance -2540\n", + " perceives ('Clean', 'None') and does Forward with performance -2541\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2542\n", + " perceives ('Clean', 'None') and does Forward with performance -2543\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2544\n", + " perceives ('Clean', 'None') and does Forward with performance -2545\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2546\n", + " perceives ('Clean', 'None') and does Forward with performance -2547\n", + " perceives ('Clean', 'None') and does Forward with performance -2548\n", + " perceives ('Clean', 'None') and does Forward with performance -2549\n", + " perceives ('Clean', 'None') and does Forward with performance -2550\n", + " perceives ('Clean', 'None') and does Forward with performance -2551\n", + " perceives ('Clean', 'None') and does Forward with performance -2552\n", + " perceives ('Clean', 'None') and does Forward with performance -2553\n", + " perceives ('Clean', 'None') and does Forward with performance -2554\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2555\n", + " perceives ('Clean', 'None') and does Forward with performance -2556\n", + " perceives ('Clean', 'None') and does Forward with performance -2557\n", + " perceives ('Clean', 'None') and does Forward with performance -2558\n", + " perceives ('Clean', 'None') and does Forward with performance -2559\n", + " perceives ('Clean', 'None') and does Forward with performance -2560\n", + " perceives ('Clean', 'None') and does Forward with performance -2561\n", + " perceives ('Clean', 'None') and does Forward with performance -2562\n", + " perceives ('Clean', 'None') and does Forward with performance -2563\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2564\n", + " perceives ('Clean', 'None') and does Forward with performance -2565\n", + " perceives ('Clean', 'None') and does Forward with performance -2566\n", + " perceives ('Clean', 'None') and does Forward with performance -2567\n", + " perceives ('Clean', 'None') and does Forward with performance -2568\n", + " perceives ('Clean', 'None') and does Forward with performance -2569\n", + " perceives ('Clean', 'None') and does Forward with performance -2570\n", + " perceives ('Clean', 'None') and does Forward with performance -2571\n", + " perceives ('Clean', 'None') and does Forward with performance -2572\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2573\n", + " perceives ('Clean', 'None') and does Forward with performance -2574\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2575\n", + " perceives ('Clean', 'None') and does Forward with performance -2576\n", + " perceives ('Clean', 'None') and does Forward with performance -2577\n", + " perceives ('Clean', 'None') and does Forward with performance -2578\n", + " perceives ('Clean', 'None') and does Forward with performance -2579\n", + " perceives ('Clean', 'None') and does Forward with performance -2580\n", + " perceives ('Clean', 'None') and does Forward with performance -2581\n", + " perceives ('Clean', 'None') and does Forward with performance -2582\n", + " perceives ('Clean', 'None') and does Forward with performance -2583\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2584\n", + " perceives ('Clean', 'None') and does Forward with performance -2585\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2586\n", + " perceives ('Clean', 'None') and does Forward with performance -2587\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2588\n", + " perceives ('Clean', 'None') and does Forward with performance -2589\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2590\n", + " perceives ('Clean', 'None') and does Forward with performance -2591\n", + " perceives ('Clean', 'None') and does Forward with performance -2592\n", + " perceives ('Clean', 'None') and does Forward with performance -2593\n", + " perceives ('Clean', 'None') and does Forward with performance -2594\n", + " perceives ('Clean', 'None') and does Forward with performance -2595\n", + " perceives ('Clean', 'None') and does Forward with performance -2596\n", + " perceives ('Clean', 'None') and does Forward with performance -2597\n", + " perceives ('Clean', 'None') and does Forward with performance -2598\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2599\n", + " perceives ('Clean', 'None') and does Forward with performance -2600\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2601\n", + " perceives ('Clean', 'None') and does Forward with performance -2602\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2603\n", + " perceives ('Clean', 'None') and does Forward with performance -2604\n", + " perceives ('Clean', 'None') and does Forward with performance -2605\n", + " perceives ('Clean', 'None') and does Forward with performance -2606\n", + " perceives ('Clean', 'None') and does Forward with performance -2607\n", + " perceives ('Clean', 'None') and does Forward with performance -2608\n", + " perceives ('Clean', 'None') and does Forward with performance -2609\n", + " perceives ('Clean', 'None') and does Forward with performance -2610\n", + " perceives ('Clean', 'None') and does Forward with performance -2611\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2612\n", + " perceives ('Clean', 'None') and does Forward with performance -2613\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2614\n", + " perceives ('Clean', 'None') and does Forward with performance -2615\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2616\n", + " perceives ('Clean', 'None') and does Forward with performance -2617\n", + " perceives ('Clean', 'None') and does Forward with performance -2618\n", + " perceives ('Clean', 'None') and does Forward with performance -2619\n", + " perceives ('Clean', 'None') and does Forward with performance -2620\n", + " perceives ('Clean', 'None') and does Forward with performance -2621\n", + " perceives ('Clean', 'None') and does Forward with performance -2622\n", + " perceives ('Clean', 'None') and does Forward with performance -2623\n", + " perceives ('Clean', 'None') and does Forward with performance -2624\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2625\n", + " perceives ('Clean', 'None') and does Forward with performance -2626\n", + " perceives ('Clean', 'None') and does Forward with performance -2627\n", + " perceives ('Clean', 'None') and does Forward with performance -2628\n", + " perceives ('Clean', 'None') and does Forward with performance -2629\n", + " perceives ('Clean', 'None') and does Forward with performance -2630\n", + " perceives ('Clean', 'None') and does Forward with performance -2631\n", + " perceives ('Clean', 'None') and does Forward with performance -2632\n", + " perceives ('Clean', 'None') and does Forward with performance -2633\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2634\n", + " perceives ('Clean', 'None') and does Forward with performance -2635\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2636\n", + " perceives ('Clean', 'None') and does Forward with performance -2637\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2638\n", + " perceives ('Clean', 'None') and does Forward with performance -2639\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2640\n", + " perceives ('Clean', 'None') and does Forward with performance -2641\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2642\n", + " perceives ('Clean', 'None') and does Forward with performance -2643\n", + " perceives ('Clean', 'None') and does Forward with performance -2644\n", + " perceives ('Clean', 'None') and does Forward with performance -2645\n", + " perceives ('Clean', 'None') and does Forward with performance -2646\n", + " perceives ('Clean', 'None') and does Forward with performance -2647\n", + " perceives ('Clean', 'None') and does Forward with performance -2648\n", + " perceives ('Clean', 'None') and does Forward with performance -2649\n", + " perceives ('Clean', 'None') and does Forward with performance -2650\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2651\n", + " perceives ('Clean', 'None') and does Forward with performance -2652\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2653\n", + " perceives ('Clean', 'None') and does Forward with performance -2654\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2655\n", + " perceives ('Clean', 'None') and does Forward with performance -2656\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2657\n", + " perceives ('Clean', 'None') and does Forward with performance -2658\n", + " perceives ('Clean', 'None') and does Forward with performance -2659\n", + " perceives ('Clean', 'None') and does Forward with performance -2660\n", + " perceives ('Clean', 'None') and does Forward with performance -2661\n", + " perceives ('Clean', 'None') and does Forward with performance -2662\n", + " perceives ('Clean', 'None') and does Forward with performance -2663\n", + " perceives ('Clean', 'None') and does Forward with performance -2664\n", + " perceives ('Clean', 'None') and does Forward with performance -2665\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2666\n", + " perceives ('Clean', 'None') and does Forward with performance -2667\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2668\n", + " perceives ('Clean', 'None') and does Forward with performance -2669\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2670\n", + " perceives ('Clean', 'None') and does Forward with performance -2671\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2672\n", + " perceives ('Clean', 'None') and does Forward with performance -2673\n", + " perceives ('Clean', 'None') and does Forward with performance -2674\n", + " perceives ('Clean', 'None') and does Forward with performance -2675\n", + " perceives ('Clean', 'None') and does Forward with performance -2676\n", + " perceives ('Clean', 'None') and does Forward with performance -2677\n", + " perceives ('Clean', 'None') and does Forward with performance -2678\n", + " perceives ('Clean', 'None') and does Forward with performance -2679\n", + " perceives ('Clean', 'None') and does Forward with performance -2680\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2681\n", + " perceives ('Clean', 'None') and does Forward with performance -2682\n", + " perceives ('Clean', 'None') and does Forward with performance -2683\n", + " perceives ('Clean', 'None') and does Forward with performance -2684\n", + " perceives ('Clean', 'None') and does Forward with performance -2685\n", + " perceives ('Clean', 'None') and does Forward with performance -2686\n", + " perceives ('Clean', 'None') and does Forward with performance -2687\n", + " perceives ('Clean', 'None') and does Forward with performance -2688\n", + " perceives ('Clean', 'None') and does Forward with performance -2689\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2690\n", + " perceives ('Clean', 'None') and does Forward with performance -2691\n", + " perceives ('Clean', 'None') and does Forward with performance -2692\n", + " perceives ('Clean', 'None') and does Forward with performance -2693\n", + " perceives ('Clean', 'None') and does Forward with performance -2694\n", + " perceives ('Clean', 'None') and does Forward with performance -2695\n", + " perceives ('Clean', 'None') and does Forward with performance -2696\n", + " perceives ('Clean', 'None') and does Forward with performance -2697\n", + " perceives ('Clean', 'None') and does Forward with performance -2698\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2699\n", + " perceives ('Clean', 'None') and does Forward with performance -2700\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2701\n", + " perceives ('Clean', 'None') and does Forward with performance -2702\n", + " perceives ('Clean', 'None') and does Forward with performance -2703\n", + " perceives ('Clean', 'None') and does Forward with performance -2704\n", + " perceives ('Clean', 'None') and does Forward with performance -2705\n", + " perceives ('Clean', 'None') and does Forward with performance -2706\n", + " perceives ('Clean', 'None') and does Forward with performance -2707\n", + " perceives ('Clean', 'None') and does Forward with performance -2708\n", + " perceives ('Clean', 'None') and does Forward with performance -2709\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2710\n", + " perceives ('Clean', 'None') and does Forward with performance -2711\n", + " perceives ('Clean', 'None') and does Forward with performance -2712\n", + " perceives ('Clean', 'None') and does Forward with performance -2713\n", + " perceives ('Clean', 'None') and does Forward with performance -2714\n", + " perceives ('Clean', 'None') and does Forward with performance -2715\n", + " perceives ('Clean', 'None') and does Forward with performance -2716\n", + " perceives ('Clean', 'None') and does Forward with performance -2717\n", + " perceives ('Clean', 'None') and does Forward with performance -2718\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2719\n", + " perceives ('Clean', 'None') and does Forward with performance -2720\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2721\n", + " perceives ('Clean', 'None') and does Forward with performance -2722\n", + " perceives ('Clean', 'None') and does Forward with performance -2723\n", + " perceives ('Clean', 'None') and does Forward with performance -2724\n", + " perceives ('Clean', 'None') and does Forward with performance -2725\n", + " perceives ('Clean', 'None') and does Forward with performance -2726\n", + " perceives ('Clean', 'None') and does Forward with performance -2727\n", + " perceives ('Clean', 'None') and does Forward with performance -2728\n", + " perceives ('Clean', 'None') and does Forward with performance -2729\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2730\n", + " perceives ('Clean', 'None') and does Forward with performance -2731\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2732\n", + " perceives ('Clean', 'None') and does Forward with performance -2733\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2734\n", + " perceives ('Clean', 'None') and does Forward with performance -2735\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2736\n", + " perceives ('Clean', 'None') and does Forward with performance -2737\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2738\n", + " perceives ('Clean', 'None') and does Forward with performance -2739\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2740\n", + " perceives ('Clean', 'None') and does Forward with performance -2741\n", + " perceives ('Clean', 'None') and does Forward with performance -2742\n", + " perceives ('Clean', 'None') and does Forward with performance -2743\n", + " perceives ('Clean', 'None') and does Forward with performance -2744\n", + " perceives ('Clean', 'None') and does Forward with performance -2745\n", + " perceives ('Clean', 'None') and does Forward with performance -2746\n", + " perceives ('Clean', 'None') and does Forward with performance -2747\n", + " perceives ('Clean', 'None') and does Forward with performance -2748\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2749\n", + " perceives ('Clean', 'None') and does Forward with performance -2750\n", + " perceives ('Clean', 'None') and does Forward with performance -2751\n", + " perceives ('Clean', 'None') and does Forward with performance -2752\n", + " perceives ('Clean', 'None') and does Forward with performance -2753\n", + " perceives ('Clean', 'None') and does Forward with performance -2754\n", + " perceives ('Clean', 'None') and does Forward with performance -2755\n", + " perceives ('Clean', 'None') and does Forward with performance -2756\n", + " perceives ('Clean', 'None') and does Forward with performance -2757\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2758\n", + " perceives ('Clean', 'None') and does Forward with performance -2759\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2760\n", + " perceives ('Clean', 'None') and does Forward with performance -2761\n", + " perceives ('Clean', 'None') and does Forward with performance -2762\n", + " perceives ('Clean', 'None') and does Forward with performance -2763\n", + " perceives ('Clean', 'None') and does Forward with performance -2764\n", + " perceives ('Clean', 'None') and does Forward with performance -2765\n", + " perceives ('Clean', 'None') and does Forward with performance -2766\n", + " perceives ('Clean', 'None') and does Forward with performance -2767\n", + " perceives ('Clean', 'None') and does Forward with performance -2768\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2769\n", + " perceives ('Clean', 'None') and does Forward with performance -2770\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2771\n", + " perceives ('Clean', 'None') and does Forward with performance -2772\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2773\n", + " perceives ('Clean', 'None') and does Forward with performance -2774\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2775\n", + " perceives ('Clean', 'None') and does Forward with performance -2776\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2777\n", + " perceives ('Clean', 'None') and does Forward with performance -2778\n", + " perceives ('Clean', 'None') and does Forward with performance -2779\n", + " perceives ('Clean', 'None') and does Forward with performance -2780\n", + " perceives ('Clean', 'None') and does Forward with performance -2781\n", + " perceives ('Clean', 'None') and does Forward with performance -2782\n", + " perceives ('Clean', 'None') and does Forward with performance -2783\n", + " perceives ('Clean', 'None') and does Forward with performance -2784\n", + " perceives ('Clean', 'None') and does Forward with performance -2785\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2786\n", + " perceives ('Clean', 'None') and does Forward with performance -2787\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2788\n", + " perceives ('Clean', 'None') and does Forward with performance -2789\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2790\n", + " perceives ('Clean', 'None') and does Forward with performance -2791\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2792\n", + " perceives ('Clean', 'None') and does Forward with performance -2793\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2794\n", + " perceives ('Clean', 'None') and does Forward with performance -2795\n", + " perceives ('Clean', 'None') and does Forward with performance -2796\n", + " perceives ('Clean', 'None') and does Forward with performance -2797\n", + " perceives ('Clean', 'None') and does Forward with performance -2798\n", + " perceives ('Clean', 'None') and does Forward with performance -2799\n", + " perceives ('Clean', 'None') and does Forward with performance -2800\n", + " perceives ('Clean', 'None') and does Forward with performance -2801\n", + " perceives ('Clean', 'None') and does Forward with performance -2802\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2803\n", + " perceives ('Clean', 'None') and does Forward with performance -2804\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2805\n", + " perceives ('Clean', 'None') and does Forward with performance -2806\n", + " perceives ('Clean', 'None') and does Forward with performance -2807\n", + " perceives ('Clean', 'None') and does Forward with performance -2808\n", + " perceives ('Clean', 'None') and does Forward with performance -2809\n", + " perceives ('Clean', 'None') and does Forward with performance -2810\n", + " perceives ('Clean', 'None') and does Forward with performance -2811\n", + " perceives ('Clean', 'None') and does Forward with performance -2812\n", + " perceives ('Clean', 'None') and does Forward with performance -2813\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2814\n", + " perceives ('Clean', 'None') and does Forward with performance -2815\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2816\n", + " perceives ('Clean', 'None') and does Forward with performance -2817\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2818\n", + " perceives ('Clean', 'None') and does Forward with performance -2819\n", + " perceives ('Clean', 'None') and does Forward with performance -2820\n", + " perceives ('Clean', 'None') and does Forward with performance -2821\n", + " perceives ('Clean', 'None') and does Forward with performance -2822\n", + " perceives ('Clean', 'None') and does Forward with performance -2823\n", + " perceives ('Clean', 'None') and does Forward with performance -2824\n", + " perceives ('Clean', 'None') and does Forward with performance -2825\n", + " perceives ('Clean', 'None') and does Forward with performance -2826\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2827\n", + " perceives ('Clean', 'None') and does Forward with performance -2828\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2829\n", + " perceives ('Clean', 'None') and does Forward with performance -2830\n", + " perceives ('Clean', 'None') and does Forward with performance -2831\n", + " perceives ('Clean', 'None') and does Forward with performance -2832\n", + " perceives ('Clean', 'None') and does Forward with performance -2833\n", + " perceives ('Clean', 'None') and does Forward with performance -2834\n", + " perceives ('Clean', 'None') and does Forward with performance -2835\n", + " perceives ('Clean', 'None') and does Forward with performance -2836\n", + " perceives ('Clean', 'None') and does Forward with performance -2837\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2838\n", + " perceives ('Clean', 'None') and does Forward with performance -2839\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2840\n", + " perceives ('Clean', 'None') and does Forward with performance -2841\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2842\n", + " perceives ('Clean', 'None') and does Forward with performance -2843\n", + " perceives ('Clean', 'None') and does Forward with performance -2844\n", + " perceives ('Clean', 'None') and does Forward with performance -2845\n", + " perceives ('Clean', 'None') and does Forward with performance -2846\n", + " perceives ('Clean', 'None') and does Forward with performance -2847\n", + " perceives ('Clean', 'None') and does Forward with performance -2848\n", + " perceives ('Clean', 'None') and does Forward with performance -2849\n", + " perceives ('Clean', 'None') and does Forward with performance -2850\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2851\n", + " perceives ('Clean', 'None') and does Forward with performance -2852\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2853\n", + " perceives ('Clean', 'None') and does Forward with performance -2854\n", + " perceives ('Clean', 'None') and does Forward with performance -2855\n", + " perceives ('Clean', 'None') and does Forward with performance -2856\n", + " perceives ('Clean', 'None') and does Forward with performance -2857\n", + " perceives ('Clean', 'None') and does Forward with performance -2858\n", + " perceives ('Clean', 'None') and does Forward with performance -2859\n", + " perceives ('Clean', 'None') and does Forward with performance -2860\n", + " perceives ('Clean', 'None') and does Forward with performance -2861\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2862\n", + " perceives ('Clean', 'None') and does Forward with performance -2863\n", + " perceives ('Clean', 'None') and does Forward with performance -2864\n", + " perceives ('Clean', 'None') and does Forward with performance -2865\n", + " perceives ('Clean', 'None') and does Forward with performance -2866\n", + " perceives ('Clean', 'None') and does Forward with performance -2867\n", + " perceives ('Clean', 'None') and does Forward with performance -2868\n", + " perceives ('Clean', 'None') and does Forward with performance -2869\n", + " perceives ('Clean', 'None') and does Forward with performance -2870\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2871\n", + " perceives ('Clean', 'None') and does Forward with performance -2872\n", + " perceives ('Clean', 'None') and does Forward with performance -2873\n", + " perceives ('Clean', 'None') and does Forward with performance -2874\n", + " perceives ('Clean', 'None') and does Forward with performance -2875\n", + " perceives ('Clean', 'None') and does Forward with performance -2876\n", + " perceives ('Clean', 'None') and does Forward with performance -2877\n", + " perceives ('Clean', 'None') and does Forward with performance -2878\n", + " perceives ('Clean', 'None') and does Forward with performance -2879\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2880\n", + " perceives ('Clean', 'None') and does Forward with performance -2881\n", + " perceives ('Clean', 'None') and does Forward with performance -2882\n", + " perceives ('Clean', 'None') and does Forward with performance -2883\n", + " perceives ('Clean', 'None') and does Forward with performance -2884\n", + " perceives ('Clean', 'None') and does Forward with performance -2885\n", + " perceives ('Clean', 'None') and does Forward with performance -2886\n", + " perceives ('Clean', 'None') and does Forward with performance -2887\n", + " perceives ('Clean', 'None') and does Forward with performance -2888\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2889\n", + " perceives ('Clean', 'None') and does Forward with performance -2890\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2891\n", + " perceives ('Clean', 'None') and does Forward with performance -2892\n", + " perceives ('Clean', 'None') and does Forward with performance -2893\n", + " perceives ('Clean', 'None') and does Forward with performance -2894\n", + " perceives ('Clean', 'None') and does Forward with performance -2895\n", + " perceives ('Clean', 'None') and does Forward with performance -2896\n", + " perceives ('Clean', 'None') and does Forward with performance -2897\n", + " perceives ('Clean', 'None') and does Forward with performance -2898\n", + " perceives ('Clean', 'None') and does Forward with performance -2899\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2900\n", + " perceives ('Clean', 'None') and does Forward with performance -2901\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2902\n", + " perceives ('Clean', 'None') and does Forward with performance -2903\n", + " perceives ('Clean', 'None') and does Forward with performance -2904\n", + " perceives ('Clean', 'None') and does Forward with performance -2905\n", + " perceives ('Clean', 'None') and does Forward with performance -2906\n", + " perceives ('Clean', 'None') and does Forward with performance -2907\n", + " perceives ('Clean', 'None') and does Forward with performance -2908\n", + " perceives ('Clean', 'None') and does Forward with performance -2909\n", + " perceives ('Clean', 'None') and does Forward with performance -2910\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2911\n", + " perceives ('Clean', 'None') and does Forward with performance -2912\n", + " perceives ('Clean', 'None') and does Forward with performance -2913\n", + " perceives ('Clean', 'None') and does Forward with performance -2914\n", + " perceives ('Clean', 'None') and does Forward with performance -2915\n", + " perceives ('Clean', 'None') and does Forward with performance -2916\n", + " perceives ('Clean', 'None') and does Forward with performance -2917\n", + " perceives ('Clean', 'None') and does Forward with performance -2918\n", + " perceives ('Clean', 'None') and does Forward with performance -2919\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2920\n", + " perceives ('Clean', 'None') and does Forward with performance -2921\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2922\n", + " perceives ('Clean', 'None') and does Forward with performance -2923\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2924\n", + " perceives ('Clean', 'None') and does Forward with performance -2925\n", + " perceives ('Clean', 'None') and does Forward with performance -2926\n", + " perceives ('Clean', 'None') and does Forward with performance -2927\n", + " perceives ('Clean', 'None') and does Forward with performance -2928\n", + " perceives ('Clean', 'None') and does Forward with performance -2929\n", + " perceives ('Clean', 'None') and does Forward with performance -2930\n", + " perceives ('Clean', 'None') and does Forward with performance -2931\n", + " perceives ('Clean', 'None') and does Forward with performance -2932\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2933\n", + " perceives ('Clean', 'None') and does Forward with performance -2934\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2935\n", + " perceives ('Clean', 'None') and does Forward with performance -2936\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2937\n", + " perceives ('Clean', 'None') and does Forward with performance -2938\n", + " perceives ('Clean', 'None') and does Forward with performance -2939\n", + " perceives ('Clean', 'None') and does Forward with performance -2940\n", + " perceives ('Clean', 'None') and does Forward with performance -2941\n", + " perceives ('Clean', 'None') and does Forward with performance -2942\n", + " perceives ('Clean', 'None') and does Forward with performance -2943\n", + " perceives ('Clean', 'None') and does Forward with performance -2944\n", + " perceives ('Clean', 'None') and does Forward with performance -2945\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2946\n", + " perceives ('Clean', 'None') and does Forward with performance -2947\n", + " perceives ('Clean', 'None') and does Forward with performance -2948\n", + " perceives ('Clean', 'None') and does Forward with performance -2949\n", + " perceives ('Clean', 'None') and does Forward with performance -2950\n", + " perceives ('Clean', 'None') and does Forward with performance -2951\n", + " perceives ('Clean', 'None') and does Forward with performance -2952\n", + " perceives ('Clean', 'None') and does Forward with performance -2953\n", + " perceives ('Clean', 'None') and does Forward with performance -2954\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2955\n", + " perceives ('Clean', 'None') and does Forward with performance -2956\n", + " perceives ('Clean', 'None') and does Forward with performance -2957\n", + " perceives ('Clean', 'None') and does Forward with performance -2958\n", + " perceives ('Clean', 'None') and does Forward with performance -2959\n", + " perceives ('Clean', 'None') and does Forward with performance -2960\n", + " perceives ('Clean', 'None') and does Forward with performance -2961\n", + " perceives ('Clean', 'None') and does Forward with performance -2962\n", + " perceives ('Clean', 'None') and does Forward with performance -2963\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2964\n", + " perceives ('Clean', 'None') and does Forward with performance -2965\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2966\n", + " perceives ('Clean', 'None') and does Forward with performance -2967\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2968\n", + " perceives ('Clean', 'None') and does Forward with performance -2969\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2970\n", + " perceives ('Clean', 'None') and does Forward with performance -2971\n", + " perceives ('Clean', 'None') and does Forward with performance -2972\n", + " perceives ('Clean', 'None') and does Forward with performance -2973\n", + " perceives ('Clean', 'None') and does Forward with performance -2974\n", + " perceives ('Clean', 'None') and does Forward with performance -2975\n", + " perceives ('Clean', 'None') and does Forward with performance -2976\n", + " perceives ('Clean', 'None') and does Forward with performance -2977\n", + " perceives ('Clean', 'None') and does Forward with performance -2978\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2979\n", + " perceives ('Clean', 'None') and does Forward with performance -2980\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2981\n", + " perceives ('Clean', 'None') and does Forward with performance -2982\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2983\n", + " perceives ('Clean', 'None') and does Forward with performance -2984\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2985\n", + " perceives ('Clean', 'None') and does Forward with performance -2986\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -2987\n", + " perceives ('Clean', 'None') and does Forward with performance -2988\n", + " perceives ('Clean', 'None') and does Forward with performance -2989\n", + " perceives ('Clean', 'None') and does Forward with performance -2990\n", + " perceives ('Clean', 'None') and does Forward with performance -2991\n", + " perceives ('Clean', 'None') and does Forward with performance -2992\n", + " perceives ('Clean', 'None') and does Forward with performance -2993\n", + " perceives ('Clean', 'None') and does Forward with performance -2994\n", + " perceives ('Clean', 'None') and does Forward with performance -2995\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2996\n", + " perceives ('Clean', 'None') and does Forward with performance -2997\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -2998\n", + " perceives ('Clean', 'None') and does Forward with performance -2999\n", + " perceives ('Clean', 'None') and does Forward with performance -3000\n", + " perceives ('Clean', 'None') and does Forward with performance -3001\n", + " perceives ('Clean', 'None') and does Forward with performance -3002\n", + " perceives ('Clean', 'None') and does Forward with performance -3003\n", + " perceives ('Clean', 'None') and does Forward with performance -3004\n", + " perceives ('Clean', 'None') and does Forward with performance -3005\n", + " perceives ('Clean', 'None') and does Forward with performance -3006\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3007\n", + " perceives ('Clean', 'None') and does Forward with performance -3008\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3009\n", + " perceives ('Clean', 'None') and does Forward with performance -3010\n", + " perceives ('Clean', 'None') and does Forward with performance -3011\n", + " perceives ('Clean', 'None') and does Forward with performance -3012\n", + " perceives ('Clean', 'None') and does Forward with performance -3013\n", + " perceives ('Clean', 'None') and does Forward with performance -3014\n", + " perceives ('Clean', 'None') and does Forward with performance -3015\n", + " perceives ('Clean', 'None') and does Forward with performance -3016\n", + " perceives ('Clean', 'None') and does Forward with performance -3017\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3018\n", + " perceives ('Clean', 'None') and does Forward with performance -3019\n", + " perceives ('Clean', 'None') and does Forward with performance -3020\n", + " perceives ('Clean', 'None') and does Forward with performance -3021\n", + " perceives ('Clean', 'None') and does Forward with performance -3022\n", + " perceives ('Clean', 'None') and does Forward with performance -3023\n", + " perceives ('Clean', 'None') and does Forward with performance -3024\n", + " perceives ('Clean', 'None') and does Forward with performance -3025\n", + " perceives ('Clean', 'None') and does Forward with performance -3026\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3027\n", + " perceives ('Clean', 'None') and does Forward with performance -3028\n", + " perceives ('Clean', 'None') and does Forward with performance -3029\n", + " perceives ('Clean', 'None') and does Forward with performance -3030\n", + " perceives ('Clean', 'None') and does Forward with performance -3031\n", + " perceives ('Clean', 'None') and does Forward with performance -3032\n", + " perceives ('Clean', 'None') and does Forward with performance -3033\n", + " perceives ('Clean', 'None') and does Forward with performance -3034\n", + " perceives ('Clean', 'None') and does Forward with performance -3035\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3036\n", + " perceives ('Clean', 'None') and does Forward with performance -3037\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3038\n", + " perceives ('Clean', 'None') and does Forward with performance -3039\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3040\n", + " perceives ('Clean', 'None') and does Forward with performance -3041\n", + " perceives ('Clean', 'None') and does Forward with performance -3042\n", + " perceives ('Clean', 'None') and does Forward with performance -3043\n", + " perceives ('Clean', 'None') and does Forward with performance -3044\n", + " perceives ('Clean', 'None') and does Forward with performance -3045\n", + " perceives ('Clean', 'None') and does Forward with performance -3046\n", + " perceives ('Clean', 'None') and does Forward with performance -3047\n", + " perceives ('Clean', 'None') and does Forward with performance -3048\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3049\n", + " perceives ('Clean', 'None') and does Forward with performance -3050\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3051\n", + " perceives ('Clean', 'None') and does Forward with performance -3052\n", + " perceives ('Clean', 'None') and does Forward with performance -3053\n", + " perceives ('Clean', 'None') and does Forward with performance -3054\n", + " perceives ('Clean', 'None') and does Forward with performance -3055\n", + " perceives ('Clean', 'None') and does Forward with performance -3056\n", + " perceives ('Clean', 'None') and does Forward with performance -3057\n", + " perceives ('Clean', 'None') and does Forward with performance -3058\n", + " perceives ('Clean', 'None') and does Forward with performance -3059\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3060\n", + " perceives ('Clean', 'None') and does Forward with performance -3061\n", + " perceives ('Clean', 'None') and does Forward with performance -3062\n", + " perceives ('Clean', 'None') and does Forward with performance -3063\n", + " perceives ('Clean', 'None') and does Forward with performance -3064\n", + " perceives ('Clean', 'None') and does Forward with performance -3065\n", + " perceives ('Clean', 'None') and does Forward with performance -3066\n", + " perceives ('Clean', 'None') and does Forward with performance -3067\n", + " perceives ('Clean', 'None') and does Forward with performance -3068\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3069\n", + " perceives ('Clean', 'None') and does Forward with performance -3070\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3071\n", + " perceives ('Clean', 'None') and does Forward with performance -3072\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3073\n", + " perceives ('Clean', 'None') and does Forward with performance -3074\n", + " perceives ('Clean', 'None') and does Forward with performance -3075\n", + " perceives ('Clean', 'None') and does Forward with performance -3076\n", + " perceives ('Clean', 'None') and does Forward with performance -3077\n", + " perceives ('Clean', 'None') and does Forward with performance -3078\n", + " perceives ('Clean', 'None') and does Forward with performance -3079\n", + " perceives ('Clean', 'None') and does Forward with performance -3080\n", + " perceives ('Clean', 'None') and does Forward with performance -3081\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3082\n", + " perceives ('Clean', 'None') and does Forward with performance -3083\n", + " perceives ('Clean', 'None') and does Forward with performance -3084\n", + " perceives ('Clean', 'None') and does Forward with performance -3085\n", + " perceives ('Clean', 'None') and does Forward with performance -3086\n", + " perceives ('Clean', 'None') and does Forward with performance -3087\n", + " perceives ('Clean', 'None') and does Forward with performance -3088\n", + " perceives ('Clean', 'None') and does Forward with performance -3089\n", + " perceives ('Clean', 'None') and does Forward with performance -3090\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3091\n", + " perceives ('Clean', 'None') and does Forward with performance -3092\n", + " perceives ('Clean', 'None') and does Forward with performance -3093\n", + " perceives ('Clean', 'None') and does Forward with performance -3094\n", + " perceives ('Clean', 'None') and does Forward with performance -3095\n", + " perceives ('Clean', 'None') and does Forward with performance -3096\n", + " perceives ('Clean', 'None') and does Forward with performance -3097\n", + " perceives ('Clean', 'None') and does Forward with performance -3098\n", + " perceives ('Clean', 'None') and does Forward with performance -3099\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3100\n", + " perceives ('Clean', 'None') and does Forward with performance -3101\n", + " perceives ('Clean', 'None') and does Forward with performance -3102\n", + " perceives ('Clean', 'None') and does Forward with performance -3103\n", + " perceives ('Clean', 'None') and does Forward with performance -3104\n", + " perceives ('Clean', 'None') and does Forward with performance -3105\n", + " perceives ('Clean', 'None') and does Forward with performance -3106\n", + " perceives ('Clean', 'None') and does Forward with performance -3107\n", + " perceives ('Clean', 'None') and does Forward with performance -3108\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3109\n", + " perceives ('Clean', 'None') and does Forward with performance -3110\n", + " perceives ('Clean', 'None') and does Forward with performance -3111\n", + " perceives ('Clean', 'None') and does Forward with performance -3112\n", + " perceives ('Clean', 'None') and does Forward with performance -3113\n", + " perceives ('Clean', 'None') and does Forward with performance -3114\n", + " perceives ('Clean', 'None') and does Forward with performance -3115\n", + " perceives ('Clean', 'None') and does Forward with performance -3116\n", + " perceives ('Clean', 'None') and does Forward with performance -3117\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3118\n", + " perceives ('Clean', 'None') and does Forward with performance -3119\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3120\n", + " perceives ('Clean', 'None') and does Forward with performance -3121\n", + " perceives ('Clean', 'None') and does Forward with performance -3122\n", + " perceives ('Clean', 'None') and does Forward with performance -3123\n", + " perceives ('Clean', 'None') and does Forward with performance -3124\n", + " perceives ('Clean', 'None') and does Forward with performance -3125\n", + " perceives ('Clean', 'None') and does Forward with performance -3126\n", + " perceives ('Clean', 'None') and does Forward with performance -3127\n", + " perceives ('Clean', 'None') and does Forward with performance -3128\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3129\n", + " perceives ('Clean', 'None') and does Forward with performance -3130\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3131\n", + " perceives ('Clean', 'None') and does Forward with performance -3132\n", + " perceives ('Clean', 'None') and does Forward with performance -3133\n", + " perceives ('Clean', 'None') and does Forward with performance -3134\n", + " perceives ('Clean', 'None') and does Forward with performance -3135\n", + " perceives ('Clean', 'None') and does Forward with performance -3136\n", + " perceives ('Clean', 'None') and does Forward with performance -3137\n", + " perceives ('Clean', 'None') and does Forward with performance -3138\n", + " perceives ('Clean', 'None') and does Forward with performance -3139\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3140\n", + " perceives ('Clean', 'None') and does Forward with performance -3141\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3142\n", + " perceives ('Clean', 'None') and does Forward with performance -3143\n", + " perceives ('Clean', 'None') and does Forward with performance -3144\n", + " perceives ('Clean', 'None') and does Forward with performance -3145\n", + " perceives ('Clean', 'None') and does Forward with performance -3146\n", + " perceives ('Clean', 'None') and does Forward with performance -3147\n", + " perceives ('Clean', 'None') and does Forward with performance -3148\n", + " perceives ('Clean', 'None') and does Forward with performance -3149\n", + " perceives ('Clean', 'None') and does Forward with performance -3150\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3151\n", + " perceives ('Clean', 'None') and does Forward with performance -3152\n", + " perceives ('Clean', 'None') and does Forward with performance -3153\n", + " perceives ('Clean', 'None') and does Forward with performance -3154\n", + " perceives ('Clean', 'None') and does Forward with performance -3155\n", + " perceives ('Clean', 'None') and does Forward with performance -3156\n", + " perceives ('Clean', 'None') and does Forward with performance -3157\n", + " perceives ('Clean', 'None') and does Forward with performance -3158\n", + " perceives ('Clean', 'None') and does Forward with performance -3159\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3160\n", + " perceives ('Clean', 'None') and does Forward with performance -3161\n", + " perceives ('Clean', 'None') and does Forward with performance -3162\n", + " perceives ('Clean', 'None') and does Forward with performance -3163\n", + " perceives ('Clean', 'None') and does Forward with performance -3164\n", + " perceives ('Clean', 'None') and does Forward with performance -3165\n", + " perceives ('Clean', 'None') and does Forward with performance -3166\n", + " perceives ('Clean', 'None') and does Forward with performance -3167\n", + " perceives ('Clean', 'None') and does Forward with performance -3168\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3169\n", + " perceives ('Clean', 'None') and does Forward with performance -3170\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3171\n", + " perceives ('Clean', 'None') and does Forward with performance -3172\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3173\n", + " perceives ('Clean', 'None') and does Forward with performance -3174\n", + " perceives ('Clean', 'None') and does Forward with performance -3175\n", + " perceives ('Clean', 'None') and does Forward with performance -3176\n", + " perceives ('Clean', 'None') and does Forward with performance -3177\n", + " perceives ('Clean', 'None') and does Forward with performance -3178\n", + " perceives ('Clean', 'None') and does Forward with performance -3179\n", + " perceives ('Clean', 'None') and does Forward with performance -3180\n", + " perceives ('Clean', 'None') and does Forward with performance -3181\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3182\n", + " perceives ('Clean', 'None') and does Forward with performance -3183\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3184\n", + " perceives ('Clean', 'None') and does Forward with performance -3185\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3186\n", + " perceives ('Clean', 'None') and does Forward with performance -3187\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3188\n", + " perceives ('Clean', 'None') and does Forward with performance -3189\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3190\n", + " perceives ('Clean', 'None') and does Forward with performance -3191\n", + " perceives ('Clean', 'None') and does Forward with performance -3192\n", + " perceives ('Clean', 'None') and does Forward with performance -3193\n", + " perceives ('Clean', 'None') and does Forward with performance -3194\n", + " perceives ('Clean', 'None') and does Forward with performance -3195\n", + " perceives ('Clean', 'None') and does Forward with performance -3196\n", + " perceives ('Clean', 'None') and does Forward with performance -3197\n", + " perceives ('Clean', 'None') and does Forward with performance -3198\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3199\n", + " perceives ('Clean', 'None') and does Forward with performance -3200\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3201\n", + " perceives ('Clean', 'None') and does Forward with performance -3202\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3203\n", + " perceives ('Clean', 'None') and does Forward with performance -3204\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3205\n", + " perceives ('Clean', 'None') and does Forward with performance -3206\n", + " perceives ('Clean', 'None') and does Forward with performance -3207\n", + " perceives ('Clean', 'None') and does Forward with performance -3208\n", + " perceives ('Clean', 'None') and does Forward with performance -3209\n", + " perceives ('Clean', 'None') and does Forward with performance -3210\n", + " perceives ('Clean', 'None') and does Forward with performance -3211\n", + " perceives ('Clean', 'None') and does Forward with performance -3212\n", + " perceives ('Clean', 'None') and does Forward with performance -3213\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3214\n", + " perceives ('Clean', 'None') and does Forward with performance -3215\n", + " perceives ('Clean', 'None') and does Forward with performance -3216\n", + " perceives ('Clean', 'None') and does Forward with performance -3217\n", + " perceives ('Clean', 'None') and does Forward with performance -3218\n", + " perceives ('Clean', 'None') and does Forward with performance -3219\n", + " perceives ('Clean', 'None') and does Forward with performance -3220\n", + " perceives ('Clean', 'None') and does Forward with performance -3221\n", + " perceives ('Clean', 'None') and does Forward with performance -3222\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3223\n", + " perceives ('Clean', 'None') and does Forward with performance -3224\n", + " perceives ('Clean', 'None') and does Forward with performance -3225\n", + " perceives ('Clean', 'None') and does Forward with performance -3226\n", + " perceives ('Clean', 'None') and does Forward with performance -3227\n", + " perceives ('Clean', 'None') and does Forward with performance -3228\n", + " perceives ('Clean', 'None') and does Forward with performance -3229\n", + " perceives ('Clean', 'None') and does Forward with performance -3230\n", + " perceives ('Clean', 'None') and does Forward with performance -3231\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3232\n", + " perceives ('Clean', 'None') and does Forward with performance -3233\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3234\n", + " perceives ('Clean', 'None') and does Forward with performance -3235\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3236\n", + " perceives ('Clean', 'None') and does Forward with performance -3237\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3238\n", + " perceives ('Clean', 'None') and does Forward with performance -3239\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3240\n", + " perceives ('Clean', 'None') and does Forward with performance -3241\n", + " perceives ('Clean', 'None') and does Forward with performance -3242\n", + " perceives ('Clean', 'None') and does Forward with performance -3243\n", + " perceives ('Clean', 'None') and does Forward with performance -3244\n", + " perceives ('Clean', 'None') and does Forward with performance -3245\n", + " perceives ('Clean', 'None') and does Forward with performance -3246\n", + " perceives ('Clean', 'None') and does Forward with performance -3247\n", + " perceives ('Clean', 'None') and does Forward with performance -3248\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3249\n", + " perceives ('Clean', 'None') and does Forward with performance -3250\n", + " perceives ('Clean', 'None') and does Forward with performance -3251\n", + " perceives ('Clean', 'None') and does Forward with performance -3252\n", + " perceives ('Clean', 'None') and does Forward with performance -3253\n", + " perceives ('Clean', 'None') and does Forward with performance -3254\n", + " perceives ('Clean', 'None') and does Forward with performance -3255\n", + " perceives ('Clean', 'None') and does Forward with performance -3256\n", + " perceives ('Clean', 'None') and does Forward with performance -3257\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3258\n", + " perceives ('Clean', 'None') and does Forward with performance -3259\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3260\n", + " perceives ('Clean', 'None') and does Forward with performance -3261\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3262\n", + " perceives ('Clean', 'None') and does Forward with performance -3263\n", + " perceives ('Clean', 'None') and does Forward with performance -3264\n", + " perceives ('Clean', 'None') and does Forward with performance -3265\n", + " perceives ('Clean', 'None') and does Forward with performance -3266\n", + " perceives ('Clean', 'None') and does Forward with performance -3267\n", + " perceives ('Clean', 'None') and does Forward with performance -3268\n", + " perceives ('Clean', 'None') and does Forward with performance -3269\n", + " perceives ('Clean', 'None') and does Forward with performance -3270\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3271\n", + " perceives ('Clean', 'None') and does Forward with performance -3272\n", + " perceives ('Clean', 'None') and does Forward with performance -3273\n", + " perceives ('Clean', 'None') and does Forward with performance -3274\n", + " perceives ('Clean', 'None') and does Forward with performance -3275\n", + " perceives ('Clean', 'None') and does Forward with performance -3276\n", + " perceives ('Clean', 'None') and does Forward with performance -3277\n", + " perceives ('Clean', 'None') and does Forward with performance -3278\n", + " perceives ('Clean', 'None') and does Forward with performance -3279\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3280\n", + " perceives ('Clean', 'None') and does Forward with performance -3281\n", + " perceives ('Clean', 'None') and does Forward with performance -3282\n", + " perceives ('Clean', 'None') and does Forward with performance -3283\n", + " perceives ('Clean', 'None') and does Forward with performance -3284\n", + " perceives ('Clean', 'None') and does Forward with performance -3285\n", + " perceives ('Clean', 'None') and does Forward with performance -3286\n", + " perceives ('Clean', 'None') and does Forward with performance -3287\n", + " perceives ('Clean', 'None') and does Forward with performance -3288\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3289\n", + " perceives ('Clean', 'None') and does Forward with performance -3290\n", + " perceives ('Clean', 'None') and does Forward with performance -3291\n", + " perceives ('Clean', 'None') and does Forward with performance -3292\n", + " perceives ('Clean', 'None') and does Forward with performance -3293\n", + " perceives ('Clean', 'None') and does Forward with performance -3294\n", + " perceives ('Clean', 'None') and does Forward with performance -3295\n", + " perceives ('Clean', 'None') and does Forward with performance -3296\n", + " perceives ('Clean', 'None') and does Forward with performance -3297\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3298\n", + " perceives ('Clean', 'None') and does Forward with performance -3299\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3300\n", + " perceives ('Clean', 'None') and does Forward with performance -3301\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3302\n", + " perceives ('Clean', 'None') and does Forward with performance -3303\n", + " perceives ('Clean', 'None') and does Forward with performance -3304\n", + " perceives ('Clean', 'None') and does Forward with performance -3305\n", + " perceives ('Clean', 'None') and does Forward with performance -3306\n", + " perceives ('Clean', 'None') and does Forward with performance -3307\n", + " perceives ('Clean', 'None') and does Forward with performance -3308\n", + " perceives ('Clean', 'None') and does Forward with performance -3309\n", + " perceives ('Clean', 'None') and does Forward with performance -3310\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3311\n", + " perceives ('Clean', 'None') and does Forward with performance -3312\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3313\n", + " perceives ('Clean', 'None') and does Forward with performance -3314\n", + " perceives ('Clean', 'None') and does Forward with performance -3315\n", + " perceives ('Clean', 'None') and does Forward with performance -3316\n", + " perceives ('Clean', 'None') and does Forward with performance -3317\n", + " perceives ('Clean', 'None') and does Forward with performance -3318\n", + " perceives ('Clean', 'None') and does Forward with performance -3319\n", + " perceives ('Clean', 'None') and does Forward with performance -3320\n", + " perceives ('Clean', 'None') and does Forward with performance -3321\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3322\n", + " perceives ('Clean', 'None') and does Forward with performance -3323\n", + " perceives ('Clean', 'None') and does Forward with performance -3324\n", + " perceives ('Clean', 'None') and does Forward with performance -3325\n", + " perceives ('Clean', 'None') and does Forward with performance -3326\n", + " perceives ('Clean', 'None') and does Forward with performance -3327\n", + " perceives ('Clean', 'None') and does Forward with performance -3328\n", + " perceives ('Clean', 'None') and does Forward with performance -3329\n", + " perceives ('Clean', 'None') and does Forward with performance -3330\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3331\n", + " perceives ('Clean', 'None') and does Forward with performance -3332\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3333\n", + " perceives ('Clean', 'None') and does Forward with performance -3334\n", + " perceives ('Clean', 'None') and does Forward with performance -3335\n", + " perceives ('Clean', 'None') and does Forward with performance -3336\n", + " perceives ('Clean', 'None') and does Forward with performance -3337\n", + " perceives ('Clean', 'None') and does Forward with performance -3338\n", + " perceives ('Clean', 'None') and does Forward with performance -3339\n", + " perceives ('Clean', 'None') and does Forward with performance -3340\n", + " perceives ('Clean', 'None') and does Forward with performance -3341\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3342\n", + " perceives ('Clean', 'None') and does Forward with performance -3343\n", + " perceives ('Clean', 'None') and does Forward with performance -3344\n", + " perceives ('Clean', 'None') and does Forward with performance -3345\n", + " perceives ('Clean', 'None') and does Forward with performance -3346\n", + " perceives ('Clean', 'None') and does Forward with performance -3347\n", + " perceives ('Clean', 'None') and does Forward with performance -3348\n", + " perceives ('Clean', 'None') and does Forward with performance -3349\n", + " perceives ('Clean', 'None') and does Forward with performance -3350\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3351\n", + " perceives ('Clean', 'None') and does Forward with performance -3352\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3353\n", + " perceives ('Clean', 'None') and does Forward with performance -3354\n", + " perceives ('Clean', 'None') and does Forward with performance -3355\n", + " perceives ('Clean', 'None') and does Forward with performance -3356\n", + " perceives ('Clean', 'None') and does Forward with performance -3357\n", + " perceives ('Clean', 'None') and does Forward with performance -3358\n", + " perceives ('Clean', 'None') and does Forward with performance -3359\n", + " perceives ('Clean', 'None') and does Forward with performance -3360\n", + " perceives ('Clean', 'None') and does Forward with performance -3361\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3362\n", + " perceives ('Clean', 'None') and does Forward with performance -3363\n", + " perceives ('Clean', 'None') and does Forward with performance -3364\n", + " perceives ('Clean', 'None') and does Forward with performance -3365\n", + " perceives ('Clean', 'None') and does Forward with performance -3366\n", + " perceives ('Clean', 'None') and does Forward with performance -3367\n", + " perceives ('Clean', 'None') and does Forward with performance -3368\n", + " perceives ('Clean', 'None') and does Forward with performance -3369\n", + " perceives ('Clean', 'None') and does Forward with performance -3370\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3371\n", + " perceives ('Clean', 'None') and does Forward with performance -3372\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3373\n", + " perceives ('Clean', 'None') and does Forward with performance -3374\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3375\n", + " perceives ('Clean', 'None') and does Forward with performance -3376\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3377\n", + " perceives ('Clean', 'None') and does Forward with performance -3378\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3379\n", + " perceives ('Clean', 'None') and does Forward with performance -3380\n", + " perceives ('Clean', 'None') and does Forward with performance -3381\n", + " perceives ('Clean', 'None') and does Forward with performance -3382\n", + " perceives ('Clean', 'None') and does Forward with performance -3383\n", + " perceives ('Clean', 'None') and does Forward with performance -3384\n", + " perceives ('Clean', 'None') and does Forward with performance -3385\n", + " perceives ('Clean', 'None') and does Forward with performance -3386\n", + " perceives ('Clean', 'None') and does Forward with performance -3387\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3388\n", + " perceives ('Clean', 'None') and does Forward with performance -3389\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3390\n", + " perceives ('Clean', 'None') and does Forward with performance -3391\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3392\n", + " perceives ('Clean', 'None') and does Forward with performance -3393\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3394\n", + " perceives ('Clean', 'None') and does Forward with performance -3395\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3396\n", + " perceives ('Clean', 'None') and does Forward with performance -3397\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3398\n", + " perceives ('Clean', 'None') and does Forward with performance -3399\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3400\n", + " perceives ('Clean', 'None') and does Forward with performance -3401\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3402\n", + " perceives ('Clean', 'None') and does Forward with performance -3403\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3404\n", + " perceives ('Clean', 'None') and does Forward with performance -3405\n", + " perceives ('Clean', 'None') and does Forward with performance -3406\n", + " perceives ('Clean', 'None') and does Forward with performance -3407\n", + " perceives ('Clean', 'None') and does Forward with performance -3408\n", + " perceives ('Clean', 'None') and does Forward with performance -3409\n", + " perceives ('Clean', 'None') and does Forward with performance -3410\n", + " perceives ('Clean', 'None') and does Forward with performance -3411\n", + " perceives ('Clean', 'None') and does Forward with performance -3412\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3413\n", + " perceives ('Clean', 'None') and does Forward with performance -3414\n", + " perceives ('Clean', 'None') and does Forward with performance -3415\n", + " perceives ('Clean', 'None') and does Forward with performance -3416\n", + " perceives ('Clean', 'None') and does Forward with performance -3417\n", + " perceives ('Clean', 'None') and does Forward with performance -3418\n", + " perceives ('Clean', 'None') and does Forward with performance -3419\n", + " perceives ('Clean', 'None') and does Forward with performance -3420\n", + " perceives ('Clean', 'None') and does Forward with performance -3421\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3422\n", + " perceives ('Clean', 'None') and does Forward with performance -3423\n", + " perceives ('Clean', 'None') and does Forward with performance -3424\n", + " perceives ('Clean', 'None') and does Forward with performance -3425\n", + " perceives ('Clean', 'None') and does Forward with performance -3426\n", + " perceives ('Clean', 'None') and does Forward with performance -3427\n", + " perceives ('Clean', 'None') and does Forward with performance -3428\n", + " perceives ('Clean', 'None') and does Forward with performance -3429\n", + " perceives ('Clean', 'None') and does Forward with performance -3430\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3431\n", + " perceives ('Clean', 'None') and does Forward with performance -3432\n", + " perceives ('Clean', 'None') and does Forward with performance -3433\n", + " perceives ('Clean', 'None') and does Forward with performance -3434\n", + " perceives ('Clean', 'None') and does Forward with performance -3435\n", + " perceives ('Clean', 'None') and does Forward with performance -3436\n", + " perceives ('Clean', 'None') and does Forward with performance -3437\n", + " perceives ('Clean', 'None') and does Forward with performance -3438\n", + " perceives ('Clean', 'None') and does Forward with performance -3439\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3440\n", + " perceives ('Clean', 'None') and does Forward with performance -3441\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3442\n", + " perceives ('Clean', 'None') and does Forward with performance -3443\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3444\n", + " perceives ('Clean', 'None') and does Forward with performance -3445\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3446\n", + " perceives ('Clean', 'None') and does Forward with performance -3447\n", + " perceives ('Clean', 'None') and does Forward with performance -3448\n", + " perceives ('Clean', 'None') and does Forward with performance -3449\n", + " perceives ('Clean', 'None') and does Forward with performance -3450\n", + " perceives ('Clean', 'None') and does Forward with performance -3451\n", + " perceives ('Clean', 'None') and does Forward with performance -3452\n", + " perceives ('Clean', 'None') and does Forward with performance -3453\n", + " perceives ('Clean', 'None') and does Forward with performance -3454\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3455\n", + " perceives ('Clean', 'None') and does Forward with performance -3456\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3457\n", + " perceives ('Clean', 'None') and does Forward with performance -3458\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3459\n", + " perceives ('Clean', 'None') and does Forward with performance -3460\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3461\n", + " perceives ('Clean', 'None') and does Forward with performance -3462\n", + " perceives ('Clean', 'None') and does Forward with performance -3463\n", + " perceives ('Clean', 'None') and does Forward with performance -3464\n", + " perceives ('Clean', 'None') and does Forward with performance -3465\n", + " perceives ('Clean', 'None') and does Forward with performance -3466\n", + " perceives ('Clean', 'None') and does Forward with performance -3467\n", + " perceives ('Clean', 'None') and does Forward with performance -3468\n", + " perceives ('Clean', 'None') and does Forward with performance -3469\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3470\n", + " perceives ('Clean', 'None') and does Forward with performance -3471\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3472\n", + " perceives ('Clean', 'None') and does Forward with performance -3473\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3474\n", + " perceives ('Clean', 'None') and does Forward with performance -3475\n", + " perceives ('Clean', 'None') and does Forward with performance -3476\n", + " perceives ('Clean', 'None') and does Forward with performance -3477\n", + " perceives ('Clean', 'None') and does Forward with performance -3478\n", + " perceives ('Clean', 'None') and does Forward with performance -3479\n", + " perceives ('Clean', 'None') and does Forward with performance -3480\n", + " perceives ('Clean', 'None') and does Forward with performance -3481\n", + " perceives ('Clean', 'None') and does Forward with performance -3482\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3483\n", + " perceives ('Clean', 'None') and does Forward with performance -3484\n", + " perceives ('Clean', 'None') and does Forward with performance -3485\n", + " perceives ('Clean', 'None') and does Forward with performance -3486\n", + " perceives ('Clean', 'None') and does Forward with performance -3487\n", + " perceives ('Clean', 'None') and does Forward with performance -3488\n", + " perceives ('Clean', 'None') and does Forward with performance -3489\n", + " perceives ('Clean', 'None') and does Forward with performance -3490\n", + " perceives ('Clean', 'None') and does Forward with performance -3491\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3492\n", + " perceives ('Clean', 'None') and does Forward with performance -3493\n", + " perceives ('Clean', 'None') and does Forward with performance -3494\n", + " perceives ('Clean', 'None') and does Forward with performance -3495\n", + " perceives ('Clean', 'None') and does Forward with performance -3496\n", + " perceives ('Clean', 'None') and does Forward with performance -3497\n", + " perceives ('Clean', 'None') and does Forward with performance -3498\n", + " perceives ('Clean', 'None') and does Forward with performance -3499\n", + " perceives ('Clean', 'None') and does Forward with performance -3500\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3501\n", + " perceives ('Clean', 'None') and does Forward with performance -3502\n", + " perceives ('Clean', 'None') and does Forward with performance -3503\n", + " perceives ('Clean', 'None') and does Forward with performance -3504\n", + " perceives ('Clean', 'None') and does Forward with performance -3505\n", + " perceives ('Clean', 'None') and does Forward with performance -3506\n", + " perceives ('Clean', 'None') and does Forward with performance -3507\n", + " perceives ('Clean', 'None') and does Forward with performance -3508\n", + " perceives ('Clean', 'None') and does Forward with performance -3509\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3510\n", + " perceives ('Clean', 'None') and does Forward with performance -3511\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3512\n", + " perceives ('Clean', 'None') and does Forward with performance -3513\n", + " perceives ('Clean', 'None') and does Forward with performance -3514\n", + " perceives ('Clean', 'None') and does Forward with performance -3515\n", + " perceives ('Clean', 'None') and does Forward with performance -3516\n", + " perceives ('Clean', 'None') and does Forward with performance -3517\n", + " perceives ('Clean', 'None') and does Forward with performance -3518\n", + " perceives ('Clean', 'None') and does Forward with performance -3519\n", + " perceives ('Clean', 'None') and does Forward with performance -3520\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3521\n", + " perceives ('Clean', 'None') and does Forward with performance -3522\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3523\n", + " perceives ('Clean', 'None') and does Forward with performance -3524\n", + " perceives ('Clean', 'None') and does Forward with performance -3525\n", + " perceives ('Clean', 'None') and does Forward with performance -3526\n", + " perceives ('Clean', 'None') and does Forward with performance -3527\n", + " perceives ('Clean', 'None') and does Forward with performance -3528\n", + " perceives ('Clean', 'None') and does Forward with performance -3529\n", + " perceives ('Clean', 'None') and does Forward with performance -3530\n", + " perceives ('Clean', 'None') and does Forward with performance -3531\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3532\n", + " perceives ('Clean', 'None') and does Forward with performance -3533\n", + " perceives ('Clean', 'None') and does Forward with performance -3534\n", + " perceives ('Clean', 'None') and does Forward with performance -3535\n", + " perceives ('Clean', 'None') and does Forward with performance -3536\n", + " perceives ('Clean', 'None') and does Forward with performance -3537\n", + " perceives ('Clean', 'None') and does Forward with performance -3538\n", + " perceives ('Clean', 'None') and does Forward with performance -3539\n", + " perceives ('Clean', 'None') and does Forward with performance -3540\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3541\n", + " perceives ('Clean', 'None') and does Forward with performance -3542\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3543\n", + " perceives ('Clean', 'None') and does Forward with performance -3544\n", + " perceives ('Clean', 'None') and does Forward with performance -3545\n", + " perceives ('Clean', 'None') and does Forward with performance -3546\n", + " perceives ('Clean', 'None') and does Forward with performance -3547\n", + " perceives ('Clean', 'None') and does Forward with performance -3548\n", + " perceives ('Clean', 'None') and does Forward with performance -3549\n", + " perceives ('Clean', 'None') and does Forward with performance -3550\n", + " perceives ('Clean', 'None') and does Forward with performance -3551\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3552\n", + " perceives ('Clean', 'None') and does Forward with performance -3553\n", + " perceives ('Clean', 'None') and does Forward with performance -3554\n", + " perceives ('Clean', 'None') and does Forward with performance -3555\n", + " perceives ('Clean', 'None') and does Forward with performance -3556\n", + " perceives ('Clean', 'None') and does Forward with performance -3557\n", + " perceives ('Clean', 'None') and does Forward with performance -3558\n", + " perceives ('Clean', 'None') and does Forward with performance -3559\n", + " perceives ('Clean', 'None') and does Forward with performance -3560\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3561\n", + " perceives ('Clean', 'None') and does Forward with performance -3562\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3563\n", + " perceives ('Clean', 'None') and does Forward with performance -3564\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3565\n", + " perceives ('Clean', 'None') and does Forward with performance -3566\n", + " perceives ('Clean', 'None') and does Forward with performance -3567\n", + " perceives ('Clean', 'None') and does Forward with performance -3568\n", + " perceives ('Clean', 'None') and does Forward with performance -3569\n", + " perceives ('Clean', 'None') and does Forward with performance -3570\n", + " perceives ('Clean', 'None') and does Forward with performance -3571\n", + " perceives ('Clean', 'None') and does Forward with performance -3572\n", + " perceives ('Clean', 'None') and does Forward with performance -3573\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3574\n", + " perceives ('Clean', 'None') and does Forward with performance -3575\n", + " perceives ('Clean', 'None') and does Forward with performance -3576\n", + " perceives ('Clean', 'None') and does Forward with performance -3577\n", + " perceives ('Clean', 'None') and does Forward with performance -3578\n", + " perceives ('Clean', 'None') and does Forward with performance -3579\n", + " perceives ('Clean', 'None') and does Forward with performance -3580\n", + " perceives ('Clean', 'None') and does Forward with performance -3581\n", + " perceives ('Clean', 'None') and does Forward with performance -3582\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3583\n", + " perceives ('Clean', 'None') and does Forward with performance -3584\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3585\n", + " perceives ('Clean', 'None') and does Forward with performance -3586\n", + " perceives ('Clean', 'None') and does Forward with performance -3587\n", + " perceives ('Clean', 'None') and does Forward with performance -3588\n", + " perceives ('Clean', 'None') and does Forward with performance -3589\n", + " perceives ('Clean', 'None') and does Forward with performance -3590\n", + " perceives ('Clean', 'None') and does Forward with performance -3591\n", + " perceives ('Clean', 'None') and does Forward with performance -3592\n", + " perceives ('Clean', 'None') and does Forward with performance -3593\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3594\n", + " perceives ('Clean', 'None') and does Forward with performance -3595\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3596\n", + " perceives ('Clean', 'None') and does Forward with performance -3597\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3598\n", + " perceives ('Clean', 'None') and does Forward with performance -3599\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3600\n", + " perceives ('Clean', 'None') and does Forward with performance -3601\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3602\n", + " perceives ('Clean', 'None') and does Forward with performance -3603\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3604\n", + " perceives ('Clean', 'None') and does Forward with performance -3605\n", + " perceives ('Clean', 'None') and does Forward with performance -3606\n", + " perceives ('Clean', 'None') and does Forward with performance -3607\n", + " perceives ('Clean', 'None') and does Forward with performance -3608\n", + " perceives ('Clean', 'None') and does Forward with performance -3609\n", + " perceives ('Clean', 'None') and does Forward with performance -3610\n", + " perceives ('Clean', 'None') and does Forward with performance -3611\n", + " perceives ('Clean', 'None') and does Forward with performance -3612\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3613\n", + " perceives ('Clean', 'None') and does Forward with performance -3614\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3615\n", + " perceives ('Clean', 'None') and does Forward with performance -3616\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3617\n", + " perceives ('Clean', 'None') and does Forward with performance -3618\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3619\n", + " perceives ('Clean', 'None') and does Forward with performance -3620\n", + " perceives ('Clean', 'None') and does Forward with performance -3621\n", + " perceives ('Clean', 'None') and does Forward with performance -3622\n", + " perceives ('Clean', 'None') and does Forward with performance -3623\n", + " perceives ('Clean', 'None') and does Forward with performance -3624\n", + " perceives ('Clean', 'None') and does Forward with performance -3625\n", + " perceives ('Clean', 'None') and does Forward with performance -3626\n", + " perceives ('Clean', 'None') and does Forward with performance -3627\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3628\n", + " perceives ('Clean', 'None') and does Forward with performance -3629\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3630\n", + " perceives ('Clean', 'None') and does Forward with performance -3631\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3632\n", + " perceives ('Clean', 'None') and does Forward with performance -3633\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3634\n", + " perceives ('Clean', 'None') and does Forward with performance -3635\n", + " perceives ('Clean', 'None') and does Forward with performance -3636\n", + " perceives ('Clean', 'None') and does Forward with performance -3637\n", + " perceives ('Clean', 'None') and does Forward with performance -3638\n", + " perceives ('Clean', 'None') and does Forward with performance -3639\n", + " perceives ('Clean', 'None') and does Forward with performance -3640\n", + " perceives ('Clean', 'None') and does Forward with performance -3641\n", + " perceives ('Clean', 'None') and does Forward with performance -3642\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3643\n", + " perceives ('Clean', 'None') and does Forward with performance -3644\n", + " perceives ('Clean', 'None') and does Forward with performance -3645\n", + " perceives ('Clean', 'None') and does Forward with performance -3646\n", + " perceives ('Clean', 'None') and does Forward with performance -3647\n", + " perceives ('Clean', 'None') and does Forward with performance -3648\n", + " perceives ('Clean', 'None') and does Forward with performance -3649\n", + " perceives ('Clean', 'None') and does Forward with performance -3650\n", + " perceives ('Clean', 'None') and does Forward with performance -3651\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3652\n", + " perceives ('Clean', 'None') and does Forward with performance -3653\n", + " perceives ('Clean', 'None') and does Forward with performance -3654\n", + " perceives ('Clean', 'None') and does Forward with performance -3655\n", + " perceives ('Clean', 'None') and does Forward with performance -3656\n", + " perceives ('Clean', 'None') and does Forward with performance -3657\n", + " perceives ('Clean', 'None') and does Forward with performance -3658\n", + " perceives ('Clean', 'None') and does Forward with performance -3659\n", + " perceives ('Clean', 'None') and does Forward with performance -3660\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3661\n", + " perceives ('Clean', 'None') and does Forward with performance -3662\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3663\n", + " perceives ('Clean', 'None') and does Forward with performance -3664\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3665\n", + " perceives ('Clean', 'None') and does Forward with performance -3666\n", + " perceives ('Clean', 'None') and does Forward with performance -3667\n", + " perceives ('Clean', 'None') and does Forward with performance -3668\n", + " perceives ('Clean', 'None') and does Forward with performance -3669\n", + " perceives ('Clean', 'None') and does Forward with performance -3670\n", + " perceives ('Clean', 'None') and does Forward with performance -3671\n", + " perceives ('Clean', 'None') and does Forward with performance -3672\n", + " perceives ('Clean', 'None') and does Forward with performance -3673\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3674\n", + " perceives ('Clean', 'None') and does Forward with performance -3675\n", + " perceives ('Clean', 'None') and does Forward with performance -3676\n", + " perceives ('Clean', 'None') and does Forward with performance -3677\n", + " perceives ('Clean', 'None') and does Forward with performance -3678\n", + " perceives ('Clean', 'None') and does Forward with performance -3679\n", + " perceives ('Clean', 'None') and does Forward with performance -3680\n", + " perceives ('Clean', 'None') and does Forward with performance -3681\n", + " perceives ('Clean', 'None') and does Forward with performance -3682\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3683\n", + " perceives ('Clean', 'None') and does Forward with performance -3684\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3685\n", + " perceives ('Clean', 'None') and does Forward with performance -3686\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3687\n", + " perceives ('Clean', 'None') and does Forward with performance -3688\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3689\n", + " perceives ('Clean', 'None') and does Forward with performance -3690\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3691\n", + " perceives ('Clean', 'None') and does Forward with performance -3692\n", + " perceives ('Clean', 'None') and does Forward with performance -3693\n", + " perceives ('Clean', 'None') and does Forward with performance -3694\n", + " perceives ('Clean', 'None') and does Forward with performance -3695\n", + " perceives ('Clean', 'None') and does Forward with performance -3696\n", + " perceives ('Clean', 'None') and does Forward with performance -3697\n", + " perceives ('Clean', 'None') and does Forward with performance -3698\n", + " perceives ('Clean', 'None') and does Forward with performance -3699\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3700\n", + " perceives ('Clean', 'None') and does Forward with performance -3701\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3702\n", + " perceives ('Clean', 'None') and does Forward with performance -3703\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3704\n", + " perceives ('Clean', 'None') and does Forward with performance -3705\n", + " perceives ('Clean', 'None') and does Forward with performance -3706\n", + " perceives ('Clean', 'None') and does Forward with performance -3707\n", + " perceives ('Clean', 'None') and does Forward with performance -3708\n", + " perceives ('Clean', 'None') and does Forward with performance -3709\n", + " perceives ('Clean', 'None') and does Forward with performance -3710\n", + " perceives ('Clean', 'None') and does Forward with performance -3711\n", + " perceives ('Clean', 'None') and does Forward with performance -3712\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3713\n", + " perceives ('Clean', 'None') and does Forward with performance -3714\n", + " perceives ('Clean', 'None') and does Forward with performance -3715\n", + " perceives ('Clean', 'None') and does Forward with performance -3716\n", + " perceives ('Clean', 'None') and does Forward with performance -3717\n", + " perceives ('Clean', 'None') and does Forward with performance -3718\n", + " perceives ('Clean', 'None') and does Forward with performance -3719\n", + " perceives ('Clean', 'None') and does Forward with performance -3720\n", + " perceives ('Clean', 'None') and does Forward with performance -3721\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3722\n", + " perceives ('Clean', 'None') and does Forward with performance -3723\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3724\n", + " perceives ('Clean', 'None') and does Forward with performance -3725\n", + " perceives ('Clean', 'None') and does Forward with performance -3726\n", + " perceives ('Clean', 'None') and does Forward with performance -3727\n", + " perceives ('Clean', 'None') and does Forward with performance -3728\n", + " perceives ('Clean', 'None') and does Forward with performance -3729\n", + " perceives ('Clean', 'None') and does Forward with performance -3730\n", + " perceives ('Clean', 'None') and does Forward with performance -3731\n", + " perceives ('Clean', 'None') and does Forward with performance -3732\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3733\n", + " perceives ('Clean', 'None') and does Forward with performance -3734\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3735\n", + " perceives ('Clean', 'None') and does Forward with performance -3736\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3737\n", + " perceives ('Clean', 'None') and does Forward with performance -3738\n", + " perceives ('Clean', 'None') and does Forward with performance -3739\n", + " perceives ('Clean', 'None') and does Forward with performance -3740\n", + " perceives ('Clean', 'None') and does Forward with performance -3741\n", + " perceives ('Clean', 'None') and does Forward with performance -3742\n", + " perceives ('Clean', 'None') and does Forward with performance -3743\n", + " perceives ('Clean', 'None') and does Forward with performance -3744\n", + " perceives ('Clean', 'None') and does Forward with performance -3745\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3746\n", + " perceives ('Clean', 'None') and does Forward with performance -3747\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3748\n", + " perceives ('Clean', 'None') and does Forward with performance -3749\n", + " perceives ('Clean', 'None') and does Forward with performance -3750\n", + " perceives ('Clean', 'None') and does Forward with performance -3751\n", + " perceives ('Clean', 'None') and does Forward with performance -3752\n", + " perceives ('Clean', 'None') and does Forward with performance -3753\n", + " perceives ('Clean', 'None') and does Forward with performance -3754\n", + " perceives ('Clean', 'None') and does Forward with performance -3755\n", + " perceives ('Clean', 'None') and does Forward with performance -3756\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3757\n", + " perceives ('Clean', 'None') and does Forward with performance -3758\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3759\n", + " perceives ('Clean', 'None') and does Forward with performance -3760\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3761\n", + " perceives ('Clean', 'None') and does Forward with performance -3762\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3763\n", + " perceives ('Clean', 'None') and does Forward with performance -3764\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3765\n", + " perceives ('Clean', 'None') and does Forward with performance -3766\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3767\n", + " perceives ('Clean', 'None') and does Forward with performance -3768\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3769\n", + " perceives ('Clean', 'None') and does Forward with performance -3770\n", + " perceives ('Clean', 'None') and does Forward with performance -3771\n", + " perceives ('Clean', 'None') and does Forward with performance -3772\n", + " perceives ('Clean', 'None') and does Forward with performance -3773\n", + " perceives ('Clean', 'None') and does Forward with performance -3774\n", + " perceives ('Clean', 'None') and does Forward with performance -3775\n", + " perceives ('Clean', 'None') and does Forward with performance -3776\n", + " perceives ('Clean', 'None') and does Forward with performance -3777\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3778\n", + " perceives ('Clean', 'None') and does Forward with performance -3779\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3780\n", + " perceives ('Clean', 'None') and does Forward with performance -3781\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3782\n", + " perceives ('Clean', 'None') and does Forward with performance -3783\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3784\n", + " perceives ('Clean', 'None') and does Forward with performance -3785\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3786\n", + " perceives ('Clean', 'None') and does Forward with performance -3787\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3788\n", + " perceives ('Clean', 'None') and does Forward with performance -3789\n", + " perceives ('Clean', 'None') and does Forward with performance -3790\n", + " perceives ('Clean', 'None') and does Forward with performance -3791\n", + " perceives ('Clean', 'None') and does Forward with performance -3792\n", + " perceives ('Clean', 'None') and does Forward with performance -3793\n", + " perceives ('Clean', 'None') and does Forward with performance -3794\n", + " perceives ('Clean', 'None') and does Forward with performance -3795\n", + " perceives ('Clean', 'None') and does Forward with performance -3796\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3797\n", + " perceives ('Clean', 'None') and does Forward with performance -3798\n", + " perceives ('Clean', 'None') and does Forward with performance -3799\n", + " perceives ('Clean', 'None') and does Forward with performance -3800\n", + " perceives ('Clean', 'None') and does Forward with performance -3801\n", + " perceives ('Clean', 'None') and does Forward with performance -3802\n", + " perceives ('Clean', 'None') and does Forward with performance -3803\n", + " perceives ('Clean', 'None') and does Forward with performance -3804\n", + " perceives ('Clean', 'None') and does Forward with performance -3805\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3806\n", + " perceives ('Clean', 'None') and does Forward with performance -3807\n", + " perceives ('Clean', 'None') and does Forward with performance -3808\n", + " perceives ('Clean', 'None') and does Forward with performance -3809\n", + " perceives ('Clean', 'None') and does Forward with performance -3810\n", + " perceives ('Clean', 'None') and does Forward with performance -3811\n", + " perceives ('Clean', 'None') and does Forward with performance -3812\n", + " perceives ('Clean', 'None') and does Forward with performance -3813\n", + " perceives ('Clean', 'None') and does Forward with performance -3814\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3815\n", + " perceives ('Clean', 'None') and does Forward with performance -3816\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3817\n", + " perceives ('Clean', 'None') and does Forward with performance -3818\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3819\n", + " perceives ('Clean', 'None') and does Forward with performance -3820\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3821\n", + " perceives ('Clean', 'None') and does Forward with performance -3822\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3823\n", + " perceives ('Clean', 'None') and does Forward with performance -3824\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3825\n", + " perceives ('Clean', 'None') and does Forward with performance -3826\n", + " perceives ('Clean', 'None') and does Forward with performance -3827\n", + " perceives ('Clean', 'None') and does Forward with performance -3828\n", + " perceives ('Clean', 'None') and does Forward with performance -3829\n", + " perceives ('Clean', 'None') and does Forward with performance -3830\n", + " perceives ('Clean', 'None') and does Forward with performance -3831\n", + " perceives ('Clean', 'None') and does Forward with performance -3832\n", + " perceives ('Clean', 'None') and does Forward with performance -3833\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3834\n", + " perceives ('Clean', 'None') and does Forward with performance -3835\n", + " perceives ('Clean', 'None') and does Forward with performance -3836\n", + " perceives ('Clean', 'None') and does Forward with performance -3837\n", + " perceives ('Clean', 'None') and does Forward with performance -3838\n", + " perceives ('Clean', 'None') and does Forward with performance -3839\n", + " perceives ('Clean', 'None') and does Forward with performance -3840\n", + " perceives ('Clean', 'None') and does Forward with performance -3841\n", + " perceives ('Clean', 'None') and does Forward with performance -3842\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3843\n", + " perceives ('Clean', 'None') and does Forward with performance -3844\n", + " perceives ('Clean', 'None') and does Forward with performance -3845\n", + " perceives ('Clean', 'None') and does Forward with performance -3846\n", + " perceives ('Clean', 'None') and does Forward with performance -3847\n", + " perceives ('Clean', 'None') and does Forward with performance -3848\n", + " perceives ('Clean', 'None') and does Forward with performance -3849\n", + " perceives ('Clean', 'None') and does Forward with performance -3850\n", + " perceives ('Clean', 'None') and does Forward with performance -3851\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3852\n", + " perceives ('Clean', 'None') and does Forward with performance -3853\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3854\n", + " perceives ('Clean', 'None') and does Forward with performance -3855\n", + " perceives ('Clean', 'None') and does Forward with performance -3856\n", + " perceives ('Clean', 'None') and does Forward with performance -3857\n", + " perceives ('Clean', 'None') and does Forward with performance -3858\n", + " perceives ('Clean', 'None') and does Forward with performance -3859\n", + " perceives ('Clean', 'None') and does Forward with performance -3860\n", + " perceives ('Clean', 'None') and does Forward with performance -3861\n", + " perceives ('Clean', 'None') and does Forward with performance -3862\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3863\n", + " perceives ('Clean', 'None') and does Forward with performance -3864\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3865\n", + " perceives ('Clean', 'None') and does Forward with performance -3866\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3867\n", + " perceives ('Clean', 'None') and does Forward with performance -3868\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3869\n", + " perceives ('Clean', 'None') and does Forward with performance -3870\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3871\n", + " perceives ('Clean', 'None') and does Forward with performance -3872\n", + " perceives ('Clean', 'None') and does Forward with performance -3873\n", + " perceives ('Clean', 'None') and does Forward with performance -3874\n", + " perceives ('Clean', 'None') and does Forward with performance -3875\n", + " perceives ('Clean', 'None') and does Forward with performance -3876\n", + " perceives ('Clean', 'None') and does Forward with performance -3877\n", + " perceives ('Clean', 'None') and does Forward with performance -3878\n", + " perceives ('Clean', 'None') and does Forward with performance -3879\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3880\n", + " perceives ('Clean', 'None') and does Forward with performance -3881\n", + " perceives ('Clean', 'None') and does Forward with performance -3882\n", + " perceives ('Clean', 'None') and does Forward with performance -3883\n", + " perceives ('Clean', 'None') and does Forward with performance -3884\n", + " perceives ('Clean', 'None') and does Forward with performance -3885\n", + " perceives ('Clean', 'None') and does Forward with performance -3886\n", + " perceives ('Clean', 'None') and does Forward with performance -3887\n", + " perceives ('Clean', 'None') and does Forward with performance -3888\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3889\n", + " perceives ('Clean', 'None') and does Forward with performance -3890\n", + " perceives ('Clean', 'None') and does Forward with performance -3891\n", + " perceives ('Clean', 'None') and does Forward with performance -3892\n", + " perceives ('Clean', 'None') and does Forward with performance -3893\n", + " perceives ('Clean', 'None') and does Forward with performance -3894\n", + " perceives ('Clean', 'None') and does Forward with performance -3895\n", + " perceives ('Clean', 'None') and does Forward with performance -3896\n", + " perceives ('Clean', 'None') and does Forward with performance -3897\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3898\n", + " perceives ('Clean', 'None') and does Forward with performance -3899\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3900\n", + " perceives ('Clean', 'None') and does Forward with performance -3901\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3902\n", + " perceives ('Clean', 'None') and does Forward with performance -3903\n", + " perceives ('Clean', 'None') and does Forward with performance -3904\n", + " perceives ('Clean', 'None') and does Forward with performance -3905\n", + " perceives ('Clean', 'None') and does Forward with performance -3906\n", + " perceives ('Clean', 'None') and does Forward with performance -3907\n", + " perceives ('Clean', 'None') and does Forward with performance -3908\n", + " perceives ('Clean', 'None') and does Forward with performance -3909\n", + " perceives ('Clean', 'None') and does Forward with performance -3910\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3911\n", + " perceives ('Clean', 'None') and does Forward with performance -3912\n", + " perceives ('Clean', 'None') and does Forward with performance -3913\n", + " perceives ('Clean', 'None') and does Forward with performance -3914\n", + " perceives ('Clean', 'None') and does Forward with performance -3915\n", + " perceives ('Clean', 'None') and does Forward with performance -3916\n", + " perceives ('Clean', 'None') and does Forward with performance -3917\n", + " perceives ('Clean', 'None') and does Forward with performance -3918\n", + " perceives ('Clean', 'None') and does Forward with performance -3919\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3920\n", + " perceives ('Clean', 'None') and does Forward with performance -3921\n", + " perceives ('Clean', 'None') and does Forward with performance -3922\n", + " perceives ('Clean', 'None') and does Forward with performance -3923\n", + " perceives ('Clean', 'None') and does Forward with performance -3924\n", + " perceives ('Clean', 'None') and does Forward with performance -3925\n", + " perceives ('Clean', 'None') and does Forward with performance -3926\n", + " perceives ('Clean', 'None') and does Forward with performance -3927\n", + " perceives ('Clean', 'None') and does Forward with performance -3928\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3929\n", + " perceives ('Clean', 'None') and does Forward with performance -3930\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3931\n", + " perceives ('Clean', 'None') and does Forward with performance -3932\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3933\n", + " perceives ('Clean', 'None') and does Forward with performance -3934\n", + " perceives ('Clean', 'None') and does Forward with performance -3935\n", + " perceives ('Clean', 'None') and does Forward with performance -3936\n", + " perceives ('Clean', 'None') and does Forward with performance -3937\n", + " perceives ('Clean', 'None') and does Forward with performance -3938\n", + " perceives ('Clean', 'None') and does Forward with performance -3939\n", + " perceives ('Clean', 'None') and does Forward with performance -3940\n", + " perceives ('Clean', 'None') and does Forward with performance -3941\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3942\n", + " perceives ('Clean', 'None') and does Forward with performance -3943\n", + " perceives ('Clean', 'None') and does Forward with performance -3944\n", + " perceives ('Clean', 'None') and does Forward with performance -3945\n", + " perceives ('Clean', 'None') and does Forward with performance -3946\n", + " perceives ('Clean', 'None') and does Forward with performance -3947\n", + " perceives ('Clean', 'None') and does Forward with performance -3948\n", + " perceives ('Clean', 'None') and does Forward with performance -3949\n", + " perceives ('Clean', 'None') and does Forward with performance -3950\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3951\n", + " perceives ('Clean', 'None') and does Forward with performance -3952\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3953\n", + " perceives ('Clean', 'None') and does Forward with performance -3954\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3955\n", + " perceives ('Clean', 'None') and does Forward with performance -3956\n", + " perceives ('Clean', 'None') and does Forward with performance -3957\n", + " perceives ('Clean', 'None') and does Forward with performance -3958\n", + " perceives ('Clean', 'None') and does Forward with performance -3959\n", + " perceives ('Clean', 'None') and does Forward with performance -3960\n", + " perceives ('Clean', 'None') and does Forward with performance -3961\n", + " perceives ('Clean', 'None') and does Forward with performance -3962\n", + " perceives ('Clean', 'None') and does Forward with performance -3963\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3964\n", + " perceives ('Clean', 'None') and does Forward with performance -3965\n", + " perceives ('Clean', 'None') and does Forward with performance -3966\n", + " perceives ('Clean', 'None') and does Forward with performance -3967\n", + " perceives ('Clean', 'None') and does Forward with performance -3968\n", + " perceives ('Clean', 'None') and does Forward with performance -3969\n", + " perceives ('Clean', 'None') and does Forward with performance -3970\n", + " perceives ('Clean', 'None') and does Forward with performance -3971\n", + " perceives ('Clean', 'None') and does Forward with performance -3972\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -3973\n", + " perceives ('Clean', 'None') and does Forward with performance -3974\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3975\n", + " perceives ('Clean', 'None') and does Forward with performance -3976\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3977\n", + " perceives ('Clean', 'None') and does Forward with performance -3978\n", + " perceives ('Clean', 'None') and does Forward with performance -3979\n", + " perceives ('Clean', 'None') and does Forward with performance -3980\n", + " perceives ('Clean', 'None') and does Forward with performance -3981\n", + " perceives ('Clean', 'None') and does Forward with performance -3982\n", + " perceives ('Clean', 'None') and does Forward with performance -3983\n", + " perceives ('Clean', 'None') and does Forward with performance -3984\n", + " perceives ('Clean', 'None') and does Forward with performance -3985\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3986\n", + " perceives ('Clean', 'None') and does Forward with performance -3987\n", + " perceives ('Clean', 'None') and does Forward with performance -3988\n", + " perceives ('Clean', 'None') and does Forward with performance -3989\n", + " perceives ('Clean', 'None') and does Forward with performance -3990\n", + " perceives ('Clean', 'None') and does Forward with performance -3991\n", + " perceives ('Clean', 'None') and does Forward with performance -3992\n", + " perceives ('Clean', 'None') and does Forward with performance -3993\n", + " perceives ('Clean', 'None') and does Forward with performance -3994\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -3995\n", + " perceives ('Clean', 'None') and does Forward with performance -3996\n", + " perceives ('Clean', 'None') and does Forward with performance -3997\n", + " perceives ('Clean', 'None') and does Forward with performance -3998\n", + " perceives ('Clean', 'None') and does Forward with performance -3999\n", + " perceives ('Clean', 'None') and does Forward with performance -4000\n", + " perceives ('Clean', 'None') and does Forward with performance -4001\n", + " perceives ('Clean', 'None') and does Forward with performance -4002\n", + " perceives ('Clean', 'None') and does Forward with performance -4003\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4004\n", + " perceives ('Clean', 'None') and does Forward with performance -4005\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4006\n", + " perceives ('Clean', 'None') and does Forward with performance -4007\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4008\n", + " perceives ('Clean', 'None') and does Forward with performance -4009\n", + " perceives ('Clean', 'None') and does Forward with performance -4010\n", + " perceives ('Clean', 'None') and does Forward with performance -4011\n", + " perceives ('Clean', 'None') and does Forward with performance -4012\n", + " perceives ('Clean', 'None') and does Forward with performance -4013\n", + " perceives ('Clean', 'None') and does Forward with performance -4014\n", + " perceives ('Clean', 'None') and does Forward with performance -4015\n", + " perceives ('Clean', 'None') and does Forward with performance -4016\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4017\n", + " perceives ('Clean', 'None') and does Forward with performance -4018\n", + " perceives ('Clean', 'None') and does Forward with performance -4019\n", + " perceives ('Clean', 'None') and does Forward with performance -4020\n", + " perceives ('Clean', 'None') and does Forward with performance -4021\n", + " perceives ('Clean', 'None') and does Forward with performance -4022\n", + " perceives ('Clean', 'None') and does Forward with performance -4023\n", + " perceives ('Clean', 'None') and does Forward with performance -4024\n", + " perceives ('Clean', 'None') and does Forward with performance -4025\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4026\n", + " perceives ('Clean', 'None') and does Forward with performance -4027\n", + " perceives ('Clean', 'None') and does Forward with performance -4028\n", + " perceives ('Clean', 'None') and does Forward with performance -4029\n", + " perceives ('Clean', 'None') and does Forward with performance -4030\n", + " perceives ('Clean', 'None') and does Forward with performance -4031\n", + " perceives ('Clean', 'None') and does Forward with performance -4032\n", + " perceives ('Clean', 'None') and does Forward with performance -4033\n", + " perceives ('Clean', 'None') and does Forward with performance -4034\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4035\n", + " perceives ('Clean', 'None') and does Forward with performance -4036\n", + " perceives ('Clean', 'None') and does Forward with performance -4037\n", + " perceives ('Clean', 'None') and does Forward with performance -4038\n", + " perceives ('Clean', 'None') and does Forward with performance -4039\n", + " perceives ('Clean', 'None') and does Forward with performance -4040\n", + " perceives ('Clean', 'None') and does Forward with performance -4041\n", + " perceives ('Clean', 'None') and does Forward with performance -4042\n", + " perceives ('Clean', 'None') and does Forward with performance -4043\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4044\n", + " perceives ('Clean', 'None') and does Forward with performance -4045\n", + " perceives ('Clean', 'None') and does Forward with performance -4046\n", + " perceives ('Clean', 'None') and does Forward with performance -4047\n", + " perceives ('Clean', 'None') and does Forward with performance -4048\n", + " perceives ('Clean', 'None') and does Forward with performance -4049\n", + " perceives ('Clean', 'None') and does Forward with performance -4050\n", + " perceives ('Clean', 'None') and does Forward with performance -4051\n", + " perceives ('Clean', 'None') and does Forward with performance -4052\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4053\n", + " perceives ('Clean', 'None') and does Forward with performance -4054\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4055\n", + " perceives ('Clean', 'None') and does Forward with performance -4056\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4057\n", + " perceives ('Clean', 'None') and does Forward with performance -4058\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4059\n", + " perceives ('Clean', 'None') and does Forward with performance -4060\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4061\n", + " perceives ('Clean', 'None') and does Forward with performance -4062\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4063\n", + " perceives ('Clean', 'None') and does Forward with performance -4064\n", + " perceives ('Clean', 'None') and does Forward with performance -4065\n", + " perceives ('Clean', 'None') and does Forward with performance -4066\n", + " perceives ('Clean', 'None') and does Forward with performance -4067\n", + " perceives ('Clean', 'None') and does Forward with performance -4068\n", + " perceives ('Clean', 'None') and does Forward with performance -4069\n", + " perceives ('Clean', 'None') and does Forward with performance -4070\n", + " perceives ('Clean', 'None') and does Forward with performance -4071\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4072\n", + " perceives ('Clean', 'None') and does Forward with performance -4073\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4074\n", + " perceives ('Clean', 'None') and does Forward with performance -4075\n", + " perceives ('Clean', 'None') and does Forward with performance -4076\n", + " perceives ('Clean', 'None') and does Forward with performance -4077\n", + " perceives ('Clean', 'None') and does Forward with performance -4078\n", + " perceives ('Clean', 'None') and does Forward with performance -4079\n", + " perceives ('Clean', 'None') and does Forward with performance -4080\n", + " perceives ('Clean', 'None') and does Forward with performance -4081\n", + " perceives ('Clean', 'None') and does Forward with performance -4082\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4083\n", + " perceives ('Clean', 'None') and does Forward with performance -4084\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4085\n", + " perceives ('Clean', 'None') and does Forward with performance -4086\n", + " perceives ('Clean', 'None') and does Forward with performance -4087\n", + " perceives ('Clean', 'None') and does Forward with performance -4088\n", + " perceives ('Clean', 'None') and does Forward with performance -4089\n", + " perceives ('Clean', 'None') and does Forward with performance -4090\n", + " perceives ('Clean', 'None') and does Forward with performance -4091\n", + " perceives ('Clean', 'None') and does Forward with performance -4092\n", + " perceives ('Clean', 'None') and does Forward with performance -4093\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4094\n", + " perceives ('Clean', 'None') and does Forward with performance -4095\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4096\n", + " perceives ('Clean', 'None') and does Forward with performance -4097\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4098\n", + " perceives ('Clean', 'None') and does Forward with performance -4099\n", + " perceives ('Clean', 'None') and does Forward with performance -4100\n", + " perceives ('Clean', 'None') and does Forward with performance -4101\n", + " perceives ('Clean', 'None') and does Forward with performance -4102\n", + " perceives ('Clean', 'None') and does Forward with performance -4103\n", + " perceives ('Clean', 'None') and does Forward with performance -4104\n", + " perceives ('Clean', 'None') and does Forward with performance -4105\n", + " perceives ('Clean', 'None') and does Forward with performance -4106\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4107\n", + " perceives ('Clean', 'None') and does Forward with performance -4108\n", + " perceives ('Clean', 'None') and does Forward with performance -4109\n", + " perceives ('Clean', 'None') and does Forward with performance -4110\n", + " perceives ('Clean', 'None') and does Forward with performance -4111\n", + " perceives ('Clean', 'None') and does Forward with performance -4112\n", + " perceives ('Clean', 'None') and does Forward with performance -4113\n", + " perceives ('Clean', 'None') and does Forward with performance -4114\n", + " perceives ('Clean', 'None') and does Forward with performance -4115\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4116\n", + " perceives ('Clean', 'None') and does Forward with performance -4117\n", + " perceives ('Clean', 'None') and does Forward with performance -4118\n", + " perceives ('Clean', 'None') and does Forward with performance -4119\n", + " perceives ('Clean', 'None') and does Forward with performance -4120\n", + " perceives ('Clean', 'None') and does Forward with performance -4121\n", + " perceives ('Clean', 'None') and does Forward with performance -4122\n", + " perceives ('Clean', 'None') and does Forward with performance -4123\n", + " perceives ('Clean', 'None') and does Forward with performance -4124\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4125\n", + " perceives ('Clean', 'None') and does Forward with performance -4126\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4127\n", + " perceives ('Clean', 'None') and does Forward with performance -4128\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4129\n", + " perceives ('Clean', 'None') and does Forward with performance -4130\n", + " perceives ('Clean', 'None') and does Forward with performance -4131\n", + " perceives ('Clean', 'None') and does Forward with performance -4132\n", + " perceives ('Clean', 'None') and does Forward with performance -4133\n", + " perceives ('Clean', 'None') and does Forward with performance -4134\n", + " perceives ('Clean', 'None') and does Forward with performance -4135\n", + " perceives ('Clean', 'None') and does Forward with performance -4136\n", + " perceives ('Clean', 'None') and does Forward with performance -4137\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4138\n", + " perceives ('Clean', 'None') and does Forward with performance -4139\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4140\n", + " perceives ('Clean', 'None') and does Forward with performance -4141\n", + " perceives ('Clean', 'None') and does Forward with performance -4142\n", + " perceives ('Clean', 'None') and does Forward with performance -4143\n", + " perceives ('Clean', 'None') and does Forward with performance -4144\n", + " perceives ('Clean', 'None') and does Forward with performance -4145\n", + " perceives ('Clean', 'None') and does Forward with performance -4146\n", + " perceives ('Clean', 'None') and does Forward with performance -4147\n", + " perceives ('Clean', 'None') and does Forward with performance -4148\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4149\n", + " perceives ('Clean', 'None') and does Forward with performance -4150\n", + " perceives ('Clean', 'None') and does Forward with performance -4151\n", + " perceives ('Clean', 'None') and does Forward with performance -4152\n", + " perceives ('Clean', 'None') and does Forward with performance -4153\n", + " perceives ('Clean', 'None') and does Forward with performance -4154\n", + " perceives ('Clean', 'None') and does Forward with performance -4155\n", + " perceives ('Clean', 'None') and does Forward with performance -4156\n", + " perceives ('Clean', 'None') and does Forward with performance -4157\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4158\n", + " perceives ('Clean', 'None') and does Forward with performance -4159\n", + " perceives ('Clean', 'None') and does Forward with performance -4160\n", + " perceives ('Clean', 'None') and does Forward with performance -4161\n", + " perceives ('Clean', 'None') and does Forward with performance -4162\n", + " perceives ('Clean', 'None') and does Forward with performance -4163\n", + " perceives ('Clean', 'None') and does Forward with performance -4164\n", + " perceives ('Clean', 'None') and does Forward with performance -4165\n", + " perceives ('Clean', 'None') and does Forward with performance -4166\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4167\n", + " perceives ('Clean', 'None') and does Forward with performance -4168\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4169\n", + " perceives ('Clean', 'None') and does Forward with performance -4170\n", + " perceives ('Clean', 'None') and does Forward with performance -4171\n", + " perceives ('Clean', 'None') and does Forward with performance -4172\n", + " perceives ('Clean', 'None') and does Forward with performance -4173\n", + " perceives ('Clean', 'None') and does Forward with performance -4174\n", + " perceives ('Clean', 'None') and does Forward with performance -4175\n", + " perceives ('Clean', 'None') and does Forward with performance -4176\n", + " perceives ('Clean', 'None') and does Forward with performance -4177\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4178\n", + " perceives ('Clean', 'None') and does Forward with performance -4179\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4180\n", + " perceives ('Clean', 'None') and does Forward with performance -4181\n", + " perceives ('Clean', 'None') and does Forward with performance -4182\n", + " perceives ('Clean', 'None') and does Forward with performance -4183\n", + " perceives ('Clean', 'None') and does Forward with performance -4184\n", + " perceives ('Clean', 'None') and does Forward with performance -4185\n", + " perceives ('Clean', 'None') and does Forward with performance -4186\n", + " perceives ('Clean', 'None') and does Forward with performance -4187\n", + " perceives ('Clean', 'None') and does Forward with performance -4188\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4189\n", + " perceives ('Clean', 'None') and does Forward with performance -4190\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4191\n", + " perceives ('Clean', 'None') and does Forward with performance -4192\n", + " perceives ('Clean', 'None') and does Forward with performance -4193\n", + " perceives ('Clean', 'None') and does Forward with performance -4194\n", + " perceives ('Clean', 'None') and does Forward with performance -4195\n", + " perceives ('Clean', 'None') and does Forward with performance -4196\n", + " perceives ('Clean', 'None') and does Forward with performance -4197\n", + " perceives ('Clean', 'None') and does Forward with performance -4198\n", + " perceives ('Clean', 'None') and does Forward with performance -4199\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4200\n", + " perceives ('Clean', 'None') and does Forward with performance -4201\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4202\n", + " perceives ('Clean', 'None') and does Forward with performance -4203\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4204\n", + " perceives ('Clean', 'None') and does Forward with performance -4205\n", + " perceives ('Clean', 'None') and does Forward with performance -4206\n", + " perceives ('Clean', 'None') and does Forward with performance -4207\n", + " perceives ('Clean', 'None') and does Forward with performance -4208\n", + " perceives ('Clean', 'None') and does Forward with performance -4209\n", + " perceives ('Clean', 'None') and does Forward with performance -4210\n", + " perceives ('Clean', 'None') and does Forward with performance -4211\n", + " perceives ('Clean', 'None') and does Forward with performance -4212\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4213\n", + " perceives ('Clean', 'None') and does Forward with performance -4214\n", + " perceives ('Clean', 'None') and does Forward with performance -4215\n", + " perceives ('Clean', 'None') and does Forward with performance -4216\n", + " perceives ('Clean', 'None') and does Forward with performance -4217\n", + " perceives ('Clean', 'None') and does Forward with performance -4218\n", + " perceives ('Clean', 'None') and does Forward with performance -4219\n", + " perceives ('Clean', 'None') and does Forward with performance -4220\n", + " perceives ('Clean', 'None') and does Forward with performance -4221\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4222\n", + " perceives ('Clean', 'None') and does Forward with performance -4223\n", + " perceives ('Clean', 'None') and does Forward with performance -4224\n", + " perceives ('Clean', 'None') and does Forward with performance -4225\n", + " perceives ('Clean', 'None') and does Forward with performance -4226\n", + " perceives ('Clean', 'None') and does Forward with performance -4227\n", + " perceives ('Clean', 'None') and does Forward with performance -4228\n", + " perceives ('Clean', 'None') and does Forward with performance -4229\n", + " perceives ('Clean', 'None') and does Forward with performance -4230\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4231\n", + " perceives ('Clean', 'None') and does Forward with performance -4232\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4233\n", + " perceives ('Clean', 'None') and does Forward with performance -4234\n", + " perceives ('Clean', 'None') and does Forward with performance -4235\n", + " perceives ('Clean', 'None') and does Forward with performance -4236\n", + " perceives ('Clean', 'None') and does Forward with performance -4237\n", + " perceives ('Clean', 'None') and does Forward with performance -4238\n", + " perceives ('Clean', 'None') and does Forward with performance -4239\n", + " perceives ('Clean', 'None') and does Forward with performance -4240\n", + " perceives ('Clean', 'None') and does Forward with performance -4241\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4242\n", + " perceives ('Clean', 'None') and does Forward with performance -4243\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4244\n", + " perceives ('Clean', 'None') and does Forward with performance -4245\n", + " perceives ('Clean', 'None') and does Forward with performance -4246\n", + " perceives ('Clean', 'None') and does Forward with performance -4247\n", + " perceives ('Clean', 'None') and does Forward with performance -4248\n", + " perceives ('Clean', 'None') and does Forward with performance -4249\n", + " perceives ('Clean', 'None') and does Forward with performance -4250\n", + " perceives ('Clean', 'None') and does Forward with performance -4251\n", + " perceives ('Clean', 'None') and does Forward with performance -4252\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4253\n", + " perceives ('Clean', 'None') and does Forward with performance -4254\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4255\n", + " perceives ('Clean', 'None') and does Forward with performance -4256\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4257\n", + " perceives ('Clean', 'None') and does Forward with performance -4258\n", + " perceives ('Clean', 'None') and does Forward with performance -4259\n", + " perceives ('Clean', 'None') and does Forward with performance -4260\n", + " perceives ('Clean', 'None') and does Forward with performance -4261\n", + " perceives ('Clean', 'None') and does Forward with performance -4262\n", + " perceives ('Clean', 'None') and does Forward with performance -4263\n", + " perceives ('Clean', 'None') and does Forward with performance -4264\n", + " perceives ('Clean', 'None') and does Forward with performance -4265\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4266\n", + " perceives ('Clean', 'None') and does Forward with performance -4267\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4268\n", + " perceives ('Clean', 'None') and does Forward with performance -4269\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4270\n", + " perceives ('Clean', 'None') and does Forward with performance -4271\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4272\n", + " perceives ('Clean', 'None') and does Forward with performance -4273\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4274\n", + " perceives ('Clean', 'None') and does Forward with performance -4275\n", + " perceives ('Clean', 'None') and does Forward with performance -4276\n", + " perceives ('Clean', 'None') and does Forward with performance -4277\n", + " perceives ('Clean', 'None') and does Forward with performance -4278\n", + " perceives ('Clean', 'None') and does Forward with performance -4279\n", + " perceives ('Clean', 'None') and does Forward with performance -4280\n", + " perceives ('Clean', 'None') and does Forward with performance -4281\n", + " perceives ('Clean', 'None') and does Forward with performance -4282\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4283\n", + " perceives ('Clean', 'None') and does Forward with performance -4284\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4285\n", + " perceives ('Clean', 'None') and does Forward with performance -4286\n", + " perceives ('Clean', 'None') and does Forward with performance -4287\n", + " perceives ('Clean', 'None') and does Forward with performance -4288\n", + " perceives ('Clean', 'None') and does Forward with performance -4289\n", + " perceives ('Clean', 'None') and does Forward with performance -4290\n", + " perceives ('Clean', 'None') and does Forward with performance -4291\n", + " perceives ('Clean', 'None') and does Forward with performance -4292\n", + " perceives ('Clean', 'None') and does Forward with performance -4293\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4294\n", + " perceives ('Clean', 'None') and does Forward with performance -4295\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4296\n", + " perceives ('Clean', 'None') and does Forward with performance -4297\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4298\n", + " perceives ('Clean', 'None') and does Forward with performance -4299\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4300\n", + " perceives ('Clean', 'None') and does Forward with performance -4301\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4302\n", + " perceives ('Clean', 'None') and does Forward with performance -4303\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4304\n", + " perceives ('Clean', 'None') and does Forward with performance -4305\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4306\n", + " perceives ('Clean', 'None') and does Forward with performance -4307\n", + " perceives ('Clean', 'None') and does Forward with performance -4308\n", + " perceives ('Clean', 'None') and does Forward with performance -4309\n", + " perceives ('Clean', 'None') and does Forward with performance -4310\n", + " perceives ('Clean', 'None') and does Forward with performance -4311\n", + " perceives ('Clean', 'None') and does Forward with performance -4312\n", + " perceives ('Clean', 'None') and does Forward with performance -4313\n", + " perceives ('Clean', 'None') and does Forward with performance -4314\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4315\n", + " perceives ('Clean', 'None') and does Forward with performance -4316\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4317\n", + " perceives ('Clean', 'None') and does Forward with performance -4318\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4319\n", + " perceives ('Clean', 'None') and does Forward with performance -4320\n", + " perceives ('Clean', 'None') and does Forward with performance -4321\n", + " perceives ('Clean', 'None') and does Forward with performance -4322\n", + " perceives ('Clean', 'None') and does Forward with performance -4323\n", + " perceives ('Clean', 'None') and does Forward with performance -4324\n", + " perceives ('Clean', 'None') and does Forward with performance -4325\n", + " perceives ('Clean', 'None') and does Forward with performance -4326\n", + " perceives ('Clean', 'None') and does Forward with performance -4327\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4328\n", + " perceives ('Clean', 'None') and does Forward with performance -4329\n", + " perceives ('Clean', 'None') and does Forward with performance -4330\n", + " perceives ('Clean', 'None') and does Forward with performance -4331\n", + " perceives ('Clean', 'None') and does Forward with performance -4332\n", + " perceives ('Clean', 'None') and does Forward with performance -4333\n", + " perceives ('Clean', 'None') and does Forward with performance -4334\n", + " perceives ('Clean', 'None') and does Forward with performance -4335\n", + " perceives ('Clean', 'None') and does Forward with performance -4336\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4337\n", + " perceives ('Clean', 'None') and does Forward with performance -4338\n", + " perceives ('Clean', 'None') and does Forward with performance -4339\n", + " perceives ('Clean', 'None') and does Forward with performance -4340\n", + " perceives ('Clean', 'None') and does Forward with performance -4341\n", + " perceives ('Clean', 'None') and does Forward with performance -4342\n", + " perceives ('Clean', 'None') and does Forward with performance -4343\n", + " perceives ('Clean', 'None') and does Forward with performance -4344\n", + " perceives ('Clean', 'None') and does Forward with performance -4345\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4346\n", + " perceives ('Clean', 'None') and does Forward with performance -4347\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4348\n", + " perceives ('Clean', 'None') and does Forward with performance -4349\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4350\n", + " perceives ('Clean', 'None') and does Forward with performance -4351\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4352\n", + " perceives ('Clean', 'None') and does Forward with performance -4353\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4354\n", + " perceives ('Clean', 'None') and does Forward with performance -4355\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4356\n", + " perceives ('Clean', 'None') and does Forward with performance -4357\n", + " perceives ('Clean', 'None') and does Forward with performance -4358\n", + " perceives ('Clean', 'None') and does Forward with performance -4359\n", + " perceives ('Clean', 'None') and does Forward with performance -4360\n", + " perceives ('Clean', 'None') and does Forward with performance -4361\n", + " perceives ('Clean', 'None') and does Forward with performance -4362\n", + " perceives ('Clean', 'None') and does Forward with performance -4363\n", + " perceives ('Clean', 'None') and does Forward with performance -4364\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4365\n", + " perceives ('Clean', 'None') and does Forward with performance -4366\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4367\n", + " perceives ('Clean', 'None') and does Forward with performance -4368\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4369\n", + " perceives ('Clean', 'None') and does Forward with performance -4370\n", + " perceives ('Clean', 'None') and does Forward with performance -4371\n", + " perceives ('Clean', 'None') and does Forward with performance -4372\n", + " perceives ('Clean', 'None') and does Forward with performance -4373\n", + " perceives ('Clean', 'None') and does Forward with performance -4374\n", + " perceives ('Clean', 'None') and does Forward with performance -4375\n", + " perceives ('Clean', 'None') and does Forward with performance -4376\n", + " perceives ('Clean', 'None') and does Forward with performance -4377\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4378\n", + " perceives ('Clean', 'None') and does Forward with performance -4379\n", + " perceives ('Clean', 'None') and does Forward with performance -4380\n", + " perceives ('Clean', 'None') and does Forward with performance -4381\n", + " perceives ('Clean', 'None') and does Forward with performance -4382\n", + " perceives ('Clean', 'None') and does Forward with performance -4383\n", + " perceives ('Clean', 'None') and does Forward with performance -4384\n", + " perceives ('Clean', 'None') and does Forward with performance -4385\n", + " perceives ('Clean', 'None') and does Forward with performance -4386\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4387\n", + " perceives ('Clean', 'None') and does Forward with performance -4388\n", + " perceives ('Clean', 'None') and does Forward with performance -4389\n", + " perceives ('Clean', 'None') and does Forward with performance -4390\n", + " perceives ('Clean', 'None') and does Forward with performance -4391\n", + " perceives ('Clean', 'None') and does Forward with performance -4392\n", + " perceives ('Clean', 'None') and does Forward with performance -4393\n", + " perceives ('Clean', 'None') and does Forward with performance -4394\n", + " perceives ('Clean', 'None') and does Forward with performance -4395\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4396\n", + " perceives ('Clean', 'None') and does Forward with performance -4397\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4398\n", + " perceives ('Clean', 'None') and does Forward with performance -4399\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4400\n", + " perceives ('Clean', 'None') and does Forward with performance -4401\n", + " perceives ('Clean', 'None') and does Forward with performance -4402\n", + " perceives ('Clean', 'None') and does Forward with performance -4403\n", + " perceives ('Clean', 'None') and does Forward with performance -4404\n", + " perceives ('Clean', 'None') and does Forward with performance -4405\n", + " perceives ('Clean', 'None') and does Forward with performance -4406\n", + " perceives ('Clean', 'None') and does Forward with performance -4407\n", + " perceives ('Clean', 'None') and does Forward with performance -4408\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4409\n", + " perceives ('Clean', 'None') and does Forward with performance -4410\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4411\n", + " perceives ('Clean', 'None') and does Forward with performance -4412\n", + " perceives ('Clean', 'None') and does Forward with performance -4413\n", + " perceives ('Clean', 'None') and does Forward with performance -4414\n", + " perceives ('Clean', 'None') and does Forward with performance -4415\n", + " perceives ('Clean', 'None') and does Forward with performance -4416\n", + " perceives ('Clean', 'None') and does Forward with performance -4417\n", + " perceives ('Clean', 'None') and does Forward with performance -4418\n", + " perceives ('Clean', 'None') and does Forward with performance -4419\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4420\n", + " perceives ('Clean', 'None') and does Forward with performance -4421\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4422\n", + " perceives ('Clean', 'None') and does Forward with performance -4423\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4424\n", + " perceives ('Clean', 'None') and does Forward with performance -4425\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4426\n", + " perceives ('Clean', 'None') and does Forward with performance -4427\n", + " perceives ('Clean', 'None') and does Forward with performance -4428\n", + " perceives ('Clean', 'None') and does Forward with performance -4429\n", + " perceives ('Clean', 'None') and does Forward with performance -4430\n", + " perceives ('Clean', 'None') and does Forward with performance -4431\n", + " perceives ('Clean', 'None') and does Forward with performance -4432\n", + " perceives ('Clean', 'None') and does Forward with performance -4433\n", + " perceives ('Clean', 'None') and does Forward with performance -4434\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4435\n", + " perceives ('Clean', 'None') and does Forward with performance -4436\n", + " perceives ('Clean', 'None') and does Forward with performance -4437\n", + " perceives ('Clean', 'None') and does Forward with performance -4438\n", + " perceives ('Clean', 'None') and does Forward with performance -4439\n", + " perceives ('Clean', 'None') and does Forward with performance -4440\n", + " perceives ('Clean', 'None') and does Forward with performance -4441\n", + " perceives ('Clean', 'None') and does Forward with performance -4442\n", + " perceives ('Clean', 'None') and does Forward with performance -4443\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4444\n", + " perceives ('Clean', 'None') and does Forward with performance -4445\n", + " perceives ('Clean', 'None') and does Forward with performance -4446\n", + " perceives ('Clean', 'None') and does Forward with performance -4447\n", + " perceives ('Clean', 'None') and does Forward with performance -4448\n", + " perceives ('Clean', 'None') and does Forward with performance -4449\n", + " perceives ('Clean', 'None') and does Forward with performance -4450\n", + " perceives ('Clean', 'None') and does Forward with performance -4451\n", + " perceives ('Clean', 'None') and does Forward with performance -4452\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4453\n", + " perceives ('Clean', 'None') and does Forward with performance -4454\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4455\n", + " perceives ('Clean', 'None') and does Forward with performance -4456\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4457\n", + " perceives ('Clean', 'None') and does Forward with performance -4458\n", + " perceives ('Clean', 'None') and does Forward with performance -4459\n", + " perceives ('Clean', 'None') and does Forward with performance -4460\n", + " perceives ('Clean', 'None') and does Forward with performance -4461\n", + " perceives ('Clean', 'None') and does Forward with performance -4462\n", + " perceives ('Clean', 'None') and does Forward with performance -4463\n", + " perceives ('Clean', 'None') and does Forward with performance -4464\n", + " perceives ('Clean', 'None') and does Forward with performance -4465\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4466\n", + " perceives ('Clean', 'None') and does Forward with performance -4467\n", + " perceives ('Clean', 'None') and does Forward with performance -4468\n", + " perceives ('Clean', 'None') and does Forward with performance -4469\n", + " perceives ('Clean', 'None') and does Forward with performance -4470\n", + " perceives ('Clean', 'None') and does Forward with performance -4471\n", + " perceives ('Clean', 'None') and does Forward with performance -4472\n", + " perceives ('Clean', 'None') and does Forward with performance -4473\n", + " perceives ('Clean', 'None') and does Forward with performance -4474\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4475\n", + " perceives ('Clean', 'None') and does Forward with performance -4476\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4477\n", + " perceives ('Clean', 'None') and does Forward with performance -4478\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4479\n", + " perceives ('Clean', 'None') and does Forward with performance -4480\n", + " perceives ('Clean', 'None') and does Forward with performance -4481\n", + " perceives ('Clean', 'None') and does Forward with performance -4482\n", + " perceives ('Clean', 'None') and does Forward with performance -4483\n", + " perceives ('Clean', 'None') and does Forward with performance -4484\n", + " perceives ('Clean', 'None') and does Forward with performance -4485\n", + " perceives ('Clean', 'None') and does Forward with performance -4486\n", + " perceives ('Clean', 'None') and does Forward with performance -4487\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4488\n", + " perceives ('Clean', 'None') and does Forward with performance -4489\n", + " perceives ('Clean', 'None') and does Forward with performance -4490\n", + " perceives ('Clean', 'None') and does Forward with performance -4491\n", + " perceives ('Clean', 'None') and does Forward with performance -4492\n", + " perceives ('Clean', 'None') and does Forward with performance -4493\n", + " perceives ('Clean', 'None') and does Forward with performance -4494\n", + " perceives ('Clean', 'None') and does Forward with performance -4495\n", + " perceives ('Clean', 'None') and does Forward with performance -4496\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4497\n", + " perceives ('Clean', 'None') and does Forward with performance -4498\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4499\n", + " perceives ('Clean', 'None') and does Forward with performance -4500\n", + " perceives ('Clean', 'None') and does Forward with performance -4501\n", + " perceives ('Clean', 'None') and does Forward with performance -4502\n", + " perceives ('Clean', 'None') and does Forward with performance -4503\n", + " perceives ('Clean', 'None') and does Forward with performance -4504\n", + " perceives ('Clean', 'None') and does Forward with performance -4505\n", + " perceives ('Clean', 'None') and does Forward with performance -4506\n", + " perceives ('Clean', 'None') and does Forward with performance -4507\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4508\n", + " perceives ('Clean', 'None') and does Forward with performance -4509\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4510\n", + " perceives ('Clean', 'None') and does Forward with performance -4511\n", + " perceives ('Clean', 'None') and does Forward with performance -4512\n", + " perceives ('Clean', 'None') and does Forward with performance -4513\n", + " perceives ('Clean', 'None') and does Forward with performance -4514\n", + " perceives ('Clean', 'None') and does Forward with performance -4515\n", + " perceives ('Clean', 'None') and does Forward with performance -4516\n", + " perceives ('Clean', 'None') and does Forward with performance -4517\n", + " perceives ('Clean', 'None') and does Forward with performance -4518\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4519\n", + " perceives ('Clean', 'None') and does Forward with performance -4520\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4521\n", + " perceives ('Clean', 'None') and does Forward with performance -4522\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4523\n", + " perceives ('Clean', 'None') and does Forward with performance -4524\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4525\n", + " perceives ('Clean', 'None') and does Forward with performance -4526\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4527\n", + " perceives ('Clean', 'None') and does Forward with performance -4528\n", + " perceives ('Clean', 'None') and does Forward with performance -4529\n", + " perceives ('Clean', 'None') and does Forward with performance -4530\n", + " perceives ('Clean', 'None') and does Forward with performance -4531\n", + " perceives ('Clean', 'None') and does Forward with performance -4532\n", + " perceives ('Clean', 'None') and does Forward with performance -4533\n", + " perceives ('Clean', 'None') and does Forward with performance -4534\n", + " perceives ('Clean', 'None') and does Forward with performance -4535\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4536\n", + " perceives ('Clean', 'None') and does Forward with performance -4537\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4538\n", + " perceives ('Clean', 'None') and does Forward with performance -4539\n", + " perceives ('Clean', 'None') and does Forward with performance -4540\n", + " perceives ('Clean', 'None') and does Forward with performance -4541\n", + " perceives ('Clean', 'None') and does Forward with performance -4542\n", + " perceives ('Clean', 'None') and does Forward with performance -4543\n", + " perceives ('Clean', 'None') and does Forward with performance -4544\n", + " perceives ('Clean', 'None') and does Forward with performance -4545\n", + " perceives ('Clean', 'None') and does Forward with performance -4546\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4547\n", + " perceives ('Clean', 'None') and does Forward with performance -4548\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4549\n", + " perceives ('Clean', 'None') and does Forward with performance -4550\n", + " perceives ('Clean', 'None') and does Forward with performance -4551\n", + " perceives ('Clean', 'None') and does Forward with performance -4552\n", + " perceives ('Clean', 'None') and does Forward with performance -4553\n", + " perceives ('Clean', 'None') and does Forward with performance -4554\n", + " perceives ('Clean', 'None') and does Forward with performance -4555\n", + " perceives ('Clean', 'None') and does Forward with performance -4556\n", + " perceives ('Clean', 'None') and does Forward with performance -4557\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4558\n", + " perceives ('Clean', 'None') and does Forward with performance -4559\n", + " perceives ('Clean', 'None') and does Forward with performance -4560\n", + " perceives ('Clean', 'None') and does Forward with performance -4561\n", + " perceives ('Clean', 'None') and does Forward with performance -4562\n", + " perceives ('Clean', 'None') and does Forward with performance -4563\n", + " perceives ('Clean', 'None') and does Forward with performance -4564\n", + " perceives ('Clean', 'None') and does Forward with performance -4565\n", + " perceives ('Clean', 'None') and does Forward with performance -4566\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4567\n", + " perceives ('Clean', 'None') and does Forward with performance -4568\n", + " perceives ('Clean', 'None') and does Forward with performance -4569\n", + " perceives ('Clean', 'None') and does Forward with performance -4570\n", + " perceives ('Clean', 'None') and does Forward with performance -4571\n", + " perceives ('Clean', 'None') and does Forward with performance -4572\n", + " perceives ('Clean', 'None') and does Forward with performance -4573\n", + " perceives ('Clean', 'None') and does Forward with performance -4574\n", + " perceives ('Clean', 'None') and does Forward with performance -4575\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4576\n", + " perceives ('Clean', 'None') and does Forward with performance -4577\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4578\n", + " perceives ('Clean', 'None') and does Forward with performance -4579\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4580\n", + " perceives ('Clean', 'None') and does Forward with performance -4581\n", + " perceives ('Clean', 'Bump') and does TurnLeft with performance -4582\n", + " perceives ('Clean', 'None') and does Forward with performance -4583\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4584\n", + " perceives ('Clean', 'None') and does Forward with performance -4585\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4586\n", + " perceives ('Clean', 'None') and does Forward with performance -4587\n", + " perceives ('Clean', 'None') and does Forward with performance -4588\n", + " perceives ('Clean', 'None') and does Forward with performance -4589\n", + " perceives ('Clean', 'None') and does Forward with performance -4590\n", + " perceives ('Clean', 'None') and does Forward with performance -4591\n", + " perceives ('Clean', 'None') and does Forward with performance -4592\n", + " perceives ('Clean', 'None') and does Forward with performance -4593\n", + " perceives ('Clean', 'None') and does Forward with performance -4594\n", + " perceives ('Clean', 'Bump') and does TurnRight with performance -4595\n", + " perceives ('Clean', 'None') and does Forward with performance -4596\n", + " perceives ('Clean', 'None') and does Forward with performance -4597\n", + " perceives ('Clean', 'None') and does Forward with performance -4598\n", + " perceives ('Clean', 'None') and does Forward with performance -4599\n" + ] + } + ], + "source": [ + "TraceAgent(vacuum)\n", + "environment.run(steps = 5000)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-978" + ] + }, + "execution_count": 242, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agent.performance" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', 'DIRT', 'DIRT', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', 'DIRT', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', 'DIRT', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n", + "[' c ', ' c ', 'DIRT', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ', ' c ']\n" + ] + } + ], + "source": [ + "show_dirt(environment)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Performance\n", + "It kind of sucks. My vacuum ins't smart enough." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MODEL-BASED REFLEX AGENTS \n", + "\n", + "Let's recall the diagram for the simple reflex agent\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "and compare to this new model-based agent\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "and you can see that now the robot is trying to form a model to understand the consequences of its actions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def ModelBasedReflexAgentProgram(rules, update_state, transition_model, sensor_model):\n",
+       "    """\n",
+       "    [Figure 2.12]\n",
+       "    This agent takes action based on the percept and state.\n",
+       "    """\n",
+       "\n",
+       "    def program(percept):\n",
+       "        program.state = update_state(program.state, program.action, percept, transition_model, sensor_model)\n",
+       "        rule = rule_match(program.state, rules)\n",
+       "        action = rule.action\n",
+       "        return action\n",
+       "\n",
+       "    program.state = program.action = None\n",
+       "    return program\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(ModelBasedReflexAgentProgram)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Trivial Model-Based Vacuum Agent" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def ModelBasedVacuumAgent():\n",
+       "    """An agent that keeps track of what locations are clean or dirty.\n",
+       "    >>> agent = ModelBasedVacuumAgent()\n",
+       "    >>> environment = TrivialVacuumEnvironment()\n",
+       "    >>> environment.add_thing(agent)\n",
+       "    >>> environment.run()\n",
+       "    >>> environment.status == {(1,0):'Clean' , (0,0) : 'Clean'}\n",
+       "    True\n",
+       "    """\n",
+       "    model = {loc_A: None, loc_B: None}\n",
+       "\n",
+       "    def program(percept):\n",
+       "        """Same as ReflexVacuumAgent, except if everything is clean, do NoOp."""\n",
+       "        location, status = percept\n",
+       "        model[location] = status  # Update the model here\n",
+       "        if model[loc_A] == model[loc_B] == 'Clean':\n",
+       "            return 'NoOp'\n",
+       "        elif status == 'Dirty':\n",
+       "            return 'Suck'\n",
+       "        elif location == loc_A:\n",
+       "            return 'Right'\n",
+       "        elif location == loc_B:\n",
+       "            return 'Left'\n",
+       "\n",
+       "    return Agent(program)\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(ModelBasedVacuumAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This really isn't much better -- it just knows not to keep cleaning if it's done. But the environment was already doing that for us, and in my 2D example it couldn't find all of the spots to clean efficiently so it would never stop anyhow. That's because it really needs to figure out which movements were helpful and to then learn how to move more efficiently. To do that we need to incorporate the performance in its movement rules." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## GOAL-BASED AGENTS\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "You can see that we're now allowing ourselves to learn what actions lead to a specific state. So, for example, could we decide which direction to turn based on whether there's a dirty patch to the left or the right.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## UTILITY-BASED VS. GOAL-BASED AGENTS\n", + "\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n", + "\n", + "Now we're not focused on landing in a particular state, but rather we're focused on moving towards a state that we like. We'll learn in later sections how you can train a model by moving through your environment and learning which steps *eventually* get you to the state you like. So the **utility** of a move is related to whether it's getting you closer to your end-goal. So could we know that long-term we're more likely to clean the most patches by moving in a consistent way? I think I'm probably getting ahead of myself -- this is all sending us here:k" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## AGENTS THAT LEARN\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The **learning element** is responsible for making improvements, while the **performance element** actually makes the current choice of action. This latter part is what was the entire agent in previous iterations. On the other hand, the **critic** evaluates the agent's performance (how did the environment change after the agent's last action?) and the learning element uses this feedback to update the logic in the performance element.\n", + "\n", + "The role of the **problem generator** is to figure out what actions we should take so that we learn the most from our experiments.\n", + "\n", + "# How can we best describe that state?\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "## Atomic\n", + "\n", + "A single string or number or ...\n", + "\n", + "## Factored representation\n", + "\n", + "A preset list of key-value pairs\n", + "\n", + "## Structured representation\n", + "\n", + "Describes the relationships between the things in the environment" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "d82299ac97702ffacc0d7b6e7812598354a240b0faec67019e9fec27ff7627a8" + }, + "kernelspec": { + "display_name": "Python 3.8.12 ('parsing')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/csp.aux b/csp.aux new file mode 100644 index 000000000..777cbe806 --- /dev/null +++ b/csp.aux @@ -0,0 +1,102 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\providecommand\babel@aux[2]{} +\@nameuse{bbl@beforestart} +\providecommand \oddpage@label [2]{} +\babel@aux{english}{} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {1}{1}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{2}{2/2}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {2}{2}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{3}{3/3}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {3}{3}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{4}{4/4}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {4}{4}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{5}{5/5}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {5}{5}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{6}{6/6}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {6}{6}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{7}{7/7}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {7}{7}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{8}{8/8}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {8}{8}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{9}{9/9}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {9}{9}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{10}{10/10}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {10}{10}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{11}{11/11}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {11}{11}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{12}{12/12}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {12}{12}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{13}{13/13}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {13}{13}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{14}{14/14}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {14}{14}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{15}{15/15}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {15}{15}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{16}{16/16}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {16}{16}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{17}{17/17}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {17}{17}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{18}{18/18}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {18}{18}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{19}{19/19}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {19}{19}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{20}{20/20}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {20}{20}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{21}{21/21}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {21}{21}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{22}{22/22}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {22}{22}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{23}{23/23}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {23}{23}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{24}{24/24}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {24}{24}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{25}{25/25}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {25}{25}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{26}{26/26}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {26}{26}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{27}{27/27}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {27}{27}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{28}{28/28}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {28}{28}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{29}{29/29}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {29}{29}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{30}{30/30}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {30}{30}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{31}{31/31}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {31}{31}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{32}{32/32}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {32}{32}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{33}{33/33}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {33}{33}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{34}{34/34}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {34}{34}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{35}{35/35}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {35}{35}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{36}{36/36}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {36}{36}}} +\@writefile{nav}{\headcommand {\beamer@partpages {1}{37}}} +\@writefile{nav}{\headcommand {\beamer@subsectionpages {1}{37}}} +\@writefile{nav}{\headcommand {\beamer@sectionpages {1}{37}}} +\@writefile{nav}{\headcommand {\beamer@documentpages {37}}} +\@writefile{nav}{\headcommand {\gdef \inserttotalframenumber {37}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{37}{37/37}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {37}{37}}} +\gdef \@abspage@last{37} diff --git a/csp.fdb_latexmk b/csp.fdb_latexmk new file mode 100644 index 000000000..67fbee96d --- /dev/null +++ b/csp.fdb_latexmk @@ -0,0 +1,272 @@ +# Fdb version 3 +["pdflatex"] 1651264357 "c:/Users/elsa.schaefer/Documents/dev/aima/aima-python/csp.tex" "csp.pdf" "csp" 1651264361 + "c:/Users/elsa.schaefer/Documents/dev/aima/aima-python/csp.tex" 1651264351 20472 55c7b19eb62bd56ab78388f1fb200ec7 "" + "c:/texlive/2021/texmf-dist/fonts/map/fontname/texfonts.map" 1645819803 3524 cb3e574dea2d1052e39280babc910dc8 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy5.tfm" 1645817888 1120 1e8878807317373affa7f7bba4cf2f6a "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy6.tfm" 1645817888 1124 14ccf5552bc7f77ca02a8a402bea8bfb "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy7.tfm" 1645817888 1120 7f9f170e8aa57527ad6c49feafd45d54 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy8.tfm" 1645817888 1120 200be8b775682cdf80acad4be5ef57e4 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1645817888 1004 54797486969f23fa377b128694d548df "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm" 1645817888 988 bdf658c3bfc2d96d3c8b02cfc1c94c20 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib5.tfm" 1645817888 1496 c79f6914c6d39ffb3759967363d1be79 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib6.tfm" 1645817888 1516 a3bf6a5e7ec4401b1f52092dfaaed242 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib7.tfm" 1645817888 1508 6e807ff901c35a5f1fde0ca275533df8 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib8.tfm" 1645817888 1528 dab402b9d3774ca98baa037071cee7ae "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm" 1645817888 916 f87d7c45f9c908e672703b83b72241a3 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm" 1645817888 924 9904cf1d39e9767e7a3622f2a125a565 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm" 1645817888 928 2dc8d444221b7a635bb58038579b861a "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm" 1645817888 908 2921f8a10601f252058503cc6570e581 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm" 1645817888 940 75ac932a52f80982a9f8ea75d03a34cf "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm" 1645817888 940 228d6584342e91276bf566bcf9716b83 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbsy10.tfm" 1645818744 1116 4e6ba9d7914baa6482fd69f67d126380 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx10.tfm" 1645818744 1328 c834bbb027764024c09d3d2bf908b5f0 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx12.tfm" 1645818744 1324 c910af8c371558dc20f2d7822f66fe64 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx5.tfm" 1645818744 1332 f817c21a1ba54560425663374f1b651a "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx6.tfm" 1645818744 1344 8a0be4fe4d376203000810ad4dc81558 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx7.tfm" 1645818744 1336 3125ccb448c1a09074e3aa4a9832f130 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx8.tfm" 1645818744 1332 1fde11373e221473104d6cc5993f046e "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmex10.tfm" 1645818744 992 662f679a0b3d2d53c1b94050fdaa3f50 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmi10.tfm" 1645818744 1528 abec98dbc43e172678c11b3b9031252a "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm" 1645818744 1524 4414a8315f39513458b80dfc63bff03a "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm" 1645818744 1512 f21f83efb36853c0b70002322c1ab3ad "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm" 1645818744 1520 eccf95517727cb11801f4f1aee3a21b4 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmib10.tfm" 1645818744 1524 554068197b70979a55370e6c6495f441 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr10.tfm" 1645818744 1296 45809c5a464d5f32c8f98ba97c1bb47f "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr12.tfm" 1645818744 1288 655e228510b4c2a1abe905c368440826 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr5.tfm" 1645818744 1220 ad296dff3c8796c18053ab7b9f86ad7c "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr6.tfm" 1645818744 1300 b62933e007d01cfd073f79b963c01526 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr8.tfm" 1645818744 1292 21c1c5bfeaebccffdb478fd231a0997d "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr9.tfm" 1645818744 1292 6b21b9c2c7bebb38aa2273f7ca0fb3af "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmss10.tfm" 1645818744 1316 b636689f1933f24d1294acdf6041daaa "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm" 1645818744 1124 6c73e740cf17375f03eec0ee63599741 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm" 1645818744 1116 933a60c408fc0a863a92debe84b2d294 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm" 1645818744 1120 8b7d695260f3cff42e636090a8002094 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmti10.tfm" 1645818744 1480 aa8e34af0eb6a2941b776984cf1dfdc4 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmtt10.tfm" 1645818744 768 1321e9409b4137d6fb428ac9dc956269 "" + "c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmtt8.tfm" 1645818744 768 d7b9a2629a0c353102ad947dc9221d49 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb" 1645817888 34811 78b52f49e893bcba91bd7581cdc144c0 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb" 1645817888 36299 5f9df58c2139e7edcf37c8fca4bd384d "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb" 1645817888 36741 0ee9e374ec3e30da87cdfb0ea3575226 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb" 1645817888 36281 c355509802a035cadc5f15869451dcee "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb" 1645817888 35469 dcf3a5f2fc1862f5952e3ee5eb1d98c4 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb" 1645817888 35752 024fb6c41858982481f6968b5fc26508 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb" 1645817888 32722 d7379af29a190c3f453aba36302ff5a9 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr5.pfb" 1645817888 31809 8670ca339bf94e56da1fc21c80635e2a "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb" 1645817888 32734 69e00a6b65cedb993666e42eedb3d48f "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb" 1645817888 32762 7fee39e011c23b3589931effd97b9702 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb" 1645817888 32726 39f0f9e62e84beb801509898a605dbd5 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb" 1645817888 33993 9b89b85fd2d9df0482bd47194d1d3bf3 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb" 1645817888 32569 5e5ddc8df908dea60932f3c484a54c0d "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb" 1645817888 37944 359e864bd06cde3b1cf57bb20757fb06 "" + "c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb" 1645817888 31099 342ef5a582aacbd3346f3cf4579679fa "" + "c:/texlive/2021/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1645821445 71627 94eb9990bed73c364d7f53f960cc8c5b "" + "c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty" 1645818022 24708 5584a51a7101caf7e6bbf1fc27d8f7b1 "" + "c:/texlive/2021/texmf-dist/tex/generic/babel-english/english.ldf" 1645818087 7008 9ff5fdcc865b01beca2b0fe4a46231d4 "" + "c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty" 1645818067 147649 91108c35c99a44d07c0460ab5356e571 "" + "c:/texlive/2021/texmf-dist/tex/generic/babel/txtbabel.def" 1645818068 5233 d5e383ed66bf272b71b1a90b596e21c6 "" + "c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty" 1645818385 40635 c40361e206be584d448876bba8a64a3b "" + "c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty" 1645818400 33961 6b5c75130e435b2bfdb9f480a09a39f9 "" + "c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty" 1645819516 7734 b98cbb34c81f667027c1e3ebdbfce34b "" + "c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty" 1645819957 8371 9d55b8bd010bc717624922fb3477d92e "" + "c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty" 1645820362 7237 bdd120a32c8fdb4b433cf9ca2e7cd98a "" + "c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty" 1645820362 1057 525c2192b5febbd8c1f662c9468335bb "" + "c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty" 1645820396 8356 7bbb2c2373aa810be568c29e333da8ed "" + "c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty" 1645820418 31769 002a487f55041f8e805cfbf6385ffd97 "" + "c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty" 1645820622 5412 d5a2436094cd7be85769db90f29250a6 "" + "c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty" 1645820627 13807 952b0226d4efca026f0e19dd266dcc22 "" + "c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1645820997 17859 4409f8f50cd365c68e684407e5350b1b "" + "c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty" 1645821869 19007 15924f7228aca6c6d184b115f4baa231 "" + "c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty" 1645821898 20089 80423eac55aa175305d35b49e04fe23b "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex" 1645824392 992 855ff26741653ab54814101ca36e153c "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex" 1645824392 43820 1fef971b75380574ab35a0d37fd92608 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex" 1645824392 19324 f4e4c6403dd0f1605fd20ed22fa79dea "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex" 1645824392 6038 ccb406740cc3f03bbfb58ad504fe8c27 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex" 1645824392 6944 e12f8f7a7364ddf66f93ba30fb3a3742 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex" 1645824392 4883 42daaf41e27c3735286e23e48d2d7af9 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex" 1645824392 2544 8c06d2a7f0f469616ac9e13db6d2f842 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex" 1645824392 44195 5e390c414de027626ca5e2df888fa68d "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex" 1645824392 17311 2ef6b2e29e2fc6a2fc8d6d652176e257 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex" 1645824392 21302 788a79944eb22192a4929e46963a3067 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex" 1645824392 9690 01feb7cde25d4293ef36eef45123eb80 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex" 1645824392 33335 dd1fa4814d4e51f18be97d88bf0da60c "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex" 1645824392 2965 4c2b1f4e0826925746439038172e5d6f "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex" 1645824392 5196 2cc249e0ee7e03da5f5f6589257b1e5b "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex" 1645824392 20726 d4c8db1e2e53b72721d29916314a22ea "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex" 1645824392 35249 abd4adf948f960299a4b3d27c5dddf46 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex" 1645824392 21989 fdc867d05d228316de137a9fc5ec3bbe "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex" 1645824392 8893 e851de2175338fdf7c17f3e091d94618 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfint.code.tex" 1645824392 3063 8c415c68a0f3394e45cfeca0b65f6ee6 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex" 1645824392 521 8e224a7af69b7fee4451d1bf76b46654 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex" 1645824392 13391 84d29568c13bdce4133ab4a214711112 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex" 1645824392 104935 184ed87524e76d4957860df4ce0cd1c3 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex" 1645824392 10165 cec5fa73d49da442e56efc2d605ef154 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex" 1645824392 28178 41c17713108e0795aac6fef3d275fbca "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex" 1645824392 9989 c55967bf45126ff9b061fa2ca0c4694f "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex" 1645824392 3865 ac538ab80c5cf82b345016e474786549 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex" 1645824392 3177 27d85c44fbfe09ff3b2cf2879e3ea434 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex" 1645824392 11024 0179538121bc2dba172013a3ef89519f "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex" 1645824392 7854 4176998eeefd8745ac6d2d4bd9c98451 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex" 1645824392 3379 781797a101f647bab82741a99944a229 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex" 1645824392 92405 f515f31275db273f97b9d8f52e1b0736 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex" 1645824392 37376 11cd75aac3da1c1b152b2848f30adc14 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex" 1645824392 8471 c2883569d03f69e8e1cabfef4999cfd7 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/pgf.revision.tex" 1645824392 465 d68603f8b820ea4a08cce534944db581 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg" 1645824392 926 2963ea0dcf6cc6c0a770b69ec46a477b "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def" 1645824392 5546 f3f24d7898386cb7daac70bdd2c4d6dc "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def" 1645824392 12601 4786e597516eddd82097506db7cfa098 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex" 1645824392 61163 9b2eefc24e021323e0fc140e9826d016 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex" 1645824392 1896 b8e0ca0ac371d74c0ca05583f6313c91 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex" 1645824392 7778 53c8b5623d80238f6a20aa1df1868e63 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex" 1645824392 37060 797782f0eb50075c9bc952374d9a659a "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex" 1645824392 37431 9abe862035de1b29c7a677f3205e3d9f "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex" 1645824393 4494 af17fb7efeafe423710479858e42fa7e "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex" 1645824393 7251 fb18c67117e09c64de82267e12cd8aa4 "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex" 1645824393 29274 e15c5b7157d21523bd9c9f1dfa146b8e "" + "c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def" 1645824393 6825 a2b0ea5b539dda0625e99dd15785ab59 "" + "c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty" 1645826708 7008 f92eaa0a3872ed622bbf538217cd2ab7 "" + "c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty" 1645817854 167160 d91cee26d3ef5727644d2110445741dd "" + "c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty" 1645817884 12594 0d51ac3a545aaaa555021326ff22a6cc "" + "c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1645817888 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c "" + "c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1645817888 13829 94730e64147574077f8ecfea9bb69af4 "" + "c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsa.fd" 1645817888 961 6518c6525a34feb5e8250ffa91731cff "" + "c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsb.fd" 1645817888 961 d02606146ba5601b5645f987c92e6193 "" + "c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1645817893 2222 da905dc1db75412efd2d8f67739f0596 "" + "c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty" 1645817893 4173 bc0410bcccdff806d6132d3c1ef35481 "" + "c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty" 1645817893 87648 07fbb6e9169e00cb2a2f40b31b2dbf3c "" + "c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty" 1645817893 4128 8eea906621b6639f7ba476a472036bbe "" + "c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty" 1645817893 2444 926f379cc60fcf0c6e3fee2223b4370d "" + "c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty" 1645818031 19336 ce7ae9438967282886b3b036cfad1e4d "" + "c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty" 1645818057 3935 57aa3c3e203a5c2effb4d2bd2efbc323 "" + "c:/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty" 1645820673 3034 3bfb87122e6fa8758225c0dd3cbaceba "" + "c:/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty" 1645820673 2462 754d6b31b2ab5a09bb72c348ace2ec75 "" + "c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty" 1645820673 5157 f308c7c04889e16c588e78aa42599fae "" + "c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty" 1645820673 5049 969aec05d5f39c43f8005910498fcf90 "" + "c:/texlive/2021/texmf-dist/tex/latex/base/size11.clo" 1645820674 8464 74db94825c407b51399ca17d9bd38a3d "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls" 1645818196 12335 462ad8600e699286ae5bd068fe78594b "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty" 1645818196 24160 45a13ef4310e1e6ae8a2702a712b5f37 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty" 1645818196 7344 4b669c019e50a1be48999086dfa79ba1 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty" 1645818196 12589 c2e8a707f95e114b40e2be10f5aefffa "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty" 1645818196 26232 66f0c0fc1c3ea04aadb9c1402292d0ac "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty" 1645818196 9407 98317d4428bbbc4430035c0c0e3898d5 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty" 1645818196 13642 ba13518fbcbdad62e3935775004ddea2 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty" 1645818196 25572 d822973a753f02ba1f37616065f21678 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty" 1645818196 12171 76b69a0f505c817a764f41b6d7fb98e1 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty" 1645818196 9209 8a4ea3057cafb3e094ef6fcec6ff5abc "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty" 1645818196 17622 85760d86f730e8faf1f7378f6e67e409 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty" 1645818196 8313 358d4bb860bd9098eb24099f36b27af1 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty" 1645818196 7574 6d0e29b16443d86a896479ec2aabff07 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty" 1645818196 29020 6cae2187b2d2bc4f39b6bb5bddbcf031 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty" 1645818196 5712 f2473ee53b8c7edb3cfb0b157f067562 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty" 1645818196 1753 c10ec1df45e4b4c7ee05e306d23f95d7 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty" 1645818196 27425 7f090822023c1cb57d609b70b5e7cc42 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty" 1645818196 1593 48c3729494fa250d34789fd6af677f99 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty" 1645818196 13527 6266cecef9dcaa294ba1dc5ff2d8a798 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty" 1645818196 5753 fbf8c2f7c7d6d5d1d2b900c353f094e8 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty" 1645818196 1140 cdaff8d445bd2a4e7afdec5190a758c0 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty" 1645818196 4548 cdde9ae4b614ce5ea4cf7a232ceeb6a8 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty" 1645818196 5356 d32dea458460fce4541d4f9aa765b876 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty" 1645818196 7755 23d097ce0f5b45524f920565fe65e8ae "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty" 1645818196 637 685bd3d40aca2fa87965a39bc31aca7f "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty" 1645818196 1808 098e1772761e9b4a016e74f1a4c1cb74 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty" 1645818196 4026 1ba2c6a2acf275d63cb85d60d8597fe8 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty" 1645818196 7089 c34bc77851d46db7348b94bd5e51168a "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty" 1645818196 1050 4ec1d035d43d8d85e0e02ebd9fd341f3 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty" 1645818196 835 ac57517533d993c08f21ee9ac10445d7 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty" 1645818196 1013 bbd3a76e797308a780fd7196c973ec2e "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty" 1645818196 4236 21e590075d6781cc58fee783316ee268 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty" 1645818196 1008 b4fd2fc481a18ead34e358fb1ab2bed3 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonarticle.20.pdf" 1645818196 2958 4e0c4a6e994e5c4d9da11c477e927f0f "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonarticle.pdf" 1645818196 2936 6cc3ef0682cbb62be8aa1b19f0a84ed6 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonbook.20.pdf" 1645818196 2734 0bcf939051dd2a936cdfe5982f7c233b "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonbook.pdf" 1645818196 2667 7624351b441ffe4bd2d14e08fbcf063d "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericononline.20.pdf" 1645818196 24451 195d2c060e84f339954bc6d9b52131d7 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericononline.pdf" 1645818196 24611 df07010540266b2b205b492a4d02e7e1 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty" 1645818196 13080 71b38252cbe3d689bcd03161d205eb84 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty" 1645818196 401 1ced509fadea50920c2c205d5990f03e "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty" 1645818196 6946 ef0e875be97ab827b5cf3232042f1628 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty" 1645818196 2024 edb345879bfc827cc7afa5eb98902437 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty" 1645818196 391 0aa3f3950e16a1cba504951933792e72 "" + "c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty" 1645818197 355 75c98e7b8f427eb7c625ed391b140c5b "" + "c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty" 1645819209 230 7bc61880b468bfd38aedc173be7c3486 "" + "c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1645819462 13886 d1306dcf79a944f6988e688c1785f9ce "" + "c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty" 1645819528 46845 3b58f70c6e861a13d927bff09d35ecbc "" + "c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty" 1645819943 41601 9cf6c5257b1bc7af01a58859749dd37a "" + "c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1645820067 1213 620bba36b25224fa9b7e1ccb4ecb76fd "" + "c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1645820067 1224 978390e9c2234eab29404bc21b268d1e "" + "c:/texlive/2021/texmf-dist/tex/latex/graphics-def/pdftex.def" 1645820068 19103 48d29b6e2a64cb717117ef65f107b404 "" + "c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty" 1645820065 18399 7e40f80366dffb22c0e7b70517db5cb4 "" + "c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty" 1645820065 7996 a8fb260d598dcaf305a7ae7b9c3e3229 "" + "c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty" 1645820065 2671 4de6781a30211fe0ea4c672e4a2a8166 "" + "c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty" 1645820065 4009 187ea2dc3194cd5a76cd99a8d7a6c4d0 "" + "c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty" 1645820269 17914 4c28a13fc3d975e6e81c9bea1d697276 "" + "c:/texlive/2021/texmf-dist/tex/latex/hyperref/hpdftex.def" 1645820278 49029 7c9e5115b2217efbeb7828ac0d1bf1a0 "" + "c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty" 1645820278 220999 6145ea83914c186e178d1d31c50b37df "" + "c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty" 1645820278 13242 133e617c5eebffdd05e421624022b267 "" + "c:/texlive/2021/texmf-dist/tex/latex/hyperref/pd1enc.def" 1645820278 14132 e8e7e61e51ade521a7238fac8362786c "" + "c:/texlive/2021/texmf-dist/tex/latex/hyperref/puenc.def" 1645820278 117004 ed1c2cc82bb9836e9d59549dd8c33098 "" + "c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty" 1645820356 2148 0426cd8bb94163c1e23726d0c15e2c21 "" + "c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty" 1645820594 11081 5538240709a5dbcdc97e4d1524f034a8 "" + "c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty" 1645820594 3225 54deb0fdd4552a94c6525a4a8ff74efc "" + "c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty" 1645820594 1954 94f3677c5f3a58b3854eb25278202694 "" + "c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1645820625 22521 d2fceb764a442a2001d257ef11db7618 "" + "c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def" 1645820636 29921 d0acc05a38bd4aa3af2017f0b7c137ce "" + "c:/texlive/2021/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1645820746 678 4792914a8f45be57bb98413425e4c7af "" + "c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty" 1645820806 5766 13a9e8766c47f30327caf893ece86ac8 "" + "c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty" 1645821206 59398 061078e853e620354ba0437103cbd0fe "" + "c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty" 1645821206 5582 a43dedf8e5ec418356f1e9dfe5d29fc3 "" + "c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty" 1645824393 410 615550c46f918fcbee37641b02a862d9 "" + "c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty" 1645824393 306 c56a323ca5bf9242f54474ced10fca71 "" + "c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty" 1645824393 443 8c872229db56122037e86bcda49e14f3 "" + "c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty" 1645824393 274 5ae372b7df79135d240456a1c6f2cf9a "" + "c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty" 1645824393 36299 1cc9347091c2fb861270e66da42a0a3e "" + "c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty" 1645824393 325 f9f16d12354225b7dd52a3321f085955 "" + "c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty" 1645824393 2232 b9a67bccba736ed334b4b1a860a85c6f "" + "c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty" 1645825119 9878 9e94e8fa600d95f9c7731bb21dfb67a4 "" + "c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty" 1645825144 15542 c4cc3164fe24f2f2fbb06eb71b1da4c4 "" + "c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1645825152 9715 b051d5b493d9fe5f4bc251462d039e5f "" + "c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty" 1645825277 4282 5d27280ace1239baaa4a225df16125ff "" + "c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty" 1645826444 13197 df0fe9a9695763546b59e02a008447b3 "" + "c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty" 1645826444 10214 00ce62e730d0cfe22b35e8f1c84949c7 "" + "c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty" 1645826444 3468 068d84ef9735e15f11c5a120c0a1a139 "" + "c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty" 1645826444 4545 d84d0b20a11b9c36c6ecf45697be591c "" + "c:/texlive/2021/texmf-dist/tex/latex/translator/translator-basic-dictionary-English.dict" 1645826500 3535 7dc96051305a7e943219126c49c44cd6 "" + "c:/texlive/2021/texmf-dist/tex/latex/translator/translator-bibliography-dictionary-English.dict" 1645826500 903 c6d17f0656e9e1abb172b4faebabd617 "" + "c:/texlive/2021/texmf-dist/tex/latex/translator/translator-environment-dictionary-English.dict" 1645826500 433 bfb8d1c2c020defd2de8e5c276710094 "" + "c:/texlive/2021/texmf-dist/tex/latex/translator/translator-months-dictionary-English.dict" 1645826500 1337 9a6c05e8f0c8b3c5f27cbd0e455cf475 "" + "c:/texlive/2021/texmf-dist/tex/latex/translator/translator-numbers-dictionary-English.dict" 1645826500 1638 2bf1a1dea98f8a4d28033fce76e9cc67 "" + "c:/texlive/2021/texmf-dist/tex/latex/translator/translator-theorem-dictionary-English.dict" 1645826500 3523 1f9d9b91f7d78b73e74c7e97bca30fb0 "" + "c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty" 1645826500 8765 56d370785f0143111ff9898b5adfe08e "" + "c:/texlive/2021/texmf-dist/tex/latex/ucs/data/uni-global.def" 1645826612 1375 8a855db83af5d6753ccbbd32e6a8a901 "" + "c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty" 1645826612 27982 5723d81d568db410592a59b85fb3eaae "" + "c:/texlive/2021/texmf-dist/tex/latex/ucs/ucsencs.def" 1645826612 22368 c53c9d0d16c65bef2b157515c9d9f658 "" + "c:/texlive/2021/texmf-dist/tex/latex/ucs/utf8x.def" 1645826612 8036 21f7ac37aafb6cfeddbb196b8bfd6280 "" + "c:/texlive/2021/texmf-dist/tex/latex/url/url.sty" 1645826762 12796 8edb7d69a20b857904dd0ea757c14ec9 "" + "c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty" 1645827001 56029 3f7889dab51d620aa43177c391b7b190 "" + "c:/texlive/2021/texmf-dist/web2c/texmf.cnf" 1645817753 40042 fe981136cbb5f3715ab1b0e46e3d3892 "" + "c:/texlive/2021/texmf-var/fonts/map/pdftex/updmap/pdftex.map" 1645827285 4422994 d6fc1c83c919dc5940022c50ba2a8cfc "" + "c:/texlive/2021/texmf-var/web2c/pdftex/pdflatex.fmt" 1645827363 2797704 0474e33c16c1a2f8aabbac9a30760bfb "" + "c:/texlive/2021/texmf.cnf" 1645827266 713 e69b156964470283e0530f5060668171 "" + "csp.aux" 1651264361 5846 a833f3a74786f4ae1cf869d21e654b6d "pdflatex" + "csp.nav" 1651264361 3620 5877b427de3b6757d4fc1282a28a41fb "pdflatex" + "csp.out" 1651264360 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" + "csp.tex" 1651264351 20472 55c7b19eb62bd56ab78388f1fb200ec7 "" + "images/boris_arc_consistency.png" 1651239463 53467 7011bd59816e7f863ce1ee13282fa1c1 "" + "images/constraint.jpg" 1651232682 3156 29811c3920c3ae81ef061e27d5bd7f0d "" + "images/constraint_hypergraph.png" 1651243224 125189 56b36e2c7ed95c0545b35a1e7f4e50c8 "" + "images/csp_search.png" 1651244209 12451 137993a2a0aee4aef4f9b2e1cbbb2643 "" + "images/least_constraing_value.png" 1651251871 201670 503dcf12ace51ae4f68602bae190b1d7 "" + "images/map_coloring.png" 1651233414 169179 be1b86aee6e5a6f2611432e7e2f67061 "" + "images/map_coloring_2.png" 1651233522 97991 a14d58606fb9769c7e35addf9c32d96f "" + "images/map_graph.png" 1651240144 30321 4bfd40d76d286563e3718907ef0c702a "" + "images/sudoku.png" 1651242478 24561 8a9bc45556dccdbeeb0fdeb9ae470fb5 "" + "images/top_sort_1.png" 1651256304 45892 7f39e3c6f3c6ea8ac49d62b0b258447b "" + "images/top_sort_2.png" 1651256613 14011 fff8a5496b2aceccc83ca0421b9496b0 "" + "images/two_two_four.png" 1651236067 50965 adc3d5c9a35e9fe6ea1398fa7be0f548 "" + (generated) + "csp.aux" + "csp.log" + "csp.nav" + "csp.out" + "csp.pdf" + "csp.snm" + "csp.toc" diff --git a/csp.fls b/csp.fls new file mode 100644 index 000000000..1659801cb --- /dev/null +++ b/csp.fls @@ -0,0 +1,1579 @@ +PWD c:/Users/elsa.schaefer/Documents/dev/aima/aima-python +INPUT c:/texlive/2021/texmf.cnf +INPUT c:/texlive/2021/texmf-dist/web2c/texmf.cnf +INPUT c:/texlive/2021/texmf-var/web2c/pdftex/pdflatex.fmt +INPUT c:/Users/elsa.schaefer/Documents/dev/aima/aima-python/csp.tex +OUTPUT csp.log +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamer.cls +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemodes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasedecode.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/pgf.revision.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/pgf.revision.tex +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/size11.clo +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/size11.clo +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/size11.clo +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/size11.clo +INPUT c:/texlive/2021/texmf-dist/fonts/map/fontname/texfonts.map +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr10.tfm +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-def/pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-def/pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-def/pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-def/pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/color.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/color.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/color.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics-cfg/color.cfg +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfint.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/puenc.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/puenc.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/puenc.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/puenc.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/url/url.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaserequires.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasefont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasemisc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetitle.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasesection.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframe.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasecolor.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenotes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetoc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerbasethemes.sty +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmss10.tfm +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonbook.pdf +OUTPUT csp.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonbook.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonbook.20.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonbook.20.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonarticle.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonarticle.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonarticle.20.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericonarticle.20.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericononline.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericononline.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericononline.20.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamericononline.20.pdf +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeAntibes.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerouterthemetree.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemewhale.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemeorchid.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerinnerthemerectangles.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamercolorthemedolphin.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/beamer/beamerfontthemeserif.sty +INPUT images/constraint.jpg +INPUT ./images/constraint.jpg +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/relsize/relsize.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/babel.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel/txtbabel.def +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel-english/english.ldf +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel-english/english.ldf +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel-english/english.ldf +INPUT c:/texlive/2021/texmf-dist/tex/generic/babel-english/english.ldf +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/base/inputenc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/utf8x.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/utf8x.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/utf8x.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/utf8x.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucs.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/data/uni-global.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/data/uni-global.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/data/uni-global.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/data/uni-global.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/doublestroke/dsfont.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/bm.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mathtools.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/mathtools/mhsetup.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/tools/calc.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT ./csp.aux +INPUT csp.aux +INPUT csp.aux +OUTPUT csp.aux +INPUT c:/texlive/2021/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +INPUT c:/texlive/2021/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +INPUT c:/texlive/2021/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +INPUT c:/texlive/2021/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT c:/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT c:/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT ./csp.out +INPUT csp.out +INPUT ./csp.out +INPUT csp.out +INPUT ./csp.out +INPUT csp.out +INPUT ./csp.out +INPUT csp.out +INPUT ./csp.out +INPUT ./csp.out +OUTPUT csp.out +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-basic-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-basic-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-basic-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-basic-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-bibliography-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-bibliography-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-bibliography-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-bibliography-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-environment-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-environment-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-environment-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-environment-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-months-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-months-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-months-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-months-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-numbers-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-numbers-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-numbers-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-numbers-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-theorem-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-theorem-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-theorem-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/translator/translator-theorem-dictionary-English.dict +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucsencs.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucsencs.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucsencs.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/ucs/ucsencs.def +INPUT c:/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT ./csp.nav +INPUT csp.nav +INPUT csp.nav +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr6.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr12.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr8.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr5.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmr9.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmi10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmex10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsa.fd +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsa.fd +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsa.fd +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsa.fd +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsb.fd +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsb.fd +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsb.fd +INPUT c:/texlive/2021/texmf-dist/tex/latex/amsfonts/umsb.fd +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx8.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx6.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmib10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib8.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib6.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbsy10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy8.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy6.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx7.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx5.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmib10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib7.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib5.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbsy10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy7.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy5.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmtt10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmtt8.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmtt8.tfm +INPUT c:/texlive/2021/texmf-var/fonts/map/pdftex/updmap/pdftex.map +INPUT ./images/map_coloring.png +INPUT images/map_coloring.png +INPUT ./images/map_coloring.png +INPUT ./images/map_coloring.png +INPUT ./images/map_coloring.png +INPUT images/map_coloring.png +INPUT ./images/map_coloring.png +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmtt10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmtt8.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmtt8.tfm +INPUT ./images/map_coloring_2.png +INPUT images/map_coloring_2.png +INPUT ./images/map_coloring_2.png +INPUT ./images/map_coloring_2.png +INPUT ./images/two_two_four.png +INPUT ./images/two_two_four.png +INPUT images/two_two_four.png +INPUT ./images/two_two_four.png +INPUT ./images/two_two_four.png +INPUT ./images/constraint_hypergraph.png +INPUT images/constraint_hypergraph.png +INPUT ./images/constraint_hypergraph.png +INPUT ./images/constraint_hypergraph.png +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmti10.tfm +INPUT ./images/map_coloring.png +INPUT images/map_coloring.png +INPUT ./images/map_coloring.png +INPUT ./images/boris_arc_consistency.png +INPUT images/boris_arc_consistency.png +INPUT ./images/boris_arc_consistency.png +INPUT ./images/boris_arc_consistency.png +INPUT ./images/map_graph.png +INPUT images/map_graph.png +INPUT ./images/map_graph.png +INPUT ./images/map_graph.png +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmex10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbx12.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmmib10.tfm +INPUT c:/texlive/2021/texmf-dist/fonts/tfm/public/cm/cmbsy10.tfm +INPUT ./images/sudoku.png +INPUT images/sudoku.png +INPUT ./images/sudoku.png +INPUT ./images/sudoku.png +INPUT ./images/csp_search.png +INPUT images/csp_search.png +INPUT ./images/csp_search.png +INPUT ./images/csp_search.png +INPUT ./images/least_constraing_value.png +INPUT ./images/least_constraing_value.png +INPUT images/least_constraing_value.png +INPUT ./images/least_constraing_value.png +INPUT ./images/least_constraing_value.png +INPUT ./images/constraint_hypergraph.png +INPUT images/constraint_hypergraph.png +INPUT ./images/constraint_hypergraph.png +INPUT ./images/top_sort_2.png +INPUT images/top_sort_2.png +INPUT ./images/top_sort_2.png +INPUT ./images/top_sort_2.png +INPUT ./images/top_sort_1.png +INPUT images/top_sort_1.png +INPUT ./images/top_sort_1.png +INPUT ./images/top_sort_1.png +INPUT ./images/map_graph.png +INPUT images/map_graph.png +INPUT ./images/map_graph.png +INPUT ./images/map_graph.png +INPUT images/map_graph.png +INPUT ./images/map_graph.png +OUTPUT csp.nav +OUTPUT csp.toc +OUTPUT csp.snm +INPUT csp.aux +INPUT ./csp.out +INPUT ./csp.out +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr5.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb +INPUT c:/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb diff --git a/csp.nav b/csp.nav new file mode 100644 index 000000000..8533cf9a2 --- /dev/null +++ b/csp.nav @@ -0,0 +1,79 @@ +\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}} +\headcommand {\beamer@framepages {1}{1}} +\headcommand {\slideentry {0}{0}{2}{2/2}{}{0}} +\headcommand {\beamer@framepages {2}{2}} +\headcommand {\slideentry {0}{0}{3}{3/3}{}{0}} +\headcommand {\beamer@framepages {3}{3}} +\headcommand {\slideentry {0}{0}{4}{4/4}{}{0}} +\headcommand {\beamer@framepages {4}{4}} +\headcommand {\slideentry {0}{0}{5}{5/5}{}{0}} +\headcommand {\beamer@framepages {5}{5}} +\headcommand {\slideentry {0}{0}{6}{6/6}{}{0}} +\headcommand {\beamer@framepages {6}{6}} +\headcommand {\slideentry {0}{0}{7}{7/7}{}{0}} +\headcommand {\beamer@framepages {7}{7}} +\headcommand {\slideentry {0}{0}{8}{8/8}{}{0}} +\headcommand {\beamer@framepages {8}{8}} +\headcommand {\slideentry {0}{0}{9}{9/9}{}{0}} +\headcommand {\beamer@framepages {9}{9}} +\headcommand {\slideentry {0}{0}{10}{10/10}{}{0}} +\headcommand {\beamer@framepages {10}{10}} +\headcommand {\slideentry {0}{0}{11}{11/11}{}{0}} +\headcommand {\beamer@framepages {11}{11}} +\headcommand {\slideentry {0}{0}{12}{12/12}{}{0}} +\headcommand {\beamer@framepages {12}{12}} +\headcommand {\slideentry {0}{0}{13}{13/13}{}{0}} +\headcommand {\beamer@framepages {13}{13}} +\headcommand {\slideentry {0}{0}{14}{14/14}{}{0}} +\headcommand {\beamer@framepages {14}{14}} +\headcommand {\slideentry {0}{0}{15}{15/15}{}{0}} +\headcommand {\beamer@framepages {15}{15}} +\headcommand {\slideentry {0}{0}{16}{16/16}{}{0}} +\headcommand {\beamer@framepages {16}{16}} +\headcommand {\slideentry {0}{0}{17}{17/17}{}{0}} +\headcommand {\beamer@framepages {17}{17}} +\headcommand {\slideentry {0}{0}{18}{18/18}{}{0}} +\headcommand {\beamer@framepages {18}{18}} +\headcommand {\slideentry {0}{0}{19}{19/19}{}{0}} +\headcommand {\beamer@framepages {19}{19}} +\headcommand {\slideentry {0}{0}{20}{20/20}{}{0}} +\headcommand {\beamer@framepages {20}{20}} +\headcommand {\slideentry {0}{0}{21}{21/21}{}{0}} +\headcommand {\beamer@framepages {21}{21}} +\headcommand {\slideentry {0}{0}{22}{22/22}{}{0}} +\headcommand {\beamer@framepages {22}{22}} +\headcommand {\slideentry {0}{0}{23}{23/23}{}{0}} +\headcommand {\beamer@framepages {23}{23}} +\headcommand {\slideentry {0}{0}{24}{24/24}{}{0}} +\headcommand {\beamer@framepages {24}{24}} +\headcommand {\slideentry {0}{0}{25}{25/25}{}{0}} +\headcommand {\beamer@framepages {25}{25}} +\headcommand {\slideentry {0}{0}{26}{26/26}{}{0}} +\headcommand {\beamer@framepages {26}{26}} +\headcommand {\slideentry {0}{0}{27}{27/27}{}{0}} +\headcommand {\beamer@framepages {27}{27}} +\headcommand {\slideentry {0}{0}{28}{28/28}{}{0}} +\headcommand {\beamer@framepages {28}{28}} +\headcommand {\slideentry {0}{0}{29}{29/29}{}{0}} +\headcommand {\beamer@framepages {29}{29}} +\headcommand {\slideentry {0}{0}{30}{30/30}{}{0}} +\headcommand {\beamer@framepages {30}{30}} +\headcommand {\slideentry {0}{0}{31}{31/31}{}{0}} +\headcommand {\beamer@framepages {31}{31}} +\headcommand {\slideentry {0}{0}{32}{32/32}{}{0}} +\headcommand {\beamer@framepages {32}{32}} +\headcommand {\slideentry {0}{0}{33}{33/33}{}{0}} +\headcommand {\beamer@framepages {33}{33}} +\headcommand {\slideentry {0}{0}{34}{34/34}{}{0}} +\headcommand {\beamer@framepages {34}{34}} +\headcommand {\slideentry {0}{0}{35}{35/35}{}{0}} +\headcommand {\beamer@framepages {35}{35}} +\headcommand {\slideentry {0}{0}{36}{36/36}{}{0}} +\headcommand {\beamer@framepages {36}{36}} +\headcommand {\beamer@partpages {1}{37}} +\headcommand {\beamer@subsectionpages {1}{37}} +\headcommand {\beamer@sectionpages {1}{37}} +\headcommand {\beamer@documentpages {37}} +\headcommand {\gdef \inserttotalframenumber {37}} +\headcommand {\slideentry {0}{0}{37}{37/37}{}{0}} +\headcommand {\beamer@framepages {37}{37}} diff --git a/csp.out b/csp.out new file mode 100644 index 000000000..e69de29bb diff --git a/csp.pdf b/csp.pdf new file mode 100644 index 000000000..a210e9640 Binary files /dev/null and b/csp.pdf differ diff --git a/csp.snm b/csp.snm new file mode 100644 index 000000000..e69de29bb diff --git a/csp.synctex.gz b/csp.synctex.gz new file mode 100644 index 000000000..8630c9a1b Binary files /dev/null and b/csp.synctex.gz differ diff --git a/csp.tex b/csp.tex new file mode 100644 index 000000000..bfc1ec972 --- /dev/null +++ b/csp.tex @@ -0,0 +1,558 @@ +\documentclass{beamer} + +% For more themes, color themes and font themes, see: +% http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html +% +\mode +{ + \usetheme{Antibes} % or try default, Darmstadt, Warsaw, ... + \usecolortheme{dolphin} % or try albatross, beaver, crane, ... + \usefonttheme{serif} % or try default, structurebold, ... + \setbeamertemplate{caption}[numbered] + \setbeamertemplate{page number in head/foot}[framenumber] + \setbeamertemplate{navigation symbols}{\footnotesize\usebeamertemplate{page number in head/foot}} + \pgfdeclareimage[height=1cm]{logo}{images/constraint} + \logo{\pgfuseimage{logo}} + +} + +\usepackage[ruled,vlined]{algorithm2e} +\usepackage[english]{babel} +\usepackage[utf8x]{inputenc} +\usepackage{ dsfont } +\usepackage{ bm } +\usepackage{mathtools} %loads amsmath as well +\DeclarePairedDelimiter\Floor\lfloor\rfloor +\DeclarePairedDelimiter\Ceil\lceil\rceil + +\usepackage{amsmath} +\DeclareMathOperator*{\argmax}{arg\,max} +\DeclareMathOperator*{\argmin}{arg\,min} +\newcommand{\norm}[1]{\left\lVert#1\right\rVert} +\AtBeginSection[]{ + \begin{frame} + \vfill + \centering + \begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title} + \usebeamerfont{title}\secname\par% + \end{beamercolorbox} + \vfill + \end{frame} +} +\usepackage{hyperref} + +% On Overleaf, these lines give you sharper preview images. +% You might want to `comment them out before you export, though. +\usepackage{pgfpages} +\pgfpagesuselayout{resize to}[% + physical paper width=8in, physical paper height=6in] + +% Here's where the presentation starts, with the info for the title slide +\author{Chapter 6: Constraint Satisfaction Problems} + +\title{} + +\subtitle{} +\date{} + + + +\begin{document} + +\begin{frame} + \titlepage +\end{frame} + +\begin{frame}{Components of a CSP} + + \begin{enumerate} + \item A set of variables $\mathcal{X} = \left\{ X_1, X_2, \dots, X_n\right\}$ + \item A domain for each variable $\mathcal{D} = \left\{ D_1, D_2, \dots, D_n\right\}$ + \begin{itemize} + \item $D_i$ is a set of allowable values $\{v_1, v_2, \dots, v_k\}$ for + variable $X_i$. + \end{itemize} + \item A collection of constraints $\mathcal{C}$ + \begin{itemize} + \item A constraint $C_j$ is the pair + $\langle \texttt{scope}, \texttt{rel} \rangle$ + where the \texttt{scope} is the tuple of variables involved in the constraint, + and \texttt{rel} is the function that checks whether a tuple of values satisfies $C_j$. + \end{itemize} + \end{enumerate} + + \small + Variable {\bf assignments} are consistent if the values assigned to the + variables don't violate any constraints. A {\bf complete assignment} provides + a value for each variable. A {\bf CSP solution} is a consistent, complete assignment. A consistent, partial assignment is a partial solution. Partial solutions allow us to eliminate large groups of variable values from further + consideration, and in this way CSP formulations can help produce computationally + efficient searches. + +\end{frame} + +\begin{frame}{A simple constraint} + Suppose you have variables $(X_1, X_2)$ that for which + $D_1 = D_2 = \{1, 2, 3\}$. + + \vspace{.1in} + + The constraint $X_1>X_2$ is written formally as either + + \[\langle (X_1, X_2), X_1 > X_2 \rangle\] + + or + + + \[\langle (X_1, X_2), \{(3,1), (3,2), (2,1)\} \rangle\] + + +\end{frame} + +\begin{frame}{A map coloring example} + + \begin{figure} + \includegraphics[width=10cm]{images/map_coloring} + \end{figure} + +\end{frame} + +\begin{frame}{A map coloring example as a CSP} + + \begin{figure} + \includegraphics[width=5cm]{images/map_coloring} + \end{figure} +The variables are + $$\mathcal{X} = \{WA, NT, Q, NSW, V, SA, T\}$$ +and each one can assume the colors +$$ D = \{\texttt{red}, \texttt{green}, \texttt{blue}\}$$ +with the constraint that neighbors must have unique colors: +$$\mathcal{C}= \left \{ \langle \{SA, WA\}, SA \neq WA \rangle, +\langle \{ SA, NT\}, SA \neq NT\rangle, \dots \right\}$$ + + + +\end{frame} + +\begin{frame}{A map coloring exercise from Chegg} + + \begin{figure} + \includegraphics[width=9cm]{images/map_coloring_2} + \end{figure} + +\end{frame} + +\begin{frame}{CSP flavors} + Types of domains + \begin{itemize} + \item Discrete, finite domains + \item Discrete, infinite domains (e.g. constraints on integer variables is {\bf integer programming}) + \item Linear constraints on continuous domains ({\bf linear programming}) + \end{itemize} + + Types of constraints + \begin{itemize} + \item {\bf unary} constraints act on one variable + \item {\bf binary} constraints act on two variables + \item {\bf ternary} constraints $\dots$ + \item {\bf global} constraints act on an arbitrary subset of variables + \end{itemize} + +\end{frame} + +\begin{frame}{Examples of global constraints} +\texttt{Alldiff} is the constraint that all variable values must differ + +\vspace{.1in} + +{\bf Cryptarithmetic} puzzles use an \texttt{Alldiff} constraint + \begin{figure} + \includegraphics[width=9cm]{images/two_two_four.png} + \end{figure} +\end{frame} + +\begin{frame}{The constraint hypergraph} + \begin{figure} + \includegraphics[width=10cm]{images/constraint_hypergraph} + \end{figure} + + The top square is the initial \texttt{Alldiff} constraint, + and each additional square represents another constraint. The carry + digits become extra variables that had to be introduced (and do not have to be + distinct). +\end{frame} + +\begin{frame}{Every finite-domain constaint can be reduced to a set of binary constraints} +\small + One non-intuitive way to do this is to create a new {\bf dual} problem that + has the constraints as variables + + \begin{align*} + \mathcal{X} &= \{X, Y, Z\} \\ + D_X = D_Y = D_Z &= \{1, 2, 3, 4, 5\} \\ + C_1 &= \langle(X,Y, Z), X + Y = Z \rangle \\ + C_2 &= \langle (X,Y), X + 1 = Y \rangle + \end{align*} + + \begin{align*} + \mathcal{X} &= \{C_1, C_2\} \\ + D_{C_1} &= \{ (X, Y, Z) \in \{1, 2, 3, 4, 5\} \, | \, X + Y = Z \} \\ + D_{C_2} &= \{ (X, Y) \in \{1, 2, 3, 4, 5\} \,|\, X + 1 = Y \}\\ + C &= \langle(C_1, C_2), R \rangle + \end{align*} + + The relation $R$ contains the variables that co-satisfy $C_1$ and $C_2$ + + $$ + R = \{ ((1, 2, 3, 1, 2)), ((2, 3, 5), (2, 3))\} + $$ + + +\end{frame} + +\begin{frame}[t]{Every finite-domain constaint can be reduced to a set of binary constraints} +\small +How would you choose to turn this into only binary constraints? + + \begin{align*} + \mathcal{X} &= \{X, Y, Z\} \\ + D_X = D_Y = D_Z &= \{1, 2, 3, 4, 5\} \\ + C_1 &= \langle(X,Y, Z), X + Y = Z \rangle \\ + C_2 &= \langle (X,Y), X + 1 = Y \rangle + \end{align*} + +\end{frame} + +\begin{frame}{Constraint Propagation} + Again, the power of a CSP is that every time you enforce one constraint, + you reduce the number of legal values for at least some of the variables. + Propagation through constraints could solve the whole problem, or perhaps + reduce the variables that are still needed to be considered if there are multiple domain values remaining for each variable. (Note: a solution may not be unique.) + + \vspace{.1in} + + One strategy is {\bf local consistency} in which {\em each variable is a node + in a graph} and {\em each binary constraint is an edge in the graph}. + + \vspace{.1in} + + On the previous slide, draw the associated graph. +\end{frame} + +\begin{frame}{Node consistency} + Each node's domain must satisfy any unary constraints. + + \small + \begin{figure} + \includegraphics[width=5cm]{images/map_coloring} + \end{figure} +The variables are + $$\mathcal{X} = \{WA, NT, Q, NSW, V, SA, T\}$$ +$$ D = \{\texttt{red}, \texttt{green}, \texttt{blue}\}$$ + +As a silly example, suppose we know SA hates \texttt{green}. Then we +could start with + +$$D_{SA} = \{\texttt{red}, \texttt{blue} \}$$ + +\end{frame} + +\begin{frame}{Arc Consistency} + + The variable $X_i$ is {\bf arc-consistent} with variable $X_j$ if + for each binary constraint $C$ with scope $(X_i, X_j)$ and + each value $v_i \in D_i$ there exists $v_j \in D_j$ such that + $C$ is satisfied. + + \vspace{.1in} + + By applying the rule of arc consistency, we can reduce the domain for a + problem. For example, return to the map coloring problem in the + previous slide. When we applied the unary constraint to SA, does + arc consistency allow any other domain reductions? + +\end{frame} + +\begin{frame}{Arc consistency Example} + Let's think through what can be deduced using arc consistency. + + \begin{figure} + \includegraphics[width=6cm]{images/boris_arc_consistency} + \end{figure} + + \tiny{from boristhebrave.com} + +\end{frame} + +\begin{frame}{AC3: Popular Arc Consistency Algorithm} + + \texttt{Queue}: Two arcs (bidirectional) for each binary constraint + + \vspace{.1in} + Choose an arc to consider. + \begin{itemize} + \item If the arc doesn't change any domains, move on to the next arc. + \item If the arc {\em does} change a domain $D_i$, then add all arcs to + adjacent nodes back in (if they aren't already there). + + + AC3's worst-case complexity is $\mathcal{O}(cd^3)$ where $c$ is the number of + constraints and $d$ is the maximum domain size. + \end{itemize} +\end{frame} + +\begin{frame}{Path consistency} + \small + Rather than just considering binary constraints, pairs of binary constraints + are considered by looking at triples of variables. The pair $\{X_i, X_j\}$ is + {\bf path consistent} with $X_m$ if for any pair $(a, b)$ that satisfies + the binary constraint(s) for $\{X_i, X_j\}$ there exists a value $c \in D_m$ that satisfies any binary constraint(s) between $X_i$ and $X_m$ as well as between $X_j$ and $X_m$. + + + How would this help us with the coloring problem if we assume there are only two colors? + + \begin{figure} + \includegraphics[width=7cm]{images/map_graph} + \end{figure} + +\end{frame} + +\begin{frame}{$k$-consistency} + + This is an extension of the idea of path consistency. + A CSP is $k$-consistent if for any consistent assignment for $k-1$ variables, a consistent assignment can always be made for a $k$th variable. + + \vspace{.1in} + + A CSP is {\bf strongly $k$-consistent} if it $k, (k-1)-, (k-2)-, \cdots 1-$consistent. + + \vspace{.1in} + + In practice, going for more than path consistency is a very expensive approach. + +\end{frame} + +\begin{frame}[t]{Another global constraint: Resource constraints} + + An example of a resource constraint is \texttt{Atmost}. + + \vspace{.1in} + Application: Suppose $P_1$, $P_2$, $P_3$, and $P_4$ people are assigned to four tasks, but that we're not allowed to hire more than 10 people in total. This global resource constraint would be written as + $$\texttt{Atmost}(10, P_1, P_2, P_3, P_4)$$ + + \vspace{.1in} + Given the \texttt{Atmost} constraint, how would you edit the shared + domain $\{2, 3, 4, 5, 6\}$? + + +\end{frame} + +\begin{frame}{Large problem domains and bounds propagation} + If we extended the above problem to a large company, we can't + list every integer value for the number of personnel, and we + would instead enumerate domains using interval notation. As we + apply consistency rules and adjust the domains, we apply {\bf bounds + propagation} and perhaps raise the + lower bounds and decrease the upper bounds for domains to make them {\bf bounds consistent}. + +\end{frame} + +\begin{frame}[t]{Let's list some constraints for a Sudoku puzzle} + \begin{figure} + \includegraphics[width=5cm]{images/sudoku} + \end{figure} + + +\end{frame} + +\begin{frame}{How big is a search?} + \small + + \begin{figure} + \includegraphics[width=10cm]{images/csp_search} + \end{figure} + + If you were to create a search tree, you'd want to first choose one + value. So you'd choose one variable ($n$ choices) to assign, and you'd + give it one of the $d$ domain values. There are therefore $kn$ ways to start + this tree. + + \vspace{0.1in} + + At the next tree level, there are only $n-1$ choices remaining, so there are + $k(n-1)$ choices for the next level. Continuing this logic, we see that + the size of our search tree is $n!d^n$. + + \vspace{0.1in} + + However, look at the blanks. How many possible assignments are there? Clearly + this is a terrible search tree idea. + +\end{frame} + +\begin{frame}{Why do we teach CS majors combinatorics?} +\small + How many 4-letter ``words" can we create from the letters in FLOWERS? + + \vspace{1in} + How many collections of 4 letters can we choose from the letters in FLOWERS? + + \vspace{1in} + The moral is, no one cares which variable I pick first, second, and so on. So no one cares which of the $n$ variables I start with. Just pick one and give it a value and move down a layer in the tree. There are only $d^n$ leaves in this search tree. + +\end{frame} + +\begin{frame}{Backtracking-search} + \begin{enumerate} + \item Choose an unassigned variable. + \item For each consistent value in its domain, try to extend this to a solution by calling backtracking-search on the solution that uses this value. + \begin{itemize} + \item If the call succeeds, the solution is returned. + \item If the call fails, we try the next value. + \end{itemize} + \item If we run out of values with no solution we return failure. + \end{enumerate} + + +\end{frame} + +\begin{frame}{Variable order matters in a search} + Unassigned variable ordering approaches + \begin{itemize} + \item {\bf Minimum-remaining-values (MRV)}: This is the most effective + way to prune the search tree early on by using this bottleneck to identify failures down the line. + \item {\bf Degree heuristic}: If all of the consistent domains are the same size, MRV doesn't help. Start with the variable that is involved in + the largest number of constraints involving other variables. + \end{itemize} + + In what order should we explore values? + + \begin{itemize} + \item {\bf Least-constraining value heuristic}: Test all values against the the neighbors -- variables that share constraints -- and work further down the tree by using the value that eliminated the fewest number of values from its neighbors. + \end{itemize} + +\end{frame} + +\begin{frame}{Which choice is the least constraining value?} + + \begin{figure} + \includegraphics[width=10cm]{images/least_constraing_value.png} + \end{figure} + +\end{frame} + +\begin{frame}{Making CSP search faster} + \begin{itemize} + \item {\bf Forward checking}: Once you choose a variable value, perform consistency checking for each variable connected to the originating variable by a constraint. Note that without this inference, we'd only check the {\em next} variable we chose, and many possible eliminations would be missed. + \item {\bf Maintaining Arc Consistency (MAC)}: In the previous graph, only the red choice for Queensland allows arc consistency moving forward. MAC alters the AC3 algorithm by searching constraint-neighbor arcs first after a value has been assigned. For example, on the previous slide if I put blue in Queensland, I wouldn't jump to color Victoria next. Rather, I'd want to check whether that + would work for my constraint neighbors. + \end{itemize} +\end{frame} + +\begin{frame}{Is there a smarter way to back up?} + When we fail in AC3, we just back up and try the next variable. But what if the reason + this failed was that the variable {\em before} this one was a terrible choice? Then I'll do a zillion failures, exhausting all possible choices for the current variable before I back up further. + + \vspace{0.1in} + Other approches: + \begin{itemize} + \item {\bf Backjumping} figures out a smarter ``jump'' to a higher part of the tree that is most likely to be the culprit of the lack of consistency. There are three flavors of this: + \begin{itemize} + \item Gaschnig's Backjumping: focus on the earliest chosen value that conflicts with the current proposed value and jump to that choice in the tree + \item Graph-based Backjumping: focus on the parent variables (not values) in + the constraint graph to decide where to jump + \item Conflict-directed Backjumping: combine information from the constraint + graph with the minimal prefix conflict set from Gaschnig. + \end{itemize} + + \item {\bf No-good learning} tries to understand why there was a dead-end, and + seeks to predict those sooner. + \end{itemize} + +\end{frame} + +\begin{frame}{Structuring your problem for a quick solution} + + In the coloring problem, each {\bf connected component} has a coloring scheme + that is independent of other components. So one way to reduce a problem is to split it into its connected components. + + \vspace{.1in} + + But how often is that going to happen? + +\end{frame} + +\begin{frame}{Tree constraint graphs} + \begin{figure} + \includegraphics[width=8cm]{images/constraint_hypergraph} + \end{figure} + + Remember our constraint graph for the Cryptarithmetic example? Look how ``O'' has two constraints, and thus paths to T and R, as well as our invented variables. + + \vspace{.1in} + + A constraint graph is a {\bf tree} when any two variables are connected by only one path. Such CSPs can be solved in $\mathcal{O}(\text{\# vars})$. +\end{frame} + +\begin{frame}{Why are tree graphs better?} + A CSP has {\bf directional arc consistency (DAC)} under an ordering of the variables + $X_1, X_2, \dots X_n$ if and only if every $X_i$ is arc-consistent with each $X_j$ that follows it. + + \vspace{0.1in} + The tree is created by performing a topological sort on its constraint graph -- this sort should preserve order, allowing skips. + + \begin{figure} + \includegraphics[width=8cm]{images/top_sort_2} + \end{figure} + +\end{frame} + +\begin{frame}{Another topological sort} + + \begin{figure} + \includegraphics[width=9cm]{images/top_sort_1} + \end{figure} + +\end{frame} + +\begin{frame}{How does the topological sort help?} + Now the tree can obtain DAC in $\mathcal{O}(n)$ steps. Each step compares up to $d$ possible values for a pair of variables, so the overall computation is + $\mathcal{O}(nd^2)$. + + \vspace{0.1in} + Because the graph is arc consistent, we now just choose the solution by choosing any remaining value as we walk down the tree. We never have to backtrack. + +\end{frame} + +\begin{frame}{Is our Australia problem a tree?} + \begin{figure} + \includegraphics[width=7cm]{images/map_graph} + \end{figure} + +\end{frame} + +\begin{frame}{What would it take to make our Australia problem a tree?} + \begin{figure} + \includegraphics[width=7cm]{images/map_graph} + \end{figure} + +\end{frame} + +\begin{frame}{Cutset conditioning} + \begin{itemize} + \item Choose a subset $S$ of CSP's variables so that the graph with those + variables removed is a tree. $S$ is called a {\bf cycle subset.} + \item Create a list of assignments within $S$ that achieve consistency within $S$. For set assignment set + \begin{itemize} + \item Remove inconsistent values from the variables in $CSP\setminus S$. + \item If the remaining graph has a solution, return that solution along with the assignments for $S$. + \end{itemize} + \end{itemize} + +\end{frame} + +\begin{frame}{Tree composition} + Here the tree is created by combining sets of variables to be a single node. + +\end{frame} + +\end{document} \ No newline at end of file diff --git a/csp.toc b/csp.toc new file mode 100644 index 000000000..9fbdd18a8 --- /dev/null +++ b/csp.toc @@ -0,0 +1 @@ +\babel@toc {english}{}\relax diff --git a/games4e.elsa.ipynb b/games4e.elsa.ipynb new file mode 100644 index 000000000..a707e5a1e --- /dev/null +++ b/games4e.elsa.ipynb @@ -0,0 +1,1575 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Game Tree Search\n", + "\n", + "We start with defining the abstract class `Game`, for turn-taking *n*-player games. We rely on, but do not define yet, the concept of a `state` of the game; we'll see later how individual games define states. For now, all we require is that a state has a `state.to_move` attribute, which gives the name of the player whose turn it is. (\"Name\" will be something like `'X'` or `'O'` for tic-tac-toe.) \n", + "\n", + "We also define `play_game`, which takes a game and a dictionary of `{player_name: strategy_function}` pairs, and plays out the game, on each turn checking `state.to_move` to see whose turn it is, and then getting the strategy function for that player and applying it to the game and the state to get a move." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import namedtuple, Counter, defaultdict\n", + "import random\n", + "import math\n", + "import functools \n", + "cache = functools.lru_cache(10**6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Two-player zero-sum games\n", + "\n", + "* two players\n", + "* fully observable\n", + "* what's good for one player is bad for the other -- there can't be two winners" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "class Game:\n", + " \"\"\"A game is similar to a problem, but it has a terminal test instead of \n", + " a goal test, and a utility for each terminal state. To create a game, \n", + " subclass this class and implement `actions`, `result`, `is_terminal`, \n", + " and `utility`. You will also need to set the .initial attribute to the \n", + " initial state; this can be done in the constructor.\"\"\"\n", + "\n", + " def actions(self, state):\n", + " \"\"\"Return a collection of the allowable moves from this state.\"\"\"\n", + " raise NotImplementedError\n", + "\n", + " # The transition model\n", + " def result(self, state, move):\n", + " \"\"\"Return the state that results from making a move from a state.\"\"\"\n", + " raise NotImplementedError\n", + "\n", + " # Last chapter this was is_goal\n", + " def is_terminal(self, state):\n", + " \"\"\"Return True if this is a final state for the game.\"\"\"\n", + " return not self.actions(state)\n", + " \n", + " # This is the payoff or utility\n", + " def utility(self, state, player):\n", + " \"\"\"Return the value of this final state to player.\"\"\"\n", + " raise NotImplementedError\n", + " \n", + "\n", + "def play_game(game, strategies: dict, verbose=False):\n", + " \"\"\"Play a turn-taking game. `strategies` is a {player_name: function} dict,\n", + " where function(state, game) is used to get the player's move.\"\"\"\n", + " state = game.initial\n", + " while not game.is_terminal(state):\n", + " player = state.to_move\n", + " move = strategies[player](game, state)\n", + " state = game.result(state, move)\n", + " if verbose: \n", + " print('Player', player, 'move:', move)\n", + " print(state)\n", + " return state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Minimax-Based Game Search Algorithms\n", + "\n", + "Here's an excellent description: https://www.youtube.com/watch?v=l-hh51ncgDI\n", + "\n", + "A score is negative if black has the advantage and positive if white has the advantage.\n", + "\n", + "\n", + "\n", + "The white dots are white's turn, and the black dots are black's turn. This tree is made by trying all possible white moves, followed by all possible black moves for each of those, and so on, and the final positions are scored. Let's move from those final scores to scores higher in the tree.\n", + "\n", + "\n", + "\n", + "And here's how the final score/choice would look\n", + "\n", + "\n", + "\n", + "We don't really have to look at all possibilities. We can **prune** our tree and ignore evaluations that don't matter.\n", + "\n", + "\n", + "\n", + "So can we prune here?\n", + "\n", + "\n", + "\n", + "How about here?\n", + "\n", + "\n", + "\n", + "Result...\n", + "\n", + "\n", + "\n", + "The algorithm for alpha-beta pruning is explained very nicely in the cited video, and it's just the logic that we were just now following but with notation.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "We will define several game search algorithms. Each takes two inputs, the game we are playing and the current state of the game, and returns a a `(value, move)` pair, where `value` is the utility that the algorithm computes for the player whose turn it is to move, and `move` is the move itself.\n", + "\n", + "First we define `minimax_search`, which exhaustively searches the game tree to find an optimal move (assuming both players play optimally), and `alphabeta_search`, which does the same computation, but prunes parts of the tree that could not possibly have an affect on the optimnal move. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![fig51](images/fig_5_1.png)\n", + "![fig52](images/fig_5_2.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def minimax_search(game, state):\n", + " \"\"\"Search game tree to determine best move; return (value, move) pair.\"\"\"\n", + "\n", + " player = state.to_move\n", + "\n", + " def max_value(state):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " v, move = -infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = min_value(game.result(state, a))\n", + " if v2 > v:\n", + " v, move = v2, a\n", + " return v, move\n", + "\n", + " def min_value(state):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " v, move = +infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = max_value(game.result(state, a))\n", + " if v2 < v:\n", + " v, move = v2, a\n", + " return v, move\n", + "\n", + " return max_value(state)\n", + "\n", + "infinity = math.inf\n", + "\n", + "def alphabeta_search(game, state):\n", + " \"\"\"Search game to determine best action; use alpha-beta pruning.\n", + " As in [Figure 5.7], this version searches all the way to the leaves.\"\"\"\n", + "\n", + " player = state.to_move\n", + "\n", + " def max_value(state, alpha, beta):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " v, move = -infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = min_value(game.result(state, a), alpha, beta)\n", + " if v2 > v:\n", + " v, move = v2, a\n", + " alpha = max(alpha, v)\n", + " if v >= beta:\n", + " return v, move\n", + " return v, move\n", + "\n", + " def min_value(state, alpha, beta):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " v, move = +infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = max_value(game.result(state, a), alpha, beta)\n", + " if v2 < v:\n", + " v, move = v2, a\n", + " beta = min(beta, v)\n", + " if v <= alpha:\n", + " return v, move\n", + " return v, move\n", + "\n", + " return max_value(state, -infinity, +infinity)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# A Simple Game: Tic-Tac-Toe\n", + "\n", + "We have the notion of an abstract game, we have some search functions; now it is time to define a real game; a simple one, tic-tac-toe. Moves are `(x, y)` pairs denoting squares, where `(0, 0)` is the top left, and `(2, 2)` is the bottom right (on a board of size `height=width=3`)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "class TicTacToe(Game):\n", + " \"\"\"Play TicTacToe on an `height` by `width` board, needing `k` in a row to win.\n", + " 'X' plays first against 'O'.\"\"\"\n", + "\n", + " def __init__(self, height=3, width=3, k=3):\n", + " self.k = k # k in a row\n", + " self.squares = {(x, y) for x in range(width) for y in range(height)}\n", + " self.initial = Board(height=height, width=width, to_move='X', utility=0)\n", + "\n", + " def actions(self, board):\n", + " \"\"\"Legal moves are any square not yet taken.\"\"\"\n", + " return self.squares - set(board)\n", + "\n", + " def result(self, board, square):\n", + " \"\"\"Place a marker for current player on square.\"\"\"\n", + " player = board.to_move\n", + " board = board.new({square: player}, to_move=('O' if player == 'X' else 'X'))\n", + " win = k_in_row(board, player, square, self.k)\n", + " board.utility = (0 if not win else +1 if player == 'X' else -1)\n", + " return board\n", + "\n", + " def utility(self, board, player):\n", + " \"\"\"Return the value to player; 1 for win, -1 for loss, 0 otherwise.\"\"\"\n", + " return board.utility if player == 'X' else -board.utility\n", + "\n", + " def is_terminal(self, board):\n", + " \"\"\"A board is a terminal state if it is won or there are no empty squares.\"\"\"\n", + " return board.utility != 0 or len(self.squares) == len(board)\n", + "\n", + " def display(self, board): print(board) \n", + "\n", + "\n", + "def k_in_row(board, player, square, k):\n", + " \"\"\"True if player has k pieces in a line through square.\"\"\"\n", + " def in_row(x, y, dx, dy): return 0 if board[x, y] != player else 1 + in_row(x + dx, y + dy, dx, dy)\n", + " return any(in_row(*square, dx, dy) + in_row(*square, -dx, -dy) - 1 >= k\n", + " for (dx, dy) in ((0, 1), (1, 0), (1, 1), (1, -1)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "States in tic-tac-toe (and other games) will be represented as a `Board`, which is a subclass of `defaultdict` that in general will consist of `{(x, y): contents}` pairs, for example `{(0, 0): 'X', (1, 1): 'O'}` might be the state of the board after two moves. Besides the contents of squares, a board also has some attributes: \n", + "- `.to_move` to name the player whose move it is; \n", + "- `.width` and `.height` to give the size of the board (both 3 in tic-tac-toe, but other numbers in related games);\n", + "- possibly other attributes, as specified by keywords. \n", + "\n", + "As a `defaultdict`, the `Board` class has a `__missing__` method, which returns `empty` for squares that have no been assigned but are within the `width` × `height` boundaries, or `off` otherwise. The class has a `__hash__` method, so instances can be stored in hash tables." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "class Board(defaultdict):\n", + " \"\"\"A board has the player to move, a cached utility value, \n", + " and a dict of {(x, y): player} entries, where player is 'X' or 'O'.\"\"\"\n", + " empty = '.'\n", + " off = '#'\n", + " \n", + " def __init__(self, width=8, height=8, to_move=None, **kwds):\n", + " self.__dict__.update(width=width, height=height, to_move=to_move, **kwds)\n", + " \n", + " def new(self, changes: dict, **kwds) -> 'Board':\n", + " \"Given a dict of {(x, y): contents} changes, return a new Board with the changes.\"\n", + " board = Board(width=self.width, height=self.height, **kwds)\n", + " board.update(self)\n", + " board.update(changes)\n", + " return board\n", + "\n", + " def __missing__(self, loc):\n", + " x, y = loc\n", + " if 0 <= x < self.width and 0 <= y < self.height:\n", + " return self.empty\n", + " else:\n", + " return self.off\n", + " \n", + " def __hash__(self): \n", + " return hash(tuple(sorted(self.items()))) + hash(self.to_move)\n", + " \n", + " def __repr__(self):\n", + " def row(y): return ' '.join(self[x, y] for x in range(self.width))\n", + " return '\\n'.join(map(row, range(self.height))) + '\\n'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Players\n", + "\n", + "We need an interface for players. I'll represent a player as a `callable` that will be passed two arguments: `(game, state)` and will return a `move`.\n", + "The function `player` creates a player out of a search algorithm, but you can create your own players as functions, as is done with `random_player` below:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def random_player(game, state): return random.choice(list(game.actions(state)))\n", + "\n", + "def player(search_algorithm):\n", + " \"\"\"A game player who uses the specified search algorithm\"\"\"\n", + " return lambda game, state: search_algorithm(game, state)[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Playing a Game\n", + "\n", + "We're ready to play a game. I'll set up a match between a `random_player` (who chooses randomly from the legal moves) and a `player(alphabeta_search)` (who makes the optimal alpha-beta move; practical for tic-tac-toe, but not for large games). The `player(alphabeta_search)` will never lose, but if `random_player` is lucky, it will be a tie." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Player X move: (0, 1)\n", + ". . .\n", + "X . .\n", + ". . .\n", + "\n", + "Player O move: (2, 1)\n", + ". . .\n", + "X . O\n", + ". . .\n", + "\n", + "Player X move: (0, 2)\n", + ". . .\n", + "X . O\n", + "X . .\n", + "\n", + "Player O move: (0, 0)\n", + "O . .\n", + "X . O\n", + "X . .\n", + "\n", + "Player X move: (2, 0)\n", + "O . X\n", + "X . O\n", + "X . .\n", + "\n", + "Player O move: (1, 1)\n", + "O . X\n", + "X O O\n", + "X . .\n", + "\n", + "Player X move: (1, 2)\n", + "O . X\n", + "X O O\n", + "X X .\n", + "\n", + "Player O move: (2, 2)\n", + "O . X\n", + "X O O\n", + "X X O\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "-1" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "play_game(TicTacToe(), dict(X=random_player, O=player(alphabeta_search)), verbose=True).utility" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The alpha-beta player will never lose, but sometimes the random player can stumble into a draw. When two optimal (alpha-beta or minimax) players compete, it will always be a draw:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Player X move: (0, 1)\n", + ". . .\n", + "X . .\n", + ". . .\n", + "\n", + "Player O move: (2, 1)\n", + ". . .\n", + "X . O\n", + ". . .\n", + "\n", + "Player X move: (1, 2)\n", + ". . .\n", + "X . O\n", + ". X .\n", + "\n", + "Player O move: (0, 0)\n", + "O . .\n", + "X . O\n", + ". X .\n", + "\n", + "Player X move: (1, 1)\n", + "O . .\n", + "X X O\n", + ". X .\n", + "\n", + "Player O move: (1, 0)\n", + "O O .\n", + "X X O\n", + ". X .\n", + "\n", + "Player X move: (2, 0)\n", + "O O X\n", + "X X O\n", + ". X .\n", + "\n", + "Player O move: (0, 2)\n", + "O O X\n", + "X X O\n", + "O X .\n", + "\n", + "Player X move: (2, 2)\n", + "O O X\n", + "X X O\n", + "O X X\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "play_game(TicTacToe(), dict(X=player(alphabeta_search), O=player(minimax_search)), verbose=True).utility" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Connect Four\n", + "\n", + "Connect Four is a variant of tic-tac-toe, played on a larger (7 x 6) board, and with the restriction that in any column you can only play in the lowest empty square in the column." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "class ConnectFour(TicTacToe):\n", + " \n", + " def __init__(self): super().__init__(width=7, height=6, k=4)\n", + "\n", + " def actions(self, board):\n", + " \"\"\"In each column you can play only the lowest empty square in the column.\"\"\"\n", + " return {(x, y) for (x, y) in self.squares - set(board)\n", + " if y == board.height - 1 or (x, y + 1) in board}" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Player X move: (2, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X . . . .\n", + "\n", + "Player O move: (1, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". O X . . . .\n", + "\n", + "Player X move: (6, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". O X . . . X\n", + "\n", + "Player O move: (3, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". O X O . . X\n", + "\n", + "Player X move: (6, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . X\n", + ". O X O . . X\n", + "\n", + "Player O move: (5, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . X\n", + ". O X O . O X\n", + "\n", + "Player X move: (4, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . X\n", + ". O X O X O X\n", + "\n", + "Player O move: (6, 3)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . O\n", + ". . . . . . X\n", + ". O X O X O X\n", + "\n", + "Player X move: (4, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . O\n", + ". . . . X . X\n", + ". O X O X O X\n", + "\n", + "Player O move: (0, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . O\n", + ". . . . X . X\n", + "O O X O X O X\n", + "\n", + "Player X move: (5, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . O\n", + ". . . . X X X\n", + "O O X O X O X\n", + "\n", + "Player O move: (0, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . O\n", + "O . . . X X X\n", + "O O X O X O X\n", + "\n", + "Player X move: (2, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . O\n", + "O . X . X X X\n", + "O O X O X O X\n", + "\n", + "Player O move: (0, 3)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + "O . . . . . O\n", + "O . X . X X X\n", + "O O X O X O X\n", + "\n", + "Player X move: (3, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + "O . . . . . O\n", + "O . X X X X X\n", + "O O X O X O X\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "play_game(ConnectFour(), dict(X=random_player, O=random_player), verbose=True).utility" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Transposition Tables\n", + "\n", + "By treating the game tree as a tree, we can arrive at the same state through different paths, and end up duplicating effort. In state-space search, we kept a table of `reached` states to prevent this. For game-tree search, we can achieve the same effect by applying the `@cache` decorator to the `min_value` and `max_value` functions. We'll use the suffix `_tt` to indicate a function that uses these transisiton tables." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "def minimax_search_tt(game, state):\n", + " \"\"\"Search game to determine best move; return (value, move) pair.\"\"\"\n", + "\n", + " player = state.to_move\n", + "\n", + " @cache\n", + " def max_value(state):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " v, move = -infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = min_value(game.result(state, a))\n", + " if v2 > v:\n", + " v, move = v2, a\n", + " return v, move\n", + "\n", + " @cache\n", + " def min_value(state):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " v, move = +infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = max_value(game.result(state, a))\n", + " if v2 < v:\n", + " v, move = v2, a\n", + " return v, move\n", + "\n", + " return max_value(state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For alpha-beta search, we can still use a cache, but it should be based just on the state, not on whatever values alpha and beta have." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def cache1(function):\n", + " \"Like lru_cache(None), but only considers the first argument of function.\"\n", + " cache = {}\n", + " def wrapped(x, *args):\n", + " if x not in cache:\n", + " cache[x] = function(x, *args)\n", + " return cache[x]\n", + " return wrapped\n", + "\n", + "def alphabeta_search_tt(game, state):\n", + " \"\"\"Search game to determine best action; use alpha-beta pruning.\n", + " As in [Figure 5.7], this version searches all the way to the leaves.\"\"\"\n", + "\n", + " player = state.to_move\n", + "\n", + " @cache1\n", + " def max_value(state, alpha, beta):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " v, move = -infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = min_value(game.result(state, a), alpha, beta)\n", + " if v2 > v:\n", + " v, move = v2, a\n", + " alpha = max(alpha, v)\n", + " if v >= beta:\n", + " return v, move\n", + " return v, move\n", + "\n", + " @cache1\n", + " def min_value(state, alpha, beta):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " v, move = +infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = max_value(game.result(state, a), alpha, beta)\n", + " if v2 < v:\n", + " v, move = v2, a\n", + " beta = min(beta, v)\n", + " if v <= alpha:\n", + " return v, move\n", + " return v, move\n", + "\n", + " return max_value(state, -infinity, +infinity)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: total: 125 ms\n", + "Wall time: 117 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "O O X\n", + "X X O\n", + "O X X" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time play_game(TicTacToe(), {'X':player(alphabeta_search_tt), 'O':player(minimax_search_tt)})" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: total: 688 ms\n", + "Wall time: 692 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "O O X\n", + "X X O\n", + "O X X" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time play_game(TicTacToe(), {'X':player(alphabeta_search), 'O':player(minimax_search)})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Heuristic Cutoffs" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def cutoff_depth(d):\n", + " \"\"\"A cutoff function that searches to depth d.\"\"\"\n", + " return lambda game, state, depth: depth > d\n", + "\n", + "def h_alphabeta_search(game, state, cutoff=cutoff_depth(6), h=lambda s, p: 0):\n", + " \"\"\"Search game to determine best action; use alpha-beta pruning.\n", + " As in [Figure 5.7], this version searches all the way to the leaves.\"\"\"\n", + "\n", + " player = state.to_move\n", + "\n", + " @cache1\n", + " def max_value(state, alpha, beta, depth):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " if cutoff(game, state, depth):\n", + " return h(state, player), None\n", + " v, move = -infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = min_value(game.result(state, a), alpha, beta, depth+1)\n", + " if v2 > v:\n", + " v, move = v2, a\n", + " alpha = max(alpha, v)\n", + " if v >= beta:\n", + " return v, move\n", + " return v, move\n", + "\n", + " @cache1\n", + " def min_value(state, alpha, beta, depth):\n", + " if game.is_terminal(state):\n", + " return game.utility(state, player), None\n", + " if cutoff(game, state, depth):\n", + " return h(state, player), None\n", + " v, move = +infinity, None\n", + " for a in game.actions(state):\n", + " v2, _ = max_value(game.result(state, a), alpha, beta, depth + 1)\n", + " if v2 < v:\n", + " v, move = v2, a\n", + " beta = min(beta, v)\n", + " if v <= alpha:\n", + " return v, move\n", + " return v, move\n", + "\n", + " return max_value(state, -infinity, +infinity, 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: total: 78.1 ms\n", + "Wall time: 78 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "O O X\n", + "X X O\n", + "O X X" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time play_game(TicTacToe(), {'X':player(h_alphabeta_search), 'O':player(h_alphabeta_search)})" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Player X move: (5, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . X .\n", + "\n", + "Player O move: (6, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . X O\n", + "\n", + "Player X move: (1, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". X . . . X O\n", + "\n", + "Player O move: (5, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . O .\n", + ". X . . . X O\n", + "\n", + "Player X move: (6, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . O X\n", + ". X . . . X O\n", + "\n", + "Player O move: (2, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . O X\n", + ". X O . . X O\n", + "\n", + "Player X move: (2, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X . . O X\n", + ". X O . . X O\n", + "\n", + "Player O move: (3, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X . . O X\n", + ". X O O . X O\n", + "\n", + "Player X move: (3, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X X . O X\n", + ". X O O . X O\n", + "\n", + "Player O move: (1, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". O X X . O X\n", + ". X O O . X O\n", + "\n", + "Player X move: (2, 3)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X . . . .\n", + ". O X X . O X\n", + ". X O O . X O\n", + "\n", + "Player O move: (5, 3)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X . . O .\n", + ". O X X . O X\n", + ". X O O . X O\n", + "\n", + "Player X move: (4, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X . . O .\n", + ". O X X . O X\n", + ". X O O X X O\n", + "\n", + "Player O move: (3, 3)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X O . O .\n", + ". O X X . O X\n", + ". X O O X X O\n", + "\n", + "Player X move: (0, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X O . O .\n", + ". O X X . O X\n", + "X X O O X X O\n", + "\n", + "Player O move: (6, 3)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . X O . O O\n", + ". O X X . O X\n", + "X X O O X X O\n", + "\n", + "Player X move: (6, 2)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . X\n", + ". . X O . O O\n", + ". O X X . O X\n", + "X X O O X X O\n", + "\n", + "Player O move: (1, 3)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . X\n", + ". O X O . O O\n", + ". O X X . O X\n", + "X X O O X X O\n", + "\n", + "Player X move: (1, 2)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". X . . . . X\n", + ". O X O . O O\n", + ". O X X . O X\n", + "X X O O X X O\n", + "\n", + "CPU times: total: 984 ms\n", + "Wall time: 990 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time play_game(ConnectFour(), {'X':player(h_alphabeta_search), 'O':random_player}, verbose=True).utility" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Player X move: (5, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . X .\n", + "\n", + "Player O move: (6, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . X O\n", + "\n", + "Player X move: (1, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". X . . . X O\n", + "\n", + "Player O move: (5, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . O .\n", + ". X . . . X O\n", + "\n", + "Player X move: (6, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . O X\n", + ". X . . . X O\n", + "\n", + "Player O move: (1, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". O . . . O X\n", + ". X . . . X O\n", + "\n", + "Player X move: (4, 5)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". O . . . O X\n", + ". X . . X X O\n", + "\n", + "Player O move: (4, 4)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". O . . O O X\n", + ". X . . X X O\n", + "\n", + "Player X move: (4, 3)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . X . .\n", + ". O . . O O X\n", + ". X . . X X O\n", + "\n", + "Player O move: (4, 2)\n", + ". . . . . . .\n", + ". . . . . . .\n", + ". . . . O . .\n", + ". . . . X . .\n", + ". O . . O O X\n", + ". X . . X X O\n", + "\n", + "Player X move: (4, 1)\n", + ". . . . . . .\n", + ". . . . X . .\n", + ". . . . O . .\n", + ". . . . X . .\n", + ". O . . O O X\n", + ". X . . X X O\n", + "\n", + "Player O move: (4, 0)\n", + ". . . . O . .\n", + ". . . . X . .\n", + ". . . . O . .\n", + ". . . . X . .\n", + ". O . . O O X\n", + ". X . . X X O\n", + "\n", + "Player X move: (6, 3)\n", + ". . . . O . .\n", + ". . . . X . .\n", + ". . . . O . .\n", + ". . . . X . X\n", + ". O . . O O X\n", + ". X . . X X O\n", + "\n", + "Player O move: (6, 2)\n", + ". . . . O . .\n", + ". . . . X . .\n", + ". . . . O . O\n", + ". . . . X . X\n", + ". O . . O O X\n", + ". X . . X X O\n", + "\n", + "Player X move: (6, 1)\n", + ". . . . O . .\n", + ". . . . X . X\n", + ". . . . O . O\n", + ". . . . X . X\n", + ". O . . O O X\n", + ". X . . X X O\n", + "\n", + "Player O move: (0, 5)\n", + ". . . . O . .\n", + ". . . . X . X\n", + ". . . . O . O\n", + ". . . . X . X\n", + ". O . . O O X\n", + "O X . . X X O\n", + "\n", + "Player X move: (0, 4)\n", + ". . . . O . .\n", + ". . . . X . X\n", + ". . . . O . O\n", + ". . . . X . X\n", + "X O . . O O X\n", + "O X . . X X O\n", + "\n", + "Player O move: (0, 3)\n", + ". . . . O . .\n", + ". . . . X . X\n", + ". . . . O . O\n", + "O . . . X . X\n", + "X O . . O O X\n", + "O X . . X X O\n", + "\n", + "Player X move: (0, 2)\n", + ". . . . O . .\n", + ". . . . X . X\n", + "X . . . O . O\n", + "O . . . X . X\n", + "X O . . O O X\n", + "O X . . X X O\n", + "\n", + "Player O move: (0, 1)\n", + ". . . . O . .\n", + "O . . . X . X\n", + "X . . . O . O\n", + "O . . . X . X\n", + "X O . . O O X\n", + "O X . . X X O\n", + "\n", + "Player X move: (0, 0)\n", + "X . . . O . .\n", + "O . . . X . X\n", + "X . . . O . O\n", + "O . . . X . X\n", + "X O . . O O X\n", + "O X . . X X O\n", + "\n", + "Player O move: (6, 0)\n", + "X . . . O . O\n", + "O . . . X . X\n", + "X . . . O . O\n", + "O . . . X . X\n", + "X O . . O O X\n", + "O X . . X X O\n", + "\n", + "Player X move: (5, 3)\n", + "X . . . O . O\n", + "O . . . X . X\n", + "X . . . O . O\n", + "O . . . X X X\n", + "X O . . O O X\n", + "O X . . X X O\n", + "\n", + "Player O move: (5, 2)\n", + "X . . . O . O\n", + "O . . . X . X\n", + "X . . . O O O\n", + "O . . . X X X\n", + "X O . . O O X\n", + "O X . . X X O\n", + "\n", + "Player X move: (2, 5)\n", + "X . . . O . O\n", + "O . . . X . X\n", + "X . . . O O O\n", + "O . . . X X X\n", + "X O . . O O X\n", + "O X X . X X O\n", + "\n", + "Player O move: (3, 5)\n", + "X . . . O . O\n", + "O . . . X . X\n", + "X . . . O O O\n", + "O . . . X X X\n", + "X O . . O O X\n", + "O X X O X X O\n", + "\n", + "Player X move: (5, 1)\n", + "X . . . O . O\n", + "O . . . X X X\n", + "X . . . O O O\n", + "O . . . X X X\n", + "X O . . O O X\n", + "O X X O X X O\n", + "\n", + "Player O move: (1, 3)\n", + "X . . . O . O\n", + "O . . . X X X\n", + "X . . . O O O\n", + "O O . . X X X\n", + "X O . . O O X\n", + "O X X O X X O\n", + "\n", + "Player X move: (2, 4)\n", + "X . . . O . O\n", + "O . . . X X X\n", + "X . . . O O O\n", + "O O . . X X X\n", + "X O X . O O X\n", + "O X X O X X O\n", + "\n", + "Player O move: (2, 3)\n", + "X . . . O . O\n", + "O . . . X X X\n", + "X . . . O O O\n", + "O O O . X X X\n", + "X O X . O O X\n", + "O X X O X X O\n", + "\n", + "Player X move: (1, 2)\n", + "X . . . O . O\n", + "O . . . X X X\n", + "X X . . O O O\n", + "O O O . X X X\n", + "X O X . O O X\n", + "O X X O X X O\n", + "\n", + "Player O move: (1, 1)\n", + "X . . . O . O\n", + "O O . . X X X\n", + "X X . . O O O\n", + "O O O . X X X\n", + "X O X . O O X\n", + "O X X O X X O\n", + "\n", + "Player X move: (1, 0)\n", + "X X . . O . O\n", + "O O . . X X X\n", + "X X . . O O O\n", + "O O O . X X X\n", + "X O X . O O X\n", + "O X X O X X O\n", + "\n", + "Player O move: (5, 0)\n", + "X X . . O O O\n", + "O O . . X X X\n", + "X X . . O O O\n", + "O O O . X X X\n", + "X O X . O O X\n", + "O X X O X X O\n", + "\n", + "Player X move: (2, 2)\n", + "X X . . O O O\n", + "O O . . X X X\n", + "X X X . O O O\n", + "O O O . X X X\n", + "X O X . O O X\n", + "O X X O X X O\n", + "\n", + "Player O move: (2, 1)\n", + "X X . . O O O\n", + "O O O . X X X\n", + "X X X . O O O\n", + "O O O . X X X\n", + "X O X . O O X\n", + "O X X O X X O\n", + "\n", + "Player X move: (2, 0)\n", + "X X X . O O O\n", + "O O O . X X X\n", + "X X X . O O O\n", + "O O O . X X X\n", + "X O X . O O X\n", + "O X X O X X O\n", + "\n", + "Player O move: (3, 4)\n", + "X X X . O O O\n", + "O O O . X X X\n", + "X X X . O O O\n", + "O O O . X X X\n", + "X O X O O O X\n", + "O X X O X X O\n", + "\n", + "Player X move: (3, 3)\n", + "X X X . O O O\n", + "O O O . X X X\n", + "X X X . O O O\n", + "O O O X X X X\n", + "X O X O O O X\n", + "O X X O X X O\n", + "\n", + "CPU times: total: 4.42 s\n", + "Wall time: 4.42 s\n" + ] + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time play_game(ConnectFour(), {'X':player(h_alphabeta_search), 'O':player(h_alphabeta_search)}, verbose=True).utility" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Result states: 5,031; Terminal tests: 2,955; for alphabeta_search_tt\n", + "Result states: 23,177; Terminal tests: 23,178; for alphabeta_search\n", + "Result states: 3,838; Terminal tests: 2,423; for h_alphabeta_search\n", + "Result states: 16,167; Terminal tests: 5,478; for minimax_search_tt\n" + ] + } + ], + "source": [ + "class CountCalls:\n", + " \"\"\"Delegate all attribute gets to the object, and count them in ._counts\"\"\"\n", + " def __init__(self, obj):\n", + " self._object = obj\n", + " self._counts = Counter()\n", + " \n", + " def __getattr__(self, attr):\n", + " \"Delegate to the original object, after incrementing a counter.\"\n", + " self._counts[attr] += 1\n", + " return getattr(self._object, attr)\n", + " \n", + "def report(game, searchers):\n", + " for searcher in searchers:\n", + " game = CountCalls(game)\n", + " searcher(game, game.initial)\n", + " print('Result states: {:7,d}; Terminal tests: {:7,d}; for {}'.format(\n", + " game._counts['result'], game._counts['is_terminal'], searcher.__name__))\n", + " \n", + "report(TicTacToe(), (alphabeta_search_tt, alphabeta_search, h_alphabeta_search, minimax_search_tt))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Monte Carlo Tree Search\n", + "\n", + "https://www.youtube.com/watch?v=UXW2yZndl7U\n", + "\n", + "The problem with minimax is that it doesn't scale well. This is known as the branching problem. It has to explore very thoroughly even when using a pruning algorithm.\n", + "\n", + "You randomly walk down the tree to a leaf 100s or 1000s of times. At the leaf, we observe whether we won or lost, and we back-propagate values up to the starting node that reflect our decisions.\n", + "\n", + "UCT: Upper confidence bound applied to trees -- balancing act shifting attention to different parts of the tree to make sure a better solution hasn't been missed. How do we traverse the tree?\n", + "\n", + "For each action $i$, we measure the average reward $\\bar{v}_i$, which is the total reward divided by the number of visits $n_i$ to this node. We also track the number of actions we tried in this experiment. We are going to choose the maximum $UCB1$ route, and we can stop any time. The longer we search, the better answer we'll get.\n", + "\n", + "\n", + "$$\n", + "UCB1(s_i) = \\bar{v}_i + c \\sqrt{\\frac{\\ln N}{n_i}} \\\\\n", + "\\text{exploitation} + \\text{exploration}\n", + "$$\n", + "\n", + "Note that an unvisited node will have division by zero, and the corresponding $UCB1 = \\infty$ will always be the maximum (or one of the maxima). Here's the flow of the logic:\n", + "\n", + "\n", + "\n", + "If I arrive at a node that I've never visited, then I'm going to \"rollout\" which means that I'm going to randomly traverse the tree down to a random state and record the value. The value for that terminal node becomes the value for the node that I rolled out, and I forget about how I got down there.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Stochastic Games\n", + "\n", + "Here's a nice resource -- https://courses.engr.illinois.edu/cs440/fa2018/lectures/lect34.html -- I've pulled from this\n", + "\n", + "A stochastic game is one in which some changes in game state are random, e.g. dice rolls, card games. That is to say, most board and card games. These can be modeled using game trees with three types of nodes\n", + "\n", + "* max nodes (our move), upward pointing triangles\n", + "* min nodes (opponent's move), downward pointing triangles\n", + "* chance nodes (environment's move), circles\n", + "\n", + "\n", + "\n", + "## Expectiminimax\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/heuristic_search_strategies.elsa.ipynb b/heuristic_search_strategies.elsa.ipynb new file mode 100644 index 000000000..33116ca51 --- /dev/null +++ b/heuristic_search_strategies.elsa.ipynb @@ -0,0 +1,409 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Heuristic Search Approaches\n", + "\n", + "If we have outside knowledge about our world, can we apply that knowledge to improve our search algorithms? When we add our own intelligence that's really the guts of third wave AI.\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "## Greedy Best-first Search\n", + "So, for example, in the mapping problem in the text\n", + "suppose we also know (from another source) the point-to-point distances between the cities, independent of roads.\n", + "

\n", + "\n", + "

\n", + "\n", + "So if I'm in Arad, there are three cities I can choose to go through as I try to find the best route to Bucharest. What's the best choice? What next?\n", + "\n", + "It turns out that this greedy best-first algorithm will find a good path, but not quite the best path. But what did this algorithm ignore?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# A* Search\n", + "\n", + "In the past algorithm, we informed the best-search algorithm with our external heuristic $f(n) = h(n)= $ the straight-line distance of city $n$ to Bucharest. But we completely ignored how far each city was from our starting city.\n", + "\n", + "Now let's inform the best-search with \n", + "\\[\n", + " f(n) = g(n) + h(n) \n", + "\\]\n", + "where $g(n)$ accounts for the travel distance to from the starting city to the frontier city.\n", + "\n", + "## What does $h$ have to promise for A* to be cost optimal?\n", + "\n", + "The heuristic has to be **admissible**, meaning that it *never overestimates* the distance to the goal.\n", + "\n", + "A stronger condition is that a heuristic be **consistent**. Wikipedia gives a nicer explanation than the text:\n", + "\n", + "Formally, for every node N and each successor P of N, the estimated cost of reaching the goal from N is no greater than the step cost of getting to P plus the estimated cost of reaching the goal from P. That is:\n", + "\n", + "$$ h(N)\\leq c(N,P)+h(P)$$ \n", + "\n", + "$$h(G)=0$$\n", + "where\n", + "\n", + "* $h$ is the consistent heuristic function\n", + "* $N$ is any node in the graph\n", + "* $P$ is any descendant of $N$\n", + "* $G$ is any goal node\n", + "* $c(N,P)$ is the cost of reaching node $P$ from $N$\n", + "Informally, every node $i$ will give an estimate that, accounting for the cost to reach the next node, is always lesser than the estimate at node $i+1$. (This is the triangle inequality.)\n", + "\n", + "Another term for a consistent heuristic is a **monotonic heuristic**.\n", + "\n", + "\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How can A* work faster?\n", + "\n", + "As it is, A* has to open all of its subnodes at each step to decide which is best. If two nodes have the same $f(n) = g(n) + h(n)$ then both have to be expanded. How can we adjust this? \n", + "\n", + "## Weighted A*\n", + "\n", + "What if we decide being closer to the goal is more important than how far we've already traveled? \n", + "* How far we've traveled is sunk cost at this point in the algorithm.\n", + "* What we want to do is save computation time and finish this thing.\n", + "\n", + "So now states can expanded following the heuristic\n", + "$$ f(n) = g(n) + W \\times h(n)$$\n", + "where $W > 1$. It may not give an optimal solution, but it will decide more quickly and the text calls this a **satisficing** \n", + "solution.\n", + "\n", + "

\n", + "\n", + "

\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Memory-bounded searches\n", + "\n", + "Some quick tricks to reduce the burden on memory:\n", + "* for a larger problem, don't hold the frontier nodes as reached until done with them on the frontier (but it complicates code)\n", + "* Keep reference counts for states if we know how many visits we can have to that state before it's not going to offer an optional solution.\n", + "* **Beam search** only keep the $k$ best-performing nodes in the frontier and throw away the rest. *OR* only keep the nodes that are within $\\delta$ of the best.\n", + "* **Iterative-deepening A* search (IDA*)** trades off holding visited nodes in memory with the cost of possibly re-visiting nodes that have already been searched. A cutoff-value is determined at each step and any nodes with $f$-values that are higher a discarded, creating a search contour. When the values are floats, this contour may consist of just one node at each step and perhaps too much information is lost.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look at good slides from the University of Cambridge https://www.cl.cam.ac.uk/teaching/0809/ArtIntI/notes2.pdf\n", + "\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "* **Recursive best-first search (RBFS)** starts to act like a recursive depth-first search, \n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def depth_first_recursive_search(problem, node=None):\n", + " if node is None: \n", + " node = Node(problem.initial)\n", + " if problem.is_goal(node.state):\n", + " return node\n", + " elif is_cycle(node):\n", + " return failure\n", + " else:\n", + " for child in expand(problem, node):\n", + " result = depth_first_recursive_search(problem, child)\n", + " if result:\n", + " return result\n", + " return failure" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "def recursive_best_first_search(problem, h=None):\n", + " \"\"\"[Figure 3.26]\"\"\"\n", + " # This caches h values on the nodes and can be\n", + " # examined on the returned path\n", + " h = memoize(h or problem.h, 'h')\n", + "\n", + " def RBFS(problem, node, flimit):\n", + " # are you at your goal?\n", + " if problem.goal_test(node.state):\n", + " return node, 0 # (The second value is immaterial)\n", + " # What's the frontier\n", + " successors = node.expand(problem)\n", + " # If I'm on a leaf and didn't solve the problem return horrible score\n", + " # that allows us to look somewhere else\n", + " if len(successors) == 0:\n", + " return None, np.inf\n", + " for s in successors:\n", + " # each node's new cost is the path_cost to get there plus\n", + " # the heuristic guess, or it's current f val, whichever is worse\n", + " s.f = max(s.path_cost + h(s), node.f)\n", + " while True:\n", + " # Order by lowest f value\n", + " successors.sort(key=lambda x: x.f)\n", + " best = successors[0]\n", + " # I can't search the successors if the best\n", + " # is over the limit\n", + " if best.f > flimit:\n", + " return None, best.f\n", + " # If there are choices record alt value\n", + " if len(successors) > 1:\n", + " alternative = successors[1].f\n", + " else:\n", + " alternative = np.inf\n", + " # Here's where the cutoff is set\n", + " result, best.f = RBFS(problem, best, min(flimit, alternative))\n", + " if result is not None:\n", + " return result, best.f\n", + "\n", + " node = Node(problem.initial)\n", + " node.f = h(node)\n", + " result, bestf = RBFS(problem, node, np.inf)\n", + " return result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n", + "

\n", + "\n", + "

\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Is this throwing the baby out with the bath water?\n", + "\n", + "\n", + "By remembering **nothing** we had to retrace steps. __MA*, memory bounded A*__ and it's friendly cousin __SMA*__ (Simplified...) expands until the memory is full. SMA* just drops the worst lef at this time and then backs up teh value of the forgotten node to its parent. So it's only going back to that subtree if it's desperate. Problems that require high memory resources can be theoretically solvable by A* but stuck in a _trashing_ pattern or having to repeatedly regenerate nodes.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3.6 Heuristic Functions\n", + "\n", + "How important is the accuracy of your heuristic? Example: 8-puzzle\n", + "\n", + "\n", + "\n", + "![](https://ece.uwaterloo.ca/~dwharder/aads/Algorithms/N_puzzles/images/puz3.png)\n", + "\n", + "The goal here is to get to\n", + "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++![](https://ece.uwaterloo.ca/~dwharder/aads/Algorithms/N_puzzles/images/puz1.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So what kind of metrics could we assign the top-left puzzle?\n", + "* The **Hamming Distance** is the number of wrong tiles (8 for this guy, and 7 for the top-right).\n", + "* The **Manhattan Distance** is the sum of the distances of the tiles to get to the right place -- so are the tiles a little bit wrong or a lot wrong?" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def manhattan(nodes, goals):\n", + " X = (0, 1, 2, 0, 1, 2, 0, 1, 2)\n", + " Y = (0, 0, 0, 1, 1, 1, 2, 2, 2)\n", + " return sum(abs(X[s] - X[g]) + abs(Y[s] - Y[g])\n", + " for (s, g) in zip(nodes, goals) if s != 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "14" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "manhattan((5,2,7,8,4,0,1,3,6), (1,2,3,4,5,6,7,8,0))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "15" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2 + 0 + 4 + 2 + 1 + 2 + 3 + 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I couldn't get the same answer for the example in the text, either, but we get the basic idea. The book discusses metrics that are good for performance comparisons. the *effective branching factor* and *effective depth* are determined determining how a uniform tree of depth $d$ would have to be constructed to reflect the number of nodes that were expanded in the search. But for us I think it's sufficient to note the number of nodes expanded by each approach.\n", + "\n", + "| $d$ | BFS | A*($h_1$) | A*($h_2$) |\n", + "| ---| -----| -------| -----|\n", + "| 2 | 5 | 6 | 6 |\n", + "| 4 | 33 | 12 | 12 | 2.06 1.49 1.49\n", + "| 6 | 128 | 24 | 19 | 2.01 1.42 1.34\n", + "| 8 | 368 | 48 | 31 | 1.91 1.40 1.30\n", + "|10 | 1033 | 116 | 48 | 1.85 1.43 1.27\n", + "|12 | 2672 | 279 | 84 | 1.80 1.45 1.28\n", + "|14 | 6783 | 678 | 174 | 1.77 1.47 1.31\n", + "|16 | 17270 | 1683 | 364 | 1.74 1.48 1.32\n", + "|18 | 41558 | 4102 | 751 | 1.72 1.49 1.34\n", + "|20 | 91493 | 9905 | 1318 | 1.69 1.50 1.34\n", + "|22 | 175921 | 22955 | 2548 | 1.66 1.50 1.34\n", + "|24 | 290082 | 53039 | 5733 | 1.62 1.50 1.36" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When one heuristic is always better than another, we say that it (e.g. $h_2$) **dominates** the other (e.g. $h_1$)\n", + "\n", + "## Relaxed problems\n", + "\n", + "One way to generate heuristics is to change your problem to a more _relaxed_ problem -- one with fewer rules. \n", + "* The Manhattan distance pretends you can just slam a tile into another tile\n", + "* The Romanian heuristic assumed you could just fly like a bird.\n", + "\n", + "*ABSolver* (1990's) can find useful heuristics for this problem as well as rubics cube etc.\n", + "\n", + "## Other ways to generate better heuristics\n", + "\n", + "* Create **pattern databases** that store the exact solution costs for every possible subproblem. I personally think this is cheating. But it actually does let you solve the problem very quickly. \n", + "* Clever ppl can combine disjoint puzzle databases to solve the 15-puzzle quickly.\n", + "\n", + "* **Landmarks** are things that every plan for a task must eventually satisfy. You calculate the exact costs between each landmarks and the other nodes:\n", + "$$h_L(n) = \\min_{L \\in \\texttt{Landmarks}} C^*(n,L) + C^*(L, \\texttt{goal})$$\n", + "It turns out that this isn't quite admissible, although it is efficient. However, the associated **differential heuristic** is admissible:\n", + "$$ h_{DH}(n) = \\max_{L\\in\\texttt{Landmarks}} | C^*(n,L) - C^*(\\texttt{goal}, L)|$$\n", + "This works because the most useful landmarks are over-estimates. This difference gives us an estimate for the distance to the goal if any of the landmarks over-shoot our goal.\n", + "\n", + "## But this is an AI book so can't we learn how to search better?\n", + "\n", + "Yes. Each state in a **metalevel state space** captures the computational state of a program that's searching the original object-level state space. So maybe we'll get into this once we really learn reinforcement learning.\n", + "\n", + "Also, we could take a bunch of randomly generated problem instances and collect statistics about solution costs. Then we could create a machine learning model that predicts costs given state information and use that as a heuristic." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "1ec332c3762279bf04c318127bba8846de175531a02d6981c60e86e990426d1b" + }, + "kernelspec": { + "display_name": "Python 3.9.6 ('aibc')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/images/3rd_wave_elsa.png b/images/3rd_wave_elsa.png new file mode 100644 index 000000000..de0dbc2e6 Binary files /dev/null and b/images/3rd_wave_elsa.png differ diff --git a/images/5-Figure3.2-1.png b/images/5-Figure3.2-1.png new file mode 100644 index 000000000..4b3d55557 Binary files /dev/null and b/images/5-Figure3.2-1.png differ diff --git a/images/Romania+with+step+costs+in+km.jpg b/images/Romania+with+step+costs+in+km.jpg new file mode 100644 index 000000000..e74be0b96 Binary files /dev/null and b/images/Romania+with+step+costs+in+km.jpg differ diff --git a/images/andorsearch.png b/images/andorsearch.png new file mode 100644 index 000000000..98a2dc75d Binary files /dev/null and b/images/andorsearch.png differ diff --git a/images/astar_buch.jpg b/images/astar_buch.jpg new file mode 100644 index 000000000..94504d6c0 Binary files /dev/null and b/images/astar_buch.jpg differ diff --git a/images/astar_v_weighted.PNG b/images/astar_v_weighted.PNG new file mode 100644 index 000000000..c9ad7b31b Binary files /dev/null and b/images/astar_v_weighted.PNG differ diff --git a/images/atomic-factored-structured.PNG b/images/atomic-factored-structured.PNG new file mode 100644 index 000000000..1e315f411 Binary files /dev/null and b/images/atomic-factored-structured.PNG differ diff --git a/images/babu.png b/images/babu.png new file mode 100644 index 000000000..0e91c3a87 Binary files /dev/null and b/images/babu.png differ diff --git a/images/back_white_number.png b/images/back_white_number.png new file mode 100644 index 000000000..7372f144c Binary files /dev/null and b/images/back_white_number.png differ diff --git a/images/baseball.png b/images/baseball.png new file mode 100644 index 000000000..65d5bf344 Binary files /dev/null and b/images/baseball.png differ diff --git a/images/black_white_number.png b/images/black_white_number.png new file mode 100644 index 000000000..d6a78e2e7 Binary files /dev/null and b/images/black_white_number.png differ diff --git a/images/boris_arc_consistency.png b/images/boris_arc_consistency.png new file mode 100644 index 000000000..80eb1c3a0 Binary files /dev/null and b/images/boris_arc_consistency.png differ diff --git a/images/boris_arc_consistency.svg b/images/boris_arc_consistency.svg new file mode 100644 index 000000000..07761c3b7 --- /dev/null +++ b/images/boris_arc_consistency.svg @@ -0,0 +1,343 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + A!=B + A=D + E<A + E<D + E<C + E<B + B!=D + C<D + B!=C + + + + A + {1,2,3,4} + + B + {1,2,4} + + D + {1,2,3,4} + + C + {1,3,4} + + E + {1,2,3,4} + + diff --git a/images/bw_can_prune_1.png b/images/bw_can_prune_1.png new file mode 100644 index 000000000..d181c7f7c Binary files /dev/null and b/images/bw_can_prune_1.png differ diff --git a/images/bw_can_prune_2.png b/images/bw_can_prune_2.png new file mode 100644 index 000000000..d78079622 Binary files /dev/null and b/images/bw_can_prune_2.png differ diff --git a/images/bw_pruned.png b/images/bw_pruned.png new file mode 100644 index 000000000..6c6e1b716 Binary files /dev/null and b/images/bw_pruned.png differ diff --git a/images/bw_tree_1.png b/images/bw_tree_1.png new file mode 100644 index 000000000..ace3cd605 Binary files /dev/null and b/images/bw_tree_1.png differ diff --git a/images/bw_tree_2.png b/images/bw_tree_2.png new file mode 100644 index 000000000..93a1aa87b Binary files /dev/null and b/images/bw_tree_2.png differ diff --git a/images/bw_tree_prune.png b/images/bw_tree_prune.png new file mode 100644 index 000000000..379a98c75 Binary files /dev/null and b/images/bw_tree_prune.png differ diff --git a/images/constraint.jpg b/images/constraint.jpg new file mode 100644 index 000000000..7ec7e2d19 Binary files /dev/null and b/images/constraint.jpg differ diff --git a/images/constraint_hypergraph.png b/images/constraint_hypergraph.png new file mode 100644 index 000000000..4cc7538a4 Binary files /dev/null and b/images/constraint_hypergraph.png differ diff --git a/images/csp_search.png b/images/csp_search.png new file mode 100644 index 000000000..f17de72c1 Binary files /dev/null and b/images/csp_search.png differ diff --git a/images/erratic_vacuum.png b/images/erratic_vacuum.png new file mode 100644 index 000000000..36e20f14a Binary files /dev/null and b/images/erratic_vacuum.png differ diff --git a/images/expectiminimax.png b/images/expectiminimax.png new file mode 100644 index 000000000..212e14a58 Binary files /dev/null and b/images/expectiminimax.png differ diff --git a/images/fig14-1.png b/images/fig14-1.png new file mode 100644 index 000000000..b821db701 Binary files /dev/null and b/images/fig14-1.png differ diff --git a/images/fig_5_1.png b/images/fig_5_1.png new file mode 100644 index 000000000..7f2441fb3 Binary files /dev/null and b/images/fig_5_1.png differ diff --git a/images/ida0.png b/images/ida0.png new file mode 100644 index 000000000..e7a3079d3 Binary files /dev/null and b/images/ida0.png differ diff --git a/images/ida1.png b/images/ida1.png new file mode 100644 index 000000000..b3f79e48f Binary files /dev/null and b/images/ida1.png differ diff --git a/images/ida2.png b/images/ida2.png new file mode 100644 index 000000000..ae85d6054 Binary files /dev/null and b/images/ida2.png differ diff --git a/images/ida3.png b/images/ida3.png new file mode 100644 index 000000000..08aa1b15a Binary files /dev/null and b/images/ida3.png differ diff --git a/images/least_constraing_value.png b/images/least_constraing_value.png new file mode 100644 index 000000000..e363e5dbf Binary files /dev/null and b/images/least_constraing_value.png differ diff --git a/images/lrtastart.png b/images/lrtastart.png new file mode 100644 index 000000000..18f8bb23e Binary files /dev/null and b/images/lrtastart.png differ diff --git a/images/map_coloring.png b/images/map_coloring.png new file mode 100644 index 000000000..a8e1c2d3b Binary files /dev/null and b/images/map_coloring.png differ diff --git a/images/map_coloring_2.png b/images/map_coloring_2.png new file mode 100644 index 000000000..51341692c Binary files /dev/null and b/images/map_coloring_2.png differ diff --git a/images/map_graph.png b/images/map_graph.png new file mode 100644 index 000000000..734a79236 Binary files /dev/null and b/images/map_graph.png differ diff --git a/images/rbfs0.png b/images/rbfs0.png new file mode 100644 index 000000000..2b0c82bd5 Binary files /dev/null and b/images/rbfs0.png differ diff --git a/images/rbfs1.png b/images/rbfs1.png new file mode 100644 index 000000000..07d4a4f3c Binary files /dev/null and b/images/rbfs1.png differ diff --git a/images/rbfs2.png b/images/rbfs2.png new file mode 100644 index 000000000..bbb9755f1 Binary files /dev/null and b/images/rbfs2.png differ diff --git a/images/rbfs3.png b/images/rbfs3.png new file mode 100644 index 000000000..ae6b5217b Binary files /dev/null and b/images/rbfs3.png differ diff --git a/images/rbfs4.png b/images/rbfs4.png new file mode 100644 index 000000000..02741bb95 Binary files /dev/null and b/images/rbfs4.png differ diff --git a/images/rbfs5.png b/images/rbfs5.png new file mode 100644 index 000000000..92578ea0b Binary files /dev/null and b/images/rbfs5.png differ diff --git a/images/rfbs_bucharest.jpg b/images/rfbs_bucharest.jpg new file mode 100644 index 000000000..28d20122e Binary files /dev/null and b/images/rfbs_bucharest.jpg differ diff --git a/images/romania.jpg b/images/romania.jpg new file mode 100644 index 000000000..605c0c6ff Binary files /dev/null and b/images/romania.jpg differ diff --git a/images/slippery_vacuum.png b/images/slippery_vacuum.png new file mode 100644 index 000000000..e569e8b70 Binary files /dev/null and b/images/slippery_vacuum.png differ diff --git a/images/stochastic-game.png b/images/stochastic-game.png new file mode 100644 index 000000000..fe7bafe12 Binary files /dev/null and b/images/stochastic-game.png differ diff --git a/images/sudoku.png b/images/sudoku.png new file mode 100644 index 000000000..e891c3b23 Binary files /dev/null and b/images/sudoku.png differ diff --git a/images/top_sort_1.png b/images/top_sort_1.png new file mode 100644 index 000000000..4b235512f Binary files /dev/null and b/images/top_sort_1.png differ diff --git a/images/top_sort_2.png b/images/top_sort_2.png new file mode 100644 index 000000000..2be9f29d8 Binary files /dev/null and b/images/top_sort_2.png differ diff --git a/images/two_two_four.png b/images/two_two_four.png new file mode 100644 index 000000000..a48f65678 Binary files /dev/null and b/images/two_two_four.png differ diff --git a/images/ucb1.png b/images/ucb1.png new file mode 100644 index 000000000..57df98024 Binary files /dev/null and b/images/ucb1.png differ diff --git a/search.ipynb b/search.ipynb index caf231dcc..5104ce2dd 100644 --- a/search.ipynb +++ b/search.ipynb @@ -123,33 +123,44 @@ "text/html": [ "\n", - "\n", + "\n", "\n", "\n", " \n", " \n", " \n", + "\n", + "\n", + "

\n", + "\n", + "
class Problem:\n",
+       "    """The abstract class for a formal problem. You should subclass\n",
+       "    this and implement the methods actions and result, and possibly\n",
+       "    __init__, goal_test, and path_cost. Then you will create instances\n",
+       "    of your subclass and solve them with the various search functions."""\n",
+       "\n",
+       "    def __init__(self, initial, goal=None):\n",
+       "        """The constructor specifies the initial state, and possibly a goal\n",
+       "        state, if there is a unique goal. Your subclass's constructor can add\n",
+       "        other arguments."""\n",
+       "        self.initial = initial\n",
+       "        self.goal = goal\n",
+       "\n",
+       "    def actions(self, state):\n",
+       "        """Return the actions that can be executed in the given\n",
+       "        state. The result would typically be a list, but if there are\n",
+       "        many actions, consider yielding them one at a time in an\n",
+       "        iterator, rather than building them all at once."""\n",
+       "        raise NotImplementedError\n",
+       "\n",
+       "    def result(self, state, action):\n",
+       "        """Return the state that results from executing the given\n",
+       "        action in the given state. The action must be one of\n",
+       "        self.actions(state)."""\n",
+       "        raise NotImplementedError\n",
+       "\n",
+       "    def goal_test(self, state):\n",
+       "        """Return True if the state is a goal. The default method compares the\n",
+       "        state to self.goal or checks for state in self.goal if it is a\n",
+       "        list, as specified in the constructor. Override this method if\n",
+       "        checking against a single self.goal is not enough."""\n",
+       "        if isinstance(self.goal, list):\n",
+       "            return is_in(state, self.goal)\n",
+       "        else:\n",
+       "            return state == self.goal\n",
+       "\n",
+       "    def path_cost(self, c, state1, action, state2):\n",
+       "        """Return the cost of a solution path that arrives at state2 from\n",
+       "        state1 via action, assuming cost c to get up to state1. If the problem\n",
+       "        is such that the path doesn't matter, this function will only look at\n",
+       "        state2. If the path does matter, it will consider c and maybe state1\n",
+       "        and action. The default method costs 1 for every step in the path."""\n",
+       "        return c + 1\n",
+       "\n",
+       "    def value(self, state):\n",
+       "        """For optimization problems, each state has a value. Hill Climbing\n",
+       "        and related algorithms try to maximize this value."""\n",
+       "        raise NotImplementedError\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(Problem)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class Node:\n",
+       "    """A node in a search tree. Contains a pointer to the parent (the node\n",
+       "    that this is a successor of) and to the actual state for this node. Note\n",
+       "    that if a state is arrived at by two paths, then there are two nodes with\n",
+       "    the same state. Also includes the action that got us to this state, and\n",
+       "    the total path_cost (also known as g) to reach the node. Other functions\n",
+       "    may add an f and h value; see best_first_graph_search and astar_search for\n",
+       "    an explanation of how the f and h values are handled. You will not need to\n",
+       "    subclass this class."""\n",
+       "\n",
+       "    def __init__(self, state, parent=None, action=None, path_cost=0):\n",
+       "        """Create a search tree Node, derived from a parent by an action."""\n",
+       "        self.state = state\n",
+       "        self.parent = parent\n",
+       "        self.action = action\n",
+       "        self.path_cost = path_cost\n",
+       "        self.depth = 0\n",
+       "        if parent:\n",
+       "            self.depth = parent.depth + 1\n",
+       "\n",
+       "    def __repr__(self):\n",
+       "        return "<Node {}>".format(self.state)\n",
+       "\n",
+       "    def __lt__(self, node):\n",
+       "        return self.state < node.state\n",
+       "\n",
+       "    def expand(self, problem):\n",
+       "        """List the nodes reachable in one step from this node."""\n",
+       "        return [self.child_node(problem, action)\n",
+       "                for action in problem.actions(self.state)]\n",
+       "\n",
+       "    def child_node(self, problem, action):\n",
+       "        """[Figure 3.10]"""\n",
+       "        next_state = problem.result(self.state, action)\n",
+       "        next_node = Node(next_state, self, action, problem.path_cost(self.path_cost, self.state, action, next_state))\n",
+       "        return next_node\n",
+       "\n",
+       "    def solution(self):\n",
+       "        """Return the sequence of actions to go from the root to this node."""\n",
+       "        return [node.action for node in self.path()[1:]]\n",
+       "\n",
+       "    def path(self):\n",
+       "        """Return a list of nodes forming the path from the root to this node."""\n",
+       "        node, path_back = self, []\n",
+       "        while node:\n",
+       "            path_back.append(node)\n",
+       "            node = node.parent\n",
+       "        return list(reversed(path_back))\n",
+       "\n",
+       "    # We want for a queue of nodes in breadth_first_graph_search or\n",
+       "    # astar_search to have no duplicated states, so we treat nodes\n",
+       "    # with the same state as equal. [Problem: this may not be what you\n",
+       "    # want in other contexts.]\n",
+       "\n",
+       "    def __eq__(self, other):\n",
+       "        return isinstance(other, Node) and self.state == other.state\n",
+       "\n",
+       "    def __hash__(self):\n",
+       "        # We use the hash value of the state\n",
+       "        # stored in the node instead of the node\n",
+       "        # object itself to quickly search a node\n",
+       "        # with the same state in a Hash Table\n",
+       "        return hash(self.state)\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(Node)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Hill-climbing\n", + "\n", + "This is a greedy local search that just wants to know what direction will most steeply move towards a local optimum value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def hill_climbing(problem):\n",
+       "    """\n",
+       "    [Figure 4.2]\n",
+       "    From the initial node, keep choosing the neighbor with highest value,\n",
+       "    stopping when no neighbor is better.\n",
+       "    """\n",
+       "    current = Node(problem.initial)\n",
+       "    while True:\n",
+       "        neighbors = current.expand(problem)\n",
+       "        if not neighbors:\n",
+       "            break\n",
+       "        neighbor = argmax_random_tie(neighbors, key=lambda node: problem.value(node.state))\n",
+       "        if problem.value(neighbor.state) <= problem.value(current.state):\n",
+       "            break\n",
+       "        current = neighbor\n",
+       "    return current.state\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(hill_climbing)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Traveling Salesman Problem\n", + "\n", + "This is an NP-hard problem: what is the shortest route to visit all cities in a list? We'll use hill-climbing to approximate the solution. This problem uses our Romania map again.\n", + "\n", + "

\n", + "\n", + "

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### All of the cities" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Arad', 'Bucharest', 'Craiova', 'Drobeta', 'Eforie', 'Fagaras', 'Giurgiu', 'Hirsova', 'Iasi', 'Lugoj', 'Mehadia', 'Neamt', 'Oradea', 'Pitesti', 'Rimnicu', 'Sibiu', 'Timisoara', 'Urziceni', 'Vaslui', 'Zerind']\n" + ] + } + ], + "source": [ + "distances = {}\n", + "all_cities = []\n", + "\n", + "for city in romania_map.locations.keys():\n", + " distances[city] = {}\n", + " all_cities.append(city)\n", + " \n", + "all_cities.sort()\n", + "print(all_cities)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Distances between cities" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Arad': {'Arad': 0.0,\n", + " 'Bucharest': 350.2941620980858,\n", + " 'Craiova': 260.4995201531089,\n", + " 'Drobeta': 206.70026608594387,\n", + " 'Eforie': 511.31399354995165,\n", + " 'Fagaras': 218.27734651126764,\n", + " 'Giurgiu': 360.4719129141687,\n", + " 'Hirsova': 465.20210661603846,\n", + " 'Iasi': 382.25645841502796,\n", + " 'Lugoj': 135.07405376311175,\n", + " 'Mehadia': 171.283390905248,\n", + " 'Neamt': 318.1980515339464,\n", + " 'Oradea': 88.54942122905152,\n", + " 'Pitesti': 260.4169733331528,\n", + " 'Rimnicu': 163.97560794215707,\n", + " 'Sibiu': 121.16517651536682,\n", + " 'Timisoara': 82.05485969764375,\n", + " 'Urziceni': 391.6490776192381,\n", + " 'Vaslui': 420.7469548315234,\n", + " 'Zerind': 42.5440947723653},\n", + " 'Bucharest': {'Arad': 350.2941620980858,\n", + " 'Bucharest': 0.0,\n", + " 'Craiova': 152.0855022676389,\n", + " 'Drobeta': 236.66220653074288,\n", + " 'Eforie': 165.5294535724685,\n", + " 'Fagaras': 154.62535367784935,\n", + " 'Giurgiu': 62.24146527838174,\n", + " 'Hirsova': 135.95955280891445,\n", + " 'Iasi': 193.31321734428818,\n", + " 'Lugoj': 240.68444071023785,\n", + " 'Mehadia': 232.31013753170566,\n", + " 'Neamt': 210.08569680013915,\n", + " 'Oradea': 363.17626574433524,\n", + " 'Pitesti': 89.89438247187641,\n", + " 'Rimnicu': 186.48860555004427,\n", + " 'Sibiu': 232.69937687926884,\n", + " 'Timisoara': 317.0567772497538,\n", + " 'Urziceni': 60.53924347066124,\n", + " 'Vaslui': 159.90622251807463,\n", + " 'Zerind': 356.20218977429096},\n", + " 'Craiova': {'Arad': 260.4995201531089,\n", + " 'Bucharest': 152.0855022676389,\n", + " 'Craiova': 0.0,\n", + " 'Drobeta': 88.68483523128404,\n", + " 'Eforie': 309.04045042680093,\n", + " 'Fagaras': 169.1892431568863,\n", + " 'Giurgiu': 123.32072007574396,\n", + " 'Hirsova': 287.75857936819193,\n", + " 'Iasi': 309.7159989409653,\n", + " 'Lugoj': 126.58988901172162,\n", + " 'Mehadia': 99.12618221237011,\n", + " 'Neamt': 292.2498930709813,\n", + " 'Oradea': 308.1768972522113,\n", + " 'Pitesti': 104.35037134576953,\n", + " 'Rimnicu': 123.62847568420473,\n", + " 'Sibiu': 175.1485084150019,\n", + " 'Timisoara': 200.4120754844877,\n", + " 'Urziceni': 212.25691979297164,\n", + " 'Vaslui': 299.7865907608277,\n", + " 'Zerind': 282.9734969922095},\n", + " 'Drobeta': {'Arad': 206.70026608594387,\n", + " 'Bucharest': 236.66220653074288,\n", + " 'Craiova': 88.68483523128404,\n", + " 'Drobeta': 0.0,\n", + " 'Eforie': 397.04533746160524,\n", + " 'Fagaras': 205.1828452868319,\n", + " 'Giurgiu': 211.9929244102265,\n", + " 'Hirsova': 372.5077180408481,\n", + " 'Iasi': 371.09702235399305,\n", + " 'Lugoj': 80.0,\n", + " 'Mehadia': 40.11234224026316,\n", + " 'Neamt': 338.71079108879894,\n", + " 'Oradea': 274.11676344215067,\n", + " 'Pitesti': 169.66437457521835,\n", + " 'Rimnicu': 130.17296186228538,\n", + " 'Sibiu': 163.48700254148645,\n", + " 'Timisoara': 131.76494222667878,\n", + " 'Urziceni': 295.4352720986443,\n", + " 'Vaslui': 373.3108624189765,\n", + " 'Zerind': 238.89956048515452},\n", + " 'Eforie': {'Arad': 511.31399354995165,\n", + " 'Bucharest': 165.5294535724685,\n", + " 'Craiova': 309.04045042680093,\n", + " 'Drobeta': 397.04533746160524,\n", + " 'Eforie': 0.0,\n", + " 'Fagaras': 300.6409819036653,\n", + " 'Giurgiu': 188.40912929048847,\n", + " 'Hirsova': 63.50590523722971,\n", + " 'Iasi': 230.8462691922917,\n", + " 'Lugoj': 406.20807475972214,\n", + " 'Mehadia': 396.67619036186176,\n", + " 'Neamt': 289.60662975836726,\n", + " 'Oradea': 512.8791280604037,\n", + " 'Pitesti': 253.3554814879678,\n", + " 'Rimnicu': 349.1847648452034,\n", + " 'Sibiu': 391.05114754978024,\n", + " 'Timisoara': 482.4033581972663,\n", + " 'Urziceni': 120.3536455617361,\n", + " 'Vaslui': 160.0312469488381,\n", + " 'Zerind': 512.6012095186667},\n", + " 'Fagaras': {'Arad': 218.27734651126764,\n", + " 'Bucharest': 154.62535367784935,\n", + " 'Craiova': 169.1892431568863,\n", + " 'Drobeta': 205.1828452868319,\n", + " 'Eforie': 300.6409819036653,\n", + " 'Fagaras': 0.0,\n", + " 'Giurgiu': 192.20041623263984,\n", + " 'Hirsova': 249.48346638605133,\n", + " 'Iasi': 177.40631330367023,\n", + " 'Lugoj': 156.52475842498527,\n", + " 'Mehadia': 175.6957597667058,\n", + " 'Neamt': 133.9589489358587,\n", + " 'Oradea': 212.5088233462319,\n", + " 'Pitesti': 82.37718130647589,\n", + " 'Rimnicu': 81.88406438373708,\n", + " 'Sibiu': 98.32598842625484,\n", + " 'Timisoara': 214.57399656062708,\n", + " 'Urziceni': 180.5602392554906,\n", + " 'Vaslui': 204.0612653102004,\n", + " 'Zerind': 213.3846292496252},\n", + " 'Giurgiu': {'Arad': 360.4719129141687,\n", + " 'Bucharest': 62.24146527838174,\n", + " 'Craiova': 123.32072007574396,\n", + " 'Drobeta': 211.9929244102265,\n", + " 'Eforie': 188.40912929048847,\n", + " 'Fagaras': 192.20041623263984,\n", + " 'Giurgiu': 0.0,\n", + " 'Hirsova': 177.99157283422156,\n", + " 'Iasi': 255.53864678361276,\n", + " 'Lugoj': 236.60304309116566,\n", + " 'Mehadia': 218.19715855161817,\n", + " 'Neamt': 268.79360111431225,\n", + " 'Oradea': 387.4751604941922,\n", + " 'Pitesti': 112.37882362794157,\n", + " 'Rimnicu': 199.40912717325654,\n", + " 'Sibiu': 251.38217916153087,\n", + " 'Timisoara': 313.9442625690108,\n", + " 'Urziceni': 113.84638773364749,\n", + " 'Vaslui': 219.61784991206886,\n", + " 'Zerind': 373.37648560132976},\n", + " 'Hirsova': {'Arad': 465.20210661603846,\n", + " 'Bucharest': 135.95955280891445,\n", + " 'Craiova': 287.75857936819193,\n", + " 'Drobeta': 372.5077180408481,\n", + " 'Eforie': 63.50590523722971,\n", + " 'Fagaras': 249.48346638605133,\n", + " 'Giurgiu': 177.99157283422156,\n", + " 'Hirsova': 0.0,\n", + " 'Iasi': 167.5022387910084,\n", + " 'Lugoj': 370.1378121727095,\n", + " 'Mehadia': 366.16526323505894,\n", + " 'Neamt': 226.61200321253946,\n", + " 'Oradea': 459.6194077712559,\n", + " 'Pitesti': 214.75567512873786,\n", + " 'Rimnicu': 306.9218141481638,\n", + " 'Sibiu': 344.06104109590785,\n", + " 'Timisoara': 444.07206622349037,\n", + " 'Urziceni': 78.0,\n", + " 'Vaslui': 97.26767191621273,\n", + " 'Zerind': 462.85742945317406},\n", + " 'Iasi': {'Arad': 382.25645841502796,\n", + " 'Bucharest': 193.31321734428818,\n", + " 'Craiova': 309.7159989409653,\n", + " 'Drobeta': 371.09702235399305,\n", + " 'Eforie': 230.8462691922917,\n", + " 'Fagaras': 177.40631330367023,\n", + " 'Giurgiu': 255.53864678361276,\n", + " 'Hirsova': 167.5022387910084,\n", + " 'Iasi': 0.0,\n", + " 'Lugoj': 333.1561195595843,\n", + " 'Mehadia': 347.7269043372974,\n", + " 'Neamt': 73.824115301167,\n", + " 'Oradea': 348.1221050148927,\n", + " 'Pitesti': 206.0412580043133,\n", + " 'Rimnicu': 258.48791074245617,\n", + " 'Sibiu': 270.4755072090632,\n", + " 'Timisoara': 390.96930825833374,\n", + " 'Urziceni': 156.92354826475216,\n", + " 'Vaslui': 71.69379331573968,\n", + " 'Zerind': 365.8551625985343},\n", + " 'Lugoj': {'Arad': 135.07405376311175,\n", + " 'Bucharest': 240.68444071023785,\n", + " 'Craiova': 126.58988901172162,\n", + " 'Drobeta': 80.0,\n", + " 'Eforie': 406.20807475972214,\n", + " 'Fagaras': 156.52475842498527,\n", + " 'Giurgiu': 236.60304309116566,\n", + " 'Hirsova': 370.1378121727095,\n", + " 'Iasi': 333.1561195595843,\n", + " 'Lugoj': 0.0,\n", + " 'Mehadia': 40.11234224026316,\n", + " 'Neamt': 288.17529387509956,\n", + " 'Oradea': 194.98717906570164,\n", + " 'Pitesti': 155.3898323572041,\n", + " 'Rimnicu': 74.73285756613352,\n", + " 'Sibiu': 88.58893836140041,\n", + " 'Timisoara': 77.47257579298626,\n", + " 'Urziceni': 292.4414471308744,\n", + " 'Vaslui': 350.08713201144656,\n", + " 'Zerind': 162.3360711610331},\n", + " 'Mehadia': {'Arad': 171.283390905248,\n", + " 'Bucharest': 232.31013753170566,\n", + " 'Craiova': 99.12618221237011,\n", + " 'Drobeta': 40.11234224026316,\n", + " 'Eforie': 396.67619036186176,\n", + " 'Fagaras': 175.6957597667058,\n", + " 'Giurgiu': 218.19715855161817,\n", + " 'Hirsova': 366.16526323505894,\n", + " 'Iasi': 347.7269043372974,\n", + " 'Lugoj': 40.11234224026316,\n", + " 'Mehadia': 0.0,\n", + " 'Neamt': 309.5932815808508,\n", + " 'Oradea': 234.93190502781866,\n", + " 'Pitesti': 154.74172029546526,\n", + " 'Rimnicu': 96.26006440887103,\n", + " 'Sibiu': 124.27791436936813,\n", + " 'Timisoara': 102.55242561733974,\n", + " 'Urziceni': 288.20999288713085,\n", + " 'Vaslui': 356.79966367697153,\n", + " 'Zerind': 201.15665537088253},\n", + " 'Neamt': {'Arad': 318.1980515339464,\n", + " 'Bucharest': 210.08569680013915,\n", + " 'Craiova': 292.2498930709813,\n", + " 'Drobeta': 338.71079108879894,\n", + " 'Eforie': 289.60662975836726,\n", + " 'Fagaras': 133.9589489358587,\n", + " 'Giurgiu': 268.79360111431225,\n", + " 'Hirsova': 226.61200321253946,\n", + " 'Iasi': 73.824115301167,\n", + " 'Lugoj': 288.17529387509956,\n", + " 'Mehadia': 309.5932815808508,\n", + " 'Neamt': 0.0,\n", + " 'Oradea': 277.09384691833196,\n", + " 'Pitesti': 189.62331080328704,\n", + " 'Rimnicu': 214.61127649776466,\n", + " 'Sibiu': 214.478437144623,\n", + " 'Timisoara': 336.857536653108,\n", + " 'Urziceni': 193.56910910576616,\n", + " 'Vaslui': 138.77319625922004,\n", + " 'Zerind': 298.0603965641863},\n", + " 'Oradea': {'Arad': 88.54942122905152,\n", + " 'Bucharest': 363.17626574433524,\n", + " 'Craiova': 308.1768972522113,\n", + " 'Drobeta': 274.11676344215067,\n", + " 'Eforie': 512.8791280604037,\n", + " 'Fagaras': 212.5088233462319,\n", + " 'Giurgiu': 387.4751604941922,\n", + " 'Hirsova': 459.6194077712559,\n", + " 'Iasi': 348.1221050148927,\n", + " 'Lugoj': 194.98717906570164,\n", + " 'Mehadia': 234.93190502781866,\n", + " 'Neamt': 277.09384691833196,\n", + " 'Oradea': 0.0,\n", + " 'Pitesti': 277.3625785862253,\n", + " 'Rimnicu': 190.59118552545917,\n", + " 'Sibiu': 137.0109484676316,\n", + " 'Timisoara': 165.19685227025363,\n", + " 'Urziceni': 393.02162790360535,\n", + " 'Vaslui': 398.7643414348881,\n", + " 'Zerind': 46.14108798023731},\n", + " 'Pitesti': {'Arad': 260.4169733331528,\n", + " 'Bucharest': 89.89438247187641,\n", + " 'Craiova': 104.35037134576953,\n", + " 'Drobeta': 169.66437457521835,\n", + " 'Eforie': 253.3554814879678,\n", + " 'Fagaras': 82.37718130647589,\n", + " 'Giurgiu': 112.37882362794157,\n", + " 'Hirsova': 214.75567512873786,\n", + " 'Iasi': 206.0412580043133,\n", + " 'Lugoj': 155.3898323572041,\n", + " 'Mehadia': 154.74172029546526,\n", + " 'Neamt': 189.62331080328704,\n", + " 'Oradea': 277.3625785862253,\n", + " 'Pitesti': 0.0,\n", + " 'Rimnicu': 96.60745312862771,\n", + " 'Sibiu': 143.8401890988746,\n", + " 'Timisoara': 229.8695282111137,\n", + " 'Urziceni': 137.18600511714013,\n", + " 'Vaslui': 203.70812453115363,\n", + " 'Zerind': 267.41914665932205},\n", + " 'Rimnicu': {'Arad': 163.97560794215707,\n", + " 'Bucharest': 186.48860555004427,\n", + " 'Craiova': 123.62847568420473,\n", + " 'Drobeta': 130.17296186228538,\n", + " 'Eforie': 349.1847648452034,\n", + " 'Fagaras': 81.88406438373708,\n", + " 'Giurgiu': 199.40912717325654,\n", + " 'Hirsova': 306.9218141481638,\n", + " 'Iasi': 258.48791074245617,\n", + " 'Lugoj': 74.73285756613352,\n", + " 'Mehadia': 96.26006440887103,\n", + " 'Neamt': 214.61127649776466,\n", + " 'Oradea': 190.59118552545917,\n", + " 'Pitesti': 96.60745312862771,\n", + " 'Rimnicu': 0.0,\n", + " 'Sibiu': 53.71219600798314,\n", + " 'Timisoara': 139.0,\n", + " 'Urziceni': 230.93072554339753,\n", + " 'Vaslui': 278.08631753468205,\n", + " 'Zerind': 173.97126199461795},\n", + " 'Sibiu': {'Arad': 121.16517651536682,\n", + " 'Bucharest': 232.69937687926884,\n", + " 'Craiova': 175.1485084150019,\n", + " 'Drobeta': 163.48700254148645,\n", + " 'Eforie': 391.05114754978024,\n", + " 'Fagaras': 98.32598842625484,\n", + " 'Giurgiu': 251.38217916153087,\n", + " 'Hirsova': 344.06104109590785,\n", + " 'Iasi': 270.4755072090632,\n", + " 'Lugoj': 88.58893836140041,\n", + " 'Mehadia': 124.27791436936813,\n", + " 'Neamt': 214.478437144623,\n", + " 'Oradea': 137.0109484676316,\n", + " 'Pitesti': 143.8401890988746,\n", + " 'Rimnicu': 53.71219600798314,\n", + " 'Sibiu': 0.0,\n", + " 'Timisoara': 122.38463955905577,\n", + " 'Urziceni': 271.01660465735307,\n", + " 'Vaslui': 302.2796718272666,\n", + " 'Zerind': 123.60016181219181},\n", + " 'Timisoara': {'Arad': 82.05485969764375,\n", + " 'Bucharest': 317.0567772497538,\n", + " 'Craiova': 200.4120754844877,\n", + " 'Drobeta': 131.76494222667878,\n", + " 'Eforie': 482.4033581972663,\n", + " 'Fagaras': 214.57399656062708,\n", + " 'Giurgiu': 313.9442625690108,\n", + " 'Hirsova': 444.07206622349037,\n", + " 'Iasi': 390.96930825833374,\n", + " 'Lugoj': 77.47257579298626,\n", + " 'Mehadia': 102.55242561733974,\n", + " 'Neamt': 336.857536653108,\n", + " 'Oradea': 165.19685227025363,\n", + " 'Pitesti': 229.8695282111137,\n", + " 'Rimnicu': 139.0,\n", + " 'Sibiu': 122.38463955905577,\n", + " 'Timisoara': 0.0,\n", + " 'Urziceni': 366.9386869764484,\n", + " 'Vaslui': 416.39044177310313,\n", + " 'Zerind': 121.80722474467596},\n", + " 'Urziceni': {'Arad': 391.6490776192381,\n", + " 'Bucharest': 60.53924347066124,\n", + " 'Craiova': 212.25691979297164,\n", + " 'Drobeta': 295.4352720986443,\n", + " 'Eforie': 120.3536455617361,\n", + " 'Fagaras': 180.5602392554906,\n", + " 'Giurgiu': 113.84638773364749,\n", + " 'Hirsova': 78.0,\n", + " 'Iasi': 156.92354826475216,\n", + " 'Lugoj': 292.4414471308744,\n", + " 'Mehadia': 288.20999288713085,\n", + " 'Neamt': 193.56910910576616,\n", + " 'Oradea': 393.02162790360535,\n", + " 'Pitesti': 137.18600511714013,\n", + " 'Rimnicu': 230.93072554339753,\n", + " 'Sibiu': 271.01660465735307,\n", + " 'Timisoara': 366.9386869764484,\n", + " 'Urziceni': 0.0,\n", + " 'Vaslui': 107.91200118615167,\n", + " 'Zerind': 392.2562937672256},\n", + " 'Vaslui': {'Arad': 420.7469548315234,\n", + " 'Bucharest': 159.90622251807463,\n", + " 'Craiova': 299.7865907608277,\n", + " 'Drobeta': 373.3108624189765,\n", + " 'Eforie': 160.0312469488381,\n", + " 'Fagaras': 204.0612653102004,\n", + " 'Giurgiu': 219.61784991206886,\n", + " 'Hirsova': 97.26767191621273,\n", + " 'Iasi': 71.69379331573968,\n", + " 'Lugoj': 350.08713201144656,\n", + " 'Mehadia': 356.79966367697153,\n", + " 'Neamt': 138.77319625922004,\n", + " 'Oradea': 398.7643414348881,\n", + " 'Pitesti': 203.70812453115363,\n", + " 'Rimnicu': 278.08631753468205,\n", + " 'Sibiu': 302.2796718272666,\n", + " 'Timisoara': 416.39044177310313,\n", + " 'Urziceni': 107.91200118615167,\n", + " 'Vaslui': 0.0,\n", + " 'Zerind': 410.3291361821629},\n", + " 'Zerind': {'Arad': 42.5440947723653,\n", + " 'Bucharest': 356.20218977429096,\n", + " 'Craiova': 282.9734969922095,\n", + " 'Drobeta': 238.89956048515452,\n", + " 'Eforie': 512.6012095186667,\n", + " 'Fagaras': 213.3846292496252,\n", + " 'Giurgiu': 373.37648560132976,\n", + " 'Hirsova': 462.85742945317406,\n", + " 'Iasi': 365.8551625985343,\n", + " 'Lugoj': 162.3360711610331,\n", + " 'Mehadia': 201.15665537088253,\n", + " 'Neamt': 298.0603965641863,\n", + " 'Oradea': 46.14108798023731,\n", + " 'Pitesti': 267.41914665932205,\n", + " 'Rimnicu': 173.97126199461795,\n", + " 'Sibiu': 123.60016181219181,\n", + " 'Timisoara': 121.80722474467596,\n", + " 'Urziceni': 392.2562937672256,\n", + " 'Vaslui': 410.3291361821629,\n", + " 'Zerind': 0.0}}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "for name_1, coordinates_1 in romania_map.locations.items():\n", + " for name_2, coordinates_2 in romania_map.locations.items():\n", + " distances[name_1][name_2] = np.linalg.norm(\n", + " [coordinates_1[0] - coordinates_2[0], coordinates_1[1] - coordinates_2[1]])\n", + " distances[name_2][name_1] = np.linalg.norm(\n", + " [coordinates_1[0] - coordinates_2[0], coordinates_1[1] - coordinates_2[1]])\n", + "\n", + "distances" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "class TSP_problem(Problem):\n", + "\n", + " \"\"\" subclass of Problem to define various functions \n", + "\n", + " The state is a list of cities\n", + " Its action is to choose two random indices, and to reverse the city list within those\n", + " random indices. The cost function is the total distance between all cities following this path, \n", + " and looping back to the start. The value is the negative of the length, so maximizing\n", + " the value minimizes the distance.\n", + "\n", + " You'll notice that we can't expand a search frontier here, so we have to change the hill-climbing\n", + " algorithm a bit.\n", + " \"\"\"\n", + " \n", + "\n", + " def two_opt(self, state):\n", + " \"\"\" Neighbour generating function for Traveling Salesman Problem \"\"\"\n", + " neighbour_state = state[:]\n", + " left = random.randint(0, len(neighbour_state) - 1)\n", + " right = random.randint(0, len(neighbour_state) - 1)\n", + " if left > right:\n", + " left, right = right, left\n", + " neighbour_state[left: right + 1] = reversed(neighbour_state[left: right + 1])\n", + " return neighbour_state\n", + "\n", + " def actions(self, state):\n", + " \"\"\" action that can be excuted in given state \"\"\"\n", + " return [self.two_opt]\n", + "\n", + " def result(self, state, action):\n", + " \"\"\" result after applying the given action on the given state \"\"\"\n", + " return action(state)\n", + "\n", + " def path_cost(self, c = None, state1 = None, action = None, state2 = None):\n", + " \"\"\" total distance for the Traveling Salesman to be covered if in state2 \"\"\"\n", + " cost = 0\n", + " for i in range(len(state2) - 1):\n", + " cost += distances[state2[i]][state2[i + 1]]\n", + " # Complete the loop\n", + " cost += distances[state2[0]][state2[-1]]\n", + " return cost\n", + "\n", + " def value(self, state):\n", + " \"\"\" value of path cost given negative for the given state \"\"\"\n", + " return -1 * self.path_cost(state2 = state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Adjusted hill-climbing logic to evaluate different permutations of our city list" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def hill_climbing(problem, num_neighbors = 100):\n", + " \n", + " \"\"\"From the initial node, keep choosing the neighbor with highest value,\n", + " stopping when no neighbor is better. [Figure 4.2]\"\"\"\n", + " \n", + " def find_neighbors(state, number_of_neighbors=num_neighbors):\n", + " \"\"\" finds neighbors using two_opt method \"\"\"\n", + " \n", + " neighbors = []\n", + " \n", + " for i in range(number_of_neighbors):\n", + " new_state = problem.two_opt(state)\n", + " neighbors.append(Node(new_state))\n", + " state = new_state\n", + " \n", + " return neighbors\n", + "\n", + "\n", + " # as this is a stochastic algorithm, we will set a cap on the number of iterations\n", + " iterations = 10000\n", + " \n", + " current = Node(problem.initial)\n", + " while iterations:\n", + " neighbors = find_neighbors(current.state)\n", + " if not neighbors:\n", + " break\n", + " neighbor = argmax_random_tie(neighbors,\n", + " key=lambda node: problem.value(node.state))\n", + " # The book's code had the wrong inequality -- they forgot they stated the\n", + " # problem as a maximization problem\n", + " if problem.value(neighbor.state) >= problem.value(current.state):\n", + " current.state = neighbor.state\n", + " iterations -= 1\n", + " \n", + " return current.state" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Climbing the hill\n", + "\n", + "The algorithm is stochastic, and you'll see that running this does not compare to the book's solution!" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "tsp = TSP_problem(all_cities)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Craiova',\n", + " 'Pitesti',\n", + " 'Giurgiu',\n", + " 'Bucharest',\n", + " 'Urziceni',\n", + " 'Eforie',\n", + " 'Hirsova',\n", + " 'Vaslui',\n", + " 'Iasi',\n", + " 'Neamt',\n", + " 'Fagaras',\n", + " 'Rimnicu',\n", + " 'Sibiu',\n", + " 'Oradea',\n", + " 'Zerind',\n", + " 'Arad',\n", + " 'Timisoara',\n", + " 'Lugoj',\n", + " 'Mehadia',\n", + " 'Drobeta']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hill_climbing(tsp)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![\"Book's hill\"](images/hillclimb-tsp.png)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Hill climbing isn't gradient descent\n", + "\n", + "Gradient descent can move the the direction of maximum change, but hill climbing only changes one element in a vector at a time. Therefore, **ridges** can pose a problem because the method has to zig-zag to move along a ridge.\n", + "\n", + "Another problem for hill climbing is **plateaus**. If there isn't a clear direction of change, the method can wander about.\n", + "\n", + "And, as we already noted, the hill climbing algorithm will get stuck in the first optimum value that it finds, even if it's a local optimum. \n", + "\n", + "You can imagine that there are little corrections we could make to the algorithm that would address some of these problems, and the book enumerates a few." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Peak-finding and hill-climbing" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
class PeakFindingProblem(Problem):\n",
+       "    """Problem of finding the highest peak in a limited grid"""\n",
+       "\n",
+       "    def __init__(self, initial, grid, defined_actions=directions4):\n",
+       "        """The grid is a 2 dimensional array/list whose state is specified by tuple of indices"""\n",
+       "        super().__init__(initial)\n",
+       "        self.grid = grid\n",
+       "        self.defined_actions = defined_actions\n",
+       "        self.n = len(grid)\n",
+       "        assert self.n > 0\n",
+       "        self.m = len(grid[0])\n",
+       "        assert self.m > 0\n",
+       "\n",
+       "    def actions(self, state):\n",
+       "        """Returns the list of actions which are allowed to be taken from the given state"""\n",
+       "        allowed_actions = []\n",
+       "        for action in self.defined_actions:\n",
+       "            next_state = vector_add(state, self.defined_actions[action])\n",
+       "            if 0 <= next_state[0] <= self.n - 1 and 0 <= next_state[1] <= self.m - 1:\n",
+       "                allowed_actions.append(action)\n",
+       "\n",
+       "        return allowed_actions\n",
+       "\n",
+       "    def result(self, state, action):\n",
+       "        """Moves in the direction specified by action"""\n",
+       "        return vector_add(state, self.defined_actions[action])\n",
+       "\n",
+       "    def value(self, state):\n",
+       "        """Value of a state is the value it is the index to"""\n",
+       "        x, y = state\n",
+       "        assert 0 <= x < self.n\n",
+       "        assert 0 <= y < self.m\n",
+       "        return self.grid[x][y]\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(PeakFindingProblem)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a 3-D grid that is accessed by choosing 0, 1, or 2 for which sub-array, and then 0, 1, 2, or 3 for which position. The maximum array value is 9, the minimum is 1." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "initial = (0, 0)\n", + "grid = [[3, 7, 2, 8], [5, 2, 9, 1], [5, 3, 3, 1]]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grid[0][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grid[1][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grid[2][0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Let's define hill-climbing for the peak problem\n", + "\n", + "We'll show that we very quickly get stuck in a local min - and we can see that we should make our code smarter to not keep trying the same thing over and over" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def hill_climbing(problem):\n", + " \n", + " \"\"\"From the initial node, keep choosing the neighbor with highest value,\n", + " stopping when no neighbor is better. [Figure 4.2]\"\"\"\n", + " \n", + " def find_neighbors(state):\n", + " \"\"\" finds neighbors using two_opt method \"\"\"\n", + " \n", + " neighbors = []\n", + " for action in problem.actions(state):\n", + " neighbors.append(Node(problem.result(state, action)))\n", + " print(\"NEIGHBORS\", [n.state for n in neighbors])\n", + " return neighbors\n", + "\n", + "\n", + " # as this is a stochastic algorithm, we will set a cap on the number of iterations\n", + " iterations = 10\n", + " \n", + " current = Node(problem.initial)\n", + " print(\"GRID\", grid)\n", + " print(current.state)\n", + " while iterations:\n", + " neighbors = find_neighbors(current.state)\n", + " if not neighbors:\n", + " break\n", + " neighbor = argmax_random_tie(neighbors,\n", + " key=lambda node: problem.value(node.state))\n", + " # problem as a maximization problem\n", + " if problem.value(neighbor.state) >= problem.value(current.state):\n", + " current.state = neighbor.state\n", + " print(\"IMPROVED\", neighbor.state)\n", + " iterations -= 1\n", + " \n", + " return current.state" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "problem = PeakFindingProblem(initial, grid, directions4)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "GRID [[3, 7, 2, 8], [5, 2, 9, 1], [5, 3, 3, 1]]\n", + "(0, 0)\n", + "NEIGHBORS [(0, 1), (1, 0)]\n", + "IMPROVED (0, 1)\n", + "NEIGHBORS [(0, 2), (1, 1), (0, 0)]\n", + "NEIGHBORS [(0, 2), (1, 1), (0, 0)]\n", + "NEIGHBORS [(0, 2), (1, 1), (0, 0)]\n", + "NEIGHBORS [(0, 2), (1, 1), (0, 0)]\n", + "NEIGHBORS [(0, 2), (1, 1), (0, 0)]\n", + "NEIGHBORS [(0, 2), (1, 1), (0, 0)]\n", + "NEIGHBORS [(0, 2), (1, 1), (0, 0)]\n", + "NEIGHBORS [(0, 2), (1, 1), (0, 0)]\n", + "NEIGHBORS [(0, 2), (1, 1), (0, 0)]\n" + ] + }, + { + "data": { + "text/plain": [ + "(0, 1)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hill_climbing(problem)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simulated Annealing\n", + "\n", + "Here's a nice [YouTube explanation and video](https://www.youtube.com/watch?v=iaq_Fpr4KZc):\n", + "\"This video shows a run of simulated annealing optimization algorithm. The simulated annealing algorithm produces a sequence of points on the objective function surface. At the beginning, the points tend to jump around at relatively large distances, corresponding to high temperature. Later on, the point cools down, takes smaller jumps, and settles down at the minimum. The color of the point gives some indication of the temperature.\n", + "\n", + "The data for this simulation was obtained from a program written by Roman Gassmann, the visualization and the conversion into a movie was done by Andreas Müller.\"\n", + "\n", + "Note that their simulated annealing implementation only returns one node at a time.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def simulated_annealing(problem, schedule=exp_schedule()):\n",
+       "    """[Figure 4.5] CAUTION: This differs from the pseudocode as it\n",
+       "    returns a state instead of a Node."""\n",
+       "    current = Node(problem.initial)\n",
+       "    for t in range(sys.maxsize):\n",
+       "        T = schedule(t)\n",
+       "        if T == 0:\n",
+       "            return current.state\n",
+       "        neighbors = current.expand(problem)\n",
+       "        if not neighbors:\n",
+       "            return current.state\n",
+       "        next_choice = random.choice(neighbors)\n",
+       "        delta_e = problem.value(next_choice.state) - problem.value(current.state)\n",
+       "        if delta_e > 0 or probability(np.exp(delta_e / T)):\n",
+       "            current = next_choice\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(simulated_annealing)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def exp_schedule(k=20, lam=0.005, limit=100):\n",
+       "    """One possible schedule function for simulated annealing"""\n",
+       "    return lambda t: (k * np.exp(-lam * t) if t < limit else 0)\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(exp_schedule)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1, 2)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulated_annealing(problem)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(0, 3)\n", + "(1, 2)\n", + "(1, 2)\n", + "(2, 1)\n", + "(2, 0)\n", + "(1, 2)\n", + "(0, 1)\n", + "(0, 3)\n", + "(2, 2)\n", + "(0, 1)\n", + "(1, 3)\n", + "(2, 2)\n", + "(1, 2)\n", + "(2, 1)\n", + "(1, 2)\n", + "(0, 3)\n", + "(2, 0)\n", + "(1, 1)\n", + "(1, 2)\n", + "(2, 2)\n" + ] + } + ], + "source": [ + "for i in range(20):\n", + " print(simulated_annealing(problem))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 2, 3, 5, 7, 8, 9}" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "solutions = {problem.value(simulated_annealing(problem)) for i in range(100)}\n", + "solutions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Beam searches hold onto more than one result at a time\n", + "\n", + "Can you imagine how simulated annealing could settle down more quickly if we didn't lose information every time we moved?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Evolutionary Algorithms\n", + "\n", + "## Genetic Algorithms\n", + "\n", + "Simplified example from my past research: suppose I want to know which days offer the greatest benefit for treating a disease and a limited budget for treatment? I could have a list of days and put a 1 if I'm treating and a 0 if I'm not. I could create a value function that looks something like\n", + "$$\n", + "J(\\texttt{plan}) = \\texttt{disease morbidity} + \\texttt{disease cost}\n", + "$$\n", + "that I want to minimize. Note that the logic for $J$ may be based on a model or past data or whatever. We're not showing that here. Then I could just make up a bunch of answers to form a population of plans (I'll pretend there are only 7 days because I'm lazy).\n", + "$$\n", + "\\texttt{Population} = \\{ (1, 0, 0, 1, 0, 0, 1), (0, 0, 0, 1, 1, 1, 0), (0, 1, 0, 0, 0, 0, 0), ...\\}\n", + "$$\n", + "You can imagine that as the number of days I can treat grows, I couldn't possibly list all combinations, so we just list some of these.\n", + "\n", + "* **Selection** Select pairs from your original population to combine for a new population.\n", + "* **Crossover** is one way to combine; another is position-by-position. Position-by-position can be interested for non-binary vector values -- do you want to average, take on or the other, or a combination? \n", + "![Uniform Crossover](images/uniform_crossover.png)\n", + "* **Mutation rate**\n", + "* **Elitism** just clones the great parents, and **Culling** makes sure we don't allow any undesirable parents reproduce. \n", + "* **Immigration** can randomly add new vectors to the population.\n", + "\n", + "## Particle Swarm Optimization\n", + "\n", + "Is an interesting extension of this structure in which clusters of these little vector populations share information as well as global sharing, and each vector mutates in the direction of a better-performing neighbor.\n", + "\n", + "[Here's a little explanation and graphic](https://pymoo.org/algorithms/soo/pso.html)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Nondeterministic Actions\n", + "\n", + "What if you're not sure what your action will accomplish?\n", + "\n", + "Remember, the **transition model** is the model of what is going to happen as a result of each action. In most real-life applications, we aren't confident of the outcome of our actions, and the transition model typically is a list of possible outcomes weighted by the likelihood of those outcomes.\n", + "\n", + "## Erratic Outcomes\n", + "\n", + "For a search tree, the tree branches in an **and** node because the result of an action takes you down this path and that path.\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the text resources:\n", + "\n", + "The search is carried out by two functions `and_search` and `or_search` that recursively call each other, traversing nodes sequentially.\n", + "It is a recursive depth-first algorithm for searching an _AND-OR_ graph.\n", + "
\n", + "A very similar algorithm `fol_bc_ask` can be found in the `logic` module, which carries out inference on first-order logic knowledge bases using _AND-OR_ graph-derived data-structures.\n", + "
\n", + "_AND-OR_ trees can also be used to represent the search spaces for two-player games, where a vertex of the tree represents the problem of one of the players winning the game, starting from the initial state of the game.\n", + "
\n", + "Problems involving _MIN-MAX_ trees can be reformulated as _AND-OR_ trees by representing _MAX_ nodes as _OR_ nodes and _MIN_ nodes as _AND_ nodes.\n", + "`and_or_graph_search` can then be used to find the optimal solution.\n", + "Standard algorithms like `minimax` and `expectiminimax` (for belief states) can also be applied on it with a few modifications." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Slippery Outcomes\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise\n", + "\n", + "Explain precisely how to modify the AND-OR-GRAPH-SEARCH algorithm to generate a\n", + "cyclic plan if no acyclic plan exists. You will need to deal with three issues: labeling the plan\n", + "steps so that a cyclic plan can point back to an earlier part of the plan, modifying OR-SEARCH\n", + "so that it continues to look for acyclic plans after finding a cyclic plan, and augmenting the\n", + "plan representation to indicate whether a plan is cyclic. Show how your algorithm works on\n", + "(a) the slippery vacuum world, and (b) the slippery, erratic vacuum world. You might wish to\n", + "use a computer implementation to check your results.\n", + "\n", + "\n", + "\n", + "function AND-OR-GRAPH-SEARCH(problem) returns a conditional plan; or failure\n", + "OR-SEARCH(problem.INITIAL-STATE, problem, [ ])\n", + "\n", + "function OR-SEARCH(state, problem, path) returns a conditional plan; or failure\n", + "\n", + "\n", + "> if problem.GOAL-TEST(state) then return the empty plan \n", + "> if state has previously been solved then return RECALL-SUCCESS(state) \n", + "> if state has previously failed for a subset of path then return failure \n", + "> if state is on path then \n", + ">> RECORD-FAILURE(state, path) \n", + ">> return failure \n", + "> for each action in problem.ACTIONS(state) do \n", + ">> plan = AND-SEARCH(RESULTS(state, action), problem, [state j path]) \n", + ">> if plan 6= failure then \n", + ">>> RECORD-SUCCESS(state, [action j plan])\n", + "return [action j plan]\n", + "return failure\n", + "function AND-SEARCH(states, problem, path) returns a conditional plan; or failure\n", + "for each si in states do\n", + "plani OR-SEARCH(si, problem, path)\n", + "if plani = failure then return failure\n", + "return [if s1 then plan1 else if s2 then plan2 else : : : if sn􀀀1 then plann􀀀1 else plann]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Partially Observable Environments\n", + "\n", + "* **States** -- The \"belief-state space\" is every possible state configuration\n", + "* **Initial state** -- What does the agent know about the environment to start with? It may be that it knows all of the states, or perhaps this is a subset of all of the states.\n", + "* **Actions** -- Not all actions are accessible from each item in the state. So there's a choice here:\n", + " * The actions here can be the *union* of the actions from each item in the current state, even though some of those actions won't be legal. \n", + " * If taking an illegal action is catastrophic, the list of actions can be the *intersection* of the possible actions from each item in the state.\n", + "* **Transition Model** -- Remember, the agent has a list of possible states that may be its initial state. So what happens when it choose one possible action and takes that action? It's the union of the result of that action when applied to each state in its belief state.\n", + "* **Goal Test** -- test each state resulting from the transition model. Do any of them achieve the goal?\n", + " * If so then it's possible that the goal has been met.\n", + " * But you're only certain if the goal has been met regardless of the state suggested by the transition model.\n", + "* **Action cost** -- the same action may have a different cost based on the actual state so the actual cost will be hard to determine.\n", + "\n", + "![Example](images/fig14-1.png)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Imagine a slight change to the above picture. How would the graphic change if the vacuum could see its local environment?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Offline and Online Searching\n", + "\n", + "* **Offline** calculate the entire solution and press the start button\n", + "* **Online** Calculate an action, perform action, perceive, calculate, perform, perceive, ...\n", + "\n", + "Of course, if the agent doesn't know what might happen as a result of its actions, it could make a bad mistake and end up in a dead-end.\n", + "\n", + "## Online local search\n", + "\n", + "Try hill-climbing with a memory -- Below each dot is a guess at the cost for reaching a goal. And at each move, it's discovering where the guesses could not have been right and it's correcting the goals. In this way, moving back and forth, it's finally able to escape. The book calls this **optimism under uncertainty**.\n", + "\n", + "![LRTA*](images/lrtastart.png)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "1ec332c3762279bf04c318127bba8846de175531a02d6981c60e86e990426d1b" + }, + "kernelspec": { + "display_name": "Python 3.9.6 ('aibc')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/vacuum_search.elsa.ipynb b/vacuum_search.elsa.ipynb new file mode 100644 index 000000000..7e3327c7d --- /dev/null +++ b/vacuum_search.elsa.ipynb @@ -0,0 +1,119 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Problems and Nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "import random\n", + "import heapq\n", + "import math\n", + "import sys\n", + "from collections import defaultdict, deque, Counter\n", + "from itertools import combinations\n", + "\n", + "\n", + "class Problem(object):\n", + " \"\"\"The abstract class for a formal problem. A new domain subclasses this,\n", + " overriding `actions` and `results`, and perhaps other methods.\n", + " The default heuristic is 0 and the default action cost is 1 for all states.\n", + " When you create an instance of a subclass, specify `initial`, and `goal` states \n", + " (or give an `is_goal` method) and perhaps other keyword args for the subclass.\"\"\"\n", + "\n", + " def __init__(self, initial=None, goal=None, **kwds): \n", + " self.__dict__.update(initial=initial, goal=goal, **kwds) \n", + " \n", + " def actions(self, state): raise NotImplementedError\n", + " def result(self, state, action): raise NotImplementedError\n", + " def is_goal(self, state): return state == self.goal\n", + " def action_cost(self, s, a, s1): return 1\n", + " def h(self, node): return 0\n", + " \n", + " def __str__(self):\n", + " return '{}({!r}, {!r})'.format(\n", + " type(self).__name__, self.initial, self.goal)\n", + " \n", + "\n", + "class Node:\n", + " \"A Node in a search tree.\"\n", + " def __init__(self, state, parent=None, action=None, path_cost=0):\n", + " self.__dict__.update(state=state, parent=parent, action=action, path_cost=path_cost)\n", + "\n", + " def __repr__(self): return '<{}>'.format(self.state)\n", + " def __len__(self): return 0 if self.parent is None else (1 + len(self.parent))\n", + " def __lt__(self, other): return self.path_cost < other.path_cost\n", + " \n", + " \n", + "failure = Node('failure', path_cost=math.inf) # Indicates an algorithm couldn't find a solution.\n", + "cutoff = Node('cutoff', path_cost=math.inf) # Indicates iterative deepening search was cut off.\n", + " \n", + " \n", + "def expand(problem, node):\n", + " \"Expand a node, generating the children nodes.\"\n", + " s = node.state\n", + " for action in problem.actions(s):\n", + " s1 = problem.result(s, action)\n", + " cost = node.path_cost + problem.action_cost(s, action, s1)\n", + " yield Node(s1, node, action, cost)\n", + " \n", + "\n", + "def path_actions(node):\n", + " \"The sequence of actions to get to this node.\"\n", + " if node.parent is None:\n", + " return [] \n", + " return path_actions(node.parent) + [node.action]\n", + "\n", + "\n", + "def path_states(node):\n", + " \"The sequence of states to get to this node.\"\n", + " if node in (cutoff, failure, None): \n", + " return []\n", + " return path_states(node.parent) + [node.state]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "1ec332c3762279bf04c318127bba8846de175531a02d6981c60e86e990426d1b" + }, + "kernelspec": { + "display_name": "Python 3.9.6 ('aibc')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +}