Python의 정수 프로그래밍

Abid Ullah 2023년6월21일
Python의 정수 프로그래밍

정수 계획법 문제는 문제와 관련된 일부 또는 모든 변수가 정수임을 제공함으로써 수학적 최적화 또는 실행 가능성을 보장하도록 구성된 문제입니다.

문제의 일부 결정 변수가 불연속적이지 않은 것으로 밝혀졌다고 가정합니다. 이 경우 더 일반적으로 MIP/MILP(혼합 정수 선형 계획법)로 알려진 혼합 정수 문제로 분류됩니다.

따라서 이 Python 기사에서는 Python에서 이러한 종류의 문제를 해결하는 데 사용할 수 있는 다양한 방법론과 라이브러리를 탐색할 것입니다.

Python의 혼합 정수 프로그래밍 문제

혼합 정수 프로그래밍(MIP) 문제는 일부 결정 변수가 최적의 솔루션을 위해 엄밀히 말하면 정수 값이 되도록 보장되는 문제입니다.

이러한 정수 변수를 사용하면 프로그래머가 가장 효율적이고 정확하게 정의하고 해결하는 데 사용할 수 있는 유용한 최적화 문제의 범위와 점수가 넓어집니다.

MIP의 필수 시나리오는 바이너리로 간주되는 결정 변수입니다. 즉, 0 또는 1로만 나타낼 수 있습니다.

이들은 일반적으로 이진 정수 값이라고 합니다. 이러한 결정 변수는 일반적으로 신중한 계산을 기반으로 True/False 또는 Yes/No 결정을 모델링하는 데 사용됩니다.

이제 이러한 종류의 문제를 처리하도록 설계된 여러 솔버가 있습니다.

여기에는 가장 일반적으로 알려지고 많이 찾는 혼합 정수 선형 프로그래밍 솔버인 최첨단 GurobiPython-MIP가 포함됩니다.

고도로 구성 가능한 또 다른 MIP 솔버는 CBC 또는 COIN-OR Branch-&-Cut 솔버입니다. 마지막으로 Python-MIP를 사용하면 모든 맞춤형 애플리케이션을 위한 고성능 MIP 기반 솔버를 쉽게 개발할 수 있습니다.

고급 기능과 최신 기능을 제공하며 아래에서 자세히 설명합니다.

MIP/MILP용 Python 도구: Python-MIP

Python에는 혼합 정수 선형 프로그래밍 문제를 모델링하고 해결하기 위한 Python 기반 도구 모음인 MIP라는 방대한 라이브러리가 있습니다.

Pulp에서 크게 영감을 받은 구문을 통해 MIP는 사용자에게 지연 제약 조건, MIPstart, 솔루션 풀컷 생성과 같은 고급의 효율적인 기능에 대한 액세스를 제공합니다.

더 많은 주요 기능은 다음과 같습니다.

  • 고급 모델링

    대부분의 프로그래머는 쉽게 고급 프로그래밍 언어를 사용하여 모델링 기술을 개발했습니다. 그러나 MIP 모델을 Python으로 빠르게 작성할 수 있습니다.

    연산자 오버로딩 기능은 Python에서 선형 표현식을 작성하는 전체 프로세스를 훨씬 더 매끄럽게 만듭니다.

  • 다양한 기능

    컷 생성기게으른 제약 조건과 같은 기능을 통해 프로그래머는 많은 제약 조건을 사용하여 견고한 공식으로 작업할 수 있습니다.

    branch and cut 검색 중에 필요한 부등식만 생성합니다. 그런 다음 추가하기 위해 솔루션 풀에 쿼리하여 검색 중에 찾은 최고의 솔루션을 추출하거나 살펴볼 수 있습니다.

    또한 MIPstart는 프로그래머가 MIP 검색을 위한 실행 가능한 솔루션을 생성하기 위해 문제 종속 휴리스틱을 초기에 활용할 수 있도록 합니다.

  • 빠르고 효율적

    Python의 MIP 패키지는 CFFI 모듈을 사용하여 이미 설치된 솔버의 기본 동적 로드 가능 라이브러리를 직접 호출합니다.

    이러한 모델은 솔버에 의해 효율적으로 저장되고 효율적으로 만들어집니다. 한편 MIP는 코드와의 통신을 처리합니다. 공식 Gurobi Python 인터페이스는 MILP를 처리하는 기능도 제공하지만 Python의 MIP 라이브러리는 Pypy와 호환됩니다.

    성능이 CPython에만 기반하므로 그것보다 25배 더 빠르게 실행할 수 있습니다.

  • 다중 해결

    파이썬의 ‘MIP’는 ‘COIN-OR Branch-&Cut’ 솔버와 ‘구로비’의 ‘C기반 라이브러리’와 완벽하게 통합되도록 구성했다.

    MIP를 사용하면 Python-MIP 라이브러리에서 다루기 때문에 서로 다른 솔버 간의 통신 수단 작성에 대해 걱정할 필요가 없습니다.

    솔버 독립적인 단일 코드만 작성하면 됩니다.

  • 최신 Python 버전 탑재

    위에서 언급했듯이 MIP는 Python 버전 3.6 이상과 호환되므로 중복으로 인해 속도가 느려지는 것에 대해 걱정할 필요가 없습니다.

이제 혼합 정수 프로그래밍이 무엇인지, 그리고 가장 효율적이고 유용하게 최적화된 방식으로 해결해야 하는 정수 프로그래밍 문제를 안내하는 데 사용할 수 있는 다양한 솔버를 알게 되었습니다.

특정 문제에 대한 솔루션을 찾기 위해 언급된 모든 솔버에 대한 공식 문서를 탐색할 수도 있습니다.

작가: 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

관련 문장 - Python Integer