Algo
21 Mars 2011
Licence ST-A / S5 Info
François Lemaire
DS Algo
Polycopié de cours autorisé
Sujet à rendre
Indiquez votre numéro sur le sujet
1 Questions sur le DM (3pts)
Voici une solution du DM, où certaines lignes ont été masquées. Les réponses aux questions doivent s’appuyer sur
les noms des variables données dans la solution. Le sujet du DM est fourni à la fin du sujet.
set VEGETALES;
set ANIMALES;
set HUILES := VEGETALES union ANIMALES;
set MOIS;
param prix_achat_huiles {MOIS, HUILES} >= 0; # euros / tonne
param prix_vente_nourriture >= 0; # euros / tonne
param max_vegetales_raffinables >= 0; # tonnes
param max_animales_raffinables >= 0; # tonnes
/* quantité d’huile achetée par mois, et par type d’huile */
var qte_achetee {MOIS, HUILES} >= 0; # tonnes
/* quantité de nourriture vendue par mois */
var qte_vendue {MOIS} >= 0; # tonnes
/* recettes totales pour le mois m */
var recettes {m in MOIS} >= 0;
/* dépenses totales pour le mois m */
var depenses {m in MOIS} >= 0;
maximize ....
/* liste des contraintes */
...
data;
set VEGETALES := VEG1 VEG2;
set ANIMALES := ANI1 ANI2 ANI3;
set MOIS := janvier fevrier mars avril mai juin;
param prix_achat_huiles :
VEG1 VEG2 ANI1 ANI2 ANI3 :=
janvier 110 120 130 110 115
fevrier 130 130 110 90 115
mars 110 140 130 100 95
avril 120 110 120 120 125
mai 100 120 150 110 105
juin 90 100 140 80 135;
param prix_vente_nourriture := 150;
param max_vegetales_raffinables := 200;
param max_animales_raffinables := 250;
1
Q 1 . On suppose ici qu’il n’y a pas de gestion de stock. Donner les deux contraintes permettant de calculer les
variables recettes et depenses. Votre réponse devra être compacte, et utiliser au mieux les variables introduites dans
la solution.
Q 2 . On voudrait ajouter une contrainte supplémentaire : pour chaque mois, la quantité totale d’huiles animale et
végétale achetée doit être supérieure où égale à min_huile, où min_huile est une constante (indépendante des mois)
exprimée en tonne, et dont la valeur sera fixée dans la partie data. On suppose ici qu’il n’y a pas de gestion de stock,
ainsi l’huile achetée doit obligatoirement être raffinée. Donnez la nouvelle contrainte à ajouter.
On se pose maintenant la question de savoir si l’ajout de la contrainte de la question précédente a un effet ou pas
sur la solution optimale du problème initial.
Q 3 . Donner, en justifiant, une valeur numérique de min_huile pour laquelle on est sûr que la solution optimale
ne change pas.
Q 4 . Donner, en justifiant, une valeur numérique de min_huile pour laquelle on est sûr qu’il n’y a pas de solution.
2 Complexité (5pts)
Soit G=hS, Aiun graphe orienté acyclique. On note n=|S|et m=|A|. On suppose le graphe représenté par
des listes de successeurs.
Définition 1 Un sommet xSest appelé une racine de Gsi tous les autres sommets de Gsont accessibles à partir
de lui.
Q 5 . Montrer en une phrase ou deux que Gadmet au plus une racine.
Q 6 . Donner un exemple de graphe Gqui n’admet pas de racine.
Q 7 . Proposer, en au plus une demi-page, un algorithme de complexité en temps, dans le pire des cas, en O(n+m),
prenant en entrée un graphe orienté acyclique Get qui détermine si Gadmet une racine. Justifier en une phrase ou
deux que l’algorithme est correct. Indication : vous pourrez vous aider d’un algorithme vu en cours qui fonctionne
pour les graphes acycliques uniquement.
Q 8 . Justifier en une phrase ou deux que la complexité en temps, dans le pire des cas, est bien en O(n+m).
Q 9 . On suppose maintenant que Gest simplement un graphe orienté. Donner un exemple de graphe possédant
deux racines.
Q 10 . Bonus. Proposez un algorithme de complexité en O(n+m)prenant en entrée un graphe orienté Get qui
détermine si Gadmet une racine. Remarque : pour information, une solution consiste à parcourir le graphe depuis
chaque sommet, en utilisant une variante de parcours en largeur.
3 Exercice programmation linéaire (5pts)
Un poissonier dispose d’un grand stock d’huîtres et d’oursins. Il prépare deux types de paniers pour les vendre à
ses clients : un panier A (4 oursins, 1 huître), et un panier B (2 oursins, 3 huîtres). Pour rendre service à son ami qui
n’a plus d’huîtres ni d’oursins, le poissonier accepte de revendre à un prix d’ami des paniers de type A et B. C’est
évidemment pour rendre service, car le poissonier gagnerait 3 euros de plus s’il vendait un panier A directement à un
client, au lieu de le vendre à son ami. Pour un panier B, il gagnerait 2 euros de plus.
Son ami désire au moins et 400 oursins et 450 huîtres, et le poissonier ne veut pas vendre plus de 200 paniers.
Q 11 . En nommant xle nombre de paniers A et yle nombre de paniers B, montrez que l’on se ramène au programme
linéaire PL1 suivant (zindique le manque à gagner, que le poissonier veut minimiser). Vous compléterez les parties
manquantes.
2
... x +... y =z[min]PL1
... 400
... 450
x+y...
Q 12 . Vous devez répondre à cette question sur la page quadrillée page 5. Résoudre graphiquement le problème, en
faisant apparaître au moins deux droites d’objectif sur votre dessin. Vous mettrez obligatoirement xen abscisse et y
en ordonnée.
Q 13 . Le programme linéaire PL1 est-il sous forme canonique ? Si non, le mettre sous forme canonique (avec
minimisation d’objectif), et ce en n’utilisant que les variables xet y.
Dans la suite, le programme linéaire mis sous forme canonique est noté PLC.
Q 14 . En une phrase, expliquez si oui ou non le programme linéaire PLC pose un problème de démarrage.
Q 15 . Ecrire le dual de PLC.
Q 16 . Résoudre le dual par l’algorithme du tableau simplicial (il n’y a que 2 ou 3 itérations).
Q 17 . Déduire du tableau simplicial final du dual, la solution optimale, et l’objectif réalisé à l’optimum du primal.
Q 18 . Quelle est la valeur marginale de la contrainte qui impose que le nombre de paniers est inférieur à 200 ?
Quelle est la dimension de cette valeur ? Donnez-en une interprétation.
4 Flot maximal (7pts)
Une entreprise comporte nemployés (e1,e2, ..., en). Ceux-ci sont répartis dans mcorps de métiers (c1,c2, ..., cm)
et rcatégories socio-professionnelles (p1,p2, ..., pr). Un employé peut appartenir à plusieurs corps de métiers, mais
un employé appartient à une et une seule catégorie socio-professionnelle. Lors d’une élection, chaque corps de métier
doit désigner exactement un employé (appartenant au corps de métier). De plus chaque catégorie socio-professionnelle
jne peut pas avoir plus de u[j]membres siégeant (le tableau uest supposé connu, chaque u[j]est un nombre entier).
Dit autrement, l’élection consiste à trouver un ensemble Sd’employés :
l’ensemble Scontient exactement memployés
pour chaque corps de métier ci, il doit exister un employé de Squi soit du corps de métier ci
pour chaque catégorie socio-professionnelle pj, il doit y avoir dans Sau plus u[j]employés de cette catégorie.
Le but de l’exercice est de déterminer l’ensemble Sen utilisant l’algorithme du flot maximal.
Un exemple
On traite le problème avec n= 5,m= 3 et r= 2, avec u[1] = 1 et u[2] = 2. On construit un graphe orienté avec
comme sommets les ci, les ei, les piplus une super-source set une super-destination t. On relie sà chaque ci, chaque
piàt, chaque ciaux employés du corps de métier ci, et chaque eià sa catégorie socio-professionnelle. On obtient le
graphe de la figure 1.
Q 19 . Supposons que toutes les capacités des arcs sont des entiers positifs. Expliquer en une ou deux phrases
pourquoi l’algorithme de Ford-Fulkerson va calculer des flux à valeur entière.
Q 20 . Supposons que chaque arc partant de sait une capacité de 1. On ne précise rien pour les capacités des autres
arcs. Après avoir appliqué l’algorithme de Ford-Fulkerson, peut-il y avoir plusieurs arcs avec un flux de 1 partant d’un
même sommet ci? Justifier.
Q 21 . Expliquer comment, en attribuant la capacité 1 à la majorité des arcs, on peut résoudre le problème du
vote. Vous donnerez précisément la valeur de chaque arc, quelle valeur le flot maximal doit avoir pour que le problème
admette une solution, et vous justifierez en une ou deux phrases comment les contraintes du vote sont satisfaites grâce
à votre choix des capacités.
3
s
c1
c2
c3
e1
e2
e3
e4
e5
p1
p2
t
Figure 1 – graphe orienté associé à l’exemple
Q 22 . De combien augmente le flot à chaque fois que l’on traite une chaîne améliorante ? Justifier. En déduire
combien de chaînes améliorantes au plus il faut traiter pour trouver le flot maximal.
Q 23 . Appliquer l’algorithme de Ford-Fulkerson en remplissant les figures de la page 6. Appliquez bien les consignes
demandées en haut de la page 6.
Q 24 . Quelle est la valeur du flot maximal ? Faites clairement apparaître une coupe de capacité minimale.
Q 25 . Déduire du flot une solution au problème du vote, en donnant les employés de l’ensemble S.
Q 26 . La solution est-elle unique ? Si oui, prouvez-le. Si non, donnez une autre solution.
L’algorithme général
Q 27 . Donner une condition nécessaire d’existence d’une solution au problème, qui relie met les valeurs u[i].
Q 28 . On code le problème par la structure de données suivante :
n,m,rsont des entiers
uest un tableau d’entiers
csp[i]est un entier, désignant le numéro de catégorie socio-professionnelle de l’employé ei. Sur l’exemple précé-
dent, csp[3] vaut 1, car l’employé e3a pour catégorie socio-professionnelle p1
cdm[i]est une liste d’entiers désignant les corps de métier auquel l’emploeiappartient. Sur l’exemple précédent,
cdm[3] est la liste [2,3], car l’employé e3appartient aux corps de métiers c2et c3.
Donner une fonction construisant un graphe orienté valué (c-à-d avec les capacités), à partir des paramètres n,
m,r,u,csp,cdm. Ce graphe sera l’analogue du graphe de l’exemple précédent, sur lequel on appliquera plus tard
l’algorithme de Ford-Fulkerson.
Q 29 . Quelle est la complexité en temps et en espace de votre fonction ? Vous donnerez votre réponse en fonction
de n,met r. On suppose que les opérations classiques sur les graphes (création d’un sommet, création d’une arète,
. . . ) ont un coût constant.
Q 30 . Aurait-on pu coder le problème par une autre structure de données, afin d’obtenir une complexité inférieure
à celle trouvée dans la question précédente ? Si oui, proposer une meilleure structure de données (en suivant le modèle
donné précédemment) ainsi que la complexité en temps et espace associée pour construire le graphe.
Q 31 . Ecrire une fonction prenant en paramètre le graphe Gconstruit par votre fonction précédente, et qui renvoie
l’ensemble vide si aucune solution au problème du vote existe, ou bien l’ensemble Ssolution si une solution existe.
4
Résolution graphique (programmation linéaire)
x
y
100 200 300
100
200
300
5
1 / 7 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !