示例#1
0
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")
示例#2
0
    # 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,
示例#3
0
        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()
示例#4
0
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()
示例#5
0
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,
示例#6
0
    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