Python의 정수 프로그래밍
정수 계획법 문제는 문제와 관련된 일부 또는 모든 변수가 정수임을 제공함으로써 수학적 최적화 또는 실행 가능성을 보장하도록 구성된 문제입니다.
문제의 일부 결정 변수가 불연속적이지 않은 것으로 밝혀졌다고 가정합니다. 이 경우 더 일반적으로 MIP/MILP
(혼합 정수 선형 계획법)로 알려진 혼합 정수 문제로 분류됩니다.
따라서 이 Python 기사에서는 Python에서 이러한 종류의 문제를 해결하는 데 사용할 수 있는 다양한 방법론과 라이브러리를 탐색할 것입니다.
Python의 혼합 정수 프로그래밍 문제
혼합 정수 프로그래밍(MIP
) 문제는 일부 결정 변수가 최적의 솔루션을 위해 엄밀히 말하면 정수 값이 되도록 보장되는 문제입니다.
이러한 정수 변수를 사용하면 프로그래머가 가장 효율적이고 정확하게 정의하고 해결하는 데 사용할 수 있는 유용한 최적화 문제의 범위와 점수가 넓어집니다.
MIP
의 필수 시나리오는 바이너리로 간주되는 결정 변수입니다. 즉, 0
또는 1
로만 나타낼 수 있습니다.
이들은 일반적으로 이진 정수 값이라고 합니다. 이러한 결정 변수는 일반적으로 신중한 계산을 기반으로 True
/False
또는 Yes
/No
결정을 모델링하는 데 사용됩니다.
이제 이러한 종류의 문제를 처리하도록 설계된 여러 솔버가 있습니다.
여기에는 가장 일반적으로 알려지고 많이 찾는 혼합 정수 선형 프로그래밍 솔버인 최첨단 Gurobi
및 Python-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 이상과 호환되므로 중복으로 인해 속도가 느려지는 것에 대해 걱정할 필요가 없습니다.
이제 혼합 정수 프로그래밍이 무엇인지, 그리고 가장 효율적이고 유용하게 최적화된 방식으로 해결해야 하는 정수 프로그래밍 문제를 안내하는 데 사용할 수 있는 다양한 솔버를 알게 되었습니다.
특정 문제에 대한 솔루션을 찾기 위해 언급된 모든 솔버에 대한 공식 문서를 탐색할 수도 있습니다.
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