Cómo programar vuelos en Python

Asigne suficientes aviones mientras minimiza el costo usando CVXPY

Motivación

Imagínese que es propietario de una aerolínea. Su aerolínea debe asignar sus aviones con base en Nueva York para cubrir todos los próximos vuelos programados.

Hay 10 vuelos y 8 secuencias de vuelos. Cada secuencia de vuelos consta de varios vuelos.

Por ejemplo, una secuencia de vuelos puede constar de vuelos de Nueva York a Buffalo, de Buffalo a Chicago y de Chicago a Nueva York.

Imagen del autor

Cada secuencia de vuelo tiene un costo determinado. Necesitamos seleccionar un subconjunto de secuencias de vuelo para que haya al menos un avión para cada vuelo.

Hay muchas formas posibles de seleccionar una combinación de secuencias de vuelo para que haya un avión disponible para cada vuelo. Una posible combinación es la siguiente:

Imagen del autor

Otra posible combinación es la siguiente:

Imagen del autor

Y muchos más.

¿Qué combinación de secuencias debería elegir su aerolínea para que se satisfaga la restricción y se minimice el costo?

Muchas aerolíneas importantes se enfrentan a este problema. American Airlines estimó que su sistema basado en programación matemática ahorra alrededor de $ 20 millones por año.

En este artículo, aprenderá a utilizar la programación de enteros y Python para resolver este problema.

¿Qué es la programación de enteros?

La programación de enteros implica problemas con los objetivos y las limitaciones. Algunas o todas las variables están restringidas a números enteros.

CVXPY es una herramienta de Python que proporciona interfaces a muchos solucionadores de programación de enteros. Para instalar CXVPY, escriba:

pip install cvxpy

Obtener datos

Empiece por descargar los datos de Google Drive:

Obtenga el horario, el costo y las horas de cada secuencia de vuelo.

Convierte todos los números positivos en 1:

Parámetros de entrada

Definir parámetros de entrada:

Imagen del autor

Variables de decisión

Defina las variables de decisión usando cp.Variable:

Imagen del autor

Restricción

Debe haber al menos un avión por vuelo. Por ejemplo, para asegurarse de que haya al menos un avión para el vuelo de Nueva York → Buffalo, se debe elegir la secuencia de vuelo 1, 4 o 7.

Para asegurarse de que haya al menos un avión para el vuelo de Nueva York → Cincinnati, se debe elegir la secuencia de vuelo 2 o 5.

Por lo tanto, para el vuelo de Nueva York → Buffalo, tenemos la restricción:

Imagen del autor

Generalice esta restricción para los 10 vuelos, tenemos:

Imagen del autor

Objetivo

Queremos elegir las secuencias de vuelo que minimicen el coste total.

Imagen del autor

Resolver el problema

Ahora que tenemos limitaciones y un objetivo, ¡resolvamos el problema!

13.0

[1. 1. 1. 0. 0. 0. 0. 0.]

Eso significa que el avión debería volar:

  • de Nueva York → Búfalo → Chicago → Nueva York
  • desde Nueva York → Cincinnati → Pittsburgh → Nueva York
  • desde Nueva York → Chicago → Cincinnati → Nueva York
  • Imagen del autor

Agreguemos esa restricción a nuestro problema y veamos qué sucede.

Restricción del número total de horas

Primero necesitamos obtener la matriz que representa la cantidad de horas para cada secuencia de vuelo:

Imagen del autor

Combine la primera restricción con la nueva restricción:

Imagen del autor

Resolver el problema:

20

Es porque se eligen diferentes secuencias de vuelos.

Imagen del autor

Pero, ¿por qué no se eligen la segunda y tercera secuencia de vuelos? Si observamos de cerca la matriz que representa las horas, podemos ver que las horas totales de los primeros 3 vuelos superan las 1700.

Imagen del autor
Imagen del autor

Sin embargo, el total de horas de la primera, quinta y sexta secuencia de vuelos es menor que 1700, lo que satisface la restricción.

Imagen del autor

Y aquí está la representación visual de las nuevas secuencias de vuelo elegidas.

Imagen del autor

Conclusión

¡Felicidades! Acaba de aprender a elegir secuencias de vuelos minimizando el costo. Espero que este artículo lo motive a resolver problemas similares utilizando programación de enteros y Python.

Siéntase libre de bifurcar y jugar con el código de este artículo en este repositorio de Github:

Me gusta escribir sobre conceptos básicos de ciencia de datos y jugar con diferentes algoritmos y herramientas de ciencia de datos. Podrías conectarte conmigo en LinkedIn y Twitter .

Protagonizar esta repo si quieres echa un vistazo a los códigos para todos los artículos que he escrito. Sígueme en Medium para mantenerte informado con mis últimos artículos sobre ciencia de datos como estos:

Referencia

Chen, D.-S., Batson, RG y Dang, Y. (2010). Programación de enteros aplicada: modelado y solución . J. Wiley & Sons.

Suggested posts

Cómo ejecutar los complementos de ChatGPT de forma gratuita usando Langchain

Cómo ejecutar los complementos de ChatGPT de forma gratuita usando Langchain

Debe haber oído hablar de todos los complementos nuevos y potentes de ChatGPT, como el navegador, el intérprete de código, etc. Pero hay un problema, el acceso a los complementos está limitado a una lista de espera y, por lo tanto, muchos no tienen acceso a ellos.

Cómo pasé de Matemáticas a CS

Cómo pasé de Matemáticas a CS

El proceso de admisión de otoño de 2023 está llegando a su fin y se están produciendo aplazamientos/rechazos. Felicitaciones si ha sido aceptado en el programa de sus sueños en la UW.

Related posts

Rastree a cualquiera con solo un número de teléfono | Investigación OSINT

Rastree a cualquiera con solo un número de teléfono | Investigación OSINT

Puede ser un investigador de OSINT, un jugador de CTF o simplemente alguien que recibe llamadas no deseadas. Alguien que está tratando de verificar el número que viste en un anuncio.

Lo que puede hacer en su temporada de espera (esperando conseguir su primer trabajo en tecnología)

Lo que puede hacer en su temporada de espera (esperando conseguir su primer trabajo en tecnología)

Cambiar a una nueva carrera puede ser extremadamente desafiante si trata de hacerlo solo. Es importante encontrar socios responsables que estén en el mismo nivel de aprendizaje que usted, que compartan objetivos, tenacidad e impulso similares.

La erosión lenta: revelando las formas en que las personas se desgastan en sus carreras

La erosión lenta: revelando las formas en que las personas se desgastan en sus carreras

En el mundo acelerado y competitivo de hoy, la carrera de uno juega un papel importante en el crecimiento personal, la estabilidad financiera y la satisfacción general con la vida. Sin embargo, muchas personas se encuentran atrapadas en un ciclo implacable de estancamiento e insatisfacción, y su vida profesional se desvanece gradualmente.

Creación de un entorno de trabajo seguro

Creación de un entorno de trabajo seguro

“Él me protegerá cuando esté en peligro. Me esconderá en su tienda.