일반적으로 동적계획 문제는 최적 경로 찾기나 지정된 3곳 중에 금액이나 사람 등을 몇 개 투입해야 최대 이익이 될 수 있는지 등을 계산하였습니다.

그런데 만약 다음과 같은 경로 찾기 문제를 생각해봅시다

A   --   B    --   D

    ㄴ  C   ┘     

여기서 A에서 B와 C로 갈 수 있다고 할 때 그냥 거리가 짧은 쪽을 고르면 쉽게 풀리는 문제입니다.

그런데 만약 A에서 B와 C를 확률적으로 갈 수 있다고할 때  즉, 두 길이 50%와 50%확률로 갈 수 있다고 할 때 는 어떻게 될까요?

 

가장 기본적인 생각은 기댓값이라는 아이디어입니다.

로또복권 한장을 사면 기댓값이 22원 정도... 만원내기로 동전 던지기를 할 때 기댓값은 5천원...

이렇게 실제 실현된 값은 아니지만 기댓값이라는 개념으로 위의 문제에서 확률에 따른 길의 길이를 기댓값으로 수치화 할 수 있습니다. 따라서 이 기댓값을 가지고 동적계획법 계산이 가능해집니다.

 

예를 들어보죠

여러분은 아주 잘나가는 햄버거 요리사입니다.

 

 

 그런데 어느날 아주 유명한 미식가가 찾아와 햄버거 하나를 주문합니다.

이 미식가를 만족시키면 자신의 평판이 오를것이 분명하기 때문에 최대한 열심히 만들려고합니다.

그런데 미식가가 어떤 취향인지를 몰라서 일단 햄버거를 여러개 만들 생각도 해봅니다.

과연 이 미식가를 만족시킬 수 있을까요??

 

이때 확률론적 동적계획법을 사용하면 미식가를 최대한으로 만족하고 여러분의 평판과 임금이 오를 수 있습니다!! 

 

일단 저기서 추가적인 조건이 있습니다.

  1. 일단 여러분은 한번 요리를 시작하면 무조건 3천원이 소모되며 햄버거 하나당 추가적으로 1천원이 더 소모됩니다.

  2. 한번 요리를 시작하면 5분이 소요됩니다.

  3. 임의로 만든 햄버거 하나가 미식가를 만족시킬 확률은 50%이며 모든 햄버거가 입맛에 안맞으면 1.6만원의 손해를 입습니다.

  4. 미식가는 15분동안 기다려 줄 수 있습니다.

이때 어떻게하면 최소한의 소모로 미식가를 만족시킬 수 있을까요?

 

그러면 잘 생각해봅시다. 3개를 만들었는데 미식가가 만족하는 퀄리티의 햄버거가 2개라고한다면 의미가 있을까요?

미식가는 하나의 햄버거만 주문했기 때문에 1개 이상을 만족시키는 것은 의미가 없습니다.

그러면  목표는 최소한으로 만들어서 최대한 미식가를 만족시킬 수 있는 L값을 정하는 것입니다.

 

따라서 미식가가 만족할 확률은 다음과 같이 정해집니다.

 

 

이제 햄버거에 대한 기댓값을 정의해봤으니 동적계획법에서 중요한 3가지 요소 단계, 상태, 결정변수를 정의해 봅시다.

 

먼저 단계!

여기서는 단계란 미식가가 최대 15분을 기다려줄 수 있고 요리 한번하는데 5분이 소요되므로 총 3번 요리할 동안 기다려 줄 수 있습니다. 

 

따라서 단계는 3개가 있다고 볼 수 있습니다.

 

그러면 상태와 결정변수를 분석해봅시다.

 

결정변수는 뭘까요? 여기서 변경할 수 있는 숫자는 한번에 생산하는 햄버거의 갯수뿐이죠?

 

마지막으로 상태는 특정 단계에서 만족 했는가 안했는가 입니다.

 

그래야 만족하는 루트로 갈지 만족하지 못하는 루트로 갈지 정할 수 있거든요

 

 

그러면 이제 식을 정의해봅시다

 

한 단계당 무조건 요리를 해야하고 햄버거 수에 따라 비용이 달라지므로 다음과 같이 나타낼 수 있습니다.

3+Li

 

따라서 이 문제의 동적계획법 수식은 다음과 같습니다.

 

 

따라서 이것을 다시 동적계획법에서 풀듯이 뒤에서 부터 풀면 다음과 같습니다.

 

 

 

 

어때요 그냥 동적계획법과 다를바없이 쉽지 않나요?

 

 


WRITTEN BY
0

,

운용과학(OR)에서 여러 모형들의 기원은 그렇게 뚜렷하지 않습니다. 선형계획법이나 정수계획법 수송문제 등등...

그런데 이 동적계획법은 창조자가 잘 알려져있습니다 바로 리처드 벨만이라는 사람으로 동적계획법이 다이나믹 프로그래밍이 된것도 이 사람이 다이나믹이라는 말이 멋있어서 붙였기 때문이라는 설이 있습니다.

따라서 다이나믹이라는 뜻도 동적이라는 뜻도 이 계획법과는 상관이 없는 뜻입니다.....

 

여하튼 이번 포스트에서는 동적계획법이 무엇이며 어떻게 쓰이는지 알아봅시다.

 

동적계획법은 최적의 해를 찾기 위해 이전에 구한 답을 이용하여 문제를 푸는 기술 혹은 방법을 말합니다.

 

이렇게 써두면 직관적으로 이해가 안갑니다

 

재미있는 예를 들어보죠

 

옛날 어느 중동의 나라에 한 청년이 살고 있었습니다. 청년은 골동품을 모으는 취미가 있었는데 어느날 골동품 시장에서 신비한 램프를 샀습니다. 그리고 램프를 보관하기 위해서 닦는 순간 램프의 요정이 나타난것입니다!

 

 

램프의 요정은 램프의 봉인을 풀어준 대가로 보물을 준다고 합니다.  요정은 세계에서 가장 진귀하다는 보물 1위부터 100위까지를 가지고 있는데 전부는 줄 수 없고 자신이랑 게임을 해서 한개만 받을 수 있다고 합니다.

게임은 요정이 보물 100개를 30초마다 하나씩 보여주는데 자신이 원하는 보물에서 멈춰! 라고 말하면 그 보물을 준다고 합니다. 다만 이미 지나간 보물은 받을 수 없고 당연히 앞으로 나올 보물 또한 받을 수 없습니다.

청년은 보물을 보자마자 요정이 지금까지 보여준 보물들의 상대적인 순위를 제대로 파악할 수 있다고 할 때 과연 보물을 몇번째 보여줄 때 쯤 멈추는게 현명할까요?? 

 

이 문제는 동적계획법 문제입니다. 최적의 해는 언제쯤 멈춰야 최대의 가치가 되는지 그리고 보물의 상대적인 순위를 파악할 수 있으므로 이전 구한 답을 이용해서 문제를 풀게 됩니다. 동적계획법의 정의에 딱 맞는 문제입니다.

참고로 위 문제의 정답은 약 33번째 쯤에 보물을 받는게 가장 가치가 높습니다.

 

이렇게 복잡한 문제도 풀 수 있는 동적계획법! 그런데 아직까지는 좀 아리송합니다. 특히 지금까지 선형계획법으로 잘 풀어왔는데 동적계획법이 무슨 소용이냐!라는 말이 있을 수 있습니다. 그래서 어떤 문제를 동적 계획법으로 풀 수 있는지 알아봅시다.

 

먼저 중요한 개념은 최적성의 원칙(principle of optimality)가 없으면 동적계획법으로 풀 수 없습니다!

그러면 최적성의 원칙이 무엇인지 알아야겠죠?

 

예를 들어 봅시다

 

여러분은 의사입니다. 근대 이웃마을에 위급한 환자가 있다고 연락이 와 급하게 가야합니다. 

이웃마을까지 가는데 다음과 같은 루트가 있다고 할 때 어떤 루트로 가야할까요?

 

이런 최단경로를 찾는 문제는 대표적인 동적계획법 문제입니다.

그런데 모든 최단경로 문제가 동적계획법으로 풀 수 있을까요?

만약 위 루트에서 A루트로 가면 길이 너무 험해서 포인트에서 환자까지 가는데 1시간이 걸립니다.

편한 길인 B루트로 가면 포인트에서 환자까지 가는데 30분이 걸립니다.

이렇게 같은 지점을 가는데 그 지점에서 다음 지점으로 이동할 때 걸리는 시간이 이전 루트에 영향을 받습니다.

이렇게 되면 최적성의 원칙이 깨졌다고 합니다.

그러면 이렇게 최적성의 원칙이 깨지면 왜 동적계획법으로 풀 수 없을까요?

핵심은 이전 답을 재활용한다는 것에 있습니다.

 

만약 이전 루트에 따라서 포인트에서 환자까지 가는 길에 영향을 준다면 의사 위치에서 포인트까지 가는 길이 짧은 루트는 아무 상관이 없습니다.

짧은 루트로 갔는데 오히려 포인트에서 환자까지 가는데 시간이 다른 루트에서 온 것보다 더 걸릴 수도 있는 것이지요

기본적으로 최단경로를 찾는 문제는 A 지점에서 (정확히는 단계 안의 노드 입니다만 단계라는 용어는 나중에 다시 설명하겠습니다.)  B 지점까지의 최단경로를 알면 A지점에서 C지점으로 가는데는 B에서 C로 가는 최단 경로만 구하면됩니다.

그렇게 되면 앞서 미리 구한 A에서 B까지 가는 최단 경로 답을 이용하여 그냥 더하면 되죠 

 

min(AB) + min(BC) = min(AC) 

 

하지만 최적성의 원칙이 깨지면 위와 수식의 방식을 쓸 수 없습니다.

AB로 가는 최단 경로가 BC의 최단 경로에 영향을 주기 때문에 AC의 최단 경로라는 것을 보장하지 못하거든요

 

그러면 이제 어떤 문제가 동적계획법으로 풀 수 있는지를 알았으니 특정 문제를 동적계획법으로 나타내는 방법을 알아봅시다.

문제를 정의하기 위해서 동적계획법만의 세 가지 중요 변수가 있습니다.  

 

단계(Stage) : i 

: 동적 계획법의 단계를 나타냅니다.

 

상태(state)  : s

: 특정 단계에서 선택할 수 있는 노드를 말합니다

 

결정변수(control) : x 

: 특정 단계에서 다음 단계로 가는 최적의 상태를 선택하는 것을 말합니다.

 

 

이것을 수식으로 나타내면 다음과 같습니다.

 

이렇게 개념만 보면 머리가 아프니 정리할겸 예제를 봅시다.

 

삼송(三松)이라는 기업은 여러개의 자회사들을 두고 있는 초거대 기업이있다고 합시다.

 

이 기업에서 분석하길 자회사 3곳(삼송전자, 삼송자동차, 삼송중공업)에 경영비상이 걸려 특별경영개선팀을 파견하려고 합니다.

 

특별경영개선팀은 총 5개의 그룹이 있으며 각 회사마다 파견되는 개선팀에 따라 이득이 다음과 같다고 할 때 어떻게 경영개선팀을 보내는게 최대한 이득을 볼 수 있을까요?

 

팀의 수 삼송전자 삼송자동차 삼송중공업
1 20 30 40
2 70 70 90
3   100  

 (단위 : 억원)

 

여기서 전자와 중공업은 최대 팀을 2개 자동차는 3개를 보낸다는 정책이 있습니다.

 

 

일단 이문제는 목표가 명확합니다. 최대한 돈을 벌자!

그리고 자원은 특별경영개선팀 5그룹이 있습니다.

 

동적계획법 풀이 1단계는 단계, 상태, 결정 변수를 정하는 것입니다.

먼저 이 문제에서 결정 변수를 정의해보면 [특정 그룹에 얼마나 많은 개선팀을 파견할 것인가??]가 됩니다.

 

그리고 단계를 나눠보면 

 

삼송전자-> 삼송자동차 -> 삼송중공업

이렇게 3단계로 나뉠 수 있습니다.

각 단계에서 변화하는 요소는 과연 무엇일까요?

이게 동적계획법의 킵 포인트로 바로 개선팀의 남는 개수가 변화합니다.

정확히는 자원이 변화할 수도 있는 가능성을 따지는 겁니다.

 

다시 각 단계에 상태를 부여해봅시다.

 S1              S2                 S3

삼송전자-> 삼송자동차 -> 삼송중공업

 

각 상태에서의 팀의 개수는 다음과 같습니다.

S1 = 5

S2 = 5-X2 = S1 - X2 

S3 = 5-X2-X3 = S2 - X3

 

그 다음으로 해야할 것은 각 단계에 관해서 재귀적 관계를 정립하는 것입니다.

 

요런 관계

 

 

저 위 수식은 동적계획법에서 매우 중요하므로 동적계획법을 요령껏 잘 쓸려면 외워둡시다

 

이제 저 수식으로 문제를 푸는데 푸는 방법이 다소 특이(?)합니다. 

 

출처 https://www.freetech4teachers.com/2018/06/a-quick-and-easy-way-to-create.html

 

이런 미로 찾기 아시나요??

 

미로 찾기는 출구에서 이리저리 복잡하게 헤매면서 푸는 재미가 있죠

 

근대 이 미로찾기를 쉽고 간단하게 풀 수 있는 방법이 있습니다.

 

바로 출구부터 시작하는 것이지요

그러면 놀랍게 입구에서 시작하는 것보다 더 빠르게 풀 수 있답니다.

 

그 이유는 미로찾기 알고리즘에 있습니다. 

 

 

 

(시간 나시면 한번 보시는걸 추천합니다 동적계획법으로 미로찾는 알고리즘입니다)

 

즉 출발 지점에서 부터 진행하지 않고 출구지점에서 부터 진행하자!! 이게 동적 알고리즘의 핵심입니다.

 

그러면 다시 삼송 기업의 회생(?) 팀 파견 문제로 돌아가봅시다

 

아까 본 재귀 수식에 i=3일 때를 넣습니다. 즉 마지막 단계에서 수식은 시작합니다.

 

그러면 4단계가 없으므로 자동적으로 3단계까지 누적이득과 3단계에서의 이득은 같게 됩니다

 

좀 더 식을 전개하면

 

 

이렇게 쓸 수 있습니다.

그러면 각 식마다 키포인트가 되는건 

 

이것을 구하는게 됩니다.

 

그러면 저 수식이 없는 단계는 몇단계였죠?? 그렇습니다 마지막 단계인 3단계가 없죠

 

그러면 3단계부터 상태에 따른 이득을 표로 나타내면 다음과 같습니다.

 

 

 

 

 

1단계에서 S1=5라고 위에서 언급했으므로 상태가 5일때만 계산해주면 됩니다

 

따라서 파견은

삼송전자, 삼송자동차, 삼송중공업 순서로

0개, 3개, 2개팀을 파견하던지

2개, 2개, 1개팀을 파견하는 것이 최적파견이 됩니다.

 

동적계획법은 문제에 따라서 약간의 변형이 필요할 수 있습니다 

 

다른 포스트에서 유명한 문제인 배낭 문제를 동적계획법으로 풀어보고 비교하면서 알아보면 동적계획법 풀이에 대한  좋은 시각을 가질 수 있습니다. 


WRITTEN BY
0

,