diff --git a/analysis.py b/analysis.py index 53dcdd1..9ac9c97 100644 --- a/analysis.py +++ b/analysis.py @@ -68,7 +68,7 @@ def question3e(): def question8(): answerEpsilon = None answerLearningRate = None - return answerEpsilon, answerLearningRate + return 'NOT POSSIBLE' # If not possible, return 'NOT POSSIBLE' diff --git a/qlearningAgents.py b/qlearningAgents.py index a417a5f..e96540c 100644 --- a/qlearningAgents.py +++ b/qlearningAgents.py @@ -4,7 +4,7 @@ # educational purposes provided that (1) you do not distribute or publish # solutions, (2) you retain this notice, and (3) you provide clear # attribution to UC Berkeley, including a link to http://ai.berkeley.edu. -# +# # Attribution Information: The Pacman AI projects were developed at UC Berkeley. # The core projects and autograders were primarily created by John DeNero # (denero@cs.berkeley.edu) and Dan Klein (klein@cs.berkeley.edu). @@ -16,7 +16,10 @@ from game import * from learningAgents import ReinforcementAgent from featureExtractors import * -import random,util,math +import random +import util +import math + class QLearningAgent(ReinforcementAgent): """ @@ -38,11 +41,18 @@ class QLearningAgent(ReinforcementAgent): - self.getLegalActions(state) which returns legal actions for a state """ + def __init__(self, **args): "You can initialize Q-values here..." ReinforcementAgent.__init__(self, **args) "*** YOUR CODE HERE ***" + self.values = util.Counter() + # self.mdp = mdp + # self.discount = discount + # self.iterations = iterations + # self.values = util.Counter() # A Counter is a dict with default 0 + # self.runValueIteration() def getQValue(self, state, action): """ @@ -51,8 +61,8 @@ class QLearningAgent(ReinforcementAgent): or the Q node value otherwise """ "*** YOUR CODE HERE ***" - util.raiseNotDefined() - + t = (state, action) + return self.values[t] def computeValueFromQValues(self, state): """ @@ -62,7 +72,18 @@ class QLearningAgent(ReinforcementAgent): terminal state, you should return a value of 0.0. """ "*** YOUR CODE HERE ***" - util.raiseNotDefined() + INF, NEG_INF = float("inf"), -float("inf") + + options_actions = self.getLegalActions(state) + optimal = NEG_INF + for action in options_actions: + if self.getQValue(state, action) > optimal: + optimal = self.getQValue(state, action) + + if optimal != NEG_INF: + return optimal + else: + return 0.0 def computeActionFromQValues(self, state): """ @@ -71,7 +92,16 @@ class QLearningAgent(ReinforcementAgent): you should return None. """ "*** YOUR CODE HERE ***" - util.raiseNotDefined() + # Exit/no actions to perform + if len(self.getLegalActions(state)) == 0: + return None + + optimal = self.computeValueFromQValues(state) + policy = [action for action in self.getLegalActions( + state) if optimal == self.getQValue(state, action)] + + # grab an action + return random.choice(policy) def getAction(self, state): """ @@ -85,10 +115,14 @@ class QLearningAgent(ReinforcementAgent): HINT: To pick randomly from a list, use random.choice(list) """ # Pick Action - legalActions = self.getLegalActions(state) - action = None "*** YOUR CODE HERE ***" - util.raiseNotDefined() + options_actions = self.getLegalActions(state) + action = None + + if util.flipCoin(self.epsilon): + action = random.choice(options_actions) + else: + action = self.computeActionFromQValues(state) return action @@ -102,7 +136,13 @@ class QLearningAgent(ReinforcementAgent): it will be called on your behalf """ "*** YOUR CODE HERE ***" - util.raiseNotDefined() + t = (state, action) + prev = self.values[t] + val = reward + \ + (self.discount * self.computeValueFromQValues(nextState)) + + self.values[t] = (1 - self.alpha) * \ + prev + self.alpha * val def getPolicy(self, state): return self.computeActionFromQValues(state) @@ -114,7 +154,7 @@ class QLearningAgent(ReinforcementAgent): class PacmanQAgent(QLearningAgent): "Exactly the same as QLearningAgent, but with different default parameters" - def __init__(self, epsilon=0.05,gamma=0.8,alpha=0.2, numTraining=0, **args): + def __init__(self, epsilon=0.05, gamma=0.8, alpha=0.2, numTraining=0, **args): """ These default parameters can be changed from the pacman.py command line. For example, to change the exploration rate, try: @@ -138,8 +178,8 @@ class PacmanQAgent(QLearningAgent): informs parent of action for Pacman. Do not change or remove this method. """ - action = QLearningAgent.getAction(self,state) - self.doAction(state,action) + action = QLearningAgent.getAction(self, state) + self.doAction(state, action) return action @@ -151,6 +191,7 @@ class ApproximateQAgent(PacmanQAgent): and update. All other QLearningAgent functions should work as is. """ + def __init__(self, extractor='IdentityExtractor', **args): self.featExtractor = util.lookup(extractor, globals())() PacmanQAgent.__init__(self, **args) @@ -165,14 +206,35 @@ class ApproximateQAgent(PacmanQAgent): where * is the dotProduct operator """ "*** YOUR CODE HERE ***" - util.raiseNotDefined() + # model_features = self.featExtractor.getFeatures(state, action) + # return sum([self.weights[feat] * val for feat, val in model_features.iteritems()]) + + model_features = self.featExtractor.getFeatures(state, action) + + return sum([model_features[feat] * self.weights[feat] for feat in model_features]) def update(self, state, action, nextState, reward): """ Should update your weights based on transition """ "*** YOUR CODE HERE ***" - util.raiseNotDefined() + # val = reward + self.discount * self.computeValueFromQValues(nextState) + # prev = self.getQValue(state, action) + + # diff = val - prev + + # model_features = self.featExtractor.getFeatures(state, action) + # for feat, val in model_features.iteritems(): + # self.weights[feat] += self.alpha * \ + # diff * model_features[feat] + discounted = self.discount * self.getValue(nextState) + diff = (reward + discounted) - \ + self.getQValue(state, action) + + model_features = self.featExtractor.getFeatures(state, action) + for feat in model_features: + self.weights[feat] = self.weights[feat] + \ + self.alpha * diff * model_features[feat] def final(self, state): "Called at the end of each game." @@ -183,4 +245,7 @@ class ApproximateQAgent(PacmanQAgent): if self.episodesSoFar == self.numTraining: # you might want to print your weights here for debugging "*** YOUR CODE HERE ***" + # print(self.weights) + # for i in features: + # print(self.weights[i], i) pass diff --git a/reinforcement.token b/reinforcement.token new file mode 100644 index 0000000..f3105ea --- /dev/null +++ b/reinforcement.token @@ -0,0 +1 @@ +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 diff --git a/test_cases/q5/1-tinygrid.test_output b/test_cases/q5/1-tinygrid.test_output deleted file mode 100644 index 3698ae0..0000000 --- a/test_cases/q5/1-tinygrid.test_output +++ /dev/null @@ -1,150 +0,0 @@ -Values at iteration 0 are correct. - Student/correct solution: - values_k_0: """ - 0.0000 0.0000 0.0000 -""" - - -Q-Values at iteration 0 for action south are correct. - Student/correct solution: - q_values_k_0_action_south: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 0 for action north are correct. - Student/correct solution: - q_values_k_0_action_north: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 0 for action exit are correct. - Student/correct solution: - q_values_k_0_action_exit: """ - 10.0000 illegal -10.0000 -""" - - -Q-Values at iteration 0 for action west are correct. - Student/correct solution: - q_values_k_0_action_west: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 0 for action east are correct. - Student/correct solution: - q_values_k_0_action_east: """ - illegal 0.0000 illegal -""" - - -Values at iteration 1 are correct. - Student/correct solution: - values_k_1: """ - 10.0000 0.0000 0.0000 -""" - - -Q-Values at iteration 1 for action south are correct. - Student/correct solution: - q_values_k_1_action_south: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 1 for action north are correct. - Student/correct solution: - q_values_k_1_action_north: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 1 for action exit are correct. - Student/correct solution: - q_values_k_1_action_exit: """ - 10.0000 illegal -10.0000 -""" - - -Q-Values at iteration 1 for action west are correct. - Student/correct solution: - q_values_k_1_action_west: """ - illegal 5.0000 illegal -""" - - -Q-Values at iteration 1 for action east are correct. - Student/correct solution: - q_values_k_1_action_east: """ - illegal 0.0000 illegal -""" - - -Values at iteration 2 are NOT correct. - Student solution: - values_k_2: """ - 10.0000 5.0000 0.0000 -""" - - - Correct solution: - values_k_2: """ - 10.0000 0.0000 -10.0000 -""" - - -Q-Values at iteration 2 for action south are NOT correct. - Student solution: - q_values_k_2_action_south: """ - illegal 2.5000 illegal -""" - - - Correct solution: - q_values_k_2_action_south: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 2 for action north are NOT correct. - Student solution: - q_values_k_2_action_north: """ - illegal 2.5000 illegal -""" - - - Correct solution: - q_values_k_2_action_north: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 2 for action exit are correct. - Student/correct solution: - q_values_k_2_action_exit: """ - 10.0000 illegal -10.0000 -""" - - -Q-Values at iteration 2 for action west are correct. - Student/correct solution: - q_values_k_2_action_west: """ - illegal 5.0000 illegal -""" - - -Q-Values at iteration 2 for action east are NOT correct. - Student solution: - q_values_k_2_action_east: """ - illegal 0.0000 illegal -""" - - - Correct solution: - q_values_k_2_action_east: """ - illegal -5.0000 illegal -""" - - diff --git a/test_cases/q5/2-tinygrid-noisy.test_output b/test_cases/q5/2-tinygrid-noisy.test_output deleted file mode 100644 index 6d309b9..0000000 --- a/test_cases/q5/2-tinygrid-noisy.test_output +++ /dev/null @@ -1,156 +0,0 @@ -Values at iteration 0 are correct. - Student/correct solution: - values_k_0: """ - 0.0000 0.0000 0.0000 -""" - - -Q-Values at iteration 0 for action south are correct. - Student/correct solution: - q_values_k_0_action_south: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 0 for action north are correct. - Student/correct solution: - q_values_k_0_action_north: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 0 for action exit are correct. - Student/correct solution: - q_values_k_0_action_exit: """ - 10.0000 illegal -10.0000 -""" - - -Q-Values at iteration 0 for action west are correct. - Student/correct solution: - q_values_k_0_action_west: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 0 for action east are correct. - Student/correct solution: - q_values_k_0_action_east: """ - illegal 0.0000 illegal -""" - - -Values at iteration 1 are correct. - Student/correct solution: - values_k_1: """ - 10.0000 0.0000 0.0000 -""" - - -Q-Values at iteration 1 for action south are correct. - Student/correct solution: - q_values_k_1_action_south: """ - illegal 0.9375 illegal -""" - - -Q-Values at iteration 1 for action north are correct. - Student/correct solution: - q_values_k_1_action_north: """ - illegal 0.9375 illegal -""" - - -Q-Values at iteration 1 for action exit are correct. - Student/correct solution: - q_values_k_1_action_exit: """ - 10.0000 illegal -10.0000 -""" - - -Q-Values at iteration 1 for action west are correct. - Student/correct solution: - q_values_k_1_action_west: """ - illegal 5.6250 illegal -""" - - -Q-Values at iteration 1 for action east are correct. - Student/correct solution: - q_values_k_1_action_east: """ - illegal 0.0000 illegal -""" - - -Values at iteration 2 are NOT correct. - Student solution: - values_k_2: """ - 10.0000 5.6250 0.0000 -""" - - - Correct solution: - values_k_2: """ - 10.0000 0.0000 -10.0000 -""" - - -Q-Values at iteration 2 for action south are NOT correct. - Student solution: - q_values_k_2_action_south: """ - illegal 4.1016 illegal -""" - - - Correct solution: - q_values_k_2_action_south: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 2 for action north are NOT correct. - Student solution: - q_values_k_2_action_north: """ - illegal 4.1016 illegal -""" - - - Correct solution: - q_values_k_2_action_north: """ - illegal 0.0000 illegal -""" - - -Q-Values at iteration 2 for action exit are correct. - Student/correct solution: - q_values_k_2_action_exit: """ - 10.0000 illegal -10.0000 -""" - - -Q-Values at iteration 2 for action west are NOT correct. - Student solution: - q_values_k_2_action_west: """ - illegal 6.6797 illegal -""" - - - Correct solution: - q_values_k_2_action_west: """ - illegal 5.6250 illegal -""" - - -Q-Values at iteration 2 for action east are NOT correct. - Student solution: - q_values_k_2_action_east: """ - illegal 1.0547 illegal -""" - - - Correct solution: - q_values_k_2_action_east: """ - illegal -5.6250 illegal -""" - - diff --git a/test_cases/q5/3-bridge.test_output b/test_cases/q5/3-bridge.test_output deleted file mode 100644 index 737397c..0000000 --- a/test_cases/q5/3-bridge.test_output +++ /dev/null @@ -1,194 +0,0 @@ -Values at iteration 0 are correct. - Student/correct solution: - values_k_0: """ - __________ 0.0000 0.0000 0.0000 0.0000 0.0000 __________ - 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 - __________ 0.0000 0.0000 0.0000 0.0000 0.0000 __________ -""" - - -Q-Values at iteration 0 for action south are correct. - Student/correct solution: - q_values_k_0_action_south: """ - __________ illegal illegal illegal illegal illegal __________ - illegal 0.0000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Q-Values at iteration 0 for action north are correct. - Student/correct solution: - q_values_k_0_action_north: """ - __________ illegal illegal illegal illegal illegal __________ - illegal 0.0000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Q-Values at iteration 0 for action exit are correct. - Student/correct solution: - q_values_k_0_action_exit: """ - __________ -100.0000 -100.0000 -100.0000 -100.0000 -100.0000 __________ - 1.0000 illegal illegal illegal illegal illegal 10.0000 - __________ -100.0000 -100.0000 -100.0000 -100.0000 -100.0000 __________ -""" - - -Q-Values at iteration 0 for action west are correct. - Student/correct solution: - q_values_k_0_action_west: """ - __________ illegal illegal illegal illegal illegal __________ - illegal 0.0000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Q-Values at iteration 0 for action east are correct. - Student/correct solution: - q_values_k_0_action_east: """ - __________ illegal illegal illegal illegal illegal __________ - illegal 0.0000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Values at iteration 1 are correct. - Student/correct solution: - values_k_1: """ - __________ 0.0000 0.0000 0.0000 0.0000 0.0000 __________ - 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 - __________ -100.0000 0.0000 0.0000 0.0000 0.0000 __________ -""" - - -Q-Values at iteration 1 for action south are correct. - Student/correct solution: - q_values_k_1_action_south: """ - __________ illegal illegal illegal illegal illegal __________ - illegal -76.5000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Q-Values at iteration 1 for action north are correct. - Student/correct solution: - q_values_k_1_action_north: """ - __________ illegal illegal illegal illegal illegal __________ - illegal 0.0000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Q-Values at iteration 1 for action exit are correct. - Student/correct solution: - q_values_k_1_action_exit: """ - __________ -100.0000 -100.0000 -100.0000 -100.0000 -100.0000 __________ - 1.0000 illegal illegal illegal illegal illegal 10.0000 - __________ -100.0000 -100.0000 -100.0000 -100.0000 -100.0000 __________ -""" - - -Q-Values at iteration 1 for action west are correct. - Student/correct solution: - q_values_k_1_action_west: """ - __________ illegal illegal illegal illegal illegal __________ - illegal -4.2500 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Q-Values at iteration 1 for action east are correct. - Student/correct solution: - q_values_k_1_action_east: """ - __________ illegal illegal illegal illegal illegal __________ - illegal -4.2500 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Values at iteration 2 are NOT correct. - Student solution: - values_k_2: """ - __________ 0.0000 0.0000 0.0000 0.0000 0.0000 __________ - 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 - __________ -100.0000 0.0000 0.0000 0.0000 0.0000 __________ -""" - - - Correct solution: - values_k_2: """ - __________ -100.0000 0.0000 0.0000 0.0000 0.0000 __________ - 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 - __________ -100.0000 0.0000 0.0000 0.0000 0.0000 __________ -""" - - -Q-Values at iteration 2 for action south are correct. - Student/correct solution: - q_values_k_2_action_south: """ - __________ illegal illegal illegal illegal illegal __________ - illegal -76.5000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Q-Values at iteration 2 for action north are NOT correct. - Student solution: - q_values_k_2_action_north: """ - __________ illegal illegal illegal illegal illegal __________ - illegal 0.0000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - - Correct solution: - q_values_k_2_action_north: """ - __________ illegal illegal illegal illegal illegal __________ - illegal -76.5000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Q-Values at iteration 2 for action exit are correct. - Student/correct solution: - q_values_k_2_action_exit: """ - __________ -100.0000 -100.0000 -100.0000 -100.0000 -100.0000 __________ - 1.0000 illegal illegal illegal illegal illegal 10.0000 - __________ -100.0000 -100.0000 -100.0000 -100.0000 -100.0000 __________ -""" - - -Q-Values at iteration 2 for action west are NOT correct. - Student solution: - q_values_k_2_action_west: """ - __________ illegal illegal illegal illegal illegal __________ - illegal -4.2500 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - - Correct solution: - q_values_k_2_action_west: """ - __________ illegal illegal illegal illegal illegal __________ - illegal -8.5000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - -Q-Values at iteration 2 for action east are NOT correct. - Student solution: - q_values_k_2_action_east: """ - __________ illegal illegal illegal illegal illegal __________ - illegal -4.2500 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - - Correct solution: - q_values_k_2_action_east: """ - __________ illegal illegal illegal illegal illegal __________ - illegal -8.5000 0.0000 0.0000 0.0000 0.0000 illegal - __________ illegal illegal illegal illegal illegal __________ -""" - - diff --git a/test_cases/q5/4-discountgrid.test_output b/test_cases/q5/4-discountgrid.test_output deleted file mode 100644 index eb83e9e..0000000 --- a/test_cases/q5/4-discountgrid.test_output +++ /dev/null @@ -1,238 +0,0 @@ -Values at iteration 0 are correct. - Student/correct solution: - values_k_0: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 __________ 0.0000 - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 0.0000 0.0000 0.0000 0.0000 -""" - - -Q-Values at iteration 0 for action south are correct. - Student/correct solution: - q_values_k_0_action_south: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - 0.0000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Q-Values at iteration 0 for action north are correct. - Student/correct solution: - q_values_k_0_action_north: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - 0.0000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Q-Values at iteration 0 for action exit are correct. - Student/correct solution: - q_values_k_0_action_exit: """ - illegal illegal illegal illegal illegal - illegal __________ illegal illegal illegal - illegal __________ 1.0000 __________ 10.0000 - illegal illegal illegal illegal illegal - -10.0000 -10.0000 -10.0000 -10.0000 -10.0000 -""" - - -Q-Values at iteration 0 for action west are correct. - Student/correct solution: - q_values_k_0_action_west: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - 0.0000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Q-Values at iteration 0 for action east are correct. - Student/correct solution: - q_values_k_0_action_east: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - 0.0000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Values at iteration 1 are correct. - Student/correct solution: - values_k_1: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 __________ 0.0000 - 0.0000 0.0000 0.0000 0.0000 0.0000 - -10.0000 0.0000 0.0000 0.0000 0.0000 -""" - - -Q-Values at iteration 1 for action south are correct. - Student/correct solution: - q_values_k_1_action_south: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - -7.2000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Q-Values at iteration 1 for action north are correct. - Student/correct solution: - q_values_k_1_action_north: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - 0.0000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Q-Values at iteration 1 for action exit are correct. - Student/correct solution: - q_values_k_1_action_exit: """ - illegal illegal illegal illegal illegal - illegal __________ illegal illegal illegal - illegal __________ 1.0000 __________ 10.0000 - illegal illegal illegal illegal illegal - -10.0000 -10.0000 -10.0000 -10.0000 -10.0000 -""" - - -Q-Values at iteration 1 for action west are correct. - Student/correct solution: - q_values_k_1_action_west: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - -0.9000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Q-Values at iteration 1 for action east are correct. - Student/correct solution: - q_values_k_1_action_east: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - -0.9000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Values at iteration 2 are NOT correct. - Student solution: - values_k_2: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 __________ 0.0000 - 0.0000 0.0000 0.0000 0.0000 0.0000 - -10.0000 0.0000 0.0000 0.0000 0.0000 -""" - - - Correct solution: - values_k_2: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 __________ 0.0000 - 0.0000 0.0000 0.0000 0.0000 0.0000 - -10.0000 -10.0000 0.0000 0.0000 0.0000 -""" - - -Q-Values at iteration 2 for action south are NOT correct. - Student solution: - q_values_k_2_action_south: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - -7.2000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - - Correct solution: - q_values_k_2_action_south: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - -7.2000 -7.2000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Q-Values at iteration 2 for action north are correct. - Student/correct solution: - q_values_k_2_action_north: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - 0.0000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Q-Values at iteration 2 for action exit are correct. - Student/correct solution: - q_values_k_2_action_exit: """ - illegal illegal illegal illegal illegal - illegal __________ illegal illegal illegal - illegal __________ 1.0000 __________ 10.0000 - illegal illegal illegal illegal illegal - -10.0000 -10.0000 -10.0000 -10.0000 -10.0000 -""" - - -Q-Values at iteration 2 for action west are NOT correct. - Student solution: - q_values_k_2_action_west: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - -0.9000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - - Correct solution: - q_values_k_2_action_west: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - -0.9000 -0.9000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - -Q-Values at iteration 2 for action east are NOT correct. - Student solution: - q_values_k_2_action_east: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - -0.9000 0.0000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - - Correct solution: - q_values_k_2_action_east: """ - 0.0000 0.0000 0.0000 0.0000 0.0000 - 0.0000 __________ 0.0000 0.0000 0.0000 - 0.0000 __________ illegal __________ illegal - -0.9000 -0.9000 0.0000 0.0000 0.0000 - illegal illegal illegal illegal illegal -""" - - diff --git a/valueIterationAgents.py b/valueIterationAgents.py index e7c7cff..2366966 100644 --- a/valueIterationAgents.py +++ b/valueIterationAgents.py @@ -223,6 +223,7 @@ class PrioritizedSweepingValueIterationAgent(AsynchronousValueIterationAgent): # computing the predecssors for all states # For each non-terminal state, do: + # breaking in 2 stages for curr_state in mdp_states: # exit the iteration @@ -280,10 +281,10 @@ class PrioritizedSweepingValueIterationAgent(AsynchronousValueIterationAgent): if self.mdp.isTerminal(prev): continue - options_actions = self.mdp.getPossibleActions(curr_state) - optimal = max([self.getQValue(curr_state, x) + options_actions = self.mdp.getPossibleActions(prev) + optimal = max([self.getQValue(prev, x) for x in options_actions]) + # finding -diff diff = abs(optimal - self.values[prev]) - # difference large enough? if diff > self.theta: hinge.update(prev, -diff)