Transcript
Page 1: introduction to dynamic programming and linear programming

introduction to

Dynamic programming&

Linear programming

Page 2: introduction to dynamic programming and linear programming

이 자료에서는 각 알고리듬에 대해서 대략적인 소개를 목적으로 하고 있으므로

정확한 용어나 수식 사용이나 엄밀한 증명 과정은 상당부분 생략되어 있습니다 .

자세한 내용은 이 자료의 참고 자료인 Introduction to algorithm 3rd 를 참고하세요 .

Page 3: introduction to dynamic programming and linear programming

Dynamic programming

큰 문제를 작게 나누어 해결해야 할 때 (Divide-and-conquer 와 같은 부분 )

그런데 작은 문제들이 독립적이지 않고 , 서로 연관되어 있을 때 (Divide-and-conquer 와 다른 부분 )

한번 해결한 결과를 다른 작은 문제에서 활용해서 불필요한 작업을 줄여서 문제를 효율적으로 해결하는 방법

solution 이 많은 경우의 수를 가질 때 , optimization problem 에 관련해서 사용

Page 4: introduction to dynamic programming and linear programming

과정은 다음의 네 단계로 이루어 진다 .

1. Optimal solution 의 구조를 파악

2. Optimal solution 의 값을 재귀적으로 정의

3. Optimal solution 의 값을 아래에서부터 (bottom-up) 찾는다 .

4. 계산된 값으로 optimal solution 의 값을 찾는다

예시 - 조립라인 문제

- 생산 라인은 2 개가 있다 .

- 각각의 생산라인에는 동일한 공정을 처리하는 station 이 있다 .

- 동일한 공정을 처리하는 station 이라도 라인이 다르면 처리 시간은 다를 수 있다 .

- 특정 station 에서의 공정이 끝나면 다음 station 으로 이동하는데 , 이때 기존에 작업하던 라인이 아닌 라인의 station 으로 이동도 가능하다 .

- 같은 라인 안에서의 station 사이의 이동 시간은 무시할 만큼 적지만 , 다른 라인의 station 으로 이동은 이동 시간이 필요하다 .

이때 가장 빠른 경로는 어떤 station 들을 거쳐가야 하는가 ? 그리고 그때 소요되는 시간은 얼마인가 ?

Page 5: introduction to dynamic programming and linear programming

만약 각 공정에 사용할 station 이 어느 라인에 속한 station 인지 알 수 있다면 O(n) 에 소요 시간을 계산 가능하다 .

하지만 모든 경우의 수는 이다 .

그래서 효율적으로 답을 찾기 위해서 dynamic programming 을 적용시키려면 우선 구조를 파악해야 한다 .

만약 에 도달하는 최적의 경로는 반드시 을 지난다고 가정하면 , 이 경로에서 까지의 경로는 이미 optimal solution 이다 .

즉 에 대한 optimal solution 을 찾는 것은 에 대한 optimal solution 을 찾는 문제를 포함한다

다시 말해 에 대한 optimal solution 은 에 대한 optimal solution 의 subproblem 이 된다 .

이런 구조가 step1 에서 찾아야 할 optimal structure 가 된다

Page 6: introduction to dynamic programming and linear programming

다음 할 일은 재귀적으로 값을 정의하는 것이다 .

= min([] + , [] + )

전체 최단 시간 는 각 마지막 station 까지의 최적 경로에서 소요되는 시간과 라인에서 나오는 시간을 합한 값에서 더 작은 값이 된다 .

이 특징을 일반화 시키면

[] = + ( = 1 )

= min([] + , [] + + ) ( 2 )

[] = + ( = 1 )

= min([] + , [] + ) ( 2 )

이 공식에서도 알 수 있듯이 [] 을 구하는 계산은 다음 단계인 + 1 단계에서 두 번 참조된다 .

결국 [] 만해도 번 참조 된다 .

하지만 [] 의 값은 [] 에 의해서 결정되므로 만약 앞 단계에서 [] 의 optimal solution 값을 이미 구했다면

그 값을 저장했다가 다시 활용할 수 있다 . 즉 한 번만 계산하면 다시 계산할 필요가 없어지므로 O(n) 에 전체 최단 시간을 구할 수 있게 된다 .

Page 7: introduction to dynamic programming and linear programming

그래서 아래 단계인 처음 조립 될 차량이 각 라인에 처음

들어가는

단계에서부터 차례대로 optimal solution 을 찾아보면

[] = 2 + 7 = 9

[] = 4 + 8 = 12

다음 단계에서

[] = min( 9 + 9 = 18, 12 + 9 + 2 = 23 ) = 18

[] = min( 9 + 2 + 5 = 16, 12 + 5 = 17 ) = 16

이런 방식으로 값을 찾아보면 위의 표와 같은 값을 찾을 수

있게 되고 , 전체 최단 시간은 38 임을 알 수 있다 .

만약 최단 시간을 가지는 경우의 경로를 알고자 한다면 각

단계에서 min() 함수에 의해 결정된 시간이 어떤 station 을

거쳐왔는지 기록해두고 모든 계산이 끝났을 때 거꾸로 그

경로를 추적함으로써 경로를 알 수 있다 . 위의 표에서 오른쪽

표가 그 경로에 대한 기록이며 , 최단 시간의 경로는 1 – 2 – 1

– 2- 2 – 1 임을 알 수 있다 .

Page 8: introduction to dynamic programming and linear programming

Linear programming

주어진 선형 조건들을 만족시키면서 선형인 목적 함수를 최적화하는 문제이다 .

주의할 점은 성능이 최적화되어 있는 것은 아니라는 부분이다 . 문제의 유형에 따라서 성능이 더 좋은 다른 알고리듬이 존재하는 경우도 많지만

그 알고리듬으로는 해결할 수 없는 문제도 Linear programming 을 통해서 답을 찾을 수 있다는 것이 linear programming 의 장점이다 .

다시 말하자면 linear programming 을 사용하는 목적은 어려운 문제를 푸는 것이다 .

Page 9: introduction to dynamic programming and linear programming

Introduction to algorithms 책에서 예로 들고 있는 것은 선거문제

3 개의 지역이 있고 각 지역 ( 도심 , 부도심 , 전원 지역 ) 의 인구는 다음과 같다 . ( 단위는 천명 )

100, 200, 50

그리고 당선되기 위해서는 각 지역에서 최소 과반의 득표를 해야 한다 .

50, 100, 25

선거 운동은 4 가지 정책에 대해서 할 수 있는데 , 각 정책에 대해서 각 지역의 투표 수 변화는 다음과 같다

도로 건설 -2 +5 +3

총기 규제 +8 +2 -5

농장 보조금 - - +10

석유 과세 +10 - -2

선거 운동을 통해서 한 가지 정책을 홍보할 수 있고 , 비용은 $1000 가 든다 .

이때 최소 비용을 들여서 선거 운동을 해서 당선되기 위해서는 각 선거운동을 얼마나 해야 하나 ?

Page 10: introduction to dynamic programming and linear programming

linear programming 을 위해서는 주어진 조건을 식으로 변환해야 하며 , 변환된 식은 다음과 같은 형식을 따르게 된다 .

linear constraint

앞의 예에서 각 지역마다 선거 운동에 의한 결과가 과반을 넘어야 한다는 조건들이 여기에 해당된다 .

각각의 선거 운동을 변수로 정의할 때

-2 + 8 + 0 + 10 50

5 + 2 + 0 + 0 100

3 – 5 + 10 – 2 25

세 가지 식이 linear constraints 가 된다 .

objective function

모든 linear constraint 를 만족하는 범위 안에서 선거 운동 비용을 최소화해야 한다는 조건이 여기에 해당된다 .

즉 + + + 가 최소가 되어야 한다는 것이 objective function 이 된다 .

Page 11: introduction to dynamic programming and linear programming

이렇게 변환된 식은 문제의 조건에 따라서 두 가지 유형으로 나눌 수 있다 .

feasible solution

위의 조건들을 만족하는 , , … 의 경우를 뜻한다 .

optimal solution – optimal value

만약 feasible solution 의 범위 안에서 objective function 의 최적화 된 값을 유한한 범위 안에서 구할 수 있다면 ,

그때 objective function 의 값을 optimal value 라고 한다 .

unbounded ( 유한한 optimal objective value 가 없으면 )

만약 feasible solution 의 범위 안에서 optimal function 의 범위가 무한으로 발산한다면 optimal objective value 는 없고

unbounded 라고 표현한다 .

infeasible solution

위의 조건들을 동시에 모두 만족시키는 , , … 의 값이 없는 경우를 뜻한다 .

Page 12: introduction to dynamic programming and linear programming

standard form

linear problem 을 나타내는 식의 한 형태이며 , 앞서 보았던 식들이 이에 해당한다 . 대신 몇 가지 조건이 더 필요하다 .

1. objective function 이 minimization 이 아니라 maximization 이 되어야 한다 . 그렇지 않다면 경우 양 변에 –를

곱해서 부등호 방향을 바꾸면 된다 .

2. 모든 변수는 non-negativity constraint 조건을 만족해야 한다 . 이 조건은 모든 변수가 0 이상이어야 한다는

조건인데 , 만약 이 조건을 가지지 않은 변수 가 있다면 이 변수를 – 로 대체 하고 , 에 non-negativity constraint

를 부여한다 .

3. linear constraint 에서 등호가 = 인 경우에는 로 바꾼다 .

4. linear constraint 에서 등호가 인 경우에는 양변에 –를 곱해서 로 바꾼다 .

위의 방법에 따라 앞서 봤던 식을 표준형으로 수정하면 아래와 같이 된다 .

maximize - - - -

subject to 2 - 8 - 0 - 10 -50

-5 - 2 - 0 - 0 -100

-3 + 5 - 10 + 2 -25

, , , 0

linear programming 이라는 것이 결국 이렇게 조건을 만족하는 범위 안에서 식을 고쳐가면서 답을 찾는 것이다

구체적인 내용은 다음에 볼 slack form 과 simplex algorithm 을 통해서 이해가 가능하다 .

Page 13: introduction to dynamic programming and linear programming

slack form

simplex algorithm 을 적용하기 위해서는 standard form 보다 slack form 이 더 편하다 .

앞에서 만든 standard form 을 slack form 으로 바꾸면 아래와 같다 .

maximize = - - - -

subject to = 50 + 2 - 8 - 0 - 10

= 100 - 5 - 2 - 0 - 0

= 25 - 3 + 5 - 10 + 2

, , , , , , 0

이렇게 좌변에 새로운 변수를 추가해서 그 변수들에 대해서 식을 정리한다 .

이때 를 제외한 변수들은 non-negativity constraint 를 그대로 적용 받는다 .

여기에서 좌변에 있는 변수들은 basic variable 이라고 하며 , 우 , , , 을 non-basic variable 이라고 한다 .

Page 14: introduction to dynamic programming and linear programming

simplex algorithm

linear programming 의 오래된 방법이다 . 최악의 경우에는 Interior point method 과 같은 다른 linear programming

알고리듬보다 성능이 나쁘지만 적용이 쉽고 , 여전히 많은 문제들에 대해서는 우수한 성능을 보장하므로 여전히 많이 쓰이는

방법이다 .

알고리듬

1. 주어진 linear constraints 와 objective function 을 slack form 으로 변환한다 .

2. 그 후에는 주어진 조건을 만족하는 범위 안에서 식을 변환해가면서 optimal solution 을 찾아간다 .

3. 찾아가는 구체적인 과정은 objective function 에서 z 와 비례 관계에 있는 non-basic variable 가운데 한 변수를

정해서 그 변수가 가질 수 있는 값의 범위를 주어진 linear constraints 를 통해서 찾는다 . 이때 가장 작은 범위로

제약하는 linear constraint 식을 앞에서 정한 변수에 대해서 정리한다 .

4. 그리고 다른 linear constraints 와 objective function 에 대입한다 .

5. 그 상태에서 basic solution 을 찾고 , 이때 가장 큰 z 값을 가지는 solution 을 찾을 때까지 다시 앞의 과정을 반복한다 .

Page 15: introduction to dynamic programming and linear programming

example

위와 같은 standard form 이 주어지면 아래와 같이 slack form 으로 변환한다

basic solution 은 non-basic variables 가 모두 0 인 경우이므로 이때 solution 은 (, , , , , ) = (0, 0, 0, 30,

24, 36) 이고 z 는 0 이다 .

그 다음에는 이 식을 변형하기 위해서 z 와 비례 관계에 있는 임의의 non-basic variable 을 하나 선택한다 .

을 선택했다고 하면 각각의 linear constraints 에서 모든 변수들이 non-negativity 을 만족하는 의 최대 값은

각각 (30, 12, 9) 가 된다 . 여기서 가장 범위가 tight 한 조건은 9 인 마지막 식이므로 이 식을 에 대해서

정리한다 .

Page 16: introduction to dynamic programming and linear programming

그리고 위의 식을 나머지 식들에 대입한다 .

이때 basic solution 은 (, , , , , ) = (9, 0, 0, 30, 24, 0) 이고 z 는 27 이다 .

다시 이 식을 변형하기 위해서 z 와 비례 관계에 있는 임의의 non-basic variable 을 하나 선택한다 .

을 선택했다고 하면 각각의 linear constraints 에서 모든 변수들이 non-negativity 을 만족하는 의 최대 값은

각각 (18, 3/2, 42/5) 가 된다 . 여기서 가장 범위가 tight 한 조건은 3/2 인 두 번째 식이므로 이 식을 에 대해서

정리한다 .

Page 17: introduction to dynamic programming and linear programming

이때 basic solution 은 (, , , , , ) = (44/3, 0, 3/2, 69/4, 0, 0) 이고 z 는 111/4 이다 .

다시 이 식을 변형하기 위해서 z 와 비례 관계에 있는 임의의 non-basic variable 을 하나 선택한다 .

밖에 남지 않았으므로 의 tightest constraint 를 찾는다 .

두 번째 식의 범위가 가장 tight 하며 그 때 의 값은 4 이다 . 다시 이 식을 에 정리한다 .