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 :
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);	
 
}
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[][]

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