Imaginez que vous êtes propriétaire d'une compagnie aérienne. Votre compagnie aérienne doit affecter ses avions basés à New York pour couvrir tous les vols réguliers à venir.
Il y a 10 vols et 8 séquences de vols. Chaque séquence de vols se compose de plusieurs vols.
Par exemple, une séquence de vols peut comprendre des vols de New York à Buffalo, de Buffalo à Chicago et de Chicago à New York.
Chaque séquence de vol a un certain coût. Nous devons sélectionner un sous-ensemble de séquences de vol afin qu'il y ait au moins un avion pour chaque vol.
Il existe de nombreuses façons de sélectionner une combinaison de séquences de vol afin qu'il y ait un avion disponible pour chaque vol. Une combinaison possible est comme ceci :
Une autre combinaison possible est comme ceci :
Et beaucoup plus.
Quelle combinaison de séquences votre compagnie aérienne doit-elle choisir pour que la contrainte soit satisfaite et le coût minimisé ?
De nombreuses grandes compagnies aériennes sont confrontées à ce problème. American Airlines a estimé que son système basé sur la programmation mathématique permet d'économiser environ 20 millions de dollars par an.
Dans cet article, vous apprendrez à utiliser la programmation en nombres entiers et Python pour résoudre ce problème.
La programmation en nombres entiers implique des problèmes avec des objectifs et des contraintes. Certaines ou toutes les variables sont limitées à des nombres entiers.
CVXPY est un outil Python qui fournit des interfaces à de nombreux solveurs de programmation en nombres entiers. Pour installer CXVPY, tapez :
pip install cvxpy
Commencez par télécharger les données depuis Google Drive :
Obtenez l'horaire, le coût et les heures de chaque séquence de vol.
Transformez tous les nombres positifs en 1 :
Définissez les paramètres d'entrée :
Définir les variables de décision en utilisant cp.Variable:
Il doit y avoir au moins un avion par vol. Par exemple, pour s'assurer qu'il y a au moins un avion pour le vol de New York → Buffalo, la séquence de vol 1, 4 ou 7 doit être choisie.
Pour s'assurer qu'il y a au moins un avion pour le vol New York → Cincinnati, la séquence de vol 2 ou 5 doit être choisie.
Ainsi pour le vol New York → Buffalo, on a la contrainte :
En généralisant cette contrainte pour les 10 vols, nous avons :
Nous voulons choisir les séquences de vol qui minimisent le coût total.
Maintenant que nous avons des contraintes et un objectif, résolvons le problème !
13.0
[1. 1. 1. 0. 0. 0. 0. 0.]
Cela signifie que l'avion doit voler :
Ajoutons cette contrainte à notre problème et voyons ce qui se passe.
Nous devons d'abord obtenir le tableau représentant le nombre d'heures pour chaque séquence de vol :
Combinez la première contrainte avec la nouvelle contrainte :
Résoudre le problème:
20
C'est parce que différentes séquences de vols sont choisies.
Mais pourquoi les deuxième et troisième séquences de vols ne sont-elles pas choisies ? Si nous examinons de près le tableau représentant les heures, nous pouvons voir que le nombre total d'heures des 3 premiers vols dépasse 1700.
Cependant, le nombre total d'heures des première, cinquième et sixième séquences de vols est inférieur à 1700, ce qui satisfait la contrainte.
Et voici la représentation visuelle des nouvelles séquences de vol choisies.
Toutes nos félicitations! Vous venez d'apprendre à choisir des séquences de vols tout en minimisant le coût. J'espère que cet article vous motivera à résoudre des problèmes similaires en utilisant la programmation en nombres entiers et Python.
N'hésitez pas à forker et à jouer avec le code de cet article dans ce repo Github :
J'aime écrire sur les concepts de base de la science des données et jouer avec différents algorithmes et outils de science des données. Vous pouvez communiquer avec moi sur LinkedIn et Twitter .
Star ce repo si vous voulez vérifier les codes de tous les articles que j'ai écrits. Suivez-moi sur Medium pour rester informé de mes derniers articles sur la science des données comme ceux-ci :
Chen, D.-S., Batson, RG et Dang, Y. (2010). Programmation en nombres entiers appliquée : modélisation et solution . J. Wiley & Fils.
Vous devez avoir entendu parler de tous les nouveaux plugins ChatGPT puissants comme le navigateur, l'interpréteur de code, etc. Mais il y a un problème, l'accès aux plugins est limité à une liste d'attente et donc beaucoup n'y ont pas accès.
Le processus d'admission de l'automne 2023 touche à sa fin et des reports/rejets se produisent. Félicitations si vous avez été accepté dans le programme de vos rêves à l'UW.
Dans le paysage commercial en évolution rapide d'aujourd'hui, le concept de travail hybride et à distance a pris un élan sans précédent. Alors que les entreprises continuent de s'adapter à l'évolution des besoins et des attentes de leurs employés, des experts de divers domaines se sont réunis pour discuter des avantages, des défis et de l'avenir de cette façon de travailler transformatrice.
J'étais récemment sur Linkedin, le plus grand réseau social professionnel au monde, et j'ai trouvé des messages de designers indépendants que je suis et qui ont attiré mon attention. Ils ont tous posté des photos d'avions, sur la plage avec leurs ordinateurs portables, de piscines et de bureaux avec une vue imprenable.
Dans le monde hyper-connecté d'aujourd'hui, les systèmes médiatiques jouent un rôle central dans la formation de l'opinion publique et, par conséquent, dans la prise de décision démocratique. Dans son analyse approfondie de l'économie politique de la communication, le chercheur Robert McChesney remet en question la sagesse conventionnelle et présente ce qu'il appelle les « cinq vérités » sur les médias.
Pour éviter toute ambiguïté, les termes suivants seront utilisés ; Authentificateur ; Le téléphone mobile utilisé pour effectuer la connexion au site Web ; Le site Web ou l'application que l'utilisateur utilise pour effectuer la demande de connexion au service ; Le fournisseur fournissant le service donné, par exemple