Ejemplo n.º 1
0
int main(int argc, char **argv)
{
	source * src;
	int i;
	int * M;
	int * resultat;
       
	if(argc < 2)
	{
	    printf("syntaxe : %s benchmarks_Taillard/...\n", argv[0]);
	    return -1;
	}
	src=readsrc(argv[1]);          // table de durée d'opération Tab[][]
	M=TabtoM(src);                 // table de durée d'opération M[]
    //aff_source(src);
	//aff_M(M,src->n,src->m);

	// ILS
	resultat=ILS(M, src->n, src->m);
	printf("ILS la séquence de Jobs est: \n");
	for(i=0;i<src->n;i++)	
		printf("%-4d",resultat[i]);
	printf("\nILS la somme de date de fin est:  %d\n",calculateCbarre(M, src->m, src->n, resultat, src->n));

	// IGA
	resultat=IGA(M, src->n, src->m);
	printf("IGA la séquence de Jobs est: \n");
	for(i=0;i<src->n;i++)	
		printf("%-4d",resultat[i]);	
	printf("\nIGA la somme de date de fin est:  %d\n",calculateCbarre(M, src->m, src->n, resultat, src->n));
	
	free(resultat);
	freeSource(src);
	freeM(M);

	return 1;
}
Ejemplo n.º 2
0
int * RZ(int *M, int m, int n, int* PI)
{
        int * PI_S = (int*)calloc(n, sizeof(int));
        int * PI_2 = (int*)calloc(n, sizeof(int));
        int i = 0,j=0,k=0,l=0,origPosi;
        int tem1,tem2;
        int Cbarre=INT_MAX;

        for(i=0; i<n; i++) //copier le contenu de la liste PI dans PI_S et PI_2
        {
           PI_S[i]=PI[i];
           PI_2[i]=PI[i];
        }
        int* PI_temp = (int*)calloc(n, sizeof(int));
        for(i=0;i<n;i++)
        {
            //chercher PI_S[i] dans PI_2
            for(j=0;j<n;j++)
            {
                if(PI_2[j]==PI_S[i])
                {
                    origPosi=j;
                    if(j==n-1);
                    else
                    {
                        //supprimer PI_S[i] dans PI_2
                        for(k=j+1;k<n;k++)
                        {
                            PI_2[k-1]=PI_2[k];
                        }

                    }
                    break;
                }
            }
           // for(i=0;i<n-1;i++)printf("%d ",PI_2[i]);

            //choisir la meilleur position pour PI_S[i] dans PI_2.
            int pos;//La position de l'insersion au final
            int temps;
            Cbarre=INT_MAX;
            for(k=0;k<n;k++)
            {
                if(k==origPosi);
                else
                {
                    l=0;
                    for(j=0;j<n;j++)
                    {
                        if(j==k)
                        {
                           PI_temp[j]=PI_S[i];

                        }
                        else
                        {
                            PI_temp[j]=PI_2[l];
                            l++;
                        }

                    }
                    //comparer les Cmax, choisir la meilleur
                    temps=calculateCbarre(M, m, n, PI_temp, n);
                    if(temps<Cbarre)
                    {
                        Cbarre=temps;
                        pos=k;
                    }
                }

            }
            //Insérer PI_S[i] à la position choisi
            insert(PI_2,n-1, pos, PI_S[i]);
            //for(i=0;i<n;i++)printf("%d \n",PI_2[i]);


        }
        free(PI_temp);
        tem1=calculateCbarre(M, m, n, PI, n);
        tem2=calculateCbarre(M, m, n, PI_2, n);

        if(tem1>tem2)
        {
            memcpy(PI, PI_2, (n)*sizeof(int));
            //printf("Cbarre= %d \n", tem2);
        }
        //else printf("Cbarre= %d \n", tem1);
        //for(i=0;i<n;i++)printf("%d ",PI_2[i]);

        free(PI_2);
        free(PI_S);
        return(PI);
}