2
\$\begingroup\$

The code below is a "World" class method that initializes a Q-Table for use in the SARSA and Q-Learning algorithms.

Without going into too much detail, the world has "Pickups" and "Dropoffs" that can become invalid after they are emptied/filled. Termination is achieved once all pickups are emptied and all dropoffs filled. The state space I designed is essentially (y, x, z, i_0...i_n) where

  • (y, x) are node coordinates
  • z is whether the agent is carrying a block
  • i is context depended on z. It will represent the number pickups or dropoffs depending on whether the agent is carrying or not. It was built this way to allow for any number or combination of pickups and dropoffs, and to allow the learning algorithms to know a pickup or location is no longer attractive after it's invalid.

Main Concerns:

  1. Whether there is a better way to organize the data then a dictionary of dictionaries of dictionaries. This was chosen because of the very fast lookup time of hashmaps.
  2. Whether there is a way to create the state space without having to do any deep copies. Here, I have to do a copy to get the actions dictionary. sub_dict[key] = actions.copy()
  3. Are there any ways to reduce my state space in order to have fewer total states? The goal is for flexibility with the number of pickup and dropoff points.

Code Overview:

I have a Q-Table initialization method which is called from inside my get_q_node_table() method if the table hasn't been initialized.

def _initialize_table(self):
    def add_dict(sub_dict: dict, length: int, actions: dict) -> dict:
        if length == 0:
            for key in sub_dict:
                sub_dict[key] = actions.copy()
            return sub_dict
        for key in sub_dict:
            sub_dict[key] = {True: {}, False: {}}
            add_dict(sub_dict[key], length-1, actions)

    self.qtable = {}
    for node in self.nodes:
        node_actions = self.nodes[node].get_actions()
        actions = {}
        for action in node_actions:
            # We don't want q-values for the pickup and dropoff actions, as those are always taken.
            # We only want q values for cardinal directions.
            if action not in ["Pickup", "Dropoff"]:
                actions[action] = INITIAL_Q_VALUE
        dropoff = {True: {}, False: {}}
        add_dict(dropoff, len(self.dropoffs)-1, actions)

        pickup = {True: {}, False: {}}
        add_dict(pickup, len(self.pickups)-1, actions)

        self.qtable[node] = {True: dropoff, False: pickup}

For this code self.nodes is a dictionary of Node classes, where the keys are coordinates.

self.node[node] provides a Node object.

get_actions() returns a dictionary of valid actions that can be taken from that node. The keys are string actions, and the values are coordinates to the neighbor node.

self.qtable is empty {} prior to being built in this method.

I don't know if it helps at all, but here is the output once the Q-Table has been fully initialized.

{(1, 1): {False: {False: {False: {False: {'Down': 0, 'Right': 0},
                                  True: {'Down': 0, 'Right': 0}},
                          True: {False: {'Down': 0, 'Right': 0},
                                 True: {'Down': 0, 'Right': 0}}},
                  True: {False: {False: {'Down': 0, 'Right': 0},
                                 True: {'Down': 0, 'Right': 0}},
                         True: {False: {'Down': 0, 'Right': 0},
                                True: {'Down': 0, 'Right': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Right': 0},
                                 True: {'Down': 0, 'Right': 0}},
                         True: {False: {'Down': 0, 'Right': 0},
                                True: {'Down': 0, 'Right': 0}}},
                 True: {False: {False: {'Down': 0, 'Right': 0},
                                True: {'Down': 0, 'Right': 0}},
                        True: {False: {'Down': 0, 'Right': 0},
                               True: {'Down': 0, 'Right': 0}}}}},
 (1, 2): {False: {False: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                  True: {'Down': 0, 'Left': 0, 'Right': 0}},
                          True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                 True: {'Down': 0, 'Left': 0, 'Right': 0}}},
                  True: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                 True: {'Down': 0, 'Left': 0, 'Right': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                True: {'Down': 0, 'Left': 0, 'Right': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                 True: {'Down': 0, 'Left': 0, 'Right': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                True: {'Down': 0, 'Left': 0, 'Right': 0}}},
                 True: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                True: {'Down': 0, 'Left': 0, 'Right': 0}},
                        True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                               True: {'Down': 0, 'Left': 0, 'Right': 0}}}}},
 (1, 3): {False: {False: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                  True: {'Down': 0, 'Left': 0, 'Right': 0}},
                          True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                 True: {'Down': 0, 'Left': 0, 'Right': 0}}},
                  True: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                 True: {'Down': 0, 'Left': 0, 'Right': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                True: {'Down': 0, 'Left': 0, 'Right': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                 True: {'Down': 0, 'Left': 0, 'Right': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                True: {'Down': 0, 'Left': 0, 'Right': 0}}},
                 True: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                True: {'Down': 0, 'Left': 0, 'Right': 0}},
                        True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                               True: {'Down': 0, 'Left': 0, 'Right': 0}}}}},
 (1, 4): {False: {False: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                  True: {'Down': 0, 'Left': 0, 'Right': 0}},
                          True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                 True: {'Down': 0, 'Left': 0, 'Right': 0}}},
                  True: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                 True: {'Down': 0, 'Left': 0, 'Right': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                True: {'Down': 0, 'Left': 0, 'Right': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                 True: {'Down': 0, 'Left': 0, 'Right': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                True: {'Down': 0, 'Left': 0, 'Right': 0}}},
                 True: {False: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                                True: {'Down': 0, 'Left': 0, 'Right': 0}},
                        True: {False: {'Down': 0, 'Left': 0, 'Right': 0},
                               True: {'Down': 0, 'Left': 0, 'Right': 0}}}}},
 (1, 5): {False: {False: {False: {False: {'Down': 0, 'Left': 0},
                                  True: {'Down': 0, 'Left': 0}},
                          True: {False: {'Down': 0, 'Left': 0},
                                 True: {'Down': 0, 'Left': 0}}},
                  True: {False: {False: {'Down': 0, 'Left': 0},
                                 True: {'Down': 0, 'Left': 0}},
                         True: {False: {'Down': 0, 'Left': 0},
                                True: {'Down': 0, 'Left': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Left': 0},
                                 True: {'Down': 0, 'Left': 0}},
                         True: {False: {'Down': 0, 'Left': 0},
                                True: {'Down': 0, 'Left': 0}}},
                 True: {False: {False: {'Down': 0, 'Left': 0},
                                True: {'Down': 0, 'Left': 0}},
                        True: {False: {'Down': 0, 'Left': 0},
                               True: {'Down': 0, 'Left': 0}}}}},
 (2, 1): {False: {False: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                  True: {'Down': 0, 'Right': 0, 'Up': 0}},
                          True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                 True: {'Down': 0, 'Right': 0, 'Up': 0}}},
                  True: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                 True: {'Down': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                True: {'Down': 0, 'Right': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                 True: {'Down': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                True: {'Down': 0, 'Right': 0, 'Up': 0}}},
                 True: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                True: {'Down': 0, 'Right': 0, 'Up': 0}},
                        True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                               True: {'Down': 0, 'Right': 0, 'Up': 0}}}}},
 (2, 2): {False: {False: {False: {False: {'Down': 0,
                                          'Left': 0,
                                          'Right': 0,
                                          'Up': 0},
                                  True: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0}},
                          True: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}}},
                  True: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}},
                 True: {False: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}},
                        True: {False: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0},
                               True: {'Down': 0,
                                      'Left': 0,
                                      'Right': 0,
                                      'Up': 0}}}}},
 (2, 3): {False: {False: {False: {False: {'Down': 0,
                                          'Left': 0,
                                          'Right': 0,
                                          'Up': 0},
                                  True: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0}},
                          True: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}}},
                  True: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}},
                 True: {False: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}},
                        True: {False: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0},
                               True: {'Down': 0,
                                      'Left': 0,
                                      'Right': 0,
                                      'Up': 0}}}}},
 (2, 4): {False: {False: {False: {False: {'Down': 0,
                                          'Left': 0,
                                          'Right': 0,
                                          'Up': 0},
                                  True: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0}},
                          True: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}}},
                  True: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}},
                 True: {False: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}},
                        True: {False: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0},
                               True: {'Down': 0,
                                      'Left': 0,
                                      'Right': 0,
                                      'Up': 0}}}}},
 (2, 5): {False: {False: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                  True: {'Down': 0, 'Left': 0, 'Up': 0}},
                          True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                 True: {'Down': 0, 'Left': 0, 'Up': 0}}},
                  True: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                 True: {'Down': 0, 'Left': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                True: {'Down': 0, 'Left': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                 True: {'Down': 0, 'Left': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                True: {'Down': 0, 'Left': 0, 'Up': 0}}},
                 True: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                True: {'Down': 0, 'Left': 0, 'Up': 0}},
                        True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                               True: {'Down': 0, 'Left': 0, 'Up': 0}}}}},
 (3, 1): {False: {False: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                  True: {'Down': 0, 'Right': 0, 'Up': 0}},
                          True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                 True: {'Down': 0, 'Right': 0, 'Up': 0}}},
                  True: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                 True: {'Down': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                True: {'Down': 0, 'Right': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                 True: {'Down': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                True: {'Down': 0, 'Right': 0, 'Up': 0}}},
                 True: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                True: {'Down': 0, 'Right': 0, 'Up': 0}},
                        True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                               True: {'Down': 0, 'Right': 0, 'Up': 0}}}}},
 (3, 2): {False: {False: {False: {False: {'Down': 0,
                                          'Left': 0,
                                          'Right': 0,
                                          'Up': 0},
                                  True: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0}},
                          True: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}}},
                  True: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}},
                 True: {False: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}},
                        True: {False: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0},
                               True: {'Down': 0,
                                      'Left': 0,
                                      'Right': 0,
                                      'Up': 0}}}}},
 (3, 3): {False: {False: {False: {False: {'Down': 0,
                                          'Left': 0,
                                          'Right': 0,
                                          'Up': 0},
                                  True: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0}},
                          True: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}}},
                  True: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}},
                 True: {False: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}},
                        True: {False: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0},
                               True: {'Down': 0,
                                      'Left': 0,
                                      'Right': 0,
                                      'Up': 0}}}}},
 (3, 4): {False: {False: {False: {False: {'Down': 0,
                                          'Left': 0,
                                          'Right': 0,
                                          'Up': 0},
                                  True: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0}},
                          True: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}}},
                  True: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}},
                 True: {False: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}},
                        True: {False: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0},
                               True: {'Down': 0,
                                      'Left': 0,
                                      'Right': 0,
                                      'Up': 0}}}}},
 (3, 5): {False: {False: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                  True: {'Down': 0, 'Left': 0, 'Up': 0}},
                          True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                 True: {'Down': 0, 'Left': 0, 'Up': 0}}},
                  True: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                 True: {'Down': 0, 'Left': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                True: {'Down': 0, 'Left': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                 True: {'Down': 0, 'Left': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                True: {'Down': 0, 'Left': 0, 'Up': 0}}},
                 True: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                True: {'Down': 0, 'Left': 0, 'Up': 0}},
                        True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                               True: {'Down': 0, 'Left': 0, 'Up': 0}}}}},
 (4, 1): {False: {False: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                  True: {'Down': 0, 'Right': 0, 'Up': 0}},
                          True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                 True: {'Down': 0, 'Right': 0, 'Up': 0}}},
                  True: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                 True: {'Down': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                True: {'Down': 0, 'Right': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                 True: {'Down': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                True: {'Down': 0, 'Right': 0, 'Up': 0}}},
                 True: {False: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                                True: {'Down': 0, 'Right': 0, 'Up': 0}},
                        True: {False: {'Down': 0, 'Right': 0, 'Up': 0},
                               True: {'Down': 0, 'Right': 0, 'Up': 0}}}}},
 (4, 2): {False: {False: {False: {False: {'Down': 0,
                                          'Left': 0,
                                          'Right': 0,
                                          'Up': 0},
                                  True: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0}},
                          True: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}}},
                  True: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}},
                 True: {False: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}},
                        True: {False: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0},
                               True: {'Down': 0,
                                      'Left': 0,
                                      'Right': 0,
                                      'Up': 0}}}}},
 (4, 3): {False: {False: {False: {False: {'Down': 0,
                                          'Left': 0,
                                          'Right': 0,
                                          'Up': 0},
                                  True: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0}},
                          True: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}}},
                  True: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}},
                 True: {False: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}},
                        True: {False: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0},
                               True: {'Down': 0,
                                      'Left': 0,
                                      'Right': 0,
                                      'Up': 0}}}}},
 (4, 4): {False: {False: {False: {False: {'Down': 0,
                                          'Left': 0,
                                          'Right': 0,
                                          'Up': 0},
                                  True: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0}},
                          True: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}}},
                  True: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0,
                                         'Left': 0,
                                         'Right': 0,
                                         'Up': 0},
                                 True: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0}},
                         True: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}}},
                 True: {False: {False: {'Down': 0,
                                        'Left': 0,
                                        'Right': 0,
                                        'Up': 0},
                                True: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0}},
                        True: {False: {'Down': 0,
                                       'Left': 0,
                                       'Right': 0,
                                       'Up': 0},
                               True: {'Down': 0,
                                      'Left': 0,
                                      'Right': 0,
                                      'Up': 0}}}}},
 (4, 5): {False: {False: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                  True: {'Down': 0, 'Left': 0, 'Up': 0}},
                          True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                 True: {'Down': 0, 'Left': 0, 'Up': 0}}},
                  True: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                 True: {'Down': 0, 'Left': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                True: {'Down': 0, 'Left': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                 True: {'Down': 0, 'Left': 0, 'Up': 0}},
                         True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                True: {'Down': 0, 'Left': 0, 'Up': 0}}},
                 True: {False: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                                True: {'Down': 0, 'Left': 0, 'Up': 0}},
                        True: {False: {'Down': 0, 'Left': 0, 'Up': 0},
                               True: {'Down': 0, 'Left': 0, 'Up': 0}}}}},
 (5, 1): {False: {False: {False: {False: {'Right': 0, 'Up': 0},
                                  True: {'Right': 0, 'Up': 0}},
                          True: {False: {'Right': 0, 'Up': 0},
                                 True: {'Right': 0, 'Up': 0}}},
                  True: {False: {False: {'Right': 0, 'Up': 0},
                                 True: {'Right': 0, 'Up': 0}},
                         True: {False: {'Right': 0, 'Up': 0},
                                True: {'Right': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Right': 0, 'Up': 0},
                                 True: {'Right': 0, 'Up': 0}},
                         True: {False: {'Right': 0, 'Up': 0},
                                True: {'Right': 0, 'Up': 0}}},
                 True: {False: {False: {'Right': 0, 'Up': 0},
                                True: {'Right': 0, 'Up': 0}},
                        True: {False: {'Right': 0, 'Up': 0},
                               True: {'Right': 0, 'Up': 0}}}}},
 (5, 2): {False: {False: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                  True: {'Left': 0, 'Right': 0, 'Up': 0}},
                          True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                 True: {'Left': 0, 'Right': 0, 'Up': 0}}},
                  True: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                 True: {'Left': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                True: {'Left': 0, 'Right': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                 True: {'Left': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                True: {'Left': 0, 'Right': 0, 'Up': 0}}},
                 True: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                True: {'Left': 0, 'Right': 0, 'Up': 0}},
                        True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                               True: {'Left': 0, 'Right': 0, 'Up': 0}}}}},
 (5, 3): {False: {False: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                  True: {'Left': 0, 'Right': 0, 'Up': 0}},
                          True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                 True: {'Left': 0, 'Right': 0, 'Up': 0}}},
                  True: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                 True: {'Left': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                True: {'Left': 0, 'Right': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                 True: {'Left': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                True: {'Left': 0, 'Right': 0, 'Up': 0}}},
                 True: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                True: {'Left': 0, 'Right': 0, 'Up': 0}},
                        True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                               True: {'Left': 0, 'Right': 0, 'Up': 0}}}}},
 (5, 4): {False: {False: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                  True: {'Left': 0, 'Right': 0, 'Up': 0}},
                          True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                 True: {'Left': 0, 'Right': 0, 'Up': 0}}},
                  True: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                 True: {'Left': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                True: {'Left': 0, 'Right': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                 True: {'Left': 0, 'Right': 0, 'Up': 0}},
                         True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                True: {'Left': 0, 'Right': 0, 'Up': 0}}},
                 True: {False: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                                True: {'Left': 0, 'Right': 0, 'Up': 0}},
                        True: {False: {'Left': 0, 'Right': 0, 'Up': 0},
                               True: {'Left': 0, 'Right': 0, 'Up': 0}}}}},
 (5, 5): {False: {False: {False: {False: {'Left': 0, 'Up': 0},
                                  True: {'Left': 0, 'Up': 0}},
                          True: {False: {'Left': 0, 'Up': 0},
                                 True: {'Left': 0, 'Up': 0}}},
                  True: {False: {False: {'Left': 0, 'Up': 0},
                                 True: {'Left': 0, 'Up': 0}},
                         True: {False: {'Left': 0, 'Up': 0},
                                True: {'Left': 0, 'Up': 0}}}},
          True: {False: {False: {False: {'Left': 0, 'Up': 0},
                                 True: {'Left': 0, 'Up': 0}},
                         True: {False: {'Left': 0, 'Up': 0},
                                True: {'Left': 0, 'Up': 0}}},
                 True: {False: {False: {'Left': 0, 'Up': 0},
                                True: {'Left': 0, 'Up': 0}},
                        True: {False: {'Left': 0, 'Up': 0},
                               True: {'Left': 0, 'Up': 0}}}}}}
\$\endgroup\$
  • \$\begingroup\$ Did I write a bad question? I can add whatever is needed if I did. \$\endgroup\$ – Acejhm Apr 25 at 22:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.