Example #1
0
def __train_and_save(individuals, training_results_path,
                     training_program_path):
    """
    Trains the individuals with the given traning program and save the logss

    :param individuals: Individuals to train
    :param training_results_path: Path to save logs to
    :param training_program_path: Path to training program


    :returns: Timestamp of the last completed workout

    """
    column_names = ["ID", "Exercise", "Weight", "Reps", "Timestamp"]
    training_logs = pd.DataFrame(columns=column_names)

    # load training program

    # perform training
    for individual in individuals:
        training_dataframe = gym.load_training(training_program_path,
                                               individual.bench_press_movement)
        performed_training = gym.train(training_dataframe, individual)
        performed_training.insert(0, "ID", [individual.id] *
                                  performed_training.shape[0], True)
        training_logs = training_logs.append(performed_training)

    # write training logs to given file path
    training_logs.to_csv(training_results_path, sep="|", index=False)

    return training_logs["Timestamp"].iloc[-1]
Example #2
0
 def perform_training(index, _from, _to):
     # perform training
     for individual in individuals[_from:_to]:
         training_dataframe = gym.load_training(
             training_program_path, individual.bench_press_movement)
         performed_training = gym.train(training_dataframe, individual)
         performed_training.insert(0, "ID", [individual.id] *
                                   performed_training.shape[0], True)
         training_logs_list[index] = training_logs_list[index].append(
             performed_training)
                                epsilon_min=epsilon_min,
                                batch_size=batch_size)

    def build_model(self):
        model = Sequential()
        model.add(Dense(12, input_shape=(self.state_size, ),
                        activation='relu'))
        model.add(Dense(12, input_shape=(self.state_size, ),
                        activation='relu'))
        model.add(Dense(2, activation='linear'))
        model.compile(Adam(lr=self.learning_rate), 'mse')

        model.load_weights("models/cartpole-v2.h5")
        return model


if __name__ == '__main__':
    rospy.init_node('cartpole3D_ruippeixotog',
                    anonymous=True,
                    log_level=rospy.FATAL)
    episodes_training = rospy.get_param('/cartpole_v0/episodes')
    episodes_running = rospy.get_param('/cartpole_v0/episodes_running')
    max_timesteps = rospy.get_param('/cartpole_v0/max_timesteps', 10000)

    gym = GymRunner('CartPoleStayUp-v0', '/tmp/cartpole-experiment-2',
                    max_timesteps)
    agent = CartPoleAgent()
    gym.train(agent, episodes_training)
    agent.model.save_weights("/tmp/cartpole-v2.h5", overwrite=True)
    gym.run(agent, episodes_running, do_train=False)
Example #4
0
def infer_model_parameters(individuals_path, training_protocol_path,
                           performance_gain_mean, performance_gain_std,
                           threshold):
    """Run training study in accordance to given population parameters, training protocols and
    expected results. The internal modelling parameters of the population will then be inferred
    by trying random values until a good fit on performance is found for training population.

    :param individuals_path: Path to the saved individuals to use.
    :param training_protocol_path: Path to the training protocol to follow.
    :param performance_gain_mean: The mean of peformance increases in terms of 1RM.
    :param performance_gain_std: The standard deviation of performance increases in terms of 1RM.
    :param threshold: The allowed difference between expected and actual mean and standard
    deviation in performance gains.
    :returns: The inferred internal model parameters and the resulting accuracy in terms of
    difference between actual and expected performance.
    """

    # load individuals
    pre_training_individuals = load_individuals(individuals_path)

    # construct training instructions to use for simulation for each individual
    individual_training = create_training_dict(pre_training_individuals,
                                               training_protocol_path)

    # parameters to estimate
    fitness_gain = 0
    fatigue_gain = 0
    fitness_decay = 0
    fatigue_decay = 0

    delta = 99999999999
    best_delta = delta
    iteration_mean = 0
    iteration_stdev = 0

    # Train individuals with randomized parameters and see if results are correct
    while delta > threshold:
        post_training_individuals = [
            copy.deepcopy(individual)
            for individual in pre_training_individuals
        ]

        # Generate random parameters
        fitness_decay = np.random.randint(2, 50)

        # Integer between 1 and fitness_decay (fitness lasts longer than fatigue)
        fatigue_decay = np.random.randint(1, fitness_decay)

        # Float between 1 and 5
        fitness_gain, fatigue_gain = np.random.uniform(1, 5, 2)

        # Set same parameters to each individual and train them
        for individual in post_training_individuals:
            individual.bench_press_movement.fitness_decay = fitness_decay
            individual.bench_press_movement.fatigue_decay = fatigue_decay
            individual.bench_press_movement.fitness_gain = fitness_gain
            individual.bench_press_movement.fatigue_gain = fatigue_gain
            gym.train(individual_training[individual.id], individual)

        iteration_mean, iteration_stdev = \
            calculate_performance_gain_distribution(pre_training_individuals,
                                                    post_training_individuals)

        delta = abs(performance_gain_mean - iteration_mean) + \
                abs(performance_gain_std - iteration_stdev)

        best_delta = min(delta, best_delta)

        # update user on progress
        print("Current iteration delta: {}".format(delta))
        print("Best delta so far: {}".format(best_delta))

    print("Distribution mean error: {}".format(
        abs(iteration_mean - performance_gain_mean)))
    print("Distribution standard deviation error: {}".format(
        abs(iteration_stdev - performance_gain_std)))
    print("fitness_gain: {}".format(fitness_gain))
    print("fatigue_gain: {}".format(fatigue_gain))
    print("fitness_decay: {}".format(fitness_decay))
    print("fatigue_decay: {}".format(fatigue_decay))

    # parameters have been found
    return fitness_gain, fatigue_gain, fitness_decay, fatigue_decay, iteration_mean, iteration_stdev