Planification efficace des transports à l'aide de R : résolution des problèmes de transport avec la programmation linéaire

May 04 2023
Le problème de transport est un problème d'optimisation bien connu dans le domaine de la recherche opérationnelle. Il s'agit de déterminer le moyen optimal de transporter des marchandises à partir de sources (telles que des usines, des entrepôts, etc.
Image générée à l'aide de gencraft.com

Le problème de transport est un problème d'optimisation bien connu dans le domaine de la recherche opérationnelle. Il s'agit de déterminer la manière optimale de transporter les marchandises des sources (telles que les usines, les entrepôts, etc.) aux destinations (telles que les magasins de détail, les clients, etc.) tout en minimisant le coût total du transport. Le problème se pose dans de nombreuses applications pratiques, telles que la gestion de la chaîne d'approvisionnement, la logistique et la planification de la distribution.

Le problème de transport peut être représenté comme un modèle de programmation linéaire (LP), où l'objectif est de minimiser le coût total de transport soumis aux contraintes de l'offre et de la demande. Le modèle LP peut être résolu à l'aide de diverses méthodes, notamment l'algorithme du simplexe, la méthode du point intérieur et les algorithmes de flux de réseau.

Le problème de transport a plusieurs variantes, telles que le problème de transport déséquilibré, où l'offre totale n'est pas égale à la demande totale, et le problème de capacité de transport, où la capacité du réseau de transport est limitée. Le problème peut également être étendu pour inclure d'autres facteurs, tels que les fenêtres temporelles, les produits multiples et les modes de transport multiples.

Dans cet article, nous aborderons les bases du problème de transport, sa formulation LP et diverses méthodes de résolution. Nous explorerons également des exemples concrets et des applications du problème de transport et de ses variations.

Considérons un scénario où il y a 6 consommateurs et 4 fournisseurs d'un produit situés à différents endroits. Le coût de transport entre chaque fournisseur et consommateur est représenté par une matrice.

lpSolveest un package R qui fournit un ensemble de fonctions pour résoudre les problèmes de programmation linéaire et mixte, y compris le problème de transport. Le package permet aux utilisateurs de spécifier les contraintes du problème, la fonction objectif et d'autres paramètres d'optimisation, puis d'obtenir la solution optimale à l'aide du solveur LP.

Description du code :

  • row.signs <- rep("<=", 4): Cette ligne définit les signes d'inégalité/égalité pour les contraintes fournisseur comme "inférieur ou égal à" puisqu'il s'agit d'un problème de minimisation. La fonction rep()permet de répéter le même signe pour les 4 fournisseurs.
  • row.rhs <- c(1560, 3500, 5000, 2500): Cette ligne définit les coefficients de droite pour les contraintes fournisseur. Ces valeurs représentent les capacités maximales de chaque fournisseur à fournir la marchandise.
  • col.signs <- rep(">=", 6): Cette ligne définit les signes d'inégalité/égalité pour les contraintes de consommation comme "supérieurs ou égaux à" puisqu'il s'agit d'un problème de minimisation. La fonction rep()permet de répéter le même signe pour les 6 consommateurs.
  • col.rhs <- c(2000, 4000, 1500, 2000, 1000, 2060): Cette ligne définit les coefficients de droite pour les contraintes de consommation. Ces valeurs représentent les exigences minimales de chaque consommateur pour le produit.
  • lp.transport(costs, "min", row.signs, row.rhs, col.signs, col.rhs): Cette ligne calcule la solution optimale au problème de transport en appelant la lp.transport()fonction et en transmettant la matrice de coût et les informations de contrainte.
  • lp.transport(costs, "min", row.signs, row.rhs, col.signs, col.rhs)$solution: Cette ligne extrait les valeurs finales des variables de décision (c'est-à-dire les quantités de marchandise transportées de chaque fournisseur à chaque consommateur) de l'objet solution renvoyé par lp.transport().

Merci d'avoir lu, suivez-moi pour en savoir plus