George Bernard Dantzig (ˈdæntsɪɡ)가 1974년에 개발한 단체법(Simplex Method)을 보기 전에 Simplex Mothod의 뿌리인 Dynamic Programming을 보자.
잠깐, Dynamic Programming의 번역어를 아는가? 동적 계획법 혹은 다이나믹 프로그래밍이 익숙할 것이다. 이 용어는 수학자 리처드 벨만(Richard E. Bellman)이 정의한 용어인데, 당시 Dynamic Programming이라고 한 이유를 그의 자서전(Eye of the Hurricane: An Autobiography)에서 볼 수 있다.
나는 RAND 코퍼레이션에서 1950년의 가을을 보냈다. 여기에서 내게 주어진 첫 과제는 다단계 의사 결정 프로세스에 대해 적절한 용어를 명명하는 것이었다. ’동적 계획법’이라는 이름이 어디에서 왔는지 궁금하지 않은가? 1950년대는 내가 수학에 대해 연구하기에는 좋지 못한 시기였다. 우리는 그 때 워싱턴에서 윌슨이라는 사람과 함께 일하고 있었다. 윌슨은 연구라는 것에 대해 굉장히 병적인 공포를 가지고 있었다. 사람들이 그 앞에서 연구에 대해 이야기를 꺼내면 그는 완전히 미치다시피 했다. 그러나 불행히도 RAND는 공군 소속의 회사였고, 윌슨은 그 공군의 간부인 국방 위원장이었다. 그래서 내가 RAND 안에 있었을 때 윌슨을 비롯한 공군들이 내가 수학에 대해 연구하는 것을 보이지 않게 막는다는 것을 알 수 있었다. 처음 올 때는 나는 위의 문제에 대해 ’의사 결정 프로세스’라는 이름을 사용했지만, 여기에서 ’프로세스(Process)’라는 단어를 사용하는데 여러가지 차질이 생겨버리고 만 것이다. 그래서 나는 사람들이 알지 못하게 ’계획법(Programming)’이라는 단어를 붙였다. 또한 나는 이 프로세스가 다단계(multistage)로 이루어져 있으며, 시가변(time-varying)적인 성질을 가진 것으로부터 ’동적(Dynamic)’라는 단어를 사용했다. 이 단어야말로 내가 연구하는 알고리즘의 성질을 정확하게 짚어내었고, 게다가 윌슨에게도 피해를 입히지 않으며 공군도 이 단어에선 꼬투리를 잡지 못했으니 그야말로 일석이조의 효과를 누린 것이다.
프로그래밍으로 푼다는 의미보다는 수학적 모형을 만들어 해를 구해 최적 의사결정을 도모하는 수리 계획법(Mathematical Programming)에 가깝다.
수리 계획법에는 세가지 구성요소가 있는데, 의사 결정 변수(decision variable)와 목적 함수(objective function) 그리고 제약조건(constraints)이다. 그리고 종류에는 목적함수와 제약조건식이 1차식으로 표현되는 선형계획법(LP), 1차식으로 표현되지 않는 모형을 비선형계획법(NLP), 의사결정변수가 정수값만을 가지고 있는 정수계획법(IP), 목적함수가 여러개의 목표를 포함하고 있는 경우 목표계획법(GP), 여러 단계에 걸쳐 변수의 값을 결정하는 모형 동적계획법(DP)가 있다.
본론으로 들어와 선형계획법의 예를 보자.
제품 A, B를 만드는 회사에서 이익을 최대화하기 위해 생산계획을 수립하려고 한다. 공장 세개를 가지고 있다고 했을 때 제품의 이익을 정리한 표는 다음과 같다.
공장 | 제품1 | 제품2 | 가용시간 |
---|---|---|---|
1 | 1 | 0 | 4 |
2 | 0 | 2 | 12 |
3 | 3 | 2 | 18 |
이익 | 3000 | 5000 |
제품 1을
앞의 실행가능조건(feasibility condition)을 이용하여 그래프를 그리면 다음과 같다.
0보다 크면서 선 안의 영역이 실행가능영역이다.
단체법(Simplex method)
댄치그가 개발한 단체법의 기본 개념은 최적해 후보에 대한 최적여부를 체계적으로 검토하여 가장 빠른 시간내에 최적해를 찾아내고자 하는 것이다.
단체법을 적용하기 전에 가장 해야할 일은 부등식을 등식으로 바꾸는 표준형(standard form)을 적용하는 것이다. 예를 들어
가령 미지수가 3개, 조건식이 3개인 변수인 문제가 있다고 가정하고 여유 변수, 즉 미지수가 3개나 더 추가가 될 경우에는 어떻게 해야할까. 일반적으로는 풀 수 없다. 그러나 여유 변수를
기저가능해가 원점
하지만 이렇게 구한 값들은 목적함수에서
정리하면,
1. 표준형으로 변형하면 원점이 최초의 해가 된다.
2. 여유변수가 기저변수, 다른 변수는 비기저변수.
3. 최적화 검사 : 목적함수가 증가(감소) 여부, 인접한 더 좋은 해가 없다면 그 해가 최적해
4. 진입기저변수 선택.
문제를 바꿔서 설명해보겠다.
제약조건을 여유변수를 이용하여 등식으로 바꾼다.
원점
나머지 비기저변수를 0으로 하면 새로운 기저 변수를 얻을 수 있다. 따라서 비기저변수인 s_3, x_2를 0으로 하면 다음과 같은 값을 얻을 수 있다.
앞의 그래프를 보면
이번 글에선 목적함수를 최대화하는 방법을 알아보았지만, 목적함수를 최소화하는 문제도 있고 부등식이 무한대인 선형 프로그램도 있다. 단체법이 흥미롭다면 카치안(L. G. Kachian)의 타원체 알고리즘(ellipsoid algorithm)을 공부해보면 좋을것이다.