Bonjour à tous,
Je sollicite votre aide pour résoudre un petit problème.
J'ai un tableau à une seule dimension :; ce tableau contient le nombre total de tâches dans une tournée. Dans mon exemple le tableau contient 8 tâches qui sont stockés dans un tableau nommé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part nbtache_rebut[j]. Ces tâches portent les numéros :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Tournee_Rebut[j].
Code : Sélectionner tout - Visualiser dans une fenêtre à part 30 31 32 33 34 35 36 37
Dans ce bout de code :
La tournée que je nomme 'rebut' est la suivante :
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 int f; int nbtache_rebut[maxR]; if (j==oni) { nbtache_rebut[j] = nbnewtask; i=removednurse[j]; fp << " \n route "<< j << " tasks " <<nbtache_rebut[j] << " : " ; for (f=ont; f<=ont+nbnewtask+1; f++) { int h = removedtask[f]; Tournee_Rebut[j] = removedtask[f]; if(h>=0) { fp << " " << Tournee_Rebut[j]; } } }==> ce code marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part route 2 tasks 8 : 30 31 32 33 34 35 36 37
Dans mon exemple, j'ai une seule tournée (N°2) et deux périodes. Ce que je voulais faire est de partager les 8 tâches sur les deux périodes (aléatoirement) de telle sorte avoir une période qui contient 3 tâches et la deuxième contient 5 tâches (par exp). A condition de ne avoir deux tâches dans deux périodes différentes.
Pour faire cela, j'ai codé ce bout de code qui, malheureusement ne marche pas :
La sortie de ce bout de code :
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 int nbrtache_rebut[maxR][maxT]; int rand_periode ; // valeur aléatoire // partage les taches sur toutes les periodes de la derniere tournee if (j==oni) // parcourir la derniere tournee { for(t=0; t<ond; t++) { while(nbtache_rebut[j]>0 ) // si la somme de taches restants supérieur à zero { rand_periode = rand()% (ond); // choisir une periode de la tournee i fp << " \n rand period : " << rand_periode; nbrtache_rebut[j][rand_periode] ++ ; // ajouter +1 au nombre de tache dans la periode choisie fp << " \n numero tache rebut : " << nbrtache_rebut[j][rand_periode]; nbtache_rebut[j]--; // decrementer le nombre de tache restant fp << " \n nb tasks restantes : " << nbtache_rebut[j]; } fp << "\n route " << j << " periode " << t << " tasks : " << nbrtache_rebut[j][rand_periode] ; } }
Une dernière chose : je souhaiterai par la suite savoir quelles sont les tâches qui ont étés choisies (cad les identifier dans un tableau à trois dimensions :
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 rand period : 0 numero tache rebut : 31 nb tasks restantes : 7 rand period : 1 numero tache rebut : 32 nb tasks restantes : 6 rand period : 1 numero tache rebut : 33 nb tasks restantes : 5 rand period : 0 numero tache rebut : 32 nb tasks restantes : 4 rand period : 1 numero tache rebut : 34 nb tasks restantes : 3 rand period : 1 numero tache rebut : 35 nb tasks restantes : 2 rand period : 0 numero tache rebut : 33 nb tasks restantes : 1 rand period : 0 numero tache rebut : 34 nb tasks restantes : 0 route 2 periode 0 tasks : 34 route 2 periode 1 tasks : 34: cad j'aurais besoin de savoir par exp la tâche 32 est faite par la ressource 2 et à la période 1. ==> Tournee_Rebut_Period[2][32][1].
Code : Sélectionner tout - Visualiser dans une fenêtre à part int Tournee_Rebut_Period[maxR][maxA][maxT];
Je vous remercie pour votre aide.
Cordialement,
Partager