Bonjour à toutes et tous,
J'espère être au bon endroit pour l'ouverture de cette discussion. Mon utilisation de CPLEX est dans un cadre scolaire et j'ai un comportement étrange, enfin pour moi il semble étrange. Mon approche est peut-être mauvaise du coup.
Mes contraintes sont les suivantes :
- la somme de chaque ligne doit avoir identique aux autres
- la somme de chaque colonne doit être différentes des autres
Le modèle :
J'ai créé un execute pour mieux visualiser les résultats et je ne comprend pas pourquoi mon tableau intermédiaire sumColumns a de bonnes valeurs mais si on additionne les colonnes de x[][]
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 using CP; int N = 8; range rangeN = 0..N-1; dvar int x[rangeN][rangeN] in 0..1; dvar int+ sumColumns[rangeN]; maximize 0; subject to{ forall(i in rangeN: i > 0){ constraint1: sum(j in rangeN) x[i][j] == sum(j in rangeN) x[i-1][j]; } forall(j2 in rangeN){ sumColumns[j2] <= sum(i2 in rangeN) x[i2][j2]; } constraint2: allDifferent(sumColumns); }
1 0 1 0 0 1 1 0 = 4
0 1 0 1 1 0 1 0 = 4
0 0 1 1 0 1 1 0 = 4
1 0 0 1 0 1 1 0 = 4
0 0 1 0 1 1 1 0 = 4
0 0 1 1 0 1 1 0 = 4
1 1 0 1 0 0 1 0 = 4
1 1 0 0 0 1 0 1 = 4
4 3 4 5 2 6 7 1 : total colonnes
4 1 3 5 2 6 7 0 : sumColumns
Si commente le premier forall() (égalité entre les sommes des lignes)
1 0 0 0 1 1 1 0 = 4
1 0 0 0 0 0 0 0 = 1
0 0 0 0 0 1 0 0 = 1
1 1 1 1 1 1 0 0 = 6
1 0 1 1 1 0 0 0 = 4
1 0 0 0 1 1 0 0 = 3
1 0 0 1 1 1 0 0 = 4
1 0 1 1 1 0 1 0 = 5
7 1 3 4 6 5 2 0 : total colonnes
7 1 3 4 6 5 2 0 : sumColumns
si commente le deuxième forall() (différence entre les sommes de toutes les colonnes) on a seulement des 0 mais parce que cette solution est valide pour cette contrainte
Pourquoi ????Pourquoi j'ai une différence entre mon tableau intermédiaire sumColumns et la réalité ?
S'il vous est possible de me donner une piste d'explication sans me donner la solution (j'aime comprendre par moi même) cela serait super. En tout cas je remercie par avance les personnes qui prendront du temps pour me lire et peut-être m'apporter un éclaircissement.
Belle journée à tout le monde
Partager