Tải bản đầy đủ (.pdf) (16 trang)

QUY HOẠCH RỜI RẠC - CHƯƠNG 6 ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (479.88 KB, 16 trang )


Bùi Thế Tâm VI.1 Quy hoạch rời rạc


Chương 6
THUẬT TOÁN NHÁNH CẬN
1. TƯ TƯỞNG CỦA THUẬT TOÁN NHÁNH CẬN
1.1.
Trong các phương pháp giải bài toán qui hoạch nguyên, phương pháp nhánh
cận là một trong các phương pháp có hiệu quả. Phương pháp nhánh cận được Land A.H
và Doig A.G xây dựng năm 1960 giải bài toán qui hoạch nguyên (trình bày Tiết 2), đến
1963 được Little J.D, Murty K.G, Sweeney D.W và Karen C sử dụng thành công giải
bài toán người du lịch (trình bày trong Tiết 3). Năm 1979 Giáo sư Hoàng Tụy đã ứng
dụng thành công phương pháp này vào giải bài toán qui hoạch lõm. Đây là thuật toán
ứng dụng rộng rãi để giải các bài toán tối ưu khó.
Xét bài toán qui hoạch rời rạc

(
)
min ,ZfX= (1)

XG

(
G
là tập hữu hạn ) (2)
1.2. Tư tưởng của phương pháp nhánh cận gồm các phép xây dựng sau cho phép
giảm bớt khối lượng lựa chọn.
1. Tính cận dưới. Tìm cận dưới của hàm mục tiêu
(
)


f
x trên tập các phương án
G (hoặc trên tập con G

nào đó của G ) tức là số
(
)
G
ζ
hay
(
)
G
ζ

sao cho:

(
)
(
)
f
xG
ζ
≥ với
x
G


( hay

(
)
(
)
f
xG
ζ

≥ với
x
G



).
2. Chia thành các tập con (rẽ nhánh ). Chia dần dần tập phương án G thành
cây các tập con (các nhánh). Việc chia nhánh thực hiện theo sơ đồ nhiều bước sau:
Bước 0. Đặt
0
GG≡ . Bằng một cách nào đó
0
G được chia thành một số hữu
hạn các tập con ( thường là không giao nhau)
1
11 1
12
, , ,
r
GG G.
Bước

1k ≥
. Có tập
12
, , ,
k
kk k
r
GG G cần chia nhánh. Ta chọn tập
()
k
k
G
ϑ
theo một
qui tắc nào đó và chia thành một số hữu hạn các tập con :
() () ()
,1 , 2 , ( )
, , ,
kk k
kk ksk
GG G
ϑϑ ϑ
,
gồm có
()
s
k tập. Khi đó, tập cần chia nhánh tiếp theo là

12 1 1
, , , , , ,

kk k
kk k k k
r
GG G G G
ϑϑ
−+
,
() () ()()
,1 , 2 ,
, , ,
kk k
kk ksk
GG G
ϑϑ ϑ

Ta đánh số lại là
1
11 1
12
, , ,
k
kk k
r
GG G
+
++ +
.
3. Tính lại đánh giá
Nếu tập
12

GG⊂ thì
(
)
(
)
12
min min
XG XG
f
XfX
∈∈

.
Vì vậy khi chia tập
G

thành
12
, , ,
s
GG G

′′
sao cho
1
'
s
i
i
GG

=

=

thì cận của bất
kì tập
i
G

đều có
(
)
(
)
(
)
, 1, ,
i
GGis
ζζ
′′
≥=
. Trong các tình huống cụ thể ta thường
nhận được các đánh giá tốt , tức là đối với một i nào đó
(
)
(
)
.
i

GG
ζζ




Bùi Thế Tâm VI.2 Quy hoạch rời rạc


4. Tính phương án
Đối với các bài toán cụ thể có thể chỉ ra các phương pháp khác nhau để tìm ra các
phương án trong các tập con được chia liên tiếp. Phương pháp này dựa trên đặc thù của
mỗi bài toán cụ thể. Nhờ phương án mới tìm được ở mỗi bước ta có thể cải tiến cận trên
(ban đầu gán cho cận trên giá trị là
+
∞ ) bằng cách gán cho cận trên giá trị hàm mục
tiêu tốt nhất tại thời điểm đó.
5. Tiêu chuẩn tối ưu. Giả sử
1
s
i
i
GG
=
=

và phương án
XG
ϑ


thỏa mãn điều
kiện:
(
)
(
)
(
)
, 1, ,
i
f
XG G is
ϑ
ζζ
=≤ ∀=
thì
X
là phương án tối ưu của bài toán
(1)-(2). Qui tắc này được ứng dụng ở giai đoạn chia nhánh .
6. Đánh giá độ chính xác của lời giải xấp xỉ. Giả sử

()
1, ,
1
,min
s
ii
is
i
GG G

ζζ
=
=
==

.
Nếu
X là một phương án của bài toán xuất phát thì
(
)
(
)
min
xG
f
XfX
ζ

≤≤. Nếu
()
fX
ζ

đủ nhỏ thì
X
có thể lấy làm lời giải xấp xỉ với đánh giá độ xấp xỉ là
()
fX
ζ
∆= − .

1.3. Lược đồ tổng quát của phương pháp nhánh cận. Chia tập phương án
G
thành cây tập con.
Bước 0. Tính
()
(
)
0
GG
ζζ
=
. Nếu tìm được phương án
X
sao cho
(
)
(
)
f
XG
ζ
= thì X là phương án tối ưu. Ngược lại, chia
0
G =
1
11 1
12

r
GG G∪∪∪,

tức là chia thành các tập con (thường là không giao nhau).
Bước
1k ≥
. Tính các đánh giá
(
)
, 1, ,
k
ik
Gi r
ζ
= . Nếu tìm được phương án X ,
k
r
XG∈ sao cho
(
)
(
)
(
)
,
kk
ri
fX G G
ζζ
=≤ với 1, 2, ,
k
ir


= , thì
X
là phương án
tối ưu, quá trình kết thúc. Ngược lại, chọn
()
k
k
G
ϑ
để chia, theo tiêu chuẩn
()
(
)
(
)
1, ,
min
k
kk
i
k
ir
GG
ϑ
ζζ
=
= . Ta chia tập
()
k
k

G
ϑ
thành một số tập con

() () () ()()
,1 , 2 ,

kk k k
kk k ksk
GG G G
ϑϑ ϑ ϑ
= ∪∪∪
.
Tập cần chia tiếp theo là

12 1 1
, , , , , ,
kk k
kk k k k
r
GG G G G
ϑϑ
−+
,
() () ()
,1 ,2 ,
, , ,
k
kk k
kk ks

GG G
ϑϑ ϑ

Sau đó ta đánh số lại là
1
11 1
12
, , ,
k
kk k
r
GG G
+
+
++
và sang bước k+1.


Bùi Thế Tâm VI.3 Quy hoạch rời rạc


2. PHƯƠNG PHÁP LAND VÀ DOIG GIẢI BÀI TOÁN QUI HOẠCH
NGUYÊN
2.1.
Xét bài toán qui hoạch nguyên tuyến tính sau:

()
1
min
n

jj
j
Z
fX cx
=
==

(3)
với các điều kiện ràng buộc

ij
j=1
, 1, ,
n
jii
axRb i m=

(quan hệ thứ tự
{
}
,,
i
R

≤≥= ) (4)

0 , 1, , .
jj
x
djn≤≤ = (5)


j
x
nguyên
1
1, ,
j
n
=

1
nn

(6)
trong đó
j
d là cận trên của biến
j
x
(có thể
j
d
=
+∞ ). Giả thiết tập tất cả các điểm
x

thỏa mãn (4)-(5) là bị chặn.
Nếu
1
nn= , ta có bài toán qui hoạch nguyên hoàn toàn, còn nếu

1
nn< thì có bài
toán qui hoạch nguyên bộ phận. Ngoài ra, bài toán tìm max có thể qui về bài toán tìm
min bằng cách đổi dấu hàm mục tiêu. Có nhiều phương pháp giải bài toán qui hoạch
nguyên tuyến tính, trong đó có phương pháp nhánh cận. A.H Land và A.G Doig (1960)
là những người đầu tiên áp dụng phương pháp nhánh cận để giải bài toán qui hoạch
tuyến tính nguyên.
2.2. Nội dung phương pháp
1. Cho tập
0
GG≡ xác định bởi (4) - (6).
2. Cho các tập
()
k
k
G
ϑ
, 1, , ,
k
r
ϑ
=
và 1, 2, k
=
. xác định bởi (4),(6) và ràng buộc
bổ sung:
, 1, ,
jjj
kk
hxd jn

ϑϑ
 
≤≤ =
 
 
. (7)
3.
Tính cận. Đối với
0
G
ước lượng
()
(
)
0
0
GfX
ζ
=
với
0
X
là lời giải của bài
toán qui hoạch tuyến tính (3)-(5).
Đối với
k
G
ϑ
thì
()

k
k
GfX
ϑ
ζ
ϑ


=




, trong đó
k
X
ϑ



là lời giải của bài toán qui
hoạch tuyến tính (3),(4) và (7).
Nếu
(
)
k
G
ϑ
=∅ thì
(

)
k
G
ϑ
ζ
=
+∞ .
4.
Tính phương án. Nếu
0
X
thỏa mãn điều kiện nguyên (6), thì
0
X
là nghiệm
tối ưu của bài toán ban đầu, thuật toán dừng.

Bùi Thế Tâm VI.4 Quy hoạch rời rạc


Nếu
k
X
ϑ



thỏa mãn điều kiện nguyên (6) thì nó là phương án tối ưu của bài toán
(3), (4), (7), (6) và nó cũng là một phương án của bài toán ban đầu. Lấy
k

X
ϑ



để cải
tiến cận trên.
5.
Chia nhánh. Cần chia nhánh khi
()
k
X
k
ϑ



không thỏa mãn điều kiện nguyên
(6). Giả sử
()
1
,1
r
k
x
rn
k
ϑ

≤≤



là một thành phần không nguyên của phương án này,
khi đó tập hợp
()
k
k
G
ϑ
chia thành hai tập hợp
() () ()
,1 , 2
kk k
kk k
GG G
ϑϑ ϑ
= ∪
, trong đó

() ()
()
() ()
()
,1
,2
|,
|, 1
kk
rr
kk

kk
rr
kk
k
GXXGxx
k
k
GXXGxx
k
ϑϑ
ϑϑ
ϑ
ϑ




=∈ ≤













=∈ ≥ +









Chú ý rằng nếu tất cả
j
c trong (3) là nguyên với
1
jn


1
0
j
ckhijn=≥ thì
cận dưới
(
)
k
G
ϑ
ζ
có thể dùng đánh giá mạnh hơn
(

)
(
)
kk
GfX
ϑϑ
ζ


=

, ở đây kí hiệu
]
[
f
là số nguyên nhỏ nhất mà lớn hơn hay bằng
f
.
2.3. Giải ví dụ bằng số
Xét bài toán qui hoạch nguyên tuyến tính sau:
min -x
1
-x
2
(8)
2x
1
+ 11 x
2



38
x
1
+ x
2
≤ 7 (9)
4 x
1
- 5x
2


5
x
1
, x
2
≥ 0 (10)
x
1
, x
2
nguyên (11)
Bước 0. Giải bài toán (8)-(10), tìm được nghiệm
0
45
4,2
99
X


=


. Cận dưới
() ()
][
00
77GfX
ζ


==−=−

. Phương án
0
X không thỏa mãn điều kiện nguyên
(11). Chúng ta chia
0
G thành hai tập hợp
011
12
GGG= ∪ , trong đó

{
}
{}
10
11
10

21
|,4
|,5
GXXGx
GXXGx
=
∈≤
=
∈≥


Bùi Thế Tâm VI.5 Quy hoạch rời rạc


Bước 1. Giải hai bài toán quy hoạch tuyến tính: cực tiểu (8) trên hai tập hợp
1
1
G


1
2
G . Trong bài toán đầu tiên cực tiểu trên miền
1
1
G đạt tại điểm
8
4, 2
11




, do đó
(
)
1
1
8
66
11
G
ζ


=− =−


. Tập
1
2
G
là trống nên
(
)
1
2
G
ς
=
+∞

.
Chọn
1
1
G để chia nhánh ta được:

{
}
{}
112
1,1 1 2 1
112
1,2 1 2 2
|,2
|,3
GXXGx G
GXXGx G
=∈≤≡
=∈≥≡


12
23
GG
=
=∅
Bước 2. Giải các bài toán qui hoạch tuyến tính:
1) Tìm cực tiểu (8) trên
2
1

G được
()
2
1
2
33
3,2 5 5
1
44
XG
ζ

 

=
⇒=−=−



 


2) Tìm cực tiểu (8) trên
2
2
G
được
()
2
2

2
11
2,3 5 5
2
22
XG
ζ

 

=
⇒=−=−



 


3)
12
23
GG==∅,
(
)
2
3
G
ζ

=

+∞
Chọn
2
1
G
để chia nhánh :

{
}
{}
223
1,1 1 1 1
223
1,2 1 1 2
|,3
|,4
GXXGx G
GXXGx G
=∈≤≡
=∈≥≡

Đánh số lại
232 32323
1,1 1 1,2 2 2 3 3 4
,,,G GG GGGGG≡ ≡=≡

Bước 3. Giải các bài toán qui hoạch tuyến tính:
1) Tìm cực tiểu (8) trên
3
1

G
được
()
()
][
3
1
3
3, 2 5 5
1
XG
ζ


=
⇒=−=−



2)
3
2
G =∅
(
)
3
2
G
ζ


⇒=+∞

3) Tìm cực tiểu (8) trên
3
3
G
được

()
3
3
32
11
2,3 5 5
32
22
XX G
ζ
 
 

== ⇒ =−=−
 


 
 

4)
32

43
GG==∅

(
)
3
4
G
ζ

⇒=+∞


Bùi Thế Tâm VI.6 Quy hoạch rời rạc


Phương án
()
3
3, 2
1
XX

==


thỏa mãn điều kịên nguyên (11). Đồng thời
(
)
(

)
(
)
(
)
{
}
{}
(
)
3333
1234
min , , , min 5, , 5, 5GGGG fX
ζ ζζζζ
′ ′′′′
==−∞−∞≤=−
.
Vậy phương án tối ưu của bài toán ban đầu là
(
)
3, 2X =
.
Ta có cây phân nhánh sau:


















3. PHƯƠNG PHÁP NHÁNH CẬN GIẢI BÀI TOÁN NGƯỜI DU
LỊCH
3.1.
Phát biểu bài toán. Có n thành phố, đánh số từ 1 đến n . Xuất phát từ một
trong n thành phố này, chẳng hạn thành phố 1, một người du lịch muốn tới thăm
n -1
thành phố còn lại, mỗi thành phố đúng một lần, rồi trở về thành phố xuất phát. Cho biết
ij
c
là chi phí (hoặc là khoảng cách) đi từ thành phố i đến thành phố
j
. Giả thiết
0, ,
ij ii
cijc>∀≠ =∞, với mọi i ( có thể
ij ji
cc

). Hãy tìm hành trình với tổng chi
phí nhỏ nhất?

Ký hiệu ma trận
, 1, ,
ij
ij n
Cc
=
= ,
1
ij
x
=
hoặc 0 tùy thuộc người du lịch có đi từ
thành phố i tới thành j hay không. Khi đó bài toán người du lịch có thể viết dưới dạng:
1
1
6
G
ζ

=


0
7
G
ζ

=



123
23 4
GGG
ζ
≡≡

=+∞

12
1,1 1
5
GG
ζ


=−

123
1,2 2 3
5
GGG
ζ
≡≡

=−

23
1,1 1
5
GG

ζ


=−

23
1,2 2
GG
ζ
=
=∅

=+∞


Bùi Thế Tâm VI.7 Quy hoạch rời rạc



11
min
i
j
i
j
nn
ij
cx
==
∑∑

(12)
{}
ij
1
ij
1
ij
ij
1, 1, 2, , (13)
1, 1, 2, , (14)
0;1 , , 1, 2, , (15)
1, 2 i j n (16)
n
j
m
i
ij
xi n
xj n
xijn
uu nx n
=
=
==
==
∈=
−+ ≤− ≤≠≤




trong đó
i
u nhận giá trị nguyên hay thực.
3.2. Thuật toán nhánh cận
Tập tất cả các phương án của bài toán (tập
0
S )sẽ được chia nhỏ dần thành nhiều
tập con rời nhau, mỗi tập con bao gồm những phương án đi qua và không đi qua một số
cặp thành phố nhất định sẽ được ấn định dần trong quá trình giải bài toán. Mỗi tập con
này được gắn với một số thực không âm (cách tìm số này xem ở phần tiếp theo), biểu
thị cận dưới của chi phí đối với mọi phương án thuộc tập này. Tập con
k
S có cận dưới
nhỏ nhất sẽ có nhiều khả năng chứa phương án tối ưu, vì thế tập
k
S sẽ được chọn để
chia nhỏ tiếp (phân nhánh). Khi phân nhánh
12kk k
SS S
=
∪ sao cho một tập
2k
S bắt
buộc đi qua thêm một cặp thành phố
rs
x
nào đó (cách chọn xem ở phần tiếp theo), một
tập
1k
S không được đi qua cặp thành phố

rs
x
. Khi một tập con nào đó chỉ gồm một
phương án duy nhất thì ta sẽ tính được chi phí
C
của phương án này và nhờ đó có thể
cải tiến được phương án tốt nhất hiện biết, giá trị hàm mục tiêu của bài toán ứng với
phương án tốt nhất hiện biết gọi là
giá trị kỷ lục. Tập con nào có cận dưới lớn hơn hay
bằng giá trị kỷ lục sẽ bị loại (không cần xem xét tiếp nữa), vì chắc chắn tập này không
chứa phương án nào tốt hơn phương án tốt nhất hiện biết. Quá trình giải kết thúc khi
không còn tập con nào cần xem xét tiếp. Khi đó, phương án tốt nhất hiện biết sẽ là
phương án tối ưu của bài toán. Tính hữu hạn của thuật toán được suy ra từ tính hữu hạn
của tập
0
S .
Thủ tục tính cận
Bổ đề. Phương án tối ưu *
x
vẫn còn là tối ưu nếu ma trận chi phí C được thay
bởi ma trận
C

với

, ( , 1, 2, , )
ij ij i j
cc ij n
α
β


=−− =
(17)
trong đó
,
ij
α
β
là các số thực bất kỳ.
Chứng minh. Xét một phương án bất kỳ
x
của bài toán. Do *
x
là phương án
tối ưu nên

*
ij ij
11 11
nn nn
ij ij
ij ij
cx cx
== ==

∑∑ ∑∑

Từ các hệ thức (12) và (17) ta có:

Bùi Thế Tâm VI.8 Quy hoạch rời rạc



()
***
ij ij ij
11 11 11 1 1
ij ij
11 1 1 11
nn nn nn n n
ij i j ij ij i j
ij ij ij i j
nn n n nn
ij i j ij
ij i i ij
cx c x cx
cx cx
α
βαβ
αβ
== == == = =
== = = ==

=−− = −−

≤−−=
∑∑ ∑∑ ∑∑ ∑ ∑
∑∑ ∑ ∑ ∑∑

điều này chứng tỏ
*

x
vẫn còn là phương án tối ưu.
Các số
,
ij
α
β
cần được chọn sao cho
ij
0, ,cij

≥∀ và trên mỗi hàng, mỗi cột
của ma trận
C

có ít nhất một số 0. Chẳng hạn có thể chọn
i
α
là số nhỏ nhất trong hàng
i của
C và
j
β
là số nhỏ nhất trong cột j của ma trận thu được từ C bằng cách trừ các
phần tử trên hàng
i
cho
i
α
, trừ các phần tử trên cột

j
cho
j
β
.
Phép toán (17) được gọi là phép rút gọn ma trận hay thủ tục rút gọn và hằng số
11
nn
ij
ii
γ
αβ
==
=+
∑∑
được gọi là hằng số rút gọn và đó chính là một cận dưới cho giá trị
hàm mục tiêu của bài toán, vì mỗi phương án của người du lịch sẽ chứa đúng một phần
tử của mỗi hàng và đúng một phần tử của mỗi cột trong ma trận chi phí .
Tương tự, nếu tập con các phương án, ký hiệu là
p
S thu được từ tập ban đầu
0
S
bằng cách cố định một số biến
ij
x
ở giá trị 1 hay 0 (nghĩa là cho phép đi qua hay cấm
không được đi qua một số cặp thành phố nào đó) thì để tính cận dưới cho
p
S ta chỉ việc

tiến hành thủ tục rút gọn trên ma trận tương ứng với
p
S .
Thủ tục phân nhánh
Giả sử ta cần phân nhánh tập
0p
SS⊂ . Cách hay dùng là phân chia tập này thành
hai tập con rời nhau ,
p
p
SS
′′′
với

{
}
{}
|,0,
|,1
pprs
pprs
SxxSx
SxxSx

=∈ =
′′
=∈ =
.
trong đó,
rs

x
là biến chưa cố định ở giá trị 0 hay 1 trong tập
p
S .
Cặp
(
)
,rs dùng để phân nhánh được chọn sao cho tập
p
S


có nhiều khả năng
chứa phương án tối ưu, còn tập
p
S

thì không. Nói cách khác,
(
)
,rs được chọn sao cho
hiệu số các cận dưới của
p
S
′′

p
S

là lớn nhất có thể được.

Để giải quyết vấn đề này, ta chỉ cần xét tập các phương án ban đầu
0
S , vì mọi bài
toán con nhận được về sau có cùng cấu trúc như đối với bài toán ban đầu. Giả sử ma
trận chi phí
C đã được rút gọn , nghĩa là 0, ,
ij
cij≥∀ và trên mỗi hàng , mỗi cột của
C có ít nhất một số 0. Tập
0
S được chia thành hai tập rời nhau
1
S và
2
S với

Bùi Thế Tâm VI.9 Quy hoạch rời rạc



{
}
{}
10
20
|,0,
|,1
rs
rs
SxxSx

SxxSx
=∈ =
=∈ =

Trong tập
2
S cấu trúc bài toán không thay đổi, trừ ra hàng r và cột
s
bị loại, bởi
vì đã đi từ
r đến
s
thì không thể đi từ r đến bất cứ nơi nào khác, và cũng không được
phép đi từ bất cứ đâu vào
s
. Các hàng và cột còn lại chỉ chứa các phần tử không âm, vì
thế ứng với
2
S
một cận dưới đối với giá trị hàm mục tiêu tăng thêm là
(
)
2 rs
Sc
γ
=
.
Trong tập
1
S do cố định 0

rs
x
=
nên từ các điều kiện (14), (15) suy ra phải có một
(
)
1
rj
x
js=≠ và một
(
)
1
is
x
ir=≠. Vì thế
(
)
1
min min
rj is
js ir
Scc
γ
≠≠
=+
là một cận dưới
đối với giá trị mục tiêu tăng thêm. Ta sẽ chọn biến
rs
x

sao cho hiệu giữa các cận dưới
này là lớn nhất, nghĩa là đạt

(
)
(
)
{
}
12
(,)
max
rs
SS
γγ
− (18)
Nếu
0
rs
c >
thì
(
)
1
0S
γ
=
(do trên hàng
r
và cột

s
của C đều chứa số 0),
còn
()
2
0
rs
Sc
γ
=>, từ đó
(
)
(
)
12
0SS
γγ

< . Vì thế để có (18) ta chỉ cần xét các cặp
(
)
,rs
với 0.
rs
c = Trong trường hợp này
(
)
2
0S
γ

=

(
)
1
0S
γ

.
Điều này có nghĩa là thay cho (18) ta có thể chọn biến
rs
x
để phân nhánh theo
qui tắc

() ( )
0
,max ,min min
pq
p
jiq
jq ip
c
rs pq c c
θθ
≠≠
=


==+




.
Lập luận trên đây cũng đúng cả khi các tập phương án
i
S về sau được chia thành
các tập
1
,
rr
SS
+
, nhưng thay cho mức tăng của các cận dưới
(
)
2
S
γ

()
1
S
γ
ta xét mức
tăng của các cận dưới
()
r
S
γ


(
)
1r
S
γ
+
tương ứng.
Ngăn cấm tạo các chu trình con
Nếu tập được xét không phải là
0
S mà là

{
}
11 2 2
01 2
| , , , ,
kk
p
ij i j i j k
SxxSx x x
δ
δδ
=∈ = = =,
thì qui tắc chọn biến để phân nhánh về cơ bản vẫn như trước, tuy nhiên cần tiến hành
một số thay đổi . Trước hết, đó là việc thực hiện các lựa chọn bắt buộc. Chẳng hạn, nếu
0, 1, , 1, 1, ,
uj
x

jvvn==−+thì tất nhiên phải có 1
uv
x
=
. Cũng làm vậy đối với các
cột .
Một số loại lựa chọn bắt buộc khác: khi đã cố định 1
rs
x
=
thì phải có 0
sr
x
=

bằng cách đặt
sr
c =∞. Hơn nữa, nếu đường đi dài nhất trong
p
S chứa cạnh
(
)
,rs gồm
ít nhất 2 và nhiều nhất
2n −
cạnh

()
12 1 1
1

13
uuvv
i i i r rs si i i
xxxx x
vn
+−
== = = == =
≤≤−


Bùi Thế Tâm VI.10 Quy hoạch rời rạc


(không có cạnh nào có dạng
1
1
ki
x
=
hay
1
v
ij
x
=
), thì để ngăn cấm tạo chu trình con
dạng
(
)
12 1

, , , , , ,
u
ii i rsi ta đặt
1
si
c
=
∞ , còn để ngăn cấm tạo chu trình con dạng
(
)
12
, , , , , ,
uu v
rsi i i r
++
ta đặt
v
ir
c
=
∞ . Hơn nữa, ta cần có
1
0
v
ii
x = bằng cách đặt
1v
ii
c =∞.











Để tìm
1
i
ta có thể đi ngược từ r và để tìm
v
i
ta có thể đi xuôi từ
s
theo danh
sách các biến đã cố định ở giá trị 1 trong tập
p
S
.
Ở mỗi bước lặp, trước khi tính các cận dưới cho các tập mới, cần thực hiện những
lựa chọn bắt buộc nêu trên. Có như vậy mới thu được những cận dưới chính xác và
tránh được những phân nhánh vô ích.
3.3. Giải ví dụ bằng số
Giải bài toán người du lịch với ma trận chi phí ( không đối xứng ) như sau(n=6)

123456
1 3 93 13 33 9

2 4 77 42 21 16
34717 361628
4399080 56 7
528468833 25
6 3 88 18 46 92







Bước lặp 0. Tập đầu tiên
0
S là tập hợp tất cả các hành trình có thể. Vì ban đầu
chưa biết một phương án nào nên cận trên
β
=
+∞ .
Tính cận dưới cho
0
S . Từ ma trận (19) trừ mỗi phần tử của các hàng 1, 2, 3, 4, 5,
6 cho số nhỏ nhất trên hàng tương ứng là 3, 4, 16, 7, 25, 3 ta được một ma trận mới.
Tiếp theo, trừ mỗi phần tử của các cột 3, 4 của ma trận mới cho số nhỏ nhất trên cột
tương ứng là 15, 8 ta được ma trận rút gọn (20) (chưa kể các số mũ ở trên các phần tử
bằng 0).
y
y y
y
y

i1
i2
r s
i3
i4
(19)

Bùi Thế Tâm VI.11 Quy hoạch rời rạc



3
12
18
32
20
048
12 34 5 6
0752306
1
058301712
2
331 1 120 12
4
32 83 58 49 0
5
321 480 0
6
0 85 0 35 89








Tổng các hằng số rút gọn là 3 + 4 + 16 + 7 + 25 + 3 + 15 + 8 = 81. Vì vậy, cận
dưới cho tất cả các hành trình thuộc tập
0
S là 81. Điều này có nghĩa là không thể tìm
được hành trình có tổng chi phí nhỏ hơn 81.
Bước lặp 1. Vì các tập cần xét chỉ có
0
S
nên ta chọn
0
S
để phân nhánh.
Chọn cung để phân nhánh. Với mỗi số 0 trong ma trận (20) ta tính số
()
,min min
p
jiq
jq ip
p
qc c
θ
≠≠
=+
và ghi ở phía trên bên phải của số 0, chẳng hạn

(
)
(
)
2,1 12, 6,3 48,
θθ
==Ta thấy số 0 ở ô (6,3) có số mũ lớn nhất, nghĩa là
(
)
(
)
0
6,3 max ,
pq
c
p
q
θθ
=
=
. Vì thế ta chọn cặp (6,3) để phân nhánh. Khi đó, tập tất cả các
hành trình được phân thành hai tập con: tập
1
S
gồm các hành trình chứa cạnh (6,3), tập
2
S gồm các hành trình không chứa cạnh (6,3).
Tính cận cho tập
2
S không chứa cạnh (6,3). Vì cạnh (6,3) không có mặt trong

hành trình, nên ta có thể cấm việc đi theo cạnh này bằng cách đặt
63
c =∞ ở ma trận
(20), tiếp theo trừ cột thứ 3 cho 48. Kết quả ta nhận được cận dưới cho tập
2
S
là:
2
()S
ζ

= 81 + 48 = 129 và ma trận tương ứng với tập này là


123456
10272306
2 0 10 30 17 12
331 1 12 012
4328310 49 0
532100 0
6 0 85 35 89











Tính cận cho tập
1
S chứa cạnh (6,3). Ta phải loại hàng 6 cột 3 khỏi ma trận
(20), bởi vì đã đi theo cạnh (6,3) thì không thể đi từ 6 tới bất cứ nơi nào khác và cũng
không được phép đi từ đâu vào 3. Hơn nữa, đã đi theo cạnh (6,3) thì không được đi từ 3
đến 6 nữa, vì vậy ta cần cấm cạnh (3,6) bằng cách đặt
36
c
=
∞ . Từ ma trận (20) ta thu
được ma trận tương ứng với tập
1
S (chưa kể các số mũ trên các số 0)
(20)

Bùi Thế Tâm VI.12 Quy hoạch rời rạc



3
15
18
32
20
12456
230 6
1
0
30 17 12

2
0
31 1 12
3
0
32 83 49
4
0
321
5
00






Cận dưới
1
( ) 81.S
ζ
=
Bước lặp 2. Các tập cần xét tiếp là
1
S và
2
S với cận dưới tương ứng là 81 và 129.
Tập
1
S

có cận dưới nhỏ nhất sẽ được chọn để phân nhánh tiếp.
Chọn cung để phân nhánh. Với mỗi số 0 trong ma trận (21) ta tính số
(,)pq
θ
.
Ta thấy
(4,6) 32
θ
=
có giá trị lớn nhất nên cạnh (4, 6) sẽ được chọn để phân nhánh tiếp.
Tập
1
S sẽ được phân thành hai tập: tập
3
S gồm các hành trình đi qua cạnh (6,3) và cạnh
(4,6), tập
4
S gồm các hành trình đi qua cạnh (6,3) và không đi qua cạnh (4,6).
Tính cận dưới của tập
4
S
. Từ ma trận (21) sau khi thay 0 ở vị trí (4,6) bởi ∞ , rút
gọn đi 32 đối với hàng 4 ta được ma trận ứng với tập
4
S

12456
102306
2 0 30 17 12
331 1120

4 0 51 17
53210 0







Cận dưới của tập
4
S là
41
() ()32SS
ζ
ζ
=
+ = 81 + 32 = 113.
Tính cận dưới của tập
3
S . Từ ma trận (21) loại bỏ hàng ứng với đỉnh 4 và cột
ứng với đỉnh 6. Các cạnh (6,3) và (4,6) đã nằm trong hành trình, cho nên cạnh (3,4)
không thể đi qua nữa (nếu không sẽ tạo thành chu trình con). Để ngăn ngừa việc tạo ra
chu trình con , ta gán cho phần tử ở vị trí (3,4) giá trị
34
c
=
∞ và được ma trận (không
kể số mũ trên các số 0):


3
20
18
5
1245
10230
2 0 30 17
331 1 0
53210





Cận dưới của tập
3
S vẫn là 81.
(21)
(22)

Bùi Thế Tâm VI.13 Quy hoạch rời rạc


Bước lặp 3. Các tập cần xét là
2
S
,
3
S
,

4
S
với cận dưới tương ứng là 129, 81,
113. Tập
3
S
có cận dưới nhỏ nhất sẽ được chọn để chia nhánh.
Chọn cung để phân nhánh. Với mỗi số 0 trong ma trận (22) ta tính số (,)
p
q
θ
.
Cạnh (2,1) sẽ được chọn để phân nhánh. Tập
3
S được chia thành hai tập:
- Tập
5
S
gồm các hành trình đi qua cung (6,3), (4,6), (2,1)
- Tập
6
S
gồm các hành trình đi qua cung (6,3), (4,6) và không đi qua cung (2,1).
Tính cận dưới cho tập
6
S . Từ ma trân (22) thay 0 ở hàng 2 cột 1 bằng ∞ , trừ
hàng 2 cho 17, trừ cột 1 cho 3 ta được cận dưới của
6
S là 81 + 17 + 3 = 101 và ma trận
tương ứng (chưa có số mũ trên các phần tử 0):


3
13
1
28 2
1245
0230
1
2130
3
28 1 0
5
0210

∞∞




Tính cận dưới cho tập
5
S . Từ ma trận (22) xoá hàng 2 cột 1, cấm cung (1,2) bằng
cách cho
12
c =∞được ma trận 3 x 3. Từ ma trận này trừ hàng 1 cho 2, trừ cột 1 cho 1 ta
được cận dưới của
5
S
là 81 + 2 + 1 = 84 và ma trận tương ứng (chưa kể các số mũ trên
các số 0):


28
20 28
20
245
028
1
30 0
5
20 0




Bước lặp 4. Các tập cần xét là
2
S ,
4
S ,
5
S ,
6
S với cận dưới tương ứng là 129,
113, 84, 101. Tập
5
S có cận dưới nhỏ nhất sẽ được chọn để chia nhánh.
Chọn cung để phân nhánh. Với mỗi số 0 trong ma trận (24) ta tính số (,)
p
q
θ

.
Cạnh (1,4) sẽ được chọn để phân nhánh. Tập
5
S được chia thành hai tập:
- Tập
7
S gồm các hành trình đi qua cung (6,3), (4,6), (2,1), (1,4)
- Tập
8
S gồm các hành trình đi qua cung (6,3), (4,6), (2,1) và không đi qua cung
(1,4).
Tính cận dưới cho tập
7
S . Từ ma trận (24) xoá dòng ứng với đỉnh 1 và cột ứng
với đỉnh 4 được ma trận 2 x 2, trong ma trận này ta phải cấm cung (3,2) để không tạo
thành chu trình bằng cách đặt
32
c
=
∞ vì ta đã chọn các cung đi qua các đỉnh 2, 1, 4, 6,
(23)
(24)

Bùi Thế Tâm VI.14 Quy hoạch rời rạc


3. Từ ma trận này ta trừ cột 1 đi số 20 ta được cận dưới của tập
7
S
là 84 + 20 = 104 và

ma trận tương ứng là

25
30
50



Chọn hai cung cuối cùng (3,5) và (5,2) ta được một hành trình của người du lịch
là (1,4), (4,6), (6,3), (3,5), (5,2), (2,1) (phương án tốt nhất hiện biết) với giá trị hàm mục
tiêu là 13 + 7 + 18 + 16 + 46 + 4 = 104. Do đó cận trên được thay bởi
104
β
=
.
Tính cận dưới cho tập
8
S . Từ ma trận (24) thay 0 ở dòng thứ nhất và cột thứ 2
bằng + ∞ và trừ dòng thứ nhất cho 28 ta được cận dưới của tập
8
S là 84 + 28 = 112.
Loại các tập. Vì các cận dưới
78 42
( ) 104 , ( ) 112 , ( ) 113 , ( ) 129SSSS
ζ
βζ βζ βζ β
== = = =
nên các tập
7842
,,,SSSS

có thể loại khỏi việc xét về sau, ta chỉ cần xét tập
6
S
.
Bước lặp 5. Các tập cần xét chỉ còn
6
S
.
Chọn cung để phân nhánh. Với mỗi số 0 trong ma trận (23) ta tính số
(,)
p
q
θ
.
Cạnh (5,1) sẽ được chọn để phân nhánh. Tập
6
S được chia thành hai tập:
- Tập
9
S gồm các hành trình đi qua cung (6,3), (4,6), (5,1) và không đi qua cung
(2,1)
- Tập
10
S gồm các hành trình đi qua cung (6,3), (4,6) và không đi qua cung (2,1),
(5,1).
Tính cận dưới cho tập
10
S
. Từ ma trận (23) thay số 0 ở hàng ứng với đỉnh 5 và
cột ứng với đỉnh 1 bởi

∞ , trừ cột 1 đi số 28 ta được cận dưới của tập
10
S là 101 + 28 =
129. Cận dưới này lớn hơn cận trên 104 nên tập
10
S bị loại không cần xét về sau.
Tính cận dưới cho tập
9
S
. Từ ma trận (23) xoá hàng ứng với đỉnh 5 và cột ứng
với đỉnh 1, cấm cung (1,5) bằng cách đặt
15
c
=
∞ , cột thứ 2 trừ đi số 2 ta được cận dưới
9
( ) 101 2 103S
ζ
=+= và ma trận tương ứng (chưa kể số mũ trên các số phần tử 0)

111
11
1
245
00
1
2110
3
10






Bước lặp 6. Các tập cần xét chỉ còn
9
S .
Chọn cung để phân nhánh. Với mỗi số 0 trong ma trận (25) ta tính số (,)
p
q
θ
.
Cạnh (1,4) sẽ được chọn để phân nhánh. Tập
9
S được chia thành hai tập:
(25)

Bùi Thế Tâm VI.15 Quy hoạch rời rạc


- Tập
11
S
gồm các hành trình đi qua cung (6,3), (4,6), (5,1), (1,4) và không đi qua
cung (2,1)
- Tập
12
S
gồm các hành trình đi qua cung (6,3), (4,6), (5,1) và không đi qua cung
(2,1), (1,4).

Tính cận dưới cho tập
11
S . Từ ma trận (25) xoá hàng ứng với đỉnh 1 và cột ứng
với đỉnh 4, trừ cột thứ nhất cho 1 ta được ma trận cỡ 2 x 2 và
11
( ) 103 1 104S
ζ
=+=. Tập
11
S
có cận dưới bằng cận trên nên bị loại.
Tính cận dưới cho tập
12
S
. Từ ma trận (25) thay số 0 ở dòng thứ 1 cột thứ 2 bằng
∞ và trừ cột thứ 2 đi 11 ta được cận dưới của
12
S là 103 + 11 = 114. Tập
12
S có cận
dưới bằng cận trên nên bị loại.
Đến đây các tập cần xét là trống nên phương án tìm được ở Bước lặp 4 là hành
trình tối ưu. Quá trình phân nhánh cho trong hình dưới.


0
S , 81


1

S , (6,3), 81
2
,(6,3)S , 129


3
S
, (4,6), 81
4
,(4,6)S
, 113


5
S
, (2,1), 84
6
,(2,1)S , 101


7
S , (1,4), 104
8
,(1,4)S , 112
9
S , (5,1), 103
10
,(5,1)S , 129



11
S , (1,4), 104
12
,(1,4)S , 114


Bùi Thế Tâm VI.16 Quy hoạch rời rạc


BÀI TẬP
Bài 1. Tìm phương án tối ưu cho bài toán người du lịch với ma trận chi phí

123456
12743163026
27 1613025
32013 355 0
4211625 1818
512 462748 5
6235595







Đáp số: hành trình tối ưu là 1 – 4 – 3 – 5 – 6 – 2 – 1, trị tối ưu là 63

Bài 2. Tìm phương án tối ưu cho bài toán người du lịch với ma trận chi phí


123456
13115231017
2 16 24 7 12 12
3 34 3 25 54 25
4152033 5040
51610323 23
61820132821







Đáp số: hành trình tối ưu là 1 – 6 – 3 – 2 – 5 – 4 – 1, trị tối ưu là 63

×