Esempio n. 1
0
/* 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;
}
Esempio n. 2
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);

}