Exemple #1
0
paintatron::paintatron(int population)
{
    int i;

    sensors = 6 + (sensor_image_inputs*image_itterations);
    actuators = initial_actuator + (actuator_image_inputs*image_itterations);
    
    /*sensors = 21, actuators = 25;*/
    this->population = population;
    run_steps = 1;
    rows = 4;
    columns = 10;
    connections_per_gene = 6;
    modules = 0;
    chromosomes=1;
    min_value = -1000;
    max_value = 1000;
    elitism = 4.0f / population;
    mutation_prob = 0.4f;
    use_crossover = 1;
    dropout_rate = 0.1f;
    random_seed = (unsigned int)time(NULL);
    integers_only = 0;
    data_size=5;
    data_fields=1;
    sensor_names = (char**)malloc(sensors*sizeof(char*));
    for (i = 0; i < sensors; i++) {
        sensor_names[i] = (char*)malloc(32*sizeof(char));
    }
    actuator_names = (char**)malloc(actuators*sizeof(char*));
    for (i = 0; i < actuators; i++) {
        actuator_names[i] = (char*)malloc(32*sizeof(char));
    }

    // create an image used for previews
    preview_img_width = 64;
    preview_img_height = 64;
    preview_img = (unsigned char*)malloc(preview_img_width*preview_img_height*3*sizeof(unsigned char));

    no_of_instructions = gprcm_default_instruction_set((int*)instruction_set);

    /* create a population */
    gprcm_init_system(&sys, 1,
                      population,
                      rows, columns,
                      sensors, actuators,
                      connections_per_gene,
                      modules,
                      chromosomes,
                      min_value, max_value,
                      integers_only,
                      data_size, data_fields,
                      &random_seed,
                      instruction_set, no_of_instructions);
}
Exemple #2
0
static void slump_test()
{
	int islands = 2;
	int migration_interval = 200;
	int population_per_island = 512;
	int rows = 9, columns = 10;
	int i, gen=0;
	int connections_per_gene = GPRC_MAX_ADF_MODULE_SENSORS+1;
	int modules = 0;
	int chromosomes=3;
	gprcm_system sys;
	float min_value = -100;
	float max_value = 100;
	float elitism = 0.1f;
	float mutation_prob = 0.1f;
	int trials = 100;
	int use_crossover = 1;
	unsigned int random_seed = (unsigned int)time(NULL);
	int sensors=4, actuators=3;
	int integers_only = 0;
	int no_of_test_examples;
	float test_performance;
	FILE *fp;
	char compile_command[256];
	int instruction_set[64], no_of_instructions=0;
	int data_size=0, data_fields=0;
	char * sensor_names[] = {
		"Cement",
		"Slag",
		"Fly Ash",
		"Water",
		"Sand",
		"Coarse Aggr.",
		"Fine Aggr."
	};
	char * actuator_names[] = { "Slump", "Flow", "Compressive Strength" };

	/* load the data */
	no_of_examples =
		load_data("slump_test.data", concrete_data, MAX_EXAMPLES,
				  &fields_per_example);

	/* create a test data set */
	no_of_test_examples = create_test_data(concrete_data, &no_of_examples,
										   fields_per_example,
										   test_data);

	sensors = fields_per_example-4;
	trials = no_of_examples;

	printf("Number of training examples: %d\n",no_of_examples);
	printf("Number of test examples: %d\n",no_of_test_examples);
	printf("Number of fields: %d\n",fields_per_example);

	/* create an instruction set */
	no_of_instructions = gprcm_default_instruction_set(instruction_set);

	/* create a population */
	gprcm_init_system(&sys, islands,
					  population_per_island,
					  rows, columns,
					  sensors, actuators,
					  connections_per_gene,
					  modules,
					  chromosomes,
					  min_value, max_value,
					  integers_only,
					  data_size, data_fields,
					  &random_seed,
					  instruction_set, no_of_instructions);

	gpr_xmlrpc_server("server.rb","concreteslump",3573,
					  "./agent",
					  sensors, actuators);

	test_performance = 0;
	while (test_performance < 99) {
		/* use the training data */
		current_data_set = concrete_data;

		/* evaluate each individual */
		gprcm_evaluate_system(&sys,
							  trials,0,
							  (*evaluate_features));
		/* produce the next generation */
		gprcm_generation_system(&sys,
								migration_interval,
								elitism,
								mutation_prob,
								use_crossover, &random_seed,
								instruction_set, no_of_instructions);

		/* evaluate the test data set */
		current_data_set = test_data;
		test_performance = evaluate_features(no_of_test_examples,
											 &sys.island[0],
											 0,1);

		/* show the best fitness value calculated from the test data set */
		printf("Generation %05d  Fitness %.2f/%.2f%% ",
			   gen, gprcm_best_fitness(&sys.island[0]),test_performance);
		for (i = 0; i < islands; i++) {
			printf("  %.3f",gprcm_average_fitness(&sys.island[i]));
		}
		printf("\n");

		if (((gen % 100 == 0) && (gen>0)) || (test_performance > 99)) {
			gprcm_draw_population("population.png",
								  640, 640, &sys.island[0]);

			gprcm_plot_history_system(&sys,
									  GPR_HISTORY_FITNESS,
									  "fitness.png",
									  "Concrete Slump Performance",
									  640, 480);

			gprcm_plot_history_system(&sys,
									  GPR_HISTORY_AVERAGE,
									  "fitness_average.png",
									  "Concrete Slump Average Performance",
									  640, 480);

			gprcm_plot_history_system(&sys,
									  GPR_HISTORY_DIVERSITY,
									  "diversity.png",
									  "Concrete Slump Diversity",
									  640, 480);

			gprcm_plot_fitness(&sys.island[0],
							   "fitness_histogram.png",
							   "Fitness Histogram",
							   640, 480);

			fp = fopen("agent.c","w");
			if (fp) {
				/* save the best program */
				gprcm_c_program(&sys,
								gprcm_best_individual_system(&sys),
								RUN_STEPS, 0, fp);
				fclose(fp);

				/* compile the program */
				sprintf(compile_command,
						"gcc -Wall -std=c99 -pedantic -o agent agent.c -lm");
				assert(system(compile_command)==0);
			}

			fp = fopen("fittest.dot","w");
			if (fp) {
				gprcm_dot(gprcm_best_individual_system(&sys),
						  &sys.island[0],
						  sensor_names,  actuator_names,
						  fp);
				fclose(fp);
			}
		}

		if (test_performance > 99) break;
		gen++;
	}

	/* free memory */
	gprcm_free_system(&sys);
}