def main(): # flags make_some_observations_missing = False use_graphics = False need_to_generate_data = True # parse command line arguments for arg in sys.argv[1:]: if arg == '--missing': make_some_observations_missing = True elif arg == '--nographics': use_graphics = False elif arg.startswith('--load='): filename = arg[7:] hidden_states, observations = robot.load_data(filename) need_to_generate_data = False num_time_steps = len(hidden_states) # if no data is loaded, then generate new data if need_to_generate_data: num_time_steps = 100 hidden_states, observations = \ generate_data(num_time_steps, make_some_observations_missing, random_seed=0) # print('Running forward-backward...') # marginals = forward_backward(observations) # print("\n") # # timestep = 2 # print("Most likely parts of marginal at time %d:" % (timestep)) # if marginals[timestep] is not None: # print(sorted(marginals[timestep].items(), # key=lambda x: x[1], # reverse=True)[:10]) # else: # print('*No marginal computed*') # print("\n") print('Running Viterbi...') observations = [(2, 0), (2, 0), (3, 0), (4, 0), (4, 0), (6, 0), (6, 1), (5, 0), (6, 0), (6, 2)] #observations = [(1, 6), (4, 6), (4, 7), None, (5, 6), (6, 5), (6, 6), None, (5, 5), (4, 4)] estimated_states = Viterbi(observations) print(estimated_states) print("\n")
# flags make_some_observations_missing = False use_graphics = True need_to_generate_data = True # parse command line arguments for arg in sys.argv[1:]: if arg == '--missing': make_some_observations_missing = True elif arg == '--nographics': use_graphics = False elif arg.startswith('--load='): filename = arg[7:] grid_width, grid_height, hidden_states, observations \ = robot.load_data(filename) robot.GRID_WIDTH = grid_width robot.GRID_HEIGHT = grid_height graphics.GRID_WIDTH = grid_width graphics.GRID_HEIGHT = grid_height need_to_generate_data = False num_time_steps = len(hidden_states) # if no data is loaded, then generate new data if need_to_generate_data: num_time_steps = 100 hidden_states, observations = \ generate_data(robot.initial_distribution, robot.transition_model, robot.observation_model,
old = old_transition_model(state) new = new_transition_model(state) possible_next_states = set(old.keys()) | set(new.keys()) for next_state in possible_next_states: sum_so_far += ( old[next_state] - new[next_state] )**2 return sum_so_far < 0.1 if __name__ == '__main__': need_to_generate_data = True use_graphics = True for arg in sys.argv[1:]: if arg.startswith('--load='): filename = arg[7:] hidden_states, observations = robot.load_data(filename) need_to_generate_data = False num_time_steps = len(hidden_states) # if no data is loaded, then generate new data if need_to_generate_data: num_time_steps = 1000 hidden_states, observations = \ inference.generate_data(robot.initial_distribution, robot.transition_model, robot.observation_model, num_time_steps, make_some_observations_missing=False) all_possible_hidden_states = robot.get_all_hidden_states() all_possible_observed_states = robot.get_all_observed_states()
def main(): # flags make_some_observations_missing = False use_graphics = True need_to_generate_data = True # parse command line arguments for arg in sys.argv[1:]: if arg == '--missing': make_some_observations_missing = True elif arg == '--nographics': use_graphics = False elif arg.startswith('--load='): filename = arg[7:] hidden_states, observations = robot.load_data(filename) need_to_generate_data = False num_time_steps = len(hidden_states) # if no data is loaded, then generate new data if need_to_generate_data: num_time_steps = 100 hidden_states, observations = \ generate_data(num_time_steps, make_some_observations_missing) print('Running forward-backward...') marginals = forward_backward(observations) print("\n") timestep = 2 print("Most likely parts of marginal at time %d:" % (timestep)) if marginals[timestep] is not None: print( sorted(marginals[timestep].items(), key=lambda x: x[1], reverse=True)[:10]) else: print('*No marginal computed*') print("\n") print('Running Viterbi...') estimated_states = Viterbi(observations) print("\n") print("Last 10 hidden states in the MAP estimate:") for time_step in range(num_time_steps - 10 - 1, num_time_steps): if estimated_states[time_step] is None: print('Missing') else: print(estimated_states[time_step]) print("\n") print('Finding second-best MAP estimate...') estimated_states2 = second_best(observations) print("\n") print("Last 10 hidden states in the second-best MAP estimate:") for time_step in range(num_time_steps - 10 - 1, num_time_steps): if estimated_states2[time_step] is None: print('Missing') else: print(estimated_states2[time_step]) print("\n") difference = 0 difference_time_steps = [] for time_step in range(num_time_steps): if estimated_states[time_step] != hidden_states[time_step]: difference += 1 difference_time_steps.append(time_step) print( "Number of differences between MAP estimate and true hidden " + "states:", difference) if difference > 0: print("Differences are at the following time steps: " + ", ".join( ["%d" % time_step for time_step in difference_time_steps])) print("\n") difference = 0 difference_time_steps = [] for time_step in range(num_time_steps): if estimated_states2[time_step] != hidden_states[time_step]: difference += 1 difference_time_steps.append(time_step) print( "Number of differences between second-best MAP estimate and " + "true hidden states:", difference) if difference > 0: print("Differences are at the following time steps: " + ", ".join( ["%d" % time_step for time_step in difference_time_steps])) print("\n") difference = 0 difference_time_steps = [] for time_step in range(num_time_steps): if estimated_states[time_step] != estimated_states2[time_step]: difference += 1 difference_time_steps.append(time_step) print( "Number of differences between MAP and second-best MAP " + "estimates:", difference) if difference > 0: print("Differences are at the following time steps: " + ", ".join( ["%d" % time_step for time_step in difference_time_steps])) print("\n") # display if use_graphics: app = graphics.playback_positions(hidden_states, observations, estimated_states, marginals) app.mainloop()
if __name__ == '__main__': # flags make_some_observations_missing = False use_graphics = True need_to_generate_data = True # parse command line arguments for arg in sys.argv[1:]: if arg == '--missing': make_some_observations_missing = True elif arg == '--nographics': use_graphics = False elif arg.startswith('--load='): filename = arg[7:] grid_width, grid_height, hidden_states, observations \ = robot.load_data(filename) robot.GRID_WIDTH = grid_width robot.GRID_HEIGHT = grid_height need_to_generate_data = False num_time_steps = len(hidden_states) else: raise ValueError("I don't know how to handle argument %s" % arg) # if no data is loaded, then generate new data if need_to_generate_data: num_time_steps = 100 hidden_states, observations = \ generate_data(robot.initial_distribution, robot.transition_model, robot.observation_model,
use_graphics = True need_to_generate_data = True use_spread_output = False # parameters # parse command line arguments for arg in sys.argv[1:]: if arg == "--missing": make_some_observations_missing = True elif arg == "--nographics": use_graphics = False elif arg.startswith("--load="): filename = arg[7:] grid_width, grid_height, hidden_states, observations = robot.load_data(filename) robot.GRID_WIDTH = grid_width robot.GRID_HEIGHT = grid_height graphics.GRID_WIDTH = grid_width graphics.GRID_HEIGHT = grid_height need_to_generate_data = False num_time_steps = len(hidden_states) elif arg == "--use-spread-output": use_spread_output = True else: raise ValueError("I don't know how to handle argument %s" % arg) # if no data is loaded, then generate new data if need_to_generate_data: num_time_steps = 10