
할당 문제(assignment problem)는
이렇게 다양한 분야에서 활약하는 할당 문제와 헝가리안 알고리즘이 경제학과도 큰 관련이 있다는 사실을 최근 알게 되었습니다. 이번 포스트에서는 경제학적 관점에서 헝가리안 알고리즘이 어떻게 해석될 수 있는지 한번 알아 보도록 하겠습니다. 할당 문제와 헝가리안 알고리즘의 개괄적인 내용은 다른 글에서도 다루었으니, 함께 보시는 것도 추천 드립니다.
할당 문제 & 헝가리안 알고리즘 (Assignment Problem & Hungarian Algorithm)
이번 포스팅에서는 assignment problem과 Hungarian algorithm에 대해서 알아보겠습니다. 먼저 assignment problem이 어떤 것인지에 대해서 살펴보고, 이를 해결하는 방법을 알아보도록 하겠습니다. 인터넷을 찾
gazelle-and-cs.tistory.com
저는 컴퓨터과학을 전공하는 학생입니다. 경제학은 교양 수업으로 경제학 입문을 들은 것이 전부입니다. 그마저도 다 까먹었고요. 수요 곡선과 공급 곡선이 만나는 점이 가격이 된다는 정도의 상식만 머릿속에 남아 있습니다. 따라서 아래에서 사용되는 용어들은 실제 경제학 분야에서 사용되는 것들이 아닐 수 있습니다. 그냥 제가 공부하면서 제 방식대로 이해한 내용을 기술한 것이니 읽으실 때 참고 바랍니다. 혹여 치명적인 오류가 있는 경우에는 댓글로 알려 주시면 감사하겠습니다.
문제 모델
다음과 같은 모델을 생각해 봅시다.
우리는 각 물건을 모든 매수자에게 하나씩 할당해 주고자 합니다. 어떻게 할당해 주는 것이 가장 좋을까요? 이를 평가할 척도는 다양하겠지만, 이번 글에서는 공리주의적인 시각에서 접근해 보고자 합니다. 바로 각 매수자가 얻은 가치의 합이 최대가 되도록 만드는 것입니다. 다시 말해, 각 매수자
문제는 매수자들이 우리가 할당하는 대로 고분고분 인정하고 받아들일 사람들이 아니라는 것입니다. 이들은 매우 '이기적'이어서 만약 자신이 할당 받은 물건보다 다른 매수자에게 할당된 물건이 자신에게 더 좋다면 길길이 날뛸 요량입니다. 이를 해결하는 방법은 무엇일까요? 많은 사람이 희소한 물건을 원하는 상황을 경제학적인 관점에서 우리는 경쟁이 발생하였다고 말합니다. 그리고 경쟁을 해소하는 경제학적인 방법은 희소한 물건에 가격을 붙이는 것이죠. 가격이 생기면 그만큼의 가치는 없다고 생각하는 사람들은 더이상 경쟁에 참가하지 않을 것이고, 해당 가격을 지불할 용의가 있는 사람들만 남을 것입니다. 이러한 방법으로 경쟁을 해소할 수 있습니다.
우리 모델에서도 똑같이 경쟁이 발생한 물건들에 적절한 가격을 붙여 모든 매수자들이 자신이 할당 받은 물건에 만족하도록 만들어 보겠습니다. 좀더 자세히 설명해 보죠. 각 물건
참고로, 우리의 목표는 각 매수자가 얻은 가치의 합
알고리즘 개요
우리의 목표는 가격을 통해 모든 매수자가 자신이 할당받은 물건에 만족하는 평형 상태에서 매수자가 얻는 가치의 총합이 최대가 되는 할당을 찾는 것입니다. 하지만 처음부터 해당 가격을 찾는 것은 쉽지 않아 보입니다. 따라서 처음부터 좋은 가격을 딱 제시하는 대신, 아래 방법과 같이 시행착오를 거치면서 가격을 형성해 보겠습니다.
모든 매수자들이 각자의 최대 효용을 얻기 위해 이기적으로 행동하는 시장에서 매수자들끼리 경쟁이 붙은 물건들을 찾는다. 이는 물건의 수보다 해당 물건만 원하는 매수자의 수가 더 많을 때 발생한다. 해당 매수자들이 다른 물건에도 눈독들이도록 경쟁이 붙은 물건의 가격을 적당히 올린다. 이를 경쟁이 없을 때까지 반복한다.
일견 합리적으로 보이는 위 방법에는 '컴퓨터과학'적이지 못한 부분이 두 가지 있습니다.
- 어떻게 하면 현재 가격에서 경쟁이 붙은 물건들을 찾을 수 있는가?
- 경쟁이 붙은 물건들의 가격을 얼마큼 올려야하는가?
또한 아래의 항목들도 엄밀히 증명해야 위 방법이 올바른 방법이라고 결론을 지을 수 있습니다.
- 언젠가는 평형 상태를 주는 가격에 도달하는가? 즉, 위 방법이 언젠가는 끝나는가?
- 평형 상태에 도달했을 때 매수자가 얻은 가치의 합이 최대가 되는가?
위 질문에 대한 답변을 아래에서 차근히 드리도록 하겠습니다.
경쟁이 붙은 물건 찾기
앞에서 제시한 방법에서 첫 번째로 컴퓨터과학적이지 못한 부분은 경쟁이 붙은 물건들을 어떻게 하면 찾을 수 있는지 입니다. 간단한 예시와 함께 이를 찾는 방법을 알아 보겠습니다. 아래 표는 각 매수자가 각 물건을 얼마큼의 가치로 생각하는지를 나타낸 것입니다. 물건은 제가 요새 즐겨하는 게임인 쿠키런 킹덤에서 따왔습니다. 독버섯은 귀엽습니다. 핡.
매수자 \ 물건 | 마늘빵 | 독버섯 | 바다 요정 | 목화솜 | 최대 효용 |
철수 | 12 | 12 | 12 | 8 | - |
영희 | 5 | 6 | 10 | 9 | - |
민수 | 8 | 5 | 11 | 11 | - |
지혜 | 2 | 3 | 3 | 7 | - |
가격 | - | - | - | - |
표에서 가장 아래쪽 행은 물건(열)의 가격을, 가장 오른쪽 열은 각 매수자(행)가 얻을 수 있는 최대 효용을 나타냅니다. 먼저 모든 물건의 가격이 0이라고 해보죠. 그러면 각 매수자의 최대 효용은 다음과 같습니다.
매수자 \ 물건 | 마늘빵 | 독버섯 | 바다 요정 | 목화솜 | 최대 효용 |
철수 | 12 | 12 | 12 | 8 | 12 |
영희 | 5 | 6 | 10 | 9 | 10 |
민수 | 8 | 5 | 11 | 11 | 11 |
지혜 | 2 | 3 | 3 | 7 | 7 |
가격 | 0 | 0 | 0 | 0 |
위에서 빨간색 배경에 밑줄이 쳐진 칸은 해당 행의 매수자가 최대의 효용을 얻기 위해서 바라는 물건입니다. 예를 들어, 철수는 마늘빵, 독버섯, 바다 요정 중 아무거나 하나를 받으면 본인의 최대 효용을 얻을 수 있습니다. 반면, 영희에게는 바다 요정만이 최대 효용을 얻을 수 있는 물건입니다.
각 물건이 매수자에게 미치는 영향을 좀더 잘 보기 위해 각 칸의 값을 해당 행의 매수자가 얻을 수 있는 최대 효용으로 빼 보겠습니다. 그러면 아래와 같은 표가 나옵니다. 각 칸은 해당 행의 매수자가 해당 열의 물건을 얻었을 때 이 매수자가 얻을 수 있는 최대 효용으로부터 얼마큼 적은 효용을 얻을지 나타냅니다. 이때 각 행마다 적어도 하나의 물건은 최대 효용을 줄 것이므로 분명 해당 행에는 0이 적힌 칸이 적어도 하나는 있을 것입니다. 또한 각 매수자는 자신의 행에서 0이 적힌 칸의 물건을 받아야 만족할 것입니다.
매수자 \ 물건 | 마늘빵 | 독버섯 | 바다 요정 | 목화솜 | 최대 효용 |
철수 | 0 | 0 | 0 | -4 | 12 |
영희 | -5 | -4 | 0 | -1 | 10 |
민수 | -3 | -6 | 0 | 0 | 11 |
지혜 | -5 | -4 | -4 | 0 | 7 |
가격 | 0 | 0 | 0 | 0 |
이제 이 상황에서 매수자(행)와 물건(열)을 뽑아서 표의 모든 0을 '덮어' 보려고 합니다. 이때 뽑은 행과 열의 개수가 물건의 개수 (혹은 매수자의 수)
위 예시를 다시 한번 살펴 봅시다. 만약 매수자에서는 철수를 선택하고 물건에서는 바다 요정과 목화솜을 선택하면 아래 초록색으로 표시한 것과 같이 표의 모든 0을 덮을 수 있습니다. 이때 뽑은 행과 열의 총 개수는 세 개로 물건의 개수인 네 개보다 적습니다.
매수자 \ 물건 | 마늘빵 | 독버섯 | 바다 요정 | 목화솜 | 최대 효용 |
철수 | 0 | 0 | 0 | -4 | 12 |
영희 | -5 | -4 | 0 | -1 | 10 |
민수 | -3 | -6 | 0 | 0 | 11 |
지혜 | -5 | -4 | -4 | 0 | 7 |
가격 | 0 | 0 | 0 | 0 |
뽑은 행과 열의 개수가
그렇다면 경쟁이 존재하지 않는 상태는 어떻게 파악할 수 있을까요? 자연스럽게 생각할 수 있는 조건은 표의 모든 0을
이번 절을 마치기 전에 마지막으로 한 가지 짚고 넘어 가겠습니다. 위에서 알 수 있는 사실은
- 이분 그래프에서 최소 정점 덮개의 크기는 최대 이분 매칭(bipartite matching)의 크기와 동일하다. 즉, 표에서
개보다 적은 수의 행과 열을 뽑아서는 모든 0을 덮을 수 없다면 반드시 각 매수자에게 최대 효용을 제공하는 물건을 하나씩 분배할 수 있다. - 이분 그래프에서 최소 정점 덮개는 다항 시간(polynomial time)에 구할 수 있다.
보다 자세한 사항이 궁금하시면 아래 포스트를 참고하시기 바랍니다.
2019.01.28 - [조합론적 최적화/Matching] - 쾨니그의 정리 (Kőnig's Theorem)
쾨니그의 정리 (Kőnig's Theorem)
이 글은 홀의 정리 (Hall's Theorem)와 밀접한 연관이 있습니다. 필요한 경우에는 이를 참조하세요. 2019/01/28 - [조합론적 최적화] - 홀의 정리 (Hall's Theorem) 무언가를 최적화시키는 문제를 보면 생각보
gazelle-and-cs.tistory.com
적정 가격 형성하기
이전 절에서는 현재 가격에서 경쟁이 존재한다면, 경쟁이 붙은 물건이 무엇이고 어느 매수자가 경쟁에 참여하였는지를 확인하는 방법을 알아 보았습니다. 우리는 모든 매수자가 자신의 물건에 만족하는 평형 상태를 원하며, 경쟁이 붙은 물건의 가격을 조정함으로써 이를 이룰 수 있다고 하였습니다. 이번 절에서는 가격을 얼마큼 조정하면 좋은지에 대해서 논의해 보겠습니다.
이전 절에서 사용한 표를 다시 가지고 오겠습니다. 표의 각 칸에는 해당 행의 매수자가 해당 열의 물건을 얻었을 때 그 매수자가 원래 얻을 수 있는 최대 효용으로부터 얼마큼 적은 효용을 얻는지를 나타냅니다.
매수자 \ 물건 | 마늘빵 | 독버섯 | 바다 요정 | 목화솜 | 최대 효용 |
철수 | 0 | 0 | 0 | -4 | 12 |
영희 | -5 | -4 | 0 | -1 | 10 |
민수 | -3 | -6 | 0 | 0 | 11 |
지혜 | -5 | -4 | -4 | 0 | 7 |
가격 | 0 | 0 | 0 | 0 |
앞에서 우리는
경쟁을 해소하기 위해 마늘빵과 독버섯의 가격은 그대로 둔 채로 현재 경쟁의 대상인 바다 요정과 목화솜의 가격을 올려 보도록 합시다. 과연 얼마큼 올리면 될까요? 우리의 목표는 영희, 민수, 지혜 중 누군가가 바다 요정이나 목화솜 말고 마늘빵이나 독버섯도 원하게 만드는 것입니다. 그렇다고 가격을 너무 높게 올리는 것은 또 좋은 선택이 아닙니다. 바다 요정과 목화솜의 가격이 너무 높아져 버리면, 이번에는 모든 매수자들이 마늘빵과 독버섯을 원하게 될 것이기 때문이지요.
따라서 우리의 목표는 경쟁에 참여하는 매수자가 경쟁 중이지 않은 물건을 원하게 될 정도로 경쟁 중인 물건의 가격을 올리되, 너무 높이 올려서 아무도 현재 경쟁 중인 물건을 더이상 원하지 않게 되는 상황이 오지는 않게 하는 것입니다. 위 예시에서는 민수가 마늘빵을 원하게 하는 것이 가장 가망이 있어 보입니다. 왜냐하면 영희, 민수, 지혜 중 한 명이 마늘빵이나 독버섯을 받았을 때 최대 효용에서 감소하는 폭이 가장 작은 경우가 그 경우이기 때문이죠. 그 폭은 -3입니다.
바다 요정과 목화솜의 가격을 3으로 조정해 봅시다. 그러면 영희, 민수, 지혜가 바다 요정이나 목화솜을 얻을 때의 효용이 감소하게 되며, 덩달아 이들이 얻는 최대 효용도 같이 감소하게 됩니다. 이를 모두 계산하여 보면 아래 표와 같습니다. 각 칸에는 가격이 증가한 이후의 최대 효용에 대해 얼마큼 감소된 효용을 얻는지가 적혀 있습니다.
매수자 \ 물건 | 마늘빵 | 독버섯 | 바다 요정 | 목화솜 | 최대 효용 |
철수 | 0 | 0 | -3 | -7 | 12 |
영희 | -2 | -1 | 0 | -1 | 7 |
민수 | 0 | -3 | 0 | 0 | 8 |
지혜 | -2 | -1 | -4 | 0 | 4 |
가격 | 0 | 0 | 3 | 3 |
위 표에서 우리는 몇 가지 흥미로운 점을 발견할 수 있습니다. 첫 번째는 철수가 더이상 바다 요정을 원하지 않는다는 것입니다. 철수가 생각하는 가치는 12인데, 이제 3의 가격이 붙었으므로 철수의 바다 요정에 대한 효용은 9가 됩니다. 하지만 마늘빵과 독버섯은 여전히 12의 효용을 가지므로, 위 표에서 확인할 수 있듯이 -3의 격차가 발생합니다.
두 번째 그리고 더 중요한 점은 민수가 이제부터는 우리의 의도대로 마늘빵도 원한다는 것입니다. 이는 마늘빵의 효용은 그대로인데 반해, 바다 요정과 목화솜의 가격이 나란히 3으로 결정되면서 그것으로부터 얻는 효용이 8이 되었기 때문입니다.
과연 가격이 위와 같이 형성된 이번에는 모든 행의 매수자가 위 표에서 0의 값을 갖는 열의 물건을 받을 수 있을까요? 네, 존재합니다. 이전 절에서 설명한 대로, 위 표에서는 네 개보다 적은 개수의 행과 열을 뽑아서는 표의 모든 0을 덮을 수가 없기 때문이죠. 실지로 철수에게는 독버섯, 영희에게는 바다 요정, 민수에게는 마늘빵, 지혜에게는 목화솜을 할당하면 됩니다. 이때 철수와 민수에게는 공짜로 물건을 줘야 하고, 반대로 영희와 지혜에게는 각각 3의 가격을 받아야 합니다. 이를 정리하면 아래 표와 같습니다.
매수자 \ 물건 | 마늘빵 | 독버섯 | 바다 요정 | 목화솜 | 최대 효용 |
철수 | 12 | 12 | 12 | 8 | 12 |
영희 | 5 | 6 | 10 | 9 | 7 |
민수 | 8 | 5 | 11 | 11 | 8 |
지혜 | 2 | 3 | 3 | 7 | 4 |
가격 | 0 | 0 | 3 | 3 |
경제학으로 해석한 헝가리안 알고리즘
이것으로 앞에서 제시한 방법의 컴퓨터과학적이지 못한 부분을 모두 해소하였습니다. 이것이 바로 헝가리안 알고리즘이며, 아래는 위 방법에서 부족한 부분을 자세히 밝혀 적은 것입니다. 아래에서 좀더 간결하게 표현하기 위해, 물건에 대해 어떤 가격
알고리즘 1. 헝가리안 알고리즘 (경제학적 관점)
입력: 매수자
출력: 할당
- 모든 물건
에 대해, - 다음을 만족하는
크기의 표 을 만든다: 각 번째 행, 번째 열의 칸의 값을 현재 가격을 기준으로 매수자 가 물건 를 얻을 때의 효용에서 최대 효용을 뺀 값, 즉 로 정의한다. - 표
에서 행과 열을 최소의 개수로 뽑아 표의 모든 0을 덮는 방법을 찾는다. 그렇게 찾은 행(매수자)의 집합을 , 열(물건)의 집합을 이라고 하자. - 만약
이라면, 아래를 수행하고 단계 2로 돌아간다.- 각
,
- 만약
이라면, 표 에서 각 매수자에게 0의 값을 갖는 칸의 물건을 할당하는 방법 를 찾고 와 를 반환한다.
앞서 제기하였듯이, 우리에게는 여전히 아래의 두 가지 의문점이 남아 있습니다.
- 알고리즘이 언젠가는 끝나는가?
- 알고리즘이 각 매수자가 얻는 가치의 총합을 최대로 하는 할당을 출력하는가?
이를 하나씩 해결해 봅시다.
알고리즘의 종료(termination)
만약 알고리즘이 끝나지 않는다면, 사실 이는 알고리즘이라고 부를 수 없습니다. 따라서 알고리즘이 언젠간 끝이 나는지를 논의하는 것은 일반적으로 알고리즘의 정당성(correctness)을 분석하는데 지대한 부분을 차지합니다.
첫 번째 질문에 대해 답변하려면 아래의 정리들이 필요합니다. 첫 번째 정리는 사실 증명이 필요하지 않을 정도로 간단한 정리입니다.
정리 1. 표 의 양이 아닌 수만 갖는 성질
알고리즘 1이 동작하는 내내, 표
[증명] 임의의
앞에서 경쟁이 발생했을 때, 경쟁에 참여하는 매수자 중 일부가 더이상 관심이 없도록은 만들되, 너무 많은 매수자가 경쟁에서 이탈하는 것은 방지하는 수준으로 경쟁이 붙은 물건의 가격을 올려야 한다고 했습니다. 위 알고리즘에서는 단계 4에서 경쟁이 붙은 물건의 가격을
정리 2. 가격의 증가량의 적절성
알고리즘 1이 동작하는 내내, 표
[증명] 단계 4를 거쳤을 때 표
경우 1.
이제 해당 매수자의 각 칸의 값이 어떻게 변화하는지 살펴 봅시다. 경쟁이 붙지 않은 임의의 물건
경우 2.
그럼에도
이제
이것으로 모든 경우에 대한 분석을 마칩니다. 위에서 얻은 정보를 정리해 보겠습니다. 단계 4를 거친 후의
이면, 정확히 만큼 감소 이면, 변화 없음 이면, 변화 없음 이면, 정확히 만큼 증가
따라서
정리 1을 통해서
알고리즘의 최적성(optimality)
첫 번째 질문이 알고리즘의 종결성에 대한 질문이었다면, 두 번째 질문은 알고리즘이 정말로 최적해를 반환하는지에 대한 것입니다. 구체적으로는 각 매수자가 얻는 가치의 합
놀랍게도 그렇습니다. 아래의 정리는 그 관계를 규명하는데 큰 역할을 담당합니다.
정리 3. 최대 효용과 가격의 역할
임의의 가격
[증명] 다음 식을 통해 간단히 증명할 수 있습니다.
여기서 마지막 등식은 할당
알고리즘 1은 적절히 형성된 가격
정리 4. 알고리즘 1의 최적성
알고리즘 1은 각 매수자가 얻는 가치의 합이 최대가 되는 할당을 반환한다.
[증명] 알고리즘이 반환하는 할당을
마치며
이것으로 경제학으로 해석한 헝가리안 알고리즘에 대한 설명을 모두 마칩니다. 요새 경제학, 특히 후생 경제학(welfare economics)에서 활용되는 알고리즘에 대해 공부를 하고 있습니다. 그와중에 제가 애정하는 헝가리안 알고리즘이 경제학적으로 해석될 수 있다는 사실을 알게 되어 이 글을 적었습니다. 동일한 알고리즘에 대해 새로운 시각을 제공하는 것은 아주 멋진 일입니다. 아무래도 이 글이 헝가리안 알고리즘의 해석 중 개인적으로 가장 좋아하는 해석이 되지 싶습니다.
선형 계획법(linear programming)에 익숙하신 분들은 쉽게 보셨을 수 있지만, 정리 3은 곧 선형 계획법의 쌍대성(duality)에 해당합니다. 언젠가 헝가리안 알고리즘을 쌍대성으로 해석하는 글을 적어 보려고 했는데, 이 글로 갈음하고자 합니다. 쌍대성에 관해 더 알아 보고 싶으신 분들은 아래를 참고하시기 바랍니다.
2019.07.15 - [수학적 도구/Linear programming] - [선형 계획법] 쌍대성(Duality)
[선형 계획법] 쌍대성(Duality)
Linear programming은 최적화 분야에서 잘 알려지고 연구되었으며 실제로도 많이 응용되는 기법입니다. 줄여서 LP라고도 하며, 우리말로는 선형계획법으로 불립니다. 이름이 뭔가 멋들어져서 괜스레
gazelle-and-cs.tistory.com
현재 개인적으로 갖는 의문은 과연 위와 같이 동작하는 헝가리안 알고리즘이 유인 부합적(incentive compatible)이기도 한지입니다. 유인 부합적이라는 말의 뜻은 각 매수자들이 자신이 생각하는 실제 가치
글을 마무리 짓는 지금은 성탄절입니다. 2020년과 2021년 모두 코로나 때문에 힘든 나날을 보냈는데 다가오는 해에는 개인적으로도, 모두에게도 좋은 날이 되기를 바라 봅니다. 읽어 주셔서 고맙습니다.
참조
[1] Jon Kleinberg and Eva Tardos. Algorithm design. Pearson Education, 2013.
각주
[ㄱ] 제 경험에 비추어 본 바, 할당 문제는 대개 비용을 최소화 하는 문제로 정의되는 경우가 많습니다. 다만 본문에서는 가치를 최대화 하는 문제로 정의하였습니다. 이것이 후생 경제학의 관점에 더 부합하기 때문입니다. 게다가 할당 문제는 최소화 문제나 최대화 문제나 본질적으로 동등(equivalent)하기도 합니다.
'조합론적 최적화 > Matching' 카테고리의 다른 글
안정 매칭 (Stable Matching) (5) | 2023.02.25 |
---|---|
세제곱 시간 헝가리안 알고리즘 (Hungarian Algorithm in Cubic Time) (4) | 2021.10.16 |
텃의 정리 (Tutte's Theorem) (0) | 2020.10.10 |
헝가리안 알고리즘 시간 복잡도 분석 (7) | 2020.03.18 |
호프크로프트-카프 알고리즘 (Hopcroft-Karp Algorithm) (11) | 2020.02.22 |