Bonjour,
je suis face à un problème en programmation linéaire. Je dispose d'un ensemble I de complexes (les batiments, pas les nombres), d'un ensemble J de véhicules, et d'un ensemble K de clients.
La variable Xijk signifie que le client k est associé au véhicule j qui est associé au complexe i lorsqu'elle vaut 1, sinon elle vaut 0.
Pour respecter les contraintes, je dois faire en sorte qu'un véhicule j ne soit associé qu'à un seul complexes.
Je dois donc vérifier que :
Xi1-j-k1 + Xi2-j-k2 <= 1, pour i1 <> i2, et k1 <>k2, et j fixé.
Pour faire cela, pour toutes les valeurs possibles, j'ai donc fait :
Code Xpress : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 forall(j in VEHICLES) forall(i1 in FACILITIES, i2 in FACILITIES) if ( not((i1 = i2)) ) then forall(k1 in CLIENTS, k2 in CLIENTS) if ( not((k1 = k2)) ) then variables(i1, j, k1) + variables(i2, j, k2) <= 1 end-if end-if
Le problème, c'est que ca prend beaucoup de mémoire pour tout tester. Et surtout, il faut également que je puisse le généraliser, c'est à dire avoir quelque chose de la forme :
Somme Xi-j-k <= 1 avec les couples (i,k) différents deux à deux.
Ce que j'ai fait actuellement ne le fait que deux à deux. Je pense que si toutes les équations sont vérifiées, alors la généralisation fonctionne aussi. Mais ca prend énormément de temps. Je recherche donc un moyen de faire la généralisation, pour comparer, mais je n'y arrive pas.
Merci de votre aide.
Partager