소개
정수 선형 프로그래밍을 위한 솔버를 작성하십시오 .
도전
당신의 작업은 정수 선형 프로그래밍 (ILP)을위한 솔버를 작성하는 것입니다. ILP에서, 미지의 집합 (모두 정수)의 선형 불평등이 주어지며, 목표는 선형 함수의 최소 또는 최대를 찾는 것입니다.
예를 들어, 불평등의 경우 ( 혼합 정수 선형 프로그래밍 에서 가져온 예 )
4x+2y-15≤0
x+2y- 8≤0
x+ y- 5≤0
- x ≤0
- y ≤0
목적 함수의 경우 목적 함수 3x+2y
의 최대 값은 12
( x=2,y=3
)이어야하고 최소값은 0
( x=y=0
) 이어야합니다 .
입력은 2 차원 배열 (또는 표준 사양에 준하는 동등 물)로 제공되며 각 행은 최종 행을 제외하고 하나의 불평등에 해당합니다. 배열의 숫자는 계수이며 ≤0
부분은 항상 생략됩니다. n
각 행에 요소가 있으면 알 수 없음이 있음을 의미 n-1
합니다.
배열의 마지막 행은 선형 함수에 해당합니다. 계수가 나열됩니다.
예를 들어, 위 문제에 대한 입력 배열은
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,0]].
출력은 합리적인 형태로 제공되는 최소값과 최대 값이어야합니다.
다음 문제점의 경우 (위의 문제점에서 두 가지 제한 사항이 제거됨) :
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]].
최대 값은 여전히 12
이지만 최소값은 존재하지 않으며 목적 함수는 임의의 (절대 값의 의미로) 음수 값을 가질 수 있습니다. 이 경우 프로그램은 12
응답자가 결정한 잘못된 값에 따라를 출력해야합니다 . 다른 경우는, 예를 들어 해결책이 전혀 없다는 것입니다.
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]].
이 경우 잘못된 값도 출력해야합니다. 목적 함수에 대한 "최적의 값"이 무한대 인 경우와 해결책이 전혀없는 경우를 식별하는 것이 좋겠지 만, 반드시 필요한 것은 아닙니다.
입력에는 부등식과 목적 함수 모두에 대한 정수 계수 만 포함됩니다. 모든 미지수도 정수입니다. 불평등의 계수 행렬은 전체 순위를 갖도록 보장됩니다.
테스트 사례
@KirillL의 신용. 원래 테스트 스위트에서 버그를 찾고 ILP 문제에 대한 이해를 심화 시켰습니다.
Input
Output
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,1]]
[1,13]
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]]
[-inf, 12]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]]
[NaN, NaN]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[5,5,5,5,6,7]]
[55, inf]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[0,0,0,0,0,4]]
[4, 4]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[0,0,4]]
[NaN, NaN]