Vous êtes sur la page 1sur 4

Vendredi 9 Décembre 2016

Groupe 5

Programmation de la Méthode du Simplex sous


Matlab

Bonjour monsieur,

Notre projet a pour but, dans un premier temps, de programmer la méthode du simplexe vu
en cours, et redémontrer l’ensemble des résultats obtenus.

Je me permets décomposer ce document en deux parties, la première partie aura pour but
d’introduire le contexte de la méthode du simplexe, en reprenant partiellement un exemple
vu en cours (également disponible sur le fascicule ci-joint), permettant ainsi une
compréhension plus aisée des questions listées en partie 2.

Dans cette première partie, des codes couleurs seront adoptés pour plus de compréhension.
De plus, des sigles tel que celui-ci : permettront de cibler les incompréhensions lors de la
programmation, le chiffre présent à l’intérieur indique la question concernée.
Partie 1 : Contexte

Nous cherchons à concevoir deux produits P1 et P2 à partir de trois matériaux.


Les stocks de matériaux sont les suivants : m1 = 8, m2 = 7 et m3 = 3
Les deux produits sont composés grâce aux quantités m suivantes :
- P1 = 2 m1 + 1 m2
- P2 = 1m1 + 2m2 + 1m3
Le profit souhaité est de z = 4x1 + 5x2

A partir de ces données, nous pouvons tirer le système suivant dans lequel apparait les
contraintes :
2𝑥1 + 1𝑥2 ≤ 8
{1𝑥1 + 2𝑥2 ≤ 7
1𝑥2 ≤ 3

Pour transformer ce système en équation, nous injectons trois nouvelles variables : x3 , x4 et


x5 , de manière à obtenir le système d’équation suivant :

2𝑥1 + 𝑥2 + 𝑥3 = 8
{𝑥1 + 2𝑥2 + 𝑥4 = 7
𝑥2 + 𝑥5 = 3

Nous décomposons ce système de la manière suivante.

𝑥1
2 1 1 0 0 𝑥2 8
[1 2 0 1 0]* 𝑥3 = (7)
0 1 0 0 1 𝑥4 3
𝑥5
( )
A b

La matrice A peut être décomposée en sous matrices : E composée des vecteurs hors base et
B, (la matrice de base) des vecteurs de base.

Les vecteurs x1 et x2 sont les variables associées aux vecteurs hors base, quand à x3 , x4 et x5
ils sont considérés comme des variables associées aux vecteurs de base.

La suite des opérations consiste à intervertir un vecteur hors base avec une vecteur de base
et de procéder à une série de calculs permettant d’affiner petit à petit l’optimisation.
1 Le choix du premier changement se fait par la variable la plus grande, dans, notre cas, il
s’agit de x2 = 5 car supérieure à x1 = 4. Nous insérons donc x2 en colonne 1.
1 1 0 2 0
Notre matrice B devient : B= [2 0 1] et E = [1 0 ]
1 0 0 0 1

𝑥2
𝑥1
Nous avons donc xb = (𝑥3) et xe = ( )
𝑥5
𝑥4

Pour savoir si cette base est réalisable, nous appliquerons la formule suivante : x b = B-1 * b.
Si les composantes de xb sont toutes positives, alors la base est réalisable. Dans le cas
contraire il nous faut intervertir de nouveau des vecteurs de base en gardant x 2 jusqu’à
2
obtenir un xb positif.
Lorsque xb est positif, une seconde étape intervient.
Cette dernière consiste à appliquer la formule : z = Cb * xb + Ce * xe (formule détaillée dans le
formulaire ci-joint)
Les composantes Ce et Cb proviennent des coefficients des variables dans l’équation du
profit, nous aurons donc x1 = 4, x2 = 5, x3 = x4 = x5 = 0
𝑥1
Nous obtenons z = 15 + [4 -5] ( ), pour obtenir des valeurs optimales de x1 et x2, les
𝑥2
g
valeurs de g doivent être négatives. Ici x1 n’est pas positif, nous allons donc le faire varier.
(nous prenons de nouveau le plus grand des deux, x1 > x2 ). X2 vient donc s’insérer à gauche,
déplaçant x1 d’une colonne, seule la colonne 3 fera donc l’objet de variations de vecteurs.

2 1 0 1 0 𝑥1
𝑥3
Nous obtenons B = [1 2 0] et E = [0 1 ], xb = (𝑥2) , xe = ( )
𝑥4
0 1 1 0 0 𝑥5

En appliquant notre formule xb nous obtenons une bases réalisable, dans le cas ou elle ne le
serait pas, nous devrions effectuer d’autres tests en intervertissant x5 avec x3 puis x4 jusqu’à
3 obtenir un g négatif. En calculant notre z, nous obtenons un g négatif, notre solution est
donc optimisée. Les composantes associées à x 1 et x2 à l’intérieur de z sont les coefficients
optimisés.
Partie 2 : Questions

Question 1 :
Lorsqu’une base est réalisable, les variables interviennent de diverses manières. Par
exemple, x2 est associée à un vecteur colonne dans la matrice B, et est associée à à une
valeur dans xb. Cela nous pose quelques problèmes lors de la programmation.
Comment serait-il possible de dissocier ces deux assignations ?

Question 2 :
Nous souhaiterions créer une boucle permettant d’intervertir les vecteurs colonnes dans les
matrices B et E. Cela nous permettrait de procéder à tous les tests. Notre idée était de
démarrer avec une matrice « neutre » dans laquelle nous viendrions boucler des échanges
de vecteurs colonnes de base et hors base selon des conditions prédéfinies.
B = [𝑥𝑖 𝑥𝑗 𝑥𝑘] et E = [𝑥𝑙 𝑥𝑚]
Existe-il une fonction permettant de réaliser une telle boucle ?

Question 3 :
Lorsque nous procédons au test, l’une des étapes clé est de trouver un xb positif, ainsi qu’un
Ce négatif.
De quelle manière pourrions identifier que C e possède bien deux composantes négatives,
sans que Matlab n’interprète une valeur numérique mais bien les composantes matrice ?

Question 4 :
Dans le cadre de cette exemple, seules deux variables interviennent dans le profit, il nous est
donc possible de représenter graphiquement dans un plan chaque test lorsque la base est
réalisable, obtenant les coordonnées du point (x1 , x2) à partir du z.
De quelle manière pourrions-nous insérer un graphique depuis les coordonnées présentes
dans une matrice ?

Vous aimerez peut-être aussi