diff --git a/deepQlearn_0/src/deepQlearning/learn_to_drive.c b/deepQlearn_0/src/deepQlearning/learn_to_drive.c index 234d99f..1f31311 100644 --- a/deepQlearn_0/src/deepQlearning/learn_to_drive.c +++ b/deepQlearn_0/src/deepQlearning/learn_to_drive.c @@ -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){ 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); // printf(" cumul : %ld ", car_status->cumulative_reward); 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); + 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; } diff --git a/deepQlearn_0/src/deepQlearning/learn_to_drive.h b/deepQlearn_0/src/deepQlearning/learn_to_drive.h index 5e69793..ca7562a 100644 --- a/deepQlearn_0/src/deepQlearning/learn_to_drive.h +++ b/deepQlearn_0/src/deepQlearning/learn_to_drive.h @@ -14,6 +14,7 @@ #include "neuron_t/neuron_t.h" +#include "neuron_t/nneuron_t_file.h" #include "list_t/list_t.h" diff --git a/deepQlearn_0/src/deepQlearning/vehicle.c b/deepQlearn_0/src/deepQlearning/vehicle.c index 519d4e0..bace2fc 100644 --- a/deepQlearn_0/src/deepQlearning/vehicle.c +++ b/deepQlearn_0/src/deepQlearning/vehicle.c @@ -342,9 +342,12 @@ void print2D_blocks_indexOne_withPoint(struct blocks *blk, float scale_x, float if(is_in_blocks(blk_point, coord)) printf("\033[0;31m"); // red int in = is_in_blocks(blk,coord); - if(in) - printf("%d",in); - else + if(in){ + if(in>9){ + int div=in%10; + printf("%d",div); + }else printf("%d",in); + }else printf("."); //printf(" "); printf("\033[0;37m"); // white } diff --git a/deepQlearn_0/test/is_good.c b/deepQlearn_0/test/is_good.c index 3469ff4..5e0584e 100644 --- a/deepQlearn_0/test/is_good.c +++ b/deepQlearn_0/test/is_good.c @@ -457,7 +457,7 @@ TEST(first_learn_vehicle_rev50_8){ int randomRange = 500; size_t nb_prod_thread = 2; 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( pconf, randomize, minR, maxR, randomRange, @@ -465,7 +465,10 @@ TEST(first_learn_vehicle_rev50_8){ 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 ( 500/*size_t delay_between_episodes*/, 50/*size_t delay_between_games*/ @@ -475,7 +478,7 @@ TEST(first_learn_vehicle_rev50_8){ 0.95/*float gamma*/, learning_rate, 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*/, 10000/*size_t number_episodes*/ ); @@ -496,7 +499,8 @@ TEST(first_learn_vehicle_rev50_8){ pprint /*struct print_params * pprint*/, qlparams/*struct qlearning_params *qlearnParams*/ ); - +char c; +scanf("%c",&c); learn_to_drive(rlAgent); free_RL_agent(rlAgent); @@ -515,9 +519,26 @@ TEST(first_learn_vehicle_50__9){ 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[]){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->upper_bound_block[4], (float[]){150,250}); 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->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->upper_bound_block[0], (float[]){100,250}); copy_coordinate(path->lower_bound_block[1], (float[]){100,0}); @@ -616,15 +621,22 @@ TEST(first_learn_vehicle_50__9){ int randomRange = 500; size_t nb_prod_thread = 2; 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( 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"); +*/ - 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 ( 500/*size_t delay_between_episodes*/, 50/*size_t delay_between_games*/ @@ -634,7 +646,7 @@ TEST(first_learn_vehicle_50__9){ 0.95/*float gamma*/, learning_rate, 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*/, 10000/*size_t number_episodes*/ ); @@ -656,6 +668,7 @@ TEST(first_learn_vehicle_50__9){ qlparams/*struct qlearning_params *qlearnParams*/ ); + learn_to_drive(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 TEST(first_learn_vehicle){ size_t nb_block = 7; diff --git a/neuron_t/src/neuron_t/nneuron_t_file.h b/neuron_t/src/neuron_t/nneuron_t_file.h index 2be243a..b37ca24 100644 --- a/neuron_t/src/neuron_t/nneuron_t_file.h +++ b/neuron_t/src/neuron_t/nneuron_t_file.h @@ -193,7 +193,7 @@ do{\ \ ppEnd=ttmp;\ if( !bracketsDown){\ - while(*ttmp!=0 && *ppEnd!=']' ){\ + while(*ttmp!='\0' && *ppEnd!=']' ){\ ss = strtoul(ttmp, &ppEnd, 10);\ while(ttmp == ppEnd && *ttmp!='\0' && ppEnd[0] !=']'){\ ttmp++;\ @@ -207,11 +207,11 @@ do{\ if( *ttmp ==']'){\ dim=create_dim_from_list_perm(l_p);\ bracketsDown = true;\ - ttmp++; ppEnd++;\ + /*ttmp++; ppEnd++;*/\ }\ \ }\ - else{/*if(bracketsDown)*/\ + if(bracketsDown){\ \ if(T->dim->rank == dim->rank){\ \ @@ -235,7 +235,6 @@ do{\ }else {\ tensorNotMatched = true;\ Done = true;\ - printf(" T->%s doesn't have the same rank as the input ! extract failed\n",#attribute);\ break;\ }\ }\ diff --git a/neuron_t/test/is_good.c b/neuron_t/test/is_good.c index 8b08f18..90247c8 100644 --- a/neuron_t/test/is_good.c +++ b/neuron_t/test/is_good.c @@ -399,7 +399,6 @@ TEST(copy_weight_in_neurons){ } - TEST(Extract_weight_in_neurons){ bool rec_randomizeInitWeight = randomizeInitWeight; randomizeInitWeight =false; @@ -424,7 +423,7 @@ TEST(Extract_weight_in_neurons){ 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") 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; isize; ++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){