Bonsoir,
j'ai un problème d'ordonnancement et je représente la solution par une matrice
int solution_initiale[][] = {{2,1,1,12,0},{1,1,2,8,0},{1,2,2,2,8},{3,1,3,12,0},{3,2,3,12,12},{1,3,2,6,10}, {3,3,1,12,24}, {2,2,3,11,24},{2,3,3,10,35}};

chaque ligne est une opération designer par leur num job , num opération , num ressource sur laquelle s’exécute , durée d’exécution et enfin leur date de début.
Selon ma problématique je dois trouver tous les chemins critiques dans une solution.


Un chemin critique d'une solution est un chemin dont la longueur est égale à la longueur de l'ordonnancement et est constitué par des opérations reliées. Reliées c'est-à-dire que la fin de chaque opération soit égale à la date de début de l'opération suivante.
Il faut que je cherche tous les chemins critiques dans une solution !
j'ai tester ce code il marche bien mais je ne trouve plus la dernière opération!! je ne sais pas pourquoi il ne me l'affiche plus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
 
int solution_initiale[][] = {{2,1,1,12,0},{1,1,2,8,0},{1,2,2,2,8},{3,1,3,12,0},{3,2,3,12,12},{1,3,2,6,10}, {3,3,1,12,24}, {2,2,3,11,24},{2,3,3,10,35}};
 
	int date_debut;
 
		boolean test = true;
 
		ArrayList<ArrayList<int []>>  chemin_critique = new ArrayList<ArrayList<int []>>();
		boolean cout = true;
 
	while (k<nbre_oper)
		{int t =0;
		int tab_temp[]= new int[5];
		if (solution_initiale[k][4]== 0)
		{
 
			for ( t=0; t<5;t++)
			{
				tab_temp[t]= solution_initiale[k][t];	
			}	
		          ArrayList<int[]> temp_princ = new ArrayList<int []>();
			       temp_princ.add(tab_temp) ;
		        	chemin_critique.add(temp_princ);
					taille = chemin_critique.size();
		}
		k++;
		}
int tab[] = new int[5];
 
		for (i=0; i<taille; i++)
		{
		 ArrayList<int[]> temp2 = chemin_critique.get(i);
 
 
		for (j=0; j< temp2.size(); j++)
			 {
			tab = chemin_critique.get(i).get(j);
 
			date_debut = tab[3]+ tab[4];
 
 
			if ( date_debut > 45)
			{
				cout = false;
				System.out.println("date de debu = 45 pour uen fois");
			}
			else cout = true;
			k=0;
			while (k<9 && cout)
			{ 
 
			if (solution_initiale[k][4] == date_debut && test  )
				{
					int tab_temp[]= new int[5];
					int t=0;
					for ( t=0; t<5;t++)
					{
						tab_temp[t]= solution_initiale[k][t];	
					}	
 
					      temp2.add(tab_temp) ;
 
					      test = false;
 
				       k++;
				}
			else if (solution_initiale[k][4] == date_debut && test== false )
 
			{
				int tab_temp[]= new int[5];
				int t=0;
				for ( t=0; t<5;t++)
				{
					tab_temp[t]= solution_initiale[k][t];	
				}
 
				ArrayList<int[]> temp_second = new ArrayList<int []>();
 
 
					temp_second = new ArrayList<int []>(temp2) ;
 
					 temp_second.set(temp2.size() -1, tab_temp) ;
 
			        	chemin_critique.add(temp_second);
 
			        	k++;
 
			}
			else  k++;
 
 
			}
			test = true;
 
			cout = true;
			 }
 
 
		}
 
		// l' afiichage 
		taille = chemin_critique.size();
		int m =1;
 
		for (i=0; i<taille; i++) { 
			System.out.println ("chemin"+m+" : ");
		    ArrayList<?> temp2 = chemin_critique.get(i); 
		    for (j=0; j< temp2.size(); j++) { 
		        tab = chemin_critique.get(i).get(j); 
		        System.out.print(Arrays.toString(tab));
 
		    } 
 
		    System.out.println("\n"); 
		    m++;
		}
Apres l'exécution je trouve :

chemin1 :
[2, 1, 1, 12, 0][3, 2, 3, 12, 12][3, 3, 1, 12, 24]

chemin2 :
[1, 1, 2, 8, 0][1, 2, 2, 2, 8][1, 3, 2, 6, 10]

chemin3 :
[3, 1, 3, 12, 0][3, 2, 3, 12, 12][3, 3, 1, 12, 24]

chemin4 :
[2, 1, 1, 12, 0][3, 2, 3, 12, 12][2, 2, 3, 11, 24]

chemin5 :
[3, 1, 3, 12, 0][3, 2, 3, 12, 12][2, 2, 3, 11, 24]



normalement après l'opération 22 il affiche l'opération 23 puisque leur date de début égale a la somme de date de début et la durée d'exécution de l'opération 22 !

SVP vos conseils!!