Kpid = chromosome.get_params()
        pid.set_params(Kpid)

        for c in range(chromosome.get_count()):

            pid.clear()
            pendulum.reset(upper=np.pi / 4)
            response = []

            for k in range(Iteration):
                th = pendulum.get('th')
                response.append(th)
                pid.run(th, k)
                cout = pid.get_control_out()
                cout = np.clip(cout, -max_torque, max_torque)
                pendulum.apply(cout)

            temp_fitness = genetics.calc_fitness(response)
            chromosome.add_fitness(temp_fitness)

        genetics.update_genscore(chromosome.get_fitness())

        if chromosome.get_fitness() > genetics.get_local_best_fitness():
            genetics.set_local_best(chromosome)

            if chromosome.get_fitness() > genetics.get_global_best_fitness():
                genetics.set_global_best(chromosome)

    genetics.update_averages()
    genetics.natural_selection()
    genetics.generate()