최소비용흐름문제의...
TRANSCRIPT
최소비용흐름문제는 선형계획문제로 표현할 수 있다.
예 4.1의 최소비용흐름문제는 다음과 같은 선형계획문제가 된다.
최소비용흐름문제의 선형계획모형
min z = 5x12 +4x13 +7x14 +2x25 +10x34 +8x35 +5x45
sub.to x12 +x13 +x14 = 10,�x12 +x25 = 4,
�x13 +x34 +x35 = -3,�x14 �x34 +x45 = -4,
�x25 �x35 �x45 = -7,x12 4,
x13 10,x14 4,
x25 10,x34 5,
x35 5,x45 5,
xij � 0.
질량보존법칙
용량제약조건
기본용어
유향네트워크의 경로 의 에서 로 갈 때, 호의 방향이 일치할 경우 정방향호, 반대인 경우 역방향호라고 하자.
경로 의 비용을 다음과 같이 정의하자 = 정방향호의 비용 합 - 역방향호의 비용 합
최소비용흐름문제 알고리듬- 용량제약이 없는 경우
P := v1 � v2 � · · ·� vl v1 vl
P c(P )
그림에서 경로 의 비용은 3 - 4 + 1 = 0이다.
P = i� j � k � l
회로의 흐름을 조정하여 해를 개선한다.
음수회로를 사용하는 최소비용흐름문제 알고리듬
p
q i
j
tl k
s
흐름 2
4
3
2
1
2
(6)
1
3(2)
4
0
0
3
(-5) (-3)
비용 2
3
4
1
3
5
2
1
0 2
3 2
4
3
예를 들어 회로 C = i-j-k-l-p-q를 보자.
p
q i
j
tl k
s
흐름 2
4
3
2
1
2
(6)
1
3(2)
4
0
0
3
(-5) (-3)
비용 2
3
4
1
3
5
2
1
0 2
3 2
4
3
음수회로를 사용하는 최소비용흐름문제 알고리듬 (계속)
현재 가능 흐름 를 회로 를 따라 가며 다음과 같이 조정해보자.
이렇게 조정된 흐름은 각 마디에서 균형을 유지하게 된다. 또한 역방향 흐름이 모두 양수이면, 비음조건을 만족하게 하는 의 최대값은 2 가 된다:
-조정에 의한 목적함수의 변화는 다음과 같다 :
위의 예처럼 회로의 비용 가 음수인 경우, -조정은 목적함수를 감소시킨다. 이러한 회로를 흐름증가음수회로 혹은 음수회로라고 한다.
만약 흐름증가 음수회로에서 역방향 호가 없다면?
x C := i� j � k � l � p� q � i
xij 1 + ✓,
xjk 2� ✓,
xkl 2 + ✓,
xlp 3� ✓,
xpq 4� ✓,
xqi 2 + ✓.
1 + ✓ � 0, 2� ✓ � 0, 2 + ✓ � 0, 3� ✓ � 0, 4� ✓ � 0, 2 + ✓ � 0.✓
c(C)
음수회로를 사용하는 최소비용흐름문제 알고리듬 (계속)
✓
✓
✓(cij � cjk + ckl � clp � cpq + cqi) = 2⇥ (�6)
개선된 흐름 : 개선된 비용 2 x 6 =12
p
q i
j
tl k
s
흐름 4
2
1
4
3
0
(6)
1
3(2)
4
0
0
3
(-5) (-3)
비용 2
3
4
1
3
5
2
1
0 2
3 2
4
3
음수회로를 사용하는 최소비용흐름문제 알고리듬 (계속)
음수회로와 최적 조건은 다음과 같은 관계가 있다:
현재 가능흐름에 흐름증가 음수회로가 존재한다면 해의 개선이 가능하다.
역으로, 흐름증가 음수회로가 더 이상 존재하지 않으면, 현재 가능흐름이 최적이다. (증명 생략)
따라서 현재 가능 흐름에 대한 흐름증가 음수회로를 찾아 앞서 - 조정으로 해를 개선시키는 단계를 반복하면 최소비용 흐름 문제를 푸는 알고리듬이 된다.
우리가 배울 네트워크 심플렉스 알고리듬은 특별한 형태의 흐름을 유지하여 음수회로를 신속하게 찾는다.
✓
음수회로를 사용하는 최소비용흐름문제 알고리듬 (계속)
가능 흐름 에 대해 다음의 조건을 만족하는 걸침나무 가 존재하면 를 걸침나무해 또는 나무해라고 부른다.
에 속하지 않는 호 의 흐름은 모두 0이다.
걸침나무해
T
T (i, j)
x
나무해 나무해가 아닌 가능 흐름
x
최소비용흐름문제가 최적해를 가지면, 반드시 나무해가 되는 최적해가 존재한다.
증명 : 나무해가 아닌 최적 흐름이 있다고 하자. 즉, 호의 흐름 크기가 모두 >0인 회로 가 존재한다 하자. 회로의 어느 방향으로 -조정을 해도 >0이므로 회로의 비용은 0이어야 한다.
이때, 회로 의 흐름을 역방향호 흐름의 최소값만큼 -조정하자. (역방향호가 없으면 회로의 방향을 반대로 바꾼다.) 회로의 비용이 0이기 때문에, 조정된 흐름도 최적 흐름이 되고, 회로 에서 흐름이 0인 호가 최소 한개 이상 발생하기 때문에 회로 는 제거된다.
회로 밖의 흐름의 변화는 없다. 따라서, 전체 네트워크에서 볼 때, 이러한 과정을 최대 호의 갯수만큼 반복하기 전에 모든 호의 흐름이 0보다 큰 회로를 모두 제거할 수 있다.
걸침나무해 (계속)
✓
✓
C
C
C
✓
C
매 반복단계마다 나무해를 유지한다. 현재 나무해에서 음수회로를 찾아 -조정을 하여 개선된 나무해를 얻는 단계를 반복한다.
현재 나무해에 대응하는 걸침나무를 라 하자. 네트워크 심플렉스 알고리듬은 에 속하지 않는 호를 추가했을 때 발생하는 회로만 고려한다. 회로의 방향은 추가한 호의 방향으로 정한다. (이러한 음수회로가 존재하지 않으면 현재해가 최적해임을 증명할 수 있다.)
네트워크 심플렉스 알고리듬
TT
✓
이 예에서, 세개의 호 (1,5), (5,2), 그리고 (3,6)에 대해 세개의 회로가 발생
- , 비용 -7
- , 비용 1
- , 비용 -14
C1 := 1� 5� 4� 2� 1
C2 := 5� 2� 4� 5
C3 := 3� 6� 5� 2� 3
회로의 비용을 구하는 체계적인 방법
1) 마디를 임의로 하나 선택하여 뿌리 마디로 지정한다.
2) 걸침나무 에서, 뿌리마디에서 각 마디 까지의 경로의 비용을 라고 하자.
3) 그러면 호 가 에 추가되어 만들어진 회로의 비용은 다음과 같다:
네트워크 심플렉스 알고리듬 (계속)
c̄ij ⌘ cij + ⇡(i)� ⇡(j).
T
T(i, j)
i⇡(i)
뿌리마디 1 :
- , 비용 -7
- , 비용 1
- , 비용 -14
C1 := 1� 5� 4� 2� 1
C2 := 5� 2� 4� 5
C3 := 3� 6� 5� 2� 3
회로 를 따라 -조정을 하자.
즉, 정방향호의 흐름은 만큼 증가시키고 역방향호의 흐름은 만큼 감소시킨다. 이때 회로의 비용이 -14이므로 목적함수는 -14 만큼 증가한다.
는 역방향호의 흐름 크기 중 최소값까지 증가시킬 수 있다. 이 경우 3이다.
만약 역방향호가 없다면? .
네트워크 심플렉스 알고리듬 (계속)C3 := 3� 6� 5� 2� 3 ✓
✓ ✓✓
✓
회로 를 따라 -조정을 하자.
즉, 정방향호의 흐름은 만큼 증가시키고 역방향호의 흐름은 만큼 감소시킨다. 이때 회로의 비용이 -14이므로 목적함수는 -14 만큼 증가한다.
는 역방향호의 흐름 크기 중 최소값까지 증가시킬 수 있다. 이 경우 3이다.
만약 역방향호가 없다면? 목적함수를 무한히 감소 시킬 수 있다.
네트워크 심플렉스 알고리듬 (계속)C3 := 3� 6� 5� 2� 3 ✓
✓ ✓✓
✓
-조정을 하면, 역방향호 중 하나의 흐름이 0으로 감소하고, 새로 추가한 호의 흐름의 크기는 가 된다.
예에서, 호 (2,4)의 흐름이 0으로, 호 (3,6)의 흐름이 3으로 바뀌었다.
걸침나무에서 (2, 4)를 제거하고, (3, 6)을 추가하여 새로운 나무해를 얻을 수 있다 :
이때, 나무가 바뀌었기 때문에 도 재계산 한다.
새로운 나무해는 최적일까?
네트워크 심플렉스 알고리듬 (계속)✓
✓
⇡
초기화 : 초기 나무해를 구하고, 뿌리마디를 임의로 선택한다.
주 반복단계 : 알고리듬이 종료할 때까지 다음을 반복한다:
1) 현재 나무해의 를 구한다.
2) 현재 걸침나무 에 속하지 않는 호 중에서 를 만족하는 것을 선택한다. 그런 호가 없으면 현재 해는 최적해이다.
3) 위에서 선택한 호 를 에 첨가했을 때 생기는 음수회로를 따라 역방향호가 없으면 최적해는 존재하지 않는다. 알고리듬을 종료한다.
4) 역방향호 흐름의 최소값을 구하여 -조정을 하여 새로운 나무해를 구한다. 에 를 첨가하고 흐름이 0으로 감소한 역방향호 중 임의로 하나를 에서 삭제하여 새로운 를 구한다.
네트워크 심플렉스 알고리듬 (계속)
⇡
T
T(i, j)
(i, j) c̄ij < 0
✓(i, j)
TT
T
입력 : 무향 네트워크 , 각 호 의 비용 .
출력 : 호 비용의 합이 최소가 되는 걸침나무 .
최소비용 걸침나무문제(Minimum Spanning Tree Problem)
G = (N,A) e 2 A ce
T
초기화 : 임의 마디 을 선택하여 .
주 반복단계 : 가 모든 마디를 포함할 때까지 다음을 반복 :
양 끝 마디 중에서 하나만 의 마디집합에 포함된 호 중에서 가장 비용이 작은 호를 하나 선택하여 에 첨가한다.
프림(Prim)의 알고리듬
r T ({r}, ;)
TT
T
다음 예를 보자. 뿌리마디는 로 설정하였다
프림의 알고리듬 (계속)
마디 1에 연결된 호 중 최소 비용 호를 택한다.
마디 1, 3에 연결된 호 중 최소 비용 호를 택한다.
r = 1
각 단계마다 추가 가능한 호중에서 비용이 가장 작은 호를 선택한다. 이러한 성질을 가진 알고리듬을 ‘greedy’ 알고리듬이라 한다.
최소비용 걸침나무문제는 greedy 알고리듬이 항상 최적해를 구하는 특성을 지니고 있다.
초기화 : .
주 반복단계 : 가 모든 마디를 포함할 때까지 다음을 반복:
에 추가했을 때 회로를 발생시키지 않는 호 중에서, 비용이 가장 작은 호를 에 추가한다.
또다른 greedy 알고리듬이 가능할까?
크라스칼(Kruskal)의 알고리듬
T
T (;, ;)
T
T
입력 : 단순 네트워크 , 각 호 의 비용 , 마디의 부분집합 .
출력 : 을 연결하는 나무 중에서 호 비용의 합이 최소가 되는 것.
최소비용 걸침나무문제와 다른 점은 마디의 부분집합 을 연결한다는 것이다. 최소비용 걸침나무문제와 유사하지만 최적해를 신속히 구하는 것이 불가능한 문제
최소비용 스타이너나무문제-Minimum Steiner tree problem
G = (N,A) e 2 A ceM ✓ N
MM = {1, 2, 4, 6, 7}인 예
M