Vous êtes sur la page 1sur 3

U.S.T.H.

B 2ème Master Mind


Année 2020-2021 DAHMANI Isma

TP SOLO : Programmation Linéaire

1 Problématique

Le problème du Set Union Knapsack (SUKP) est une variante du problème de sac à dos binaire. Une instance du

SUKP est caractérisée par deux ensembles :

– Un sac à dos de capacité B,

– Un ensemble U d’éléments avec U = {1, ..., n} et,

– Un ensemble S d’objets S = {1, ..., m}.

Chaque objet i, i ∈ S, correspond à un sous ensemble d’éléments j de U , noté Si . A chaque objet i est associé un profit

pi et à chaque élément j est associé un poids w j .

D’une manière plus précise, si l’objet i est sélectionné pour être dans le sac à dos alors tous les éléments j qui sont

dans l’ensemble Si sont sélectionnés et dans ce cas le poids d’un objet i peut être calculer par Wi = ∑ j=1∈Si w j

Le but du problème est de déterminer un sous ensemble d’objets tel que le profit total est maximisé sans dépasser

la capacité du sac à dos B.

D’une façon formelle, le problème peut s’écrire de la manière suivante :


 m
Max ∑ pixi





i=1





 n



 s.c ∑ w jy j 6 B (1)
(SUKP) j=1









y j > xi ∀ j ∈ Si , ∀ i = 1, . . . , m (2)




y j ∈ {0, 1}, xi ∈ {0, 1}, ∀ j ∈ Si , ∀ i = 1 . . . , m.


où, xi est une variable de décision, xi = 1 si l’objet i est sélectionné, 0 sinon.

De plus si xi = 1 le sous-ensemble Si est choisi alors y j = 1, ∀ j ∈ Si , 0 sinon.

L’équation (1) représente la contrainte de sac à dos et les équations (2) sont les contraintes de précédence, où si

l’objet i est sélectionné alors nécessairement les éléments de l’ ensemble de Si sont fixés à un.

1/3
2 Questions

Soit R − PLNESUKP le problème relaxé obtenu par la relaxation des variables xi et y j (problème relaxé signifie que

les variables xi et y j sont prises dans l’intervalle continu [0; 1]).

1) En utilisant les fichiers : créer un fichier de type lp (noté SUKP.lp) pour le R − PLNESUKP à partir du fichier

de données.

2) Résoudre le SUKP.lp avec le mode interactif et sauvegarder la solution dans un fichier text (noté SOL-

SUKP.txt).

3) Écrire un programme C/C++ permettant de résoudre le R − PLNESUKP par lecture du fichier SUKP.lp( Vous

utiliserez pour cela Cplex Callable Library).

Soit Z la valeur de la fonction objectif du R − PLNESUKP trouvée précédemment. On définit le programme linéaire

permettant l’encadrement des variables xi du SUKP comme suit :

m
(E − PLNESUKP ) Min : ∑ xi (1)
i=1
n
s.c. ∑ w j y j 6 B, (2)
j=1
m
∑ pi xi ≥ Z, (3)
i=1
y j > xi ∀ j ∈ Si , ∀ i = 1, . . . , m. (4)

y j ∈ {0, 1}, xi ∈ {0, 1}, ∀ j ∈ Si , ∀i = 1 . . . , m. (5)

4) Écrire un programme C/C++ permettant de résoudre le E − PLNESUKP par appels successifs des fonctions :

CPXnewcols , CPXaddrows de Callable Library. (limiter le temps d’exécution à 100 s)

5) Modifier la fonction objectif du E − PLNESUKP pour obtenir la fonction objectif suivante Max : ∑m
i=1 xi et ré-

2/3
soudre le problème (limiter le temps d’exécution à 100 s) avec :

(i)Avec le mode interactif,

(ii) Avec Callable Library (par appels successifs des fonctions : CPXnewrows, CPXaddcols de Callable Li-

brary).

PS : set timelimit : permet de limiter le temps d’exécution en seconds pour le mode interactif

QU’EST-CE QUI CONDITIONNE LA RÉUSSITE ?

LA CAPACITÉ À SOUTENIR UN EFFORT CONTINU.

Henry Ford

3/3