def not_unsafe(self): """ Use logic to determine the set of locations I can't prove to be unsafe """ not_unsafe_spots = set() for x in range(1, self.size + 1): for y in range(1, self.size + 1): #Current location loc = "" + str(x) + "_" + str(y) if not logic_440.resolution(self.KB, logic.expr("L" + loc)): not_unsafe_spots.add((x,y)) if logic_440.resolution(self.KB, logic.expr("P" + loc)) or logic_440.resolution(self.KB, logic.expr("W" + loc)): if not_unsafe_spots.__contains__((x,y)): not_unsafe_spots.remove((x,y)) # If no smell, and no breeze, then all neighbors are safe locations. no_smell = logic_440.resolution(self.KB, logic.expr("~S" + loc)) no_breeze = logic_440.resolution(self.KB, logic.expr("~B" + loc)) if (no_smell and no_breeze): for n in get_neighbors(x, y, self.size): #print "Adding " + str(n) + " to not_unsafe_spots" not_unsafe_spots.add(n) return not_unsafe_spots
def safe(self): """ Use logic to determine the set of locations I can prove to be safe. """ safe_spots = set() for x in range(1, self.size + 1): for y in range(1, self.size + 1): #Current location loc = "" + str(x) + "_" + str(y) #Add current location spot to the safe_spots if logic_440.resolution(self.KB, logic.expr("L" + loc)): safe_spots.add((x,y)) #Not a pit or not a wumpus at current location if logic_440.resolution(self.KB, logic.expr("~P" + loc)) and logic_440.resolution(self.KB, logic.expr("~W" + loc)): safe_spots.add((x,y)) # If no smell, and no breeze, then all neighbors are safe locations. no_smell = logic_440.resolution(self.KB, logic.expr("~S" + loc)) no_breeze = logic_440.resolution(self.KB, logic.expr("~B" + loc)) if (no_smell and no_breeze): for n in get_neighbors(x, y, self.size): #print "Adding " + str(n) + " to safe_spots" safe_spots.add(n) return safe_spots
def safe(self): safe_zones = set() for x in range(1, self.size + 1): for y in range(1, self.size + 1): if(logic_440.resolution(self.KB, logic.Expr(('~W%d_%d' % (x,y)))) and logic_440.resolution(self.KB, logic.Expr(('~P%d_%d' % (x,y))))): safe_zones.add((x,y)) return safe_zones
def not_unsafe(self): notunsafe_set = Set([]) for i in range(1, self.size + 1): for j in range(1, self.size + 1): pit = logic.expr("P%d_%d" % (i,j)) wumpus = logic.expr("W%d_%d" % (i,j)) if not(((logic_440.resolution(self.KB, pit) or logic_440.resolution(self.KB, wumpus)))): notunsafe_set.add((i,j)) return notunsafe_set
def not_unsafe(self): not_unsafe_zones = set() for x in range(1, self.size + 1): for y in range(1, self.size + 1): if not (logic_440.resolution(self.KB, logic.Expr(('B%d_%d' % (x,y)))) | logic_440.resolution(self.KB,logic.Expr('S%d_%d' %(x,y)))): for z in get_neighbors(x,y,self.size): not_unsafe_zones.add(z) if not(logic_440.resolution(self.KB, logic.Expr(('P%d_%d' % (x,y)))) | logic_440.resolution(self.KB,logic.Expr('W%d_%d' %(x,y)))): not_unsafe_zones.add(z) return not_unsafe_zones
def safe(self): safe_set = Set([]) for i in range(1, self.size + 1): for j in range(1, self.size + 1): not_pit = logic.expr("~P%d_%d" % (i,j)) not_wumpus = logic.expr("~W%d_%d" % (i,j)) if 'L%d_%d' in self.KB.clauses: safe_set.add((i,j)) elif ((logic_440.resolution(self.KB, not_pit) and logic_440.resolution(self.KB, not_wumpus))): safe_set.add((i,j)) return safe_set
def not_unsafe(self): #raise NotImplementedError() cave_size = self.size unsafe = set() for x in range(1, cave_size+1): for y in range(1, cave_size+1): pp = logic_440.resolution(self.KB, logic.Expr("P%d_%d" % (x,y))) ww = logic_440.resolution(self.KB, logic.Expr("W%d_%d" % (x,y))) if not(pp or ww): unsafe.add((x,y)) return unsafe
def safe(self): cave_size = self.size safety = set() ### for x in range(1, cave_size+1): for y in range(1, cave_size+1): pp = logic_440.resolution(self.KB, logic.Expr("~P%d_%d" % (x,y))) ww = logic_440.resolution(self.KB, logic.Expr("~W%d_%d" % (x,y))) if (pp and ww): safety.add((x,y)) return safety
def unvisited(self): unvisited = set() for x in range(1, self.size + 1): for y in range(1, self.size + 1): if not (logic_440.resolution(self.KB, logic.Expr(('L%d_%d' % (x,y))))): unvisited.add((x,y)) return unvisited
def unvisited(self): unvisitedList = [] for x in range(1, self.size + 1): for y in range(1, self.size + 1): s = 'L' + str(x) + '_' + str(y) if (logic_440.resolution(self.KB, logic.expr(s)) == False): unvisitedList.append((x, y)) return set(unvisitedList)
def safe(self): safeList = [] for x in range(1, self.size + 1): for y in range(1, self.size + 1): s = '~W' + str(x) + '_' + str(y) + ' & ' + '~P' + str( x) + '_' + str(y) if (logic_440.resolution(self.KB, logic.expr(s)) == True): safeList.append((x, y)) return set(safeList)
def unvisited(self): #raise NotImplementedError() cave_size = self.size visit = set() for x in range(1, cave_size+1): for y in range(1, cave_size+1): if not (logic_440.resolution(self.KB, logic.Expr("L%d_%d" % (x,y)))): visit.add((x,y)) return visit
def unvisited(self): """ Use logic to determine the set of locations I haven't visited yet. """ result = set() for x in range(1, self.size + 1): for y in range(1, self.size + 1): if not logic_440.resolution(self.KB, logic.expr("L" + str(x) + "_" + str(y))): result.add((x,y)) return result
def not_unsafe(self): roomlist = [] unsafeList = [] safeList = self.safe() for x in range(1, self.size + 1): for y in range(1, self.size + 1): roomlist.append((x, y)) if ((x, y) not in safeList): s = 'W' + str(x) + '_' + str(y) + ' | ' + 'P' + str( x) + '_' + str(y) if (logic_440.resolution(self.KB, logic.expr(s)) == True): unsafeList.append((x, y)) return set(roomlist) - set(unsafeList)
def test_background_knowledge(self): print Test agent = hw3.WumpusWorldAgent(4) agent.KB.tell(logic.expr('B1_1')) agent.KB.tell(logic.expr('~P1_2')) self.assertTrue(logic_440.resolution(agent.KB, logic.expr('P2_1')))