def ga_hc_experiment(path_results):
    """Run some hill-climbs on variations of a GA space. Report
    performance."""
    uniformify_vals = [
        0.1, 0.5, .75, 0.9, 1.0, 1.0 / 0.9, 1.0 / .75, 2.0, 10.0
    ]
    noise_vals = [0, 1, 10, 100, 1000]
    results = OrderedDict()

    ga_length = 10
    tp_path = os.path.join(path_results, "ga_length_10", "TP.dat")
    try:
        ga_tp = np.genfromtxt(tp_path)
    except:
        ga_tp, _ = random_walks.generate_ga_tm(ga_length, pmut=1.0 / ga_length)
        np.savetxt(tp_path, ga_tp)

    fit_path = os.path.join(path_results, "ga_length_10", "fitness_vals.dat")
    try:
        ga_fit = np.genfromtxt(fit_path)
    except:
        ga_fit = random_walks.onemax_fitvals(ga_length)
        np.savetxt(fit_path, ga_fit)

    # just get mu(sigma()), don't bother with sigma(sigma())
    mu_sigma_vals = [
        random_walks.mu_sigma(random_walks.uniformify(ga_tp,
                                                      uniformify_val))[0]
        for uniformify_val in uniformify_vals
    ]

    reps = 30
    steps = 50
    for rep_name, tp, fitvals in [["ga", ga_tp, ga_fit]]:

        for noise_val in noise_vals:

            tmp_fit = random_walks.permute_vals(fitvals, noise_val)

            for uniformify_val in uniformify_vals:
                for rep in range(reps):
                    tp_tmp = random_walks.uniformify(tp, uniformify_val)
                    samples, fit_samples, best = random_walks.hillclimb(
                        tp_tmp, tmp_fit, steps, rw=False)
                    x = best
                    results[rep_name, uniformify_val, noise_val, rep] = x
    return results, mu_sigma_vals
def ga_hc_experiment(path_results):
    """Run some hill-climbs on variations of a GA space. Report
    performance."""
    uniformify_vals = [0.1, 0.5, .75, 0.9, 1.0, 1.0/0.9, 1.0/.75, 2.0, 10.0]
    noise_vals = [0, 1, 10, 100, 1000]
    results = OrderedDict()

    ga_length = 10
    tp_path = os.path.join(path_results, "ga_length_10", "TP.dat")
    try:
        ga_tp = np.genfromtxt(tp_path)
    except:
        ga_tp, _ = random_walks.generate_ga_tm(ga_length, pmut=1.0/ga_length)
        np.savetxt(tp_path, ga_tp)

    fit_path = os.path.join(path_results, "ga_length_10", "fitness_vals.dat")
    try:
        ga_fit = np.genfromtxt(fit_path)
    except:
        ga_fit = random_walks.onemax_fitvals(ga_length)
        np.savetxt(fit_path, ga_fit)

    # just get mu(sigma()), don't bother with sigma(sigma())
    mu_sigma_vals = [random_walks.mu_sigma(random_walks.uniformify(ga_tp, uniformify_val))[0]
                     for uniformify_val in uniformify_vals]

    reps = 30
    steps = 50
    for rep_name, tp, fitvals in [["ga", ga_tp, ga_fit]]:

        for noise_val in noise_vals:

            tmp_fit = random_walks.permute_vals(fitvals, noise_val)

            for uniformify_val in uniformify_vals:
                for rep in range(reps):
                    tp_tmp = random_walks.uniformify(tp, uniformify_val)
                    samples, fit_samples, best = random_walks.hillclimb(tp_tmp, tmp_fit,
                                                                        steps, rw=False)
                    x = best
                    results[rep_name, uniformify_val, noise_val, rep] = x
    return results, mu_sigma_vals
def ga_gp_rw_experiment(path_results):
    uniformify_vals = [0.1, 0.5, .75, 0.9, 1.0, 1.0/0.9, 1.0/.75, 2.0, 10.0]
    results = OrderedDict()

    ga_length = 10
    gp_depth = 2

    tp_path = os.path.join(path_results, "ga_length_10", "TP.dat")
    ga_tp = np.genfromtxt(tp_path)

    tp_path = os.path.join(path_results, "depth_2", "TP.dat")
    gp_tp = np.genfromtxt(tp_path)

    print "doing probability of encounter experiment"
    # Do the "probability of encounter" experiment first
    reps = 100
    steps = 50

    fit_path = os.path.join(path_results, "ga_length_10", "fitness_vals.dat")
    ga_fit = np.genfromtxt(fit_path)

    gp_fit = [float(s) for s in
              open(os.path.join(path_results, "depth_2", "all_fitness_values.dat")).readlines()]

    inds = 0, len(gp_fit)-1
    hc_encounters = [0.0, 0.0]
    rw_encounters = [0.0, 0.0]
    for rep_name, tp, fitvals in [["gp", gp_tp, gp_fit]]:
        for rep in range(reps):
            samples, fit_samples, best = random_walks.hillclimb(gp_tp, fitvals, steps, rw=False)
            for i in range(2):
                if inds[i] in samples:
                    hc_encounters[i] += 1.0 / reps
            samples, fit_samples, best = random_walks.hillclimb(gp_tp, fitvals, steps, rw=True)
            for i in range(2):
                if inds[i] in samples:
                    rw_encounters[i] += 1.0 / reps
    print "hc_encounters", hc_encounters
    print "rw_encounters", rw_encounters

    # now the GA v GP hillclimb experiments
    reps = 30
    for rep_name, tp, fitvals in [["ga", ga_tp, ga_fit],
                                  ["gp", gp_tp, gp_fit]]:
        for uniformify_val in uniformify_vals:
            for rep in range(reps):
                tp_tmp = random_walks.uniformify(tp, uniformify_val)
                samples, fit_samples, best = random_walks.hillclimb(tp_tmp, fitvals, steps, rw=True)
                x = float(len(set(samples))) / len(samples)
                results[rep_name, uniformify_val, rep] = x
    return results, ga_fit, gp_fit
def ga_gp_rw_experiment(path_results):
    uniformify_vals = [
        0.1, 0.5, .75, 0.9, 1.0, 1.0 / 0.9, 1.0 / .75, 2.0, 10.0
    ]
    results = OrderedDict()

    ga_length = 10
    gp_depth = 2

    tp_path = os.path.join(path_results, "ga_length_10", "TP.dat")
    ga_tp = np.genfromtxt(tp_path)

    tp_path = os.path.join(path_results, "depth_2", "TP.dat")
    gp_tp = np.genfromtxt(tp_path)

    print "doing probability of encounter experiment"
    # Do the "probability of encounter" experiment first
    reps = 100
    steps = 50

    fit_path = os.path.join(path_results, "ga_length_10", "fitness_vals.dat")
    ga_fit = np.genfromtxt(fit_path)

    gp_fit = [
        float(s) for s in open(
            os.path.join(path_results, "depth_2",
                         "all_fitness_values.dat")).readlines()
    ]

    inds = 0, len(gp_fit) - 1
    hc_encounters = [0.0, 0.0]
    rw_encounters = [0.0, 0.0]
    for rep_name, tp, fitvals in [["gp", gp_tp, gp_fit]]:
        for rep in range(reps):
            samples, fit_samples, best = random_walks.hillclimb(gp_tp,
                                                                fitvals,
                                                                steps,
                                                                rw=False)
            for i in range(2):
                if inds[i] in samples:
                    hc_encounters[i] += 1.0 / reps
            samples, fit_samples, best = random_walks.hillclimb(gp_tp,
                                                                fitvals,
                                                                steps,
                                                                rw=True)
            for i in range(2):
                if inds[i] in samples:
                    rw_encounters[i] += 1.0 / reps
    print "hc_encounters", hc_encounters
    print "rw_encounters", rw_encounters

    # now the GA v GP hillclimb experiments
    reps = 30
    for rep_name, tp, fitvals in [["ga", ga_tp, ga_fit], ["gp", gp_tp,
                                                          gp_fit]]:
        for uniformify_val in uniformify_vals:
            for rep in range(reps):
                tp_tmp = random_walks.uniformify(tp, uniformify_val)
                samples, fit_samples, best = random_walks.hillclimb(tp_tmp,
                                                                    fitvals,
                                                                    steps,
                                                                    rw=True)
                x = float(len(set(samples))) / len(samples)
                results[rep_name, uniformify_val, rep] = x
    return results, ga_fit, gp_fit