Linear Programming과 Simplex Method
이번 글에서는 Linear Programming, 즉 선형계획법과 이를 풀기 위한 대표적인 알고리즘인 Simplex Method를 정리한다.
Linear Programming은 목적함수와 제약조건이 모두 선형인 최적화 문제를 다룬다. 예를 들어 다음과 같은 문제가 선형계획문제이다.
여기서 는 목적함수이고, 나머지 식들은 제약조건이다. 목표는 제약조건을 만족하는 중에서 목적함수 값을 가장 크게 만드는 점을 찾는 것이다.
1. Linear Programming의 기본 형태
일반적인 선형계획문제는 다음과 같이 쓸 수 있다.
여기서 는 변수 벡터이고, 는 목적함수의 계수 벡터이다. 와 는 제약조건을 정의한다.
예를 들어
는 다음과 같이 행렬 형태로 쓸 수 있다.
따라서 문제는
의 형태가 된다.
2. Standard Form
Simplex Method를 적용하기 위해서는 보통 문제를 standard form으로 바꾼다.
선형계획문제의 standard form은 다음과 같다.
즉, standard form에서는 두 가지 조건이 필요하다.
- 모든 제약조건은 등식이어야 한다.
- 모든 변수는 nonnegative, 즉 0 이상이어야 한다.
3. Inequality Constraint를 Equality Constraint로 바꾸기
부등식 제약조건은 slack variable을 추가해서 등식으로 바꿀 수 있다.
예를 들어 다음 제약조건을 보자.
이 식은 가 150보다 작거나 같다는 뜻이다. 따라서 남는 양을 새로운 변수 으로 두면
으로 쓸 수 있다.
여기서 은 slack variable이고,
이어야 한다.
즉,
은
와 동치이다.
마찬가지로
은
로 바꿀 수 있다.
4. 예시: Linear Program을 Standard Form으로 바꾸기
다음 문제를 생각하자.
각 부등식에 slack variable 를 추가한다.
첫 번째 제약조건은
이고, 두 번째 제약조건은
이다.
따라서 standard form은 다음과 같다.
5. Free Variable을 Nonnegative Variable로 바꾸기
standard form에서는 모든 변수가 0 이상이어야 한다. 하지만 어떤 변수는 음수도 될 수 있는 자유변수일 수 있다.
예를 들어 이면 는 음수, 0, 양수 모두 가능하다.
이 경우 다음과 같이 두 개의 nonnegative variable로 표현할 수 있다.
단,
예를 들어 이면
으로 둘 수 있다.
반대로 이면
로 둘 수 있다.
따라서 자유변수도 항상 nonnegative variable만 사용해서 표현할 수 있다.
6. Simplex Method의 기본 아이디어
Simplex Method는 feasible region의 꼭짓점들을 따라 이동하면서 목적함수 값을 개선하는 알고리즘이다.
2차원에서는 feasible region이 다각형으로 나타난다. 최적해는 보통 이 다각형의 꼭짓점 중 하나에서 발생한다.
Simplex Method는 다음 과정을 반복한다.
- 현재 feasible solution에서 시작한다.
- 목적함수를 증가시킬 수 있는 방향을 찾는다.
- 해당 방향으로 이동하다가 제약조건에 걸리는 지점에서 멈춘다.
- 새로운 꼭짓점으로 이동한다.
- 더 이상 목적함수를 증가시킬 수 없으면 종료한다.
7. Dictionary 표현
다음 문제를 다시 보자.
standard form으로 바꾸면
여기서 slack variable들을 왼쪽에 두면 다음과 같은 dictionary를 얻는다.
현재 오른쪽에 있는 변수 를 0으로 두면
이고,
이다.
따라서 초기해는
이다.
이때 는 basic variables이고, 는 non-basic variables이다.
8. Simplex Method 예제 풀이
이제 실제로 Simplex Method를 수행해 보자.
문제는 다음과 같다.
standard form은
초기 dictionary는
이다.
초기해는
이고, 목적함수 값은
이다.
Step 1. Entering variable 선택
목적함수 row를 보면
이다.
의 계수는 5이고, 의 계수는 4이다. 둘 다 양수이므로 나 를 증가시키면 목적함수 값이 증가한다.
여기서는 계수가 더 큰 를 entering variable로 선택한다.
즉, 를 증가시킨다.
Step 2. Leaving variable 선택
으로 고정하고 를 증가시킨다고 하자.
그러면 제약조건은
가 된다.
basic variables는 항상 0 이상이어야 하므로
이어야 한다.
먼저
이므로
이다.
또한
이므로
이다.
따라서 는 최대
까지 증가할 수 있다.
이때 이 되므로 가 leaving variable이 된다.
Step 3. Pivot 수행
기존 식 중
에서 를 왼쪽으로 풀면
따라서
이제 이 식을 다른 식에 대입한다.
목적함수:
즉,
다음으로 은
이다.
여기에
를 대입하면
따라서 새로운 dictionary는
이다.
현재 non-basic variables는 이고, 이를 0으로 두면
이다.
따라서
이고, 현재해는
이다.
목적함수 값은
이다.
Step 4. 다시 entering variable 선택
현재 목적함수 row는
이다.
여기서 의 계수는 양수이다. 따라서 를 증가시키면 목적함수 값이 증가한다.
그러므로 를 entering variable로 선택한다.
Step 5. Leaving variable 선택
으로 두고 를 증가시킨다.
현재 basic variables는
이다.
비음수 조건 때문에
이어야 하므로
이다.
또한
이어야 하므로
이다.
따라서 는 최대
까지 증가할 수 있다.
이때 이 되므로 이 leaving variable이다.
Step 6. 두 번째 Pivot 수행
현재 식
에서 를 왼쪽으로 풀자.
따라서
이제 이것을 목적함수와 식에 대입한다.
목적함수는
이다.
대입하면
또한
이므로
따라서 새로운 dictionary는
이다.
현재 non-basic variables는 이다.
이를 0으로 두면
이고,
이다.
따라서 현재해는
이고, 목적함수 값은
이다.
Step 7. Optimality 확인
현재 목적함수 row는
이다.
현재 non-basic variables는 이고, 두 변수의 계수는 모두 음수이다.
즉, 이나 를 증가시키면 목적함수 값은 감소한다.
따라서 더 이상 목적함수 값을 증가시킬 수 없고, 현재해가 최적해이다.
결론적으로 최적해는
이고, 최적 목적값은
이다.
9. Simplex Method의 기하학적 해석
위 예제에서 Simplex Method는 다음 세 점을 이동했다.
첫 번째 점 은 feasible region의 꼭짓점이다.
두 번째 점 은 제약조건
위에 있는 꼭짓점이다.
세 번째 점 은 두 제약조건
이 동시에 tight한 점이다.
실제로 두 식을 풀면
이다.
두 식을 빼면
이므로
이다.
이를
에 대입하면
이므로
따라서
이다.
즉, 최적해는
이다.
10. Two-Phase Simplex Method
Simplex Method는 feasible solution에서 시작해야 한다. 그런데 초기 dictionary가 항상 feasible한 것은 아니다.
예를 들어 다음 문제를 보자.
slack variable을 추가하면
이다.
dictionary는
이다.
여기서 으로 두면
이다.
그런데 는 nonnegative variable이어야 하므로
이어야 한다.
하지만 이므로 초기 dictionary는 infeasible하다.
이럴 때 사용하는 방법이 Two-Phase Simplex Method이다.
11. Phase I: Feasible Dictionary 찾기
Phase I에서는 원래 문제의 feasible solution이 존재하는지 확인한다.
이를 위해 새로운 변수 를 도입한다.
원래 제약조건은
였다.
Phase I 문제는 다음과 같다.
이 문제의 의미는 를 이용해서 제약조건을 억지로 만족시키되, 가능한 한 를 작게 만들겠다는 것이다.
만약 최적값이
이면 원래 문제도 feasible하다.
반대로
이면 원래 문제는 infeasible하다.
12. Phase I 예제 풀이
Phase I 문제를 standard form으로 바꾸면
최소화 문제 는 최대화 문제 로 바꿀 수 있다.
따라서 objective row는
이다.
초기 dictionary는
이다.
현재 이므로 infeasible하다.
가장 음수인 basic variable은 이다. 따라서 를 basic variable로 만들고, 를 non-basic variable로 바꾼다.
식에서
이므로
이다.
이를 다른 식에 대입한다.
목적함수:
은
이고, 를 대입하면
따라서 dictionary는
이다.
이제 목적함수 row에서 의 계수가 양수이므로 를 증가시킨다.
으로 두면
이다.
비음수 조건 때문에
이고,
이다.
따라서
가 더 강한 제약이며, 가 leaving variable이 된다.
에서 를 풀면
이다.
이것을 나머지 식에 대입하면 Phase I의 최적 dictionary는
이다.
현재 objective row는
이고, 더 이상 증가시킬 수 있는 변수가 없다.
또한 이 가능하므로 Phase I의 최적값은 0이다.
따라서 원래 문제는 feasible하다.
이때 으로 두면
이다.
따라서 원래 문제의 feasible solution은
이다.
13. Phase II: 원래 목적함수로 돌아가기
Phase I에서 feasible dictionary를 찾았으므로 이제 원래 목적함수
로 돌아간다.
Phase I 결과에서
이고,
이다.
원래 목적함수에 를 대입하면
따라서 Phase II의 초기 dictionary는
이다.
현재 objective row에서 의 계수가 3으로 양수이므로 를 증가시킨다.
으로 두면
이다.
비음수 조건에서 이어야 하므로
즉,
이다.
따라서 를 20까지 증가시킬 수 있고, 이때 이 된다.
이 leaving variable이고 가 entering variable이다.
에서 를 풀면
따라서
이를 목적함수에 대입하면
또한
이므로
따라서 새로운 dictionary는
이다.
objective row에서 non-basic variables 의 계수가 모두 음수이므로 최적이다.
따라서 최적해는
이고, 최적 목적값은
이다.
14. Infeasible Case
이번에는 실제로 infeasible한 문제를 보자.
먼저 Phase I 문제를 만든다.
standard form은
이다.
초기 dictionary는
이다.
이므로 infeasible하다.
식에서 를 basic variable로 만들면
이다.
이를 대입하면
이다.
이제 의 objective coefficient가 양수이므로 를 증가시킨다.
으로 두면
이다.
비음수 조건에 의해
그리고
이다.
따라서 까지 증가할 수 있고, 이때 이다.
이 leaving variable이다.
계산을 정리하면 Phase I 최적 dictionary에서
를 얻는다.
여기서 objective row의 모든 계수는 non-positive이므로 Phase I은 최적이다.
그러나 현재
이다.
즉 Phase I의 최적값이 0이 아니라 양수이다.
따라서 원래 문제는 feasible solution을 가지지 않는다.
결론적으로 이 문제는 infeasible이다.
15. Unbounded Case
이번에는 unbounded한 문제를 보자.
slack variable을 추가하면
이다.
초기 dictionary는
이다.
초기해는
이다.
목적함수 row에서 의 계수가 양수이므로 를 증가시킨다.
으로 두면
이다.
이어야 하므로
이다.
따라서 까지 증가시키고, 이때 이 된다.
가 leaving variable이다.
에서 를 풀면
이다.
이를 목적함수에 대입하면
또한
에 대입하면
따라서 dictionary는
이다.
현재 의 objective coefficient는 3으로 양수이다.
즉, 를 증가시키면 목적함수 값이 증가한다.
그런데 으로 두고 를 증가시키면
이다.
가 아무리 커져도 과 는 음수가 되지 않는다.
즉, 를 무한히 증가시킬 수 있고, 그에 따라
도 무한히 커진다.
따라서 이 문제는 unbounded이다.
16. Phase I의 일반적인 형태
일반적인 inequality constrained LP를 생각하자.
slack variable 를 추가하면
가 된다.
초기 dictionary는
이다.
만약 의 모든 성분이 0 이상이면 으로 두었을 때 이므로 초기 dictionary가 feasible하다.
하지만 어떤 가 음수이면 초기 dictionary가 infeasible할 수 있다.
이 경우 Phase I 문제를 만든다.
여기서 은 모든 성분이 1인 벡터이다.
이 Phase I 문제의 최적값이 0이면 원래 문제는 feasible하다.
반대로 최적값이 양수이면 원래 문제는 infeasible하다.
17. Equality Constraint의 Phase I
이번에는 제약조건이 등식인 경우를 보자.
이 경우 Phase I 문제는 다음과 같이 만들 수 있다.
이 문제의 최적값이 0이라는 것은
이고
인 해가 존재한다는 뜻이다.
그 경우
를 만족하는 가 존재하므로 원래 문제가 feasible하다.
18. Matrix Form으로 보는 Simplex Method
표준형 선형계획문제를 생각하자.
변수 를 basic variables와 non-basic variables로 나눈다.
행렬 도 이에 맞게 나눈다.
여기서 는 basic variables에 해당하는 열들로 이루어진 행렬이고, 은 non-basic variables에 해당하는 열들로 이루어진 행렬이다.
제약조건
는
로 쓸 수 있다.
만약 가 invertible이면,
가 된다.
이것이 dictionary의 constraint row에 해당한다.
19. Reduced Cost
목적함수는
이다.
여기에
를 대입하면
즉, objective row는
로 쓸 수 있다.
여기서
를 reduced cost라고 한다.
최대화 문제에서 reduced cost가 모두 0 이하이면 현재 dictionary는 optimal이다.
왜냐하면 non-basic variable을 증가시켜도 목적함수 값이 증가하지 않기 때문이다.
20. 정리
Linear Programming은 선형 목적함수와 선형 제약조건을 가진 최적화 문제이다.
Simplex Method는 이러한 문제를 풀기 위한 대표적인 알고리즘이다.
핵심 흐름은 다음과 같다.
- 문제를 standard form으로 바꾼다.
- slack variable을 추가해 inequality constraint를 equality constraint로 바꾼다.
- 초기 feasible dictionary를 만든다.
- objective coefficient가 양수인 non-basic variable을 entering variable로 선택한다.
- ratio test를 통해 leaving variable을 선택한다.
- pivot을 수행해 새로운 dictionary를 만든다.
- objective row의 모든 reduced cost가 0 이하이면 최적해이다.
- 초기 feasible dictionary가 없으면 Phase I을 수행한다.
- Phase I 최적값이 0이면 feasible이고, Phase II로 넘어간다.
- Phase I 최적값이 양수이면 원래 문제는 infeasible이다.
- 어떤 entering variable을 무한히 증가시킬 수 있으면 문제는 unbounded이다.
Simplex Method는 기하학적으로 feasible region의 꼭짓점을 따라 이동하며 목적함수를 개선하는 방법이다. 이 알고리즘은 최악의 경우 exponential time이 걸릴 수 있지만, 실제 문제에서는 매우 잘 작동하기 때문에 지금도 선형계획법에서 중요한 알고리즘으로 사용된다.