/* main */ int main(int argc, char *argv[]) { std::ios_base::sync_with_stdio(false); // arguments: p1 p2 [y|(* \ {y})] [true|false] size_t p1 = argc > 2 ? fast_atoi(argv[1]) : 1; // default = 1 size_t p2 = argc > 2 ? fast_atoi(argv[2]) : 1; // default = 1 bool has_constraints = false; // if there are constraints if (argc > 3) has_constraints = strcmp(argv[3],"1") || strcmp(argv[3], "y"); /* if default_constraints_mode is true: * constraints in input mean ONLY THESE MATCH * otherwise: * constraints in input mean ALL EXCEPT THESE MATCH */ bool default_constraints_mode = false; // the semantic of the constraints //if (has_constraints) default_constraints_mode = strcmp(argv[4], "t"); /* (1) read strings, extract sigmas and constraints too */ std::string s1, s2; std::string sigma1(""), sigma2(""); read_stdin(s1, s2); extract_sigma(s1, sigma1); extract_sigma(s2, sigma2); size_t sigma1l = sigma1.size(); size_t sigma2l = sigma2.size(); size_t s1l = s1.size(); size_t s2l = s2.size(); std::vector<p_constr> constraints; if (has_constraints) read_constraints(constraints); /* define the mapping from char -> int */ std::map<char, int> map1; std::map<char, int> map2; define_mapping(sigma1, map1); define_mapping(sigma2, map2); /* integer representations of strings and sigmas */ unsigned* s1i = new unsigned[s1l]; unsigned* s2i = new unsigned[s2l]; unsigned* sigma1i = new unsigned[sigma1l]; unsigned* sigma2i = new unsigned[sigma2l]; for (size_t i = 0; i < sigma1l; ++i) sigma1i[i] = i; // sigma1 for (size_t i = 0; i < sigma2l; ++i) sigma2i[i] = i; // sigma2 for (size_t i = 0; i < s1l; ++i) s1i[i] = map1[s1[i]]; // s1 for (size_t i = 0; i < s2l; ++i) s2i[i] = map2[s2[i]]; // s2 if (_DEBUG) { std::cout << "strings: " << s1 << ", " << s2 << endl; std::cout << "sigmas: " << sigma1 << ", " << sigma2 << endl; std::cout << "int rep (s1): "; for (size_t i = 0; i < s1l; ++i) std::cout << s1i[i]; std::cout << endl; std::cout << "int rep (s2): "; for (size_t i = 0; i < s2l; ++i) std::cout << s2i[i]; std::cout << endl; std::cout << "int rep (sigma1): "; for (size_t i = 0; i < sigma1l; ++i) std::cout << sigma1i[i]; std::cout << endl; std::cout << "int rep (sigma2): "; for (size_t i = 0; i < sigma2l; ++i) std::cout << sigma2i[i]; std::cout << endl; } /* identity (classical) matching schema */ matching_schema<bool> ms(sigma1l, sigma2l, p1, p2, true, default_constraints_mode); ms.set_general(sigma1, sigma2, false); if (has_constraints) ms.set_constraints(map1, map2, constraints, !default_constraints_mode); if (_DEBUG) { if (has_constraints) { std::cout << "Constraints: "; for(std::vector<p_constr>::size_type i = 0; i < constraints.size(); ++i) std::cout << constraints[i].first << ", " << constraints[i].second << endl; } ms.print_matching_schema(sigma1, sigma2); } //int d = bruteforce(s1i, s2i, s1l, s2l, sigma1i, sigma2i, sigma1l, sigma2l, ms); int d = hill_climbing(s1i, s2i, s1l, s2l, sigma1i, sigma2i, sigma1l, sigma2l, p1, ms); std::cout << d << endl; //Alignment<int> a = compute_alignment(s1i, s2i, s1l, s2l, ms); //std::cout << distance_from_alignment(a, sigma1, sigma2, ms, false) << endl; return 0; }
int main() { int i; double x[10]; double num, max; double *sucesor = (double *)malloc(sizeof(double)*10); struct timeval t; double t_ini,t_fin,tiempo,seg; int min; /**************************** Generacion y evaluacion del punto inicial para Hill y SImulated**************************/ gettimeofday (&t, NULL); srand(t.tv_sec + t.tv_usec); for ( i = 0 ; i < 10 ; i++ ) { x[i] = 0; } for ( i = 0 ; i < 10 ; i++ ) { num = (double)rand()/((double)(RAND_MAX)+(double)(1)); num = num*2 -1; x[i] = num; } printf("\nUbicacion del Inicial para Hill-Climbing y Simulated-Anneling: "); for ( i = 0 ; i < 10 ; i++ ) printf("%.10f ",x[i]); printf("\nEvaluacion Nodo Inicial: %.10lf\n\n",evaluar(x)); /***************************************** Corre Hill-Climbing *******************************************/ gettimeofday (&t, NULL); t_ini = (double)t.tv_sec + (t.tv_usec/1000000.0); llamadas = 0; printf("\nUbicacion del Maximo: "); max = hill_climbing(x); printf("\nMaximo - Hill Climbing = %.10lf\n",max); printf("Numero de llamadas a la funcion objetivo = %d\n",llamadas); gettimeofday (&t, NULL); t_fin = (double)t.tv_sec + (t.tv_usec/1000000.0); tiempo = t_fin - t_ini; printf("Tiempo de ejecucion Hill-Clibing: %f segundo(s)\n", tiempo); printf("\n"); /***************************************** Corre Simulated-Anneling *******************************************/ gettimeofday (&t, NULL); t_ini = (double)t.tv_sec + (t.tv_usec/1000000.0); llamadas = 0; printf("Ubicacion del Maximo: "); max = simulated_anneling(x,8000,40,25); printf("\nMaximo - Simulated Anneling = %.10lf\n",max); printf("Numero de llamadas a la funcion objetivo = %d\n",llamadas); gettimeofday (&t, NULL); t_fin = (double)t.tv_sec + (t.tv_usec/1000000.0); tiempo = t_fin - t_ini; printf("Tiempo de ejecucion Simulated-Anneling: %f segundo(s)\n", tiempo); printf("\n"); /***************************************** Corre Algoritmo-Genetico *******************************************/ gettimeofday (&t, NULL); t_ini = (double)t.tv_sec + (t.tv_usec/1000000.0); llamadas = 0; printf("\nUbicacion del Maximo: "); max = genetic_alg(); printf("\nMaximo - Algoritmo Genetico = %.10lf\n",max); printf("Numero de llamadas a la funcion objetivo = %d\n",llamadas); gettimeofday (&t, NULL); t_fin = (double)t.tv_sec + (t.tv_usec/1000000.0); tiempo = t_fin - t_ini; printf("Tiempo de ejecucion Alg-Genetico: %f segundo(s)\n", tiempo); printf("\n"); exit(0); }