previous up next contents
Previous: 4. M/M Queues Up: Recherche Opérationnelle Next: B. Compléments   Contents

Subsections

A. Programmation effective

A.1 Listings commentés

Une optimisation évidente de cet algorithme consiste à confier le soin des additions et multiplications à un ordinateur. On sera néanmoins attentif à ne pas sous-traiter la réflexion, qui constitue le coeur du métier d'ingénieur.


\begin{algorithm}
% latex2html id marker 2178
[htbp]
\begin{algorithmic}[1]
\par...
...tement des inégalités, création des variables supplémentaires.
}
\end{algorithm}

Le programme mk_simplex (LISTING 6) a pour objectif de créer toutes les variables auxiliaires nécessaires à la transformation des inéquations en équations et à la transformation des contraintes non satisfaites par l'origine du problème initial en contraintes satisfaites par l'origine d'un problème de plus grande taille. Pour des raisons de commodité, les trois sortes de variables s'appellent toutes $ x$, l'indice variant de $ 1$ à $ N$ pour les variables naturelles, de $ N+1$ à $ N+M$ pour les variables "$ y$" et de $ N+M+1$ à la fin pour les variables "$ z$".

En sortie, $ eqs$ contient les équations récrites, $ tous$ est l'ensemble de toutes les variables, $ spec$ est l'ensemble des variables "$ z$" et $ lieu$ est la liste des coordonnées dont l'égalité à 0 caractérise le point où l'on se trouve.

Le programme pt_vue (LISTING 7) est un programme "cosmétique" destiné à récrire l'ensemble des équations du point de vue du sommet où l'on se trouve. L'écriture effective de ce programme est tout à fait simple (on utilise $ solve$ pour résoudre), mais est loin d'être optimale. En effet, une étape est caractérisée par l'échange de rôles entre une variable "actuellement principale" et une variable "actuellement auxiliaire" : une résolution de proche en proche serait plus rapide.


\begin{algorithm}
% latex2html id marker 2222
[htbp]
\begin{algorithmic}[1]
\par...
...on{Affichage du système (du point de vue du sommet en cours).
}
\end{algorithm}

Le programme avance (LISTING 10) exécute le déplacement consistant en l'échange des rôles entre la variable principale $ piv$, choisie par l'utilisateur, et la variable auxiliaire exerçant la contrainte la plus forte. Le cas exceptionnel où l'on trouve un mouvement $ x_{piv}=0$ ne se produit qu'en présence de contraintes redondantes.


\begin{algorithm}
% latex2html id marker 2233
[htbp]
\begin{algorithmic}[1]
\par...
...étape de l'algorithme (avec choix du pivot par l'utilisateur).
}
\end{algorithm}

\begin{algorithm}
% latex2html id marker 2243
[htbp]
\begin{algorithmic}[1]
\par...
...ght)\right)$\ ;
\par
\end{algorithmic}
\par
\caption{randavan}
\end{algorithm}


\begin{algorithm}
% latex2html id marker 2253
[htbp]
\begin{algorithmic}[1]
\par...
...étape de l'algorithme (avec choix du pivot par l'utilisateur).
}
\end{algorithm}


\begin{algorithm}
% latex2html id marker 2262
[htbp]
\begin{algorithmic}[1]
\par...
...on{Une étape de l'algorithme (avec choix aléatoire du pivot).
}
\end{algorithm}

Enfin, le programme randavance (LISTING 11) détermine quels sont les pivots possibles (variables ayant une influence positive sur la fonction de bénéfice) et en choisit un aléatoirement.


previous up next contents
Previous: 4. M/M Queues Up: Recherche Opérationnelle Next: B. Compléments   Contents


douillet@ensait.fr
2007-10-23