#include #include /******** * Include the search method. ********/ #include "../framework/gradient_descent.h" #include "../framework/genetic_search.h" #include "../framework/simplex.h" #define parameter_length 10 double* constants; int local_length, min, max; void read_data(int rank, int max_rank) { min = parameter_length * (((double)rank)/((double)max_rank)); max = parameter_length * (((double)(rank+1.0))/((double)max_rank)); local_length = max-min; srand48(rank); constants = (double*)malloc(sizeof(double) * local_length ); for (int i = 0; i < local_length; i++) { constants[i] = drand48() * 50.0; } } double* sum_of_squares(double* parameters) { double* sum; int i; sum = (double*)malloc(sizeof(double)); sum[0] = 0.0; for (i = 0; i < local_length; i++) { sum[0] += constants[i] * parameters[min + i] * parameters[min + i]; } return sum; } double sos_compose(double* values, int number_results) { double sum; int i; sum = 0.0; for (i = 0; i < number_results; i++) { sum += values[i]; } return sum; } int main(int number_arguments, char** arguments) { double* initial_parameters; double* step_sizes; double* parameter_min; double* parameter_max; double** simplex_parameters; int number_parameters; int i, j; /******** * Initialize the search. ********/ evaluator__init(number_arguments, arguments); evaluator__init_data(read_data); evaluator__init_likelihood(sum_of_squares, parameter_length, sos_compose, 1); initial_parameters = (double*)malloc( sizeof(double)*parameter_length ); step_sizes = (double*)malloc( sizeof(double)*parameter_length ); parameter_min = (double*)malloc( sizeof(double)*parameter_length ); parameter_max = (double*)malloc( sizeof(double)*parameter_length ); number_parameters = parameter_length + 1; simplex_parameters = (double**)malloc( sizeof(double*) * number_parameters ); for (i = 0; i < number_parameters; i++) simplex_parameters[i] = (double*)malloc(sizeof(double) * parameter_length); /******** * Set up initial parameters and constants ********/ srand48(2435); for (i = 0; i < parameter_length; i++) { initial_parameters[i] = (drand48() * 10) - 5.0; step_sizes[i] = 0.001; printf(" (%lf, %lf)", initial_parameters[i], step_sizes[i]); parameter_min[i] = -5.0; parameter_max[i] = 5.0; for (j = 0; j < number_parameters; j++) { if (i == j) simplex_parameters[j][i] = 10.0 * drand48(); else simplex_parameters[j][i] = -10.0 * drand48(); } } printf("\n"); /******** * Run the search method. ********/ // set_evaluation_output("evaluations_cgd"); // conjugate_gradient_descent(initial_parameters, step_sizes, parameter_length); // set_evaluation_output("evaluations_gs"); // genetic_search__max_iterations(1000); // genetic_search__iterative(parameter_min, parameter_max, parameter_length); set_evaluation_output("evaluations_simplex"); simplex__max_iterations(1000); simplex(simplex_parameters, number_parameters, parameter_length); }