Programación entera en Python

Abid Ullah 21 junio 2023
Programación entera en Python

Un problema de programación entera es un problema construido para garantizar la optimización matemática o la viabilidad al proporcionar que algunas o todas las variables involucradas en el problema sean números enteros.

Suponga que se encuentra que algunas variables de decisión en el problema no son discretas. En ese caso, se clasifican como un problema de enteros mixtos, más comúnmente conocido como MIP/MILP (Mixed-Integer Linear Programming).

Entonces, en este artículo de Python, exploraremos las diversas metodologías y bibliotecas que podemos usar para resolver este tipo de problemas en Python.

Problemas de programación de enteros mixtos en Python

Un problema de programación entera mixta (MIP) es un problema en el que se asegura que algunas variables de decisión sean estrictamente valores enteros para una solución óptima.

El uso de estas variables enteras amplía el horizonte y la puntuación de problemas de optimización útiles que un programador puede usar para definir y resolver de la manera más eficiente y precisa.

Un escenario esencial en MIP es la variable de decisión considerada binaria; en otras palabras, solo se puede representar como 0 o 1.

Estos generalmente se conocen como valores enteros binarios. Estas variables de decisión se utilizan normalmente para modelar decisiones True/False o /No basadas en cálculos cuidadosos.

Ahora hay varios solucionadores que fueron diseñados para lidiar con este tipo de problemas.

Estos incluyen los más avanzados Gurobi y Python-MIP, entre los solucionadores de programación lineal de enteros mixtos más conocidos y buscados.

Otro solucionador MIP altamente configurable es el solucionador CBC o COIN-OR Branch-&-Cut. Finalmente, Python-MIP facilita el desarrollo de solucionadores basados en MIP de alto rendimiento para cualquier aplicación personalizada.

Proporciona características modernas y de gama alta, descritas y explicadas en detalle a continuación.

Herramientas Python para MIP/MILP: Python-MIP

En Python, tenemos una amplia biblioteca llamada MIP, esencialmente una colección de herramientas basadas en Python para modelar y resolver problemas de programación lineal de enteros mixtos.

Con una sintaxis inspirada en gran medida en Pulp, MIP brinda a los usuarios acceso a funciones avanzadas y eficientes como restricciones perezosas, MIPstart, grupos de soluciones y generación de corte.

Más de sus características destacadas incluyen:

  • Modelado de alto nivel

    La mayoría de los programadores han desarrollado sus habilidades en el modelado utilizando un lenguaje de programación de alto nivel, ya que es fácil. Sin embargo, podemos escribir nuestros modelos MIP en Python rápidamente.

    La función de sobrecarga de operadores hace que todo el proceso de escritura de expresiones lineales sea mucho más fluido en Python.

  • Repleto de características

    Con características como “generadores de corte” y “restricciones perezosas”, un programador puede trabajar con formulaciones sólidas usando muchas restricciones.

    Genera únicamente las desigualdades requeridas durante la búsqueda branch and cut. Luego, para agregar, puede consultar en el grupo de soluciones para extraer o revisar las soluciones de primer nivel encontradas durante la búsqueda.

    Además, MIPstart permite a un programador utilizar inicialmente una heurística dependiente del problema para crear soluciones factibles para la búsqueda de MIP.

  • Rápido y Eficiente

    El paquete MIP en Python realiza una llamada directa a la biblioteca cargable dinámica nativa del solucionador ya instalado utilizando el módulo CFFI.

    Estos modelos se almacenan de manera eficiente y el solucionador los hace eficientes. Mientras tanto, MIP se ocupa de comunicarse con su código. Si bien la interfaz oficial de Python Gurobi también proporciona funciones para manejar MILP, la biblioteca MIP en Python es compatible con Pypy.

    Puede ejecutarse 25 veces más rápido que él, ya que su rendimiento se basa solo en CPython.

  • Multi-resolución

    MIP en Python se construyó para integrarse completamente con las bibliotecas basadas en C del solucionador COIN-OR Branch-&-Cut y Gurobi.

    Con MIP, no tiene que preocuparse por escribir un medio para la comunicación entre diferentes solucionadores, ya que se trata en la biblioteca Python-MIP.

    Solo necesita escribir un único código independiente del solucionador.

  • Equipado con las últimas versiones de Python

    Como se mencionó anteriormente, MIP es compatible con las versiones de Python 3.6 y superiores, por lo que no tenemos que preocuparnos de que la redundancia lo retrase.

Ahora sabe qué es la Programación de enteros mixtos y los diferentes solucionadores disponibles para guiarlo a través de cualquier problema de programación de enteros que pueda necesitar resolverse de la manera más eficiente y útilmente optimizada.

También puede explorar la documentación oficial de todos los solucionadores mencionados para encontrar soluciones para su problema específico.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

Artículo relacionado - Python Integer