Top Banner
introduction to Dynamic programming & Linear programming
17

introduction to dynamic programming and linear programming

Nov 12, 2014

Download

Education

Gyeongwook Choi

dynamic programming and linear programming 101
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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 이다 . 다시 이 식을 에 정리한다 .