add some test deep reinforcement learning
This commit is contained in:
@@ -352,6 +352,16 @@ if(/*(qlStatus->nb_episodes %125 == 0) &&*/ pprint->printed){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *fileNameDateScore(char * pre, char* post,size_t score){
|
||||||
|
char *filename=malloc(256);
|
||||||
|
time_t t = time(NULL);
|
||||||
|
struct tm tm = *localtime(&t);
|
||||||
|
sprintf(filename,"%s%d%02d%02d_%02dh%02dm%02ds_%ld%s",pre, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec,score,post);
|
||||||
|
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void learn_to_drive(struct RL_agent * rlAgent){
|
void learn_to_drive(struct RL_agent * rlAgent){
|
||||||
int action;
|
int action;
|
||||||
@@ -387,7 +397,14 @@ void learn_to_drive(struct RL_agent * rlAgent){
|
|||||||
//push_back_list_TYPE_L_INT(qlStatus->list_main_cumul, car_status->cumulative_reward);
|
//push_back_list_TYPE_L_INT(qlStatus->list_main_cumul, car_status->cumulative_reward);
|
||||||
// printf(" cumul : %ld ", car_status->cumulative_reward);
|
// printf(" cumul : %ld ", car_status->cumulative_reward);
|
||||||
if(car_status->cumulative_reward > qlStatus->progress_best_cumul->end_list->value){
|
if(car_status->cumulative_reward > qlStatus->progress_best_cumul->end_list->value){
|
||||||
|
|
||||||
push_back_list_TYPE_L_INT(qlStatus->progress_best_cumul, car_status->cumulative_reward);
|
push_back_list_TYPE_L_INT(qlStatus->progress_best_cumul, car_status->cumulative_reward);
|
||||||
|
char *file = fileNameDateScore(".ff_main_",".txt",car_status->cumulative_reward);
|
||||||
|
EXPORT_TO_FILE_TENSOR_ATTRIBUTE_IN_NNEURONS(TYPE_FLOAT, rlAgent->networks->main_net ,weight_in, file);
|
||||||
|
free(file);
|
||||||
|
file = fileNameDateScore(".ff_target_",".txt",car_status->cumulative_reward);
|
||||||
|
EXPORT_TO_FILE_TENSOR_ATTRIBUTE_IN_NNEURONS(TYPE_FLOAT, rlAgent->networks->target_net ,weight_in, file);
|
||||||
|
free(file);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "neuron_t/neuron_t.h"
|
#include "neuron_t/neuron_t.h"
|
||||||
|
#include "neuron_t/nneuron_t_file.h"
|
||||||
|
|
||||||
#include "list_t/list_t.h"
|
#include "list_t/list_t.h"
|
||||||
|
|
||||||
|
|||||||
@@ -342,9 +342,12 @@ void print2D_blocks_indexOne_withPoint(struct blocks *blk, float scale_x, float
|
|||||||
if(is_in_blocks(blk_point, coord))
|
if(is_in_blocks(blk_point, coord))
|
||||||
printf("\033[0;31m"); // red
|
printf("\033[0;31m"); // red
|
||||||
int in = is_in_blocks(blk,coord);
|
int in = is_in_blocks(blk,coord);
|
||||||
if(in)
|
if(in){
|
||||||
printf("%d",in);
|
if(in>9){
|
||||||
else
|
int div=in%10;
|
||||||
|
printf("%d",div);
|
||||||
|
}else printf("%d",in);
|
||||||
|
}else
|
||||||
printf("."); //printf(" ");
|
printf("."); //printf(" ");
|
||||||
printf("\033[0;37m"); // white
|
printf("\033[0;37m"); // white
|
||||||
}
|
}
|
||||||
|
|||||||
+385
-25
@@ -457,7 +457,7 @@ TEST(first_learn_vehicle_rev50_8){
|
|||||||
int randomRange = 500;
|
int randomRange = 500;
|
||||||
size_t nb_prod_thread = 2;
|
size_t nb_prod_thread = 2;
|
||||||
size_t nb_calc_thread = 4;
|
size_t nb_calc_thread = 4;
|
||||||
float learning_rate = 0.001;
|
float learning_rate =0.00001 /*0.001*/;
|
||||||
struct networks_qlearning *nnetworks = create_nework_qlearning(
|
struct networks_qlearning *nnetworks = create_nework_qlearning(
|
||||||
pconf,
|
pconf,
|
||||||
randomize, minR, maxR, randomRange,
|
randomize, minR, maxR, randomRange,
|
||||||
@@ -465,7 +465,10 @@ TEST(first_learn_vehicle_rev50_8){
|
|||||||
learning_rate
|
learning_rate
|
||||||
);
|
);
|
||||||
|
|
||||||
struct status_qlearning *qlstatus = create_status_qlearning ();
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->main_net, weight_in, ".ff_main_20240717_01h42m16s_5300.txt");
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->target_net, weight_in, ".ff_target_20240717_01h42m16s_5300.txt");
|
||||||
|
|
||||||
|
struct status_qlearning *qlstatus = create_status_qlearning ();
|
||||||
struct delay_params *dly = create_delay_params (
|
struct delay_params *dly = create_delay_params (
|
||||||
500/*size_t delay_between_episodes*/,
|
500/*size_t delay_between_episodes*/,
|
||||||
50/*size_t delay_between_games*/
|
50/*size_t delay_between_games*/
|
||||||
@@ -475,7 +478,7 @@ TEST(first_learn_vehicle_rev50_8){
|
|||||||
0.95/*float gamma*/,
|
0.95/*float gamma*/,
|
||||||
learning_rate,
|
learning_rate,
|
||||||
0 /* (not used!)float discount_factor*/,
|
0 /* (not used!)float discount_factor*/,
|
||||||
0.99 /*float exploration_factor*/,
|
0.0001 /* 0.99*/ /*float exploration_factor*/,
|
||||||
20/*long int nb_training_before_update_weight_in_target*/,
|
20/*long int nb_training_before_update_weight_in_target*/,
|
||||||
10000/*size_t number_episodes*/
|
10000/*size_t number_episodes*/
|
||||||
);
|
);
|
||||||
@@ -496,7 +499,8 @@ TEST(first_learn_vehicle_rev50_8){
|
|||||||
pprint /*struct print_params * pprint*/,
|
pprint /*struct print_params * pprint*/,
|
||||||
qlparams/*struct qlearning_params *qlearnParams*/
|
qlparams/*struct qlearning_params *qlearnParams*/
|
||||||
);
|
);
|
||||||
|
char c;
|
||||||
|
scanf("%c",&c);
|
||||||
learn_to_drive(rlAgent);
|
learn_to_drive(rlAgent);
|
||||||
|
|
||||||
free_RL_agent(rlAgent);
|
free_RL_agent(rlAgent);
|
||||||
@@ -515,9 +519,26 @@ TEST(first_learn_vehicle_50__9){
|
|||||||
size_t dim= 2;
|
size_t dim= 2;
|
||||||
struct blocks * path = create_blocks(nb_block, dim);
|
struct blocks * path = create_blocks(nb_block, dim);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){0,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){150,250});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){150,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){250,150});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){250,80});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){360,200});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){360,70});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){600,170});
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){600,90});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){760,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){300,300});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){760,350});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){0,250});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){410,300});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
copy_coordinate(path->lower_bound_block[4], (float[]){0,0});
|
copy_coordinate(path->lower_bound_block[4], (float[]){0,0});
|
||||||
copy_coordinate(path->upper_bound_block[4], (float[]){150,250});
|
copy_coordinate(path->upper_bound_block[4], (float[]){150,250});
|
||||||
copy_coordinate(path->lower_bound_block[3], (float[]){150,40});
|
copy_coordinate(path->lower_bound_block[3], (float[]){150,40});
|
||||||
@@ -534,22 +555,6 @@ TEST(first_learn_vehicle_50__9){
|
|||||||
copy_coordinate(path->upper_bound_block[5], (float[]){410,300});
|
copy_coordinate(path->upper_bound_block[5], (float[]){410,300});
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
copy_coordinate(path->lower_bound_block[0], (float[]){0,0});
|
|
||||||
copy_coordinate(path->upper_bound_block[0], (float[]){150,250});
|
|
||||||
copy_coordinate(path->lower_bound_block[1], (float[]){150,0});
|
|
||||||
copy_coordinate(path->upper_bound_block[1], (float[]){250,150});
|
|
||||||
copy_coordinate(path->lower_bound_block[2], (float[]){250,80});
|
|
||||||
copy_coordinate(path->upper_bound_block[2], (float[]){360,200});
|
|
||||||
copy_coordinate(path->lower_bound_block[3], (float[]){360,70});
|
|
||||||
copy_coordinate(path->upper_bound_block[3], (float[]){600,170});
|
|
||||||
copy_coordinate(path->lower_bound_block[4], (float[]){600,90});
|
|
||||||
copy_coordinate(path->upper_bound_block[4], (float[]){760,300});
|
|
||||||
copy_coordinate(path->lower_bound_block[5], (float[]){300,300});
|
|
||||||
copy_coordinate(path->upper_bound_block[5], (float[]){760,350});
|
|
||||||
copy_coordinate(path->lower_bound_block[6], (float[]){0,250});
|
|
||||||
copy_coordinate(path->upper_bound_block[6], (float[]){410,300});
|
|
||||||
|
|
||||||
copy_coordinate(path->lower_bound_block[0], (float[]){0,0});
|
copy_coordinate(path->lower_bound_block[0], (float[]){0,0});
|
||||||
copy_coordinate(path->upper_bound_block[0], (float[]){100,250});
|
copy_coordinate(path->upper_bound_block[0], (float[]){100,250});
|
||||||
copy_coordinate(path->lower_bound_block[1], (float[]){100,0});
|
copy_coordinate(path->lower_bound_block[1], (float[]){100,0});
|
||||||
@@ -616,15 +621,22 @@ TEST(first_learn_vehicle_50__9){
|
|||||||
int randomRange = 500;
|
int randomRange = 500;
|
||||||
size_t nb_prod_thread = 2;
|
size_t nb_prod_thread = 2;
|
||||||
size_t nb_calc_thread = 4;
|
size_t nb_calc_thread = 4;
|
||||||
float learning_rate = 0.001;
|
float learning_rate = 0.00001 /* 0.001*/;
|
||||||
struct networks_qlearning *nnetworks = create_nework_qlearning(
|
struct networks_qlearning *nnetworks = create_nework_qlearning(
|
||||||
pconf,
|
pconf,
|
||||||
randomize, minR, maxR, randomRange,
|
randomize, minR, maxR, randomRange,
|
||||||
nb_prod_thread, nb_calc_thread,
|
nb_prod_thread, nb_calc_thread,
|
||||||
learning_rate
|
learning_rate
|
||||||
);
|
);
|
||||||
|
/*
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->main_net, weight_in, ".ff_main_20240717_01h42m16s_5300.txt");
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->target_net, weight_in, ".ff_target_20240717_01h42m16s_5300.txt");
|
||||||
|
*/
|
||||||
|
|
||||||
struct status_qlearning *qlstatus = create_status_qlearning ();
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->main_net, weight_in, ".ff_main_20240717_09h11m09s_1700.txt");
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->target_net, weight_in, ".ff_target_20240717_09h11m09s_1700.txt");
|
||||||
|
|
||||||
|
struct status_qlearning *qlstatus = create_status_qlearning ();
|
||||||
struct delay_params *dly = create_delay_params (
|
struct delay_params *dly = create_delay_params (
|
||||||
500/*size_t delay_between_episodes*/,
|
500/*size_t delay_between_episodes*/,
|
||||||
50/*size_t delay_between_games*/
|
50/*size_t delay_between_games*/
|
||||||
@@ -634,7 +646,7 @@ TEST(first_learn_vehicle_50__9){
|
|||||||
0.95/*float gamma*/,
|
0.95/*float gamma*/,
|
||||||
learning_rate,
|
learning_rate,
|
||||||
0 /* (not used!)float discount_factor*/,
|
0 /* (not used!)float discount_factor*/,
|
||||||
0.99 /*float exploration_factor*/,
|
0.0001/*0.99*/ /*float exploration_factor*/,
|
||||||
20/*long int nb_training_before_update_weight_in_target*/,
|
20/*long int nb_training_before_update_weight_in_target*/,
|
||||||
10000/*size_t number_episodes*/
|
10000/*size_t number_episodes*/
|
||||||
);
|
);
|
||||||
@@ -656,6 +668,7 @@ TEST(first_learn_vehicle_50__9){
|
|||||||
qlparams/*struct qlearning_params *qlearnParams*/
|
qlparams/*struct qlearning_params *qlearnParams*/
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
learn_to_drive(rlAgent);
|
learn_to_drive(rlAgent);
|
||||||
|
|
||||||
free_RL_agent(rlAgent);
|
free_RL_agent(rlAgent);
|
||||||
@@ -668,6 +681,353 @@ TEST(first_learn_vehicle_50__9){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
TEST(first_learn_vehicle_50__10){
|
||||||
|
size_t nb_block = 7;
|
||||||
|
size_t dim= 2;
|
||||||
|
struct blocks * path = create_blocks(nb_block, dim);
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){0,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){100,250});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){100,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){250,80});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){250,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){360,140});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){360,70});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){600,140});
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){600,90});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){720,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){300,300});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){720,350});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){0,250});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){410,300});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){0,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){150,250});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){150,40});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){250,150});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){250,80});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){360,200});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){360,70});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){600,150});
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){600,90});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){760,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){260,300});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){760,360});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){0,250});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){410,300});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){0,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){150,250});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){150,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){250,150});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){250,80});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){360,200});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){360,70});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){600,170});
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){600,90});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){760,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){300,300});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){760,350});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){0,250});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){410,300});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){0,300});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){400,700});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){100,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){1000,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){1000,50});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){1400,500});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){1400,200});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){1800,700});
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){1100,700});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){1700,1000});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){800,600});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){1100,975});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){100,700});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){800,975});
|
||||||
|
*/
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){0,3});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){4,7});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){1,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){10,3});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){10,0.5});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){14,5});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){14,2});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){18,7});
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){11,7});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){17,10});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){8,6});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){11,9.75});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){1,7});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){8,9.75});
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
update_bounds_limits_blocks(path);
|
||||||
|
|
||||||
|
struct vehicle *car = create_vehicle(path);
|
||||||
|
|
||||||
|
config_layers *pconf = create_config_layers_from_OneD(4,(size_t[]){3,24,24,3}); /* 3 input , 3 target; 2 hidden layer with 24 neurons each */
|
||||||
|
//config_layers *pconf = create_config_layers_from_OneD(4,(size_t[]){3,14,14,3}); /* 3 input , 3 target; 2 hidden layer with 24 neurons each */
|
||||||
|
|
||||||
|
bool randomize=true;
|
||||||
|
float minR = -0.5, maxR = 0.5;
|
||||||
|
int randomRange = 500;
|
||||||
|
size_t nb_prod_thread = 2;
|
||||||
|
size_t nb_calc_thread = 4;
|
||||||
|
float learning_rate = 0.00001 /* 0.001*/;
|
||||||
|
struct networks_qlearning *nnetworks = create_nework_qlearning(
|
||||||
|
pconf,
|
||||||
|
randomize, minR, maxR, randomRange,
|
||||||
|
nb_prod_thread, nb_calc_thread,
|
||||||
|
learning_rate
|
||||||
|
);
|
||||||
|
/*
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->main_net, weight_in, ".ff_main_20240717_01h42m16s_5300.txt");
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->target_net, weight_in, ".ff_target_20240717_01h42m16s_5300.txt");
|
||||||
|
*/
|
||||||
|
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->main_net, weight_in, ".ff_main_20240717_09h11m09s_1700.txt");
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->target_net, weight_in, ".ff_target_20240717_09h11m09s_1700.txt");
|
||||||
|
|
||||||
|
struct status_qlearning *qlstatus = create_status_qlearning ();
|
||||||
|
struct delay_params *dly = create_delay_params (
|
||||||
|
500/*size_t delay_between_episodes*/,
|
||||||
|
50/*size_t delay_between_games*/
|
||||||
|
);
|
||||||
|
|
||||||
|
struct qlearning_params *qlparams = create_qlearning_params (
|
||||||
|
0.95/*float gamma*/,
|
||||||
|
learning_rate,
|
||||||
|
0 /* (not used!)float discount_factor*/,
|
||||||
|
0.0001/*0.99*/ /*float exploration_factor*/,
|
||||||
|
20/*long int nb_training_before_update_weight_in_target*/,
|
||||||
|
10000/*size_t number_episodes*/
|
||||||
|
);
|
||||||
|
/* UPDATE_ATTRIBUTE_NEURONE_IN_ALL_LAYERS(TYPE_FLOAT, nnetworks->main_net, d_f_act , df );
|
||||||
|
UPDATE_ATTRIBUTE_NEURONE_IN_ALL_LAYERS(TYPE_FLOAT, nnetworks->main_net, f_act, f );
|
||||||
|
UPDATE_ATTRIBUTE_NEURONE_IN_ALL_LAYERS(TYPE_FLOAT, nnetworks->target_net, d_f_act , df );
|
||||||
|
UPDATE_ATTRIBUTE_NEURONE_IN_ALL_LAYERS(TYPE_FLOAT, nnetworks->target_net, f_act , f );
|
||||||
|
*/
|
||||||
|
struct print_params *pprint = create_print_params(
|
||||||
|
12/*float scale_x*/,12 /*float scale_y*/,
|
||||||
|
dly/*struct delay_params * dly_p*/
|
||||||
|
);
|
||||||
|
|
||||||
|
struct RL_agent *rlAgent = create_RL_agent (
|
||||||
|
nnetworks /*struct networks_qlearning * networks*/,
|
||||||
|
car /*struct vehicle * car*/,
|
||||||
|
qlstatus /*struct status_qlearning * status*/,
|
||||||
|
pprint /*struct print_params * pprint*/,
|
||||||
|
qlparams/*struct qlearning_params *qlearnParams*/
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
learn_to_drive(rlAgent);
|
||||||
|
|
||||||
|
free_RL_agent(rlAgent);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
TEST(first_learn_vehicle_50__11){
|
||||||
|
size_t nb_block = 10;
|
||||||
|
size_t dim= 2;
|
||||||
|
struct blocks * path = create_blocks(nb_block, dim);
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[9], (float[]){0,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[9], (float[]){100,250});
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){100,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){250,80});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){250,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){360,140});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){360,70});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){600,140});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){600,90});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){720,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){300,300});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){720,350});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){300,150});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){410,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){120,150});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){300,210});
|
||||||
|
copy_coordinate(path->lower_bound_block[7], (float[]){120,210});
|
||||||
|
copy_coordinate(path->upper_bound_block[7], (float[]){270,350});
|
||||||
|
copy_coordinate(path->lower_bound_block[8], (float[]){0,250});
|
||||||
|
copy_coordinate(path->upper_bound_block[8], (float[]){120,350});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){0,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){150,250});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){150,40});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){250,150});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){250,80});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){360,200});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){360,70});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){600,150});
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){600,90});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){760,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){260,300});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){760,360});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){0,250});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){410,300});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){0,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){150,250});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){150,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){250,150});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){250,80});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){360,200});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){360,70});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){600,170});
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){600,90});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){760,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){300,300});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){760,350});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){0,250});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){410,300});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){0,300});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){400,700});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){100,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){1000,300});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){1000,50});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){1400,500});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){1400,200});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){1800,700});
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){1100,700});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){1700,1000});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){800,600});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){1100,975});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){100,700});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){800,975});
|
||||||
|
*/
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
copy_coordinate(path->lower_bound_block[0], (float[]){0,3});
|
||||||
|
copy_coordinate(path->upper_bound_block[0], (float[]){4,7});
|
||||||
|
copy_coordinate(path->lower_bound_block[1], (float[]){1,0});
|
||||||
|
copy_coordinate(path->upper_bound_block[1], (float[]){10,3});
|
||||||
|
copy_coordinate(path->lower_bound_block[2], (float[]){10,0.5});
|
||||||
|
copy_coordinate(path->upper_bound_block[2], (float[]){14,5});
|
||||||
|
copy_coordinate(path->lower_bound_block[3], (float[]){14,2});
|
||||||
|
copy_coordinate(path->upper_bound_block[3], (float[]){18,7});
|
||||||
|
copy_coordinate(path->lower_bound_block[4], (float[]){11,7});
|
||||||
|
copy_coordinate(path->upper_bound_block[4], (float[]){17,10});
|
||||||
|
copy_coordinate(path->lower_bound_block[5], (float[]){8,6});
|
||||||
|
copy_coordinate(path->upper_bound_block[5], (float[]){11,9.75});
|
||||||
|
copy_coordinate(path->lower_bound_block[6], (float[]){1,7});
|
||||||
|
copy_coordinate(path->upper_bound_block[6], (float[]){8,9.75});
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
update_bounds_limits_blocks(path);
|
||||||
|
|
||||||
|
struct vehicle *car = create_vehicle(path);
|
||||||
|
|
||||||
|
config_layers *pconf = create_config_layers_from_OneD(4,(size_t[]){3,24,24,3}); /* 3 input , 3 target; 2 hidden layer with 24 neurons each */
|
||||||
|
//config_layers *pconf = create_config_layers_from_OneD(4,(size_t[]){3,14,14,3}); /* 3 input , 3 target; 2 hidden layer with 24 neurons each */
|
||||||
|
|
||||||
|
bool randomize=true;
|
||||||
|
float minR = -0.5, maxR = 0.5;
|
||||||
|
int randomRange = 500;
|
||||||
|
size_t nb_prod_thread = 2;
|
||||||
|
size_t nb_calc_thread = 4;
|
||||||
|
float learning_rate = 0.00001 /* 0.001*/;
|
||||||
|
struct networks_qlearning *nnetworks = create_nework_qlearning(
|
||||||
|
pconf,
|
||||||
|
randomize, minR, maxR, randomRange,
|
||||||
|
nb_prod_thread, nb_calc_thread,
|
||||||
|
learning_rate
|
||||||
|
);
|
||||||
|
|
||||||
|
//print_vehicle_n_path(car, 12, 12);
|
||||||
|
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->main_net, weight_in, ".ff_main_20240717_09h11m09s_1700.txt");
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, nnetworks->target_net, weight_in, ".ff_target_20240717_09h11m09s_1700.txt");
|
||||||
|
|
||||||
|
struct status_qlearning *qlstatus = create_status_qlearning ();
|
||||||
|
struct delay_params *dly = create_delay_params (
|
||||||
|
500/*size_t delay_between_episodes*/,
|
||||||
|
50/*size_t delay_between_games*/
|
||||||
|
);
|
||||||
|
|
||||||
|
struct qlearning_params *qlparams = create_qlearning_params (
|
||||||
|
0.95/*float gamma*/,
|
||||||
|
learning_rate,
|
||||||
|
0 /* (not used!)float discount_factor*/,
|
||||||
|
0.0001/*0.99*/ /*float exploration_factor*/,
|
||||||
|
20/*long int nb_training_before_update_weight_in_target*/,
|
||||||
|
10000/*size_t number_episodes*/
|
||||||
|
);
|
||||||
|
/* UPDATE_ATTRIBUTE_NEURONE_IN_ALL_LAYERS(TYPE_FLOAT, nnetworks->main_net, d_f_act , df );
|
||||||
|
UPDATE_ATTRIBUTE_NEURONE_IN_ALL_LAYERS(TYPE_FLOAT, nnetworks->main_net, f_act, f );
|
||||||
|
UPDATE_ATTRIBUTE_NEURONE_IN_ALL_LAYERS(TYPE_FLOAT, nnetworks->target_net, d_f_act , df );
|
||||||
|
UPDATE_ATTRIBUTE_NEURONE_IN_ALL_LAYERS(TYPE_FLOAT, nnetworks->target_net, f_act , f );
|
||||||
|
*/
|
||||||
|
struct print_params *pprint = create_print_params(
|
||||||
|
12/*float scale_x*/,12 /*float scale_y*/,
|
||||||
|
dly/*struct delay_params * dly_p*/
|
||||||
|
);
|
||||||
|
|
||||||
|
struct RL_agent *rlAgent = create_RL_agent (
|
||||||
|
nnetworks /*struct networks_qlearning * networks*/,
|
||||||
|
car /*struct vehicle * car*/,
|
||||||
|
qlstatus /*struct status_qlearning * status*/,
|
||||||
|
pprint /*struct print_params * pprint*/,
|
||||||
|
qlparams/*struct qlearning_params *qlearnParams*/
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
learn_to_drive(rlAgent);
|
||||||
|
|
||||||
|
free_RL_agent(rlAgent);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
TEST(first_learn_vehicle){
|
TEST(first_learn_vehicle){
|
||||||
size_t nb_block = 7;
|
size_t nb_block = 7;
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ do{\
|
|||||||
\
|
\
|
||||||
ppEnd=ttmp;\
|
ppEnd=ttmp;\
|
||||||
if( !bracketsDown){\
|
if( !bracketsDown){\
|
||||||
while(*ttmp!=0 && *ppEnd!=']' ){\
|
while(*ttmp!='\0' && *ppEnd!=']' ){\
|
||||||
ss = strtoul(ttmp, &ppEnd, 10);\
|
ss = strtoul(ttmp, &ppEnd, 10);\
|
||||||
while(ttmp == ppEnd && *ttmp!='\0' && ppEnd[0] !=']'){\
|
while(ttmp == ppEnd && *ttmp!='\0' && ppEnd[0] !=']'){\
|
||||||
ttmp++;\
|
ttmp++;\
|
||||||
@@ -207,11 +207,11 @@ do{\
|
|||||||
if( *ttmp ==']'){\
|
if( *ttmp ==']'){\
|
||||||
dim=create_dim_from_list_perm(l_p);\
|
dim=create_dim_from_list_perm(l_p);\
|
||||||
bracketsDown = true;\
|
bracketsDown = true;\
|
||||||
ttmp++; ppEnd++;\
|
/*ttmp++; ppEnd++;*/\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
}\
|
}\
|
||||||
else{/*if(bracketsDown)*/\
|
if(bracketsDown){\
|
||||||
\
|
\
|
||||||
if(T->dim->rank == dim->rank){\
|
if(T->dim->rank == dim->rank){\
|
||||||
\
|
\
|
||||||
@@ -235,7 +235,6 @@ do{\
|
|||||||
}else {\
|
}else {\
|
||||||
tensorNotMatched = true;\
|
tensorNotMatched = true;\
|
||||||
Done = true;\
|
Done = true;\
|
||||||
printf(" T->%s doesn't have the same rank as the input ! extract failed\n",#attribute);\
|
|
||||||
break;\
|
break;\
|
||||||
}\
|
}\
|
||||||
}\
|
}\
|
||||||
|
|||||||
+72
-2
@@ -399,7 +399,6 @@ TEST(copy_weight_in_neurons){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TEST(Extract_weight_in_neurons){
|
TEST(Extract_weight_in_neurons){
|
||||||
bool rec_randomizeInitWeight = randomizeInitWeight;
|
bool rec_randomizeInitWeight = randomizeInitWeight;
|
||||||
randomizeInitWeight =false;
|
randomizeInitWeight =false;
|
||||||
@@ -424,7 +423,7 @@ TEST(Extract_weight_in_neurons){
|
|||||||
setup_all_layers_params_TYPE_FLOAT(bn, 5, 1 , 0.1);
|
setup_all_layers_params_TYPE_FLOAT(bn, 5, 1 , 0.1);
|
||||||
|
|
||||||
|
|
||||||
size_t reps = learning_online2_neurons_TYPE_FLOAT(bn,ds,cond);
|
size_t reps = 1;// learning_online2_neurons_TYPE_FLOAT(bn,ds,cond);
|
||||||
EXPORT_TO_FILE_TENSOR_ATTRIBUTE_IN_NNEURONS(TYPE_FLOAT, bn, weight_in, ".ff_bn_weight_in__toExtract.txt")
|
EXPORT_TO_FILE_TENSOR_ATTRIBUTE_IN_NNEURONS(TYPE_FLOAT, bn, weight_in, ".ff_bn_weight_in__toExtract.txt")
|
||||||
|
|
||||||
setup_all_layers_functions_TYPE_FLOAT(cpyn,
|
setup_all_layers_functions_TYPE_FLOAT(cpyn,
|
||||||
@@ -468,6 +467,77 @@ TEST(Extract_weight_in_neurons){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TEST(Extract_EXPORT_weight_in_neurons){
|
||||||
|
bool rec_randomizeInitWeight = randomizeInitWeight;
|
||||||
|
randomizeInitWeight =false;
|
||||||
|
|
||||||
|
data_set_TYPE_FLOAT *ds= fill_data_set_from_file_TYPE_FLOAT("xor.txt",1);
|
||||||
|
// print_data_set_msg_TYPE_FLOAT(ds,"data");
|
||||||
|
//config_layers *pconf = create_config_layers_from_OneD(3,(size_t[]){2,4,1}); /* 2 input , 1 target; 1 hidden layer with 5 neurons */
|
||||||
|
config_layers *pconf = create_config_layers_from_OneD(4,(size_t[]){3,24,24,3});
|
||||||
|
neurons_TYPE_FLOAT *bn=NULL, *tmp ;
|
||||||
|
neurons_TYPE_FLOAT *cpyn=NULL;
|
||||||
|
//setup_networks_alloutputs_config_GLOBAL_rdm01_TYPE_FLOAT(setup_networks_alloutputs_config_TYPE_FLOAT(&bn,pconf);bn,pconf);
|
||||||
|
setup_networks_alloutputs_config_TYPE_FLOAT(&bn,pconf,false,0,1,5000);
|
||||||
|
setup_networks_alloutputs_config_TYPE_FLOAT(&cpyn, pconf,false,0,1,5000);
|
||||||
|
|
||||||
|
EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, bn, weight_in, ".ff_target_20240717_01h43m41s_13300.txt")
|
||||||
|
|
||||||
|
setup_all_layers_functions_TYPE_FLOAT(bn,
|
||||||
|
tensorContractnProdThread_TYPE_FLOAT,
|
||||||
|
tensorProdThread_TYPE_FLOAT,
|
||||||
|
DL,
|
||||||
|
L,
|
||||||
|
f,
|
||||||
|
df);
|
||||||
|
|
||||||
|
setup_all_layers_params_TYPE_FLOAT(bn, 5, 1 , 0.1);
|
||||||
|
|
||||||
|
|
||||||
|
size_t reps = 1;// learning_online2_neurons_TYPE_FLOAT(bn,ds,cond);
|
||||||
|
EXPORT_TO_FILE_TENSOR_ATTRIBUTE_IN_NNEURONS(TYPE_FLOAT, bn, weight_in, ".ff_bn_weight_in__toCMP.txt")
|
||||||
|
|
||||||
|
setup_all_layers_functions_TYPE_FLOAT(cpyn,
|
||||||
|
tensorContractnProdThread_TYPE_FLOAT,
|
||||||
|
tensorProdThread_TYPE_FLOAT,
|
||||||
|
DL,
|
||||||
|
L,
|
||||||
|
f,
|
||||||
|
df);
|
||||||
|
|
||||||
|
setup_all_layers_params_TYPE_FLOAT(cpyn, 5, 1 , 0.1);
|
||||||
|
|
||||||
|
// EXTRACT_FILE_TO_TENSOR_ATTRIBUTE_NNEURONS(TYPE_FLOAT, cpyn, weight_in, ".ff_bn_weight_in__toExtract.txt")
|
||||||
|
// copy_weight_in_neurons_TYPE_FLOAT(cpyn, bn);
|
||||||
|
|
||||||
|
char msg[256];
|
||||||
|
tensor_TYPE_FLOAT * linked_tens = NULL;
|
||||||
|
for(size_t i=0; i<ds->size; ++i){
|
||||||
|
// print_predict_by_network_with_error_neurons_TYPE_FLOAT(bn,ds->input[i],ds->target[i]);
|
||||||
|
// print_predict_by_network_with_error_neurons_TYPE_FLOAT(cpyn,ds->input[i],ds->target[i]);
|
||||||
|
calculate_output_by_network_neurons_TYPE_FLOAT(bn,ds->input[i],&linked_tens);
|
||||||
|
sprintf(msg," output base %ld ",i);
|
||||||
|
print_tensor_msg_TYPE_FLOAT(linked_tens,msg);
|
||||||
|
calculate_output_by_network_neurons_TYPE_FLOAT(cpyn,ds->input[i],&linked_tens);
|
||||||
|
sprintf(msg," output copy %ld ",i);
|
||||||
|
print_tensor_msg_TYPE_FLOAT(linked_tens,msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// EXPORT_TO_FILE_TENSOR_ATTRIBUTE_IN_NNEURONS(TYPE_FLOAT, cpyn, weight_in, ".ff_bn_weight_in__exportedCPYfromExtract.txt")
|
||||||
|
|
||||||
|
|
||||||
|
free_data_set_TYPE_FLOAT(ds);
|
||||||
|
free_neurons_TYPE_FLOAT(bn);
|
||||||
|
free_neurons_TYPE_FLOAT(cpyn);
|
||||||
|
|
||||||
|
LOG("reps = %ld\n",reps);
|
||||||
|
randomizeInitWeight = rec_randomizeInitWeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv){
|
int main(int argc, char **argv){
|
||||||
|
|||||||
Reference in New Issue
Block a user