def obtain_ga(start_position, stride):
    _, _, landscape = get_rastrigin("./dataset/rastrigin.csv")
    function = GA(size=90, scope=len(landscape), start_position=start_position, stride=stride)
    function.evolute(terrain=landscape, generations=200, evolute_type=inherent.MAX)

    for i in [0, 49, 99, 149, 199]:
        clime_by_generation(function.recorder.get_result(), "GA", i, False,
                            mount_path="./dataset/rastrigin.csv", save_path="./results/")
def obtain_pbil():
    _, _, landscape = get_rastrigin("./dataset/rastrigin.csv")
    function = PBIL(size=90, scope=len(landscape))
    function.evolute(terrain=landscape, generations=80, evolute_type=inherent.MAX)

    for i in [0, 19, 39, 59, 79]:
        clime_by_generation(function.recorder.get_result(), "PBIL", i, False,
                            mount_path="./dataset/rastrigin.csv", save_path="./results/")
def obtain_bi():
    _, _, landscape = get_rastrigin("./dataset/rastrigin.csv")
    function = BI(size=10, init_interval=40, min_interval=3, scope=len(landscape))
    function.evolute(terrain=landscape, generations=8, evolute_type=inherent.MAX)

    for i in [0, 1, 3, 5, 7]:
        clime_by_generation(function.recorder.get_result(), "RET", i, False,
                            mount_path="./dataset/rastrigin.csv", save_path="./results/")
def obtain_bi():
    _, _, landscape = get_rastrigin("./dataset/rastrigin.csv")
    function = BI(size=10, init_interval=40, min_interval=3, scope=len(landscape))
    function.evolute(terrain=landscape, generations=8, evolute_type=inherent.MAX)

    for i in [0, 1, 3, 5, 7]:
        clime_by_generation(function.recorder.get_result(), "RET", i, False,
                            mount_path="./dataset/rastrigin.csv", save_path="./results/")


def get_min(landscape):
    height = landscape[0][0]
    position = [0, 0]
    for row in range(len(landscape)):
        for col in range(len(landscape[row])):
            if landscape[row][col] < height:
                height = landscape[row][col]
                position = [row, col]

    return position, height


if __name__ == '__main__':
    _, _, fitness_landscape = get_rastrigin("./dataset/rastrigin.csv")
    min_position, min_height = get_min(fitness_landscape)
    obtain_ga(min_position, 15)
    obtain_pbil()
    obtain_cmaes(min_position, 28)
    obtain_bi()