/**
 * Fonction main.
 */
int main (int argc, char *argv[])
{
  double **distances;
  double *abscisses;
  double *ordonnees;
  unsigned int nb_villes;
  
  //Initialisation du timer pour mesurer des temps (compiler avec -lrt) 
  struct timespec myTimerStart;
  clock_gettime(CLOCK_REALTIME, &myTimerStart);

  //Exemple de mesure du temps
  lire_donnees("defi250.csv", &nb_villes, &distances, &abscisses, &ordonnees);

  //Récupération du timer et affichage
  struct timespec current;
  clock_gettime(CLOCK_REALTIME, &current); //Linux gettime
  double elapsed_in_ms =    (( current.tv_sec - myTimerStart.tv_sec) *1000 +
          ( current.tv_nsec - myTimerStart.tv_nsec)/1000000.0);
  printf("Temps passe (ms) : %lf\n", elapsed_in_ms);
  
  t_cycle chemin;
  chemin.taille = 1;
  chemin.poids =0;
  chemin.c[0] = 1;

  t_cycle  meilleur;
  meilleur.taille = 1;
  meilleur.poids =64000;
  meilleur.c[0] = 1;

  int i = 0;

  // ------------------------------------ Exact naif

  printf("\033[0;35m%s\033[0m\n","Exact naif:");

  for(i= 1; i<= EXACT_NAIF_NB_VILLES;i++)
  {
	chemin.taille = 1;
	chemin.poids =0;
	chemin.c[0] = 1;
	meilleur.taille = 1;
	meilleur.poids =64000;
	meilleur.c[0] = 1;
	clock_gettime(CLOCK_REALTIME, &myTimerStart);
	PVC_exact_naif(i,distances, &chemin,&meilleur);
	clock_gettime(CLOCK_REALTIME, &current); //Linux gettime
	elapsed_in_ms =    (( current.tv_sec - myTimerStart.tv_sec) *1000 +
		  ( current.tv_nsec - myTimerStart.tv_nsec)/1000000.0);
	printf("[Exact naif, %d villes] Temps passe (ms) : %lf\n",i, elapsed_in_ms);
  }

  // ---------------------------------- Exact B & B

  printf("\033[0;35m%s\033[0m\n","Exact branch and bound:");

  for(i= 1; i<= EXACT_BRANCH_BOUND_NB_VILLES ;i++)
  {
	chemin.taille = 1;
	chemin.poids =0;
	chemin.c[0] = 1;
	meilleur.taille = 1;
	meilleur.poids =64000;
	meilleur.c[0] = 1;
	clock_gettime(CLOCK_REALTIME, &myTimerStart);
	PVC_exact_branch_and_bound(i,distances, &chemin,&meilleur);
	clock_gettime(CLOCK_REALTIME, &current); //Linux gettime
	elapsed_in_ms =    (( current.tv_sec - myTimerStart.tv_sec) *1000 +
		  ( current.tv_nsec - myTimerStart.tv_nsec)/1000000.0);
	printf("[Exact branch and bound, %d villes] Temps passe (ms) : %lf\n",i, elapsed_in_ms);
  } 

  // --------------------------------- Approche PPV

  printf("\033[0;35m%s\033[0m\n","Approche ppv:");
  
  for(i= 1; i<= APPROCHE_PPV_NB_VILLES ;i++)
  {
	chemin.taille = 0;
	chemin.poids =0;
	chemin.c[0] = 1;
	clock_gettime(CLOCK_REALTIME, &myTimerStart);
	PVC_approche_ppv(i,distances, &chemin);
	clock_gettime(CLOCK_REALTIME, &current); //Linux gettime
	elapsed_in_ms =    (( current.tv_sec - myTimerStart.tv_sec) *1000 +
		  ( current.tv_nsec - myTimerStart.tv_nsec)/1000000.0);
	printf("[Approche PPV, %d villes] Temps passe (ms) : %lf\n",i, elapsed_in_ms);
  }

  // ----------------------------------------- ACM
  
  printf("\033[0;35m%s\033[0m\n","Calcul ACM:");
  
  double ** K;	
  int nbVilles = CALCUL_ACM;
  FILE * arbreCouvrantMin = fopen ("arbreCouvrantMin.dot","w+");

  fprintf(arbreCouvrantMin,"graph Tree\n{\n");
 
  K = calcul_ACM(nbVilles, distances);

  printf("Arbre couvrant minimal avec %d villes (%d a %d)\n",nbVilles,0,nbVilles-1);
  //for(i=0; i< nbVilles-1; i++)
  //{
  //	fprintf(arbreCouvrantMin,"\t%d [pos = \"%f,%f!\"];\n",i, abscisses[i],1000*ordonnees[i]);
  //}
  for(i=0; i< nbVilles-1; i++)
  {
	printf("k: %f-%f\n", K[i][0],K[i][1]);
  	fprintf(arbreCouvrantMin,"\t%d--%d;\n", (int)K[i][0],(int)K[i][1]);
  }

  fprintf(arbreCouvrantMin,"}");
  fclose(arbreCouvrantMin);

  // ---------------------------------- Affichage
  afficher_cycle_html(chemin, abscisses, ordonnees);
  system(SHELLSCRIPT);

  cycle_hamiltonien_ACM(nbVilles,K);

  // ------------- Libérations mem et terminaison  
  supprimer_distances_et_coordonnees(nb_villes, distances, abscisses, ordonnees);
  return 0;

  // ----------------------------- Stuff commenté
  //int i = 0;  
  //for(i = 0;i<5; i++)
  //{	
  //      printf("%d\n",meilleur.c[i]);
  //}
  //printf("%d\n",meilleur.taille);
  //printf("%f\n",meilleur.poids);
  //
  //Affichage des distances
  //afficher_distances(nb_villes,distances);

  ////naif
  //t_cycle cycle;
  //cycle.taille=3;
  //cycle.c[0]=0;
  //cycle.c[1]=1;
  //cycle.c[2]=2;
  //afficher_cycle_html(cycle, abscisses, ordonnees);
  
  //double ** Aretes =  trier_aretes(nb_villes, distances);
  /// <-- Kruskal Here
  //supprimer_aretes(nb_villes, Aretes); XXX effectué directement dans calcul_ACM ...

}
Esempio n. 2
0
int main(int ac,char **av)
{
  

	t_ptr_capteur c; 	/*objet de la struct capteur */
	//GR_WINDOW_ID wind; 	/* identifiant de la fenêtre */
	//GR_GC_ID gc;	  	/* identifiant du contexte graphique */  

	/*Configuration de l'ecran*/
  //wind = GrNewWindow(1, 5, 5, 150, 600, 5, BLACK, WHITE); /*(parent, x, y, largeur, hauteur, taille de bordure, couleur du fond, couleur du bord) */
  //GrMapWindow(wind); /*affichage de la fenêtre */

	//gc = GrNewGC(); /*Création d'un nouveau contexte graphique */
  //GrSetGCForeground(gc, WHITE);
  //GrSetGCUseBackground(gc, GR_FALSE);
  int code, fd1, fd2;


  system("insmod adc_s3c44.o");// Chargement du driver pour CAN
  system("insmod i2c_s3c44.o");// Chargement du driver du Bus I2C

  do{
       menu();
       code = 0;
       while(code == 0)
        {   
            if(Push_Button() == 1)
            {
              printf("Temperature en Celsius\n") ;
              lire_donnees(c);
              affichage(/*wind, gc,*/ c, 1);
              sleep(2);
              while(Push_Button() != 4){}
              code = 1;
              break;
            } 
            if(Push_Button() == 2)
            {
              printf("Temperature en Fahrenheit\n") ;
              lire_donnees(c);
              affichage(/*wind, gc,*/ c, 2);
              sleep(2);
              while(Push_Button() != 4){}
              code = 1;
              break;
            }
            if(Push_Button() == 3)
            {
              printf("              GOODBYE SEE YOU SOON\n") ;
              sleep(4);
              code = 0;
              break;
            }        
        }
  }while(code == 1);
    //GrDrawImageFromFile(wind, gc, 30, 50, 50, 50, SOLEIL , 0 );

    /*Fermeture du dispositif graphique*/
    //GrClose();
    return 0;
}