def generate_at_location_ssa(t, x, y, xmin, xmax, ymin, ymax, heading): """ The full at_location SSA converts to a fairly large CNF, which in turn causes the KB to grow very fast, slowing overall inference. We therefore need to restric generating these axioms as much as possible. This fn generates the at_location SSA only for the current location and the location the agent is currently facing (in case the agent moves forward on the next turn). This is sufficient for tracking the current location, which will be the single L location that evaluates to True; however, the other locations may be False or Unknown. """ axioms = [axiom_generator_at_location_ssa(t, x, y, xmin, xmax, ymin, ymax)] if heading == 'west' and x - 1 >= xmin: axioms.append( axiom_generator_at_location_ssa(t, x - 1, y, xmin, xmax, ymin, ymax)) if heading == 'east' and x + 1 <= xmax: axioms.append( axiom_generator_at_location_ssa(t, x + 1, y, xmin, xmax, ymin, ymax)) if heading == 'south' and y - 1 >= ymin: axioms.append( axiom_generator_at_location_ssa(t, x, y - 1, xmin, xmax, ymin, ymax)) if heading == 'north' and y + 1 <= ymax: axioms.append( axiom_generator_at_location_ssa(t, x, y + 1, xmin, xmax, ymin, ymax)) if utils.all_empty_strings(axioms): utils.print_not_implemented('axiom_generator_at_location_ssa') return filter(lambda s: s != '', axioms)
def generate_stench_percept_and_location_axioms(t, xmin, xmax, ymin, ymax): axioms = [] for x in range(xmin, xmax + 1): for y in range(ymin, ymax + 1): axioms.append(axiom_generator_stench_percept_and_location_property(x, y, t)) if utils.all_empty_strings(axioms): utils.print_not_implemented('axiom_generator_stench_percept_and_location_property') return filter(lambda s: s != '', axioms)
def generate_square_OK_axioms(t, xmin, xmax, ymin, ymax): axioms = [] for x in range(xmin, xmax + 1): for y in range(ymin, ymax + 1): axioms.append(axiom_generator_location_OK(x, y, t)) if utils.all_empty_strings(axioms): utils.print_not_implemented('axiom_generator_location_OK') return filter(lambda s: s != '', axioms)
def generate_wumpus_and_stench_axioms(xmin, xmax, ymin, ymax): axioms = [] for x in range(xmin, xmax + 1): for y in range(ymin, ymax + 1): axioms.append(axiom_generator_wumpus_and_stench(x, y, xmin, xmax, ymin, ymax)) if utils.all_empty_strings(axioms): utils.print_not_implemented('axiom_generator_wumpus_and_stench') return axioms
def generate_pit_and_breeze_axioms(xmin, xmax, ymin, ymax): axioms = [] for x in range(xmin, xmax + 1): for y in range(ymin, ymax + 1): axioms.append(axiom_generator_pits_and_breezes(x, y, xmin, xmax, ymin, ymax)) if utils.all_empty_strings(axioms): utils.print_not_implemented('axiom_generator_pits_and_breezes') return axioms
def generate_at_location_ssa(t, x, y, xmin, xmax, ymin, ymax, heading): """ The full at_location SSA converts to a fairly large CNF, which in turn causes the KB to grow very fast, slowing overall inference. We therefore need to restric generating these axioms as much as possible. This fn generates the at_location SSA only for the current location and the location the agent is currently facing (in case the agent moves forward on the next turn). This is sufficient for tracking the current location, which will be the single L location that evaluates to True; however, the other locations may be False or Unknown. """ axioms = [axiom_generator_at_location_ssa(t, x, y, xmin, xmax, ymin, ymax)] if heading == 'west' and x - 1 >= xmin: axioms.append(axiom_generator_at_location_ssa(t, x-1, y, xmin, xmax, ymin, ymax)) if heading == 'east' and x + 1 <= xmax: axioms.append(axiom_generator_at_location_ssa(t, x+1, y, xmin, xmax, ymin, ymax)) if heading == 'south' and y - 1 >= ymin: axioms.append(axiom_generator_at_location_ssa(t, x, y-1, xmin, xmax, ymin, ymax)) if heading == 'north' and y + 1 <= ymax: axioms.append(axiom_generator_at_location_ssa(t, x, y+1, xmin, xmax, ymin, ymax)) if utils.all_empty_strings(axioms): utils.print_not_implemented('axiom_generator_at_location_ssa') return filter(lambda s: s != '', axioms)