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

PHƯƠNG PHÁP NHÁNH cận GIẢI các bài TOÁN tối ưu tổ hợp

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 (411.67 KB, 13 trang )

PHƯƠNG PHÁP NHÁNH C

1. LÝ THUYẾ
T CHUNG
Xét bài toán tối ưu tổ hợp t

trong đó
D = {x= (x
A
1
, A
2
, , A
n
là các tập hữ
u h
Ta gọi bộ n thành phần
x= (x
đầy đủ của bài toán, bộ
k<n thành ph
phận hay lời giải bộ phậ
n. Ta s
bộ phận, tức là sẽ phát triể
n d
Ký hiệu ܦሺݔ

,…,ݔ

ሻ là tậ
p h
phương án bộ phận ሺݔ



,…,
ݔ
triển tất cả các phương án b

tức là những phương án ሺݔ

,
ưu, và sẽ không phát triể
n các ph
chắc chắn không chứa lờ
i gi

ݔ

,…,ݔ


là không tiề
m nă
Ta gọi cận dưới củ
a phương án b
điều kiện
݃ሺݔ

,
trong đó ݃ là hàm xác đị
nh trên m
Giả sử ݔ̅ là phương án tố
t nh

݂ሺݔ̅ሻ . Ta gọi ܨ là giá trị kỷ

suy ra
min
NG PHÁP NHÁNH C
ẬN GIẢI CÁC BÀI TOÁN TỐ
I Ư
T CHUNG


ng quát sau:
Min{f(x): x D},

D = {x= (x
1
, x
2
, , x
n
) A
1
A
2
A
3
A
n
},
u h
ạn.

x= (x
1
, x
2
, , x
n
) thuộc D là phương án đầy đ

k<n thành ph
ần (x
1
, x
2
, , x
k
) với ݔ

∈ܣ


là ph
n. Ta s
ẽ xây dựng các phương án đầy đủ từ
các ph
n d
ần các phương án bộ phận.
p h
ợp tất cả các phương án đầy đủ có thể
phát tri
ݔ


ሻ. Để giảm thờ
i gian tính toán chúng ta s

phận mà chỉ phát triển nhữ
ng phương án ti
,
…,ݔ

ሻ mà ܦ

ݔ

,…,ݔ


có khả
năng ch
n các phương án b
ộ phận ሺݔ

,…,ݔ

ሻ mà ܦ

ݔ
i gi
ải tối ưu. Vấn đề đặt ra là phải có dấu hi

m năng.


ương án b
ộ phận ሺݔ

,…,ݔ

ሻ là số ݃ሺݔ

,…,ݔ

,
…,ݔ

ሻ൑min

݂

ݔ

,ݔ∈ܦሺݔ

,…,ݔ



,
nh trên m
ọi phương án bộ phận.
t nh
ất trong số các phương án đầy đủ đ

ã duy

lục hiện thời. Thế thì, nếu ݃

ݔ

,…,ݔ



min

݂

ݔ

,ݔ∈ܦ

ݔ

,…,ݔ

ሻሽ
൐ܨ.
I ƯU T
Ổ HỢP


hay lời giải
là phương án b


các phương án
phát tri
ển từ
i gian tính toán chúng ta s
ẽ không phát
ng án ti
ềm năng,
ng ch
ứa lời giải tối

ݔ

,…,ݔ




u đẻ phát hiện

ሻ thỏa mãn

,
(1)
ã duy
ệt và ܨൌ


ܨ từ (1) ta
Vì thế, tập ܦ


ݔ

,…,ݔ



không th
ሺݔ

,…,ݔ

ሻ không cầ
n phát tri
Như vậy, để thực hiện tố
t ý t
• Xác định được hàm c

bài toán tối ưu ở vế
ph
• Xác định và cập nhậ
t đư
Chú ý. Khi bài toán tố
i ưu đ
phải xét hàm cận trên thỏ
a mãn
݃ሺݔ

,
Gọi ܨ là giá trị kỷ lục hiệ

n th
các phương án đã duyệ
t. Khi đ
max
Vì thế, tập ܦ

ݔ

,…,ݔ



không th
ሺݔ

,…,ݔ

ሻ không cầ
n phát tri
Nhận xét 1. Nếu minh họ
a bài toán xây d
ưu như xây dựng cây tìm ki
ế
định cận dưới đối vớ
i bài toán c
hóa và chỉ cần phát triể
n các nhánh ti









không th
ể chứa lời giải tố
i ưu, và phương án b
n phát tri
ển tiếp.
t ý t
ưởng trên cần:

n dưới ݃ሺݔ

,…,ݔ

ሻ một cách dễ
dàng hơ
ph
ải của (1).
t đư
ợc giá trị kỷ lục.
ưu đ
ặt ra là Max{f(x): x D}
thì thay cho hàm c
a mãn

,
…,ݔ


ሻ൒max

݂

ݔ

,ݔ∈ܦሺݔ

,…,ݔ



n th
ời tức là giá trị lớn nhất của hàm mụ
c tiêu trong s
t. Khi đó n
ếu ݃

ݔ

,…,ݔ


൏ܨ từ (2) suy ra
max

݂

ݔ


,ݔ∈ܦ

ݔ

,…,ݔ

ሻሽ
൏ܨ.
không th
ể chứa lời giải tố
i ưu, và phương án b
n phát tri
ển tiếp.
a bài toán xây d
ựng lời giải (hay cấ
u hình/ph
ế
m thì đối với mỗi nút (hay mỗ
i nhánh) c
i bài toán c
ực tiểu hóa hoặc cận trên đối vớ
i bài toán c
n các nhánh ti
ềm năng chứa lời giải tối ưu.
ng án b
ộ phận
dàng hơn vi
ệc giải
thì thay cho hàm c

ận dưới ta

. (2)
c tiêu trong s

ng án b
ộ phận
u hình/ph
ương án) tối
i nhánh) c
ủa cây cần xác
i bài toán c
ực đại


Không gian tìm kiếm của phương pháp nhánh cận có thể được minh họa như sau

Nhận xét 2. Mỗi lời giải bộ phận có thể xem như một bài toán con về chi phí để
hoàn thiện lời giải này. Trong ngữ cảnh bài toán cực tiểu hóa để loại bỏ bài toán
con ta cần phải được tin rằng chi phí của nó lớn hơn chi phí của một lời giải đầy đủ
đã duyệt. Thuật toán nhánh cận trong trường hợp này có thể được mô tả như sau:
Start with some problem P
0

Let Sൌ

P


, the set of active subproblems

bestsofar = ∞ (giá trị kỷ lục)
Repeat while S is nonempty:
choose a subproblem (partial solution) ܲ∈ܵ and remove it from S;
expand it into smaller subproblems ܲ



,…,ܲ

.

For each ܲ

:
If ܲ

is a complete solution: update bestsofar
else if lowerbound(ܲ

) < bestsofar: add P
i
to S
return bestsofar
tức là
Bắt đầu bởi bài toán P
0

Đặt Sൌ

P



, tập các bài toán được kích hoạt
ܨൌ∞ (giá trị kỷ lục)
Lặp cho đến khi ܵൌ∅:
chọn bài toán con ܲ∈ܵ và loại nó ra khỏi ܵ;
phân hoạch nó thành các bài toán con ܲ



,…,ܲ

.
đối với mỗi bài toán ܲ

:
nếu ܲ

là lời giải đầy đủ: cập nhật giá trị kỷ lục ܨ
nếu cận dưới của ܲ

൏ܨ: bổ sung P
i
vào S
trả về ܨ

2. ỨNG DỤNG 1: TÌM CHU TRÌNH HAMILTON NGẮN NHẤT
Thí dụ áp dụng thuật toán này đối với bài toán người du lịch (TSP) trên đồ thị
G=(V,E). Lời giải bộ phận là đường đi đơn
a b


qua một số đỉnh thuộc tập
S V

, trong đó
S
chứa cả
a

b
. Ta ký hiệu lời giải bộ phận này là bộ ba
[ , , ]
a S b
. Đỉnh
a
ta cố định và coi như là đỉnh xuất phát. Bài toán con tương ứng là
tìm phần bù tốt nhất, tức là đường đi
b a

qua các đỉnh
V S

. Trên mỗi bước
tìm một đỉnh
x
và đường đi cập nhật là
[ , , ]
a S x x
+
.

Cận dưới của lời giải bộ phận
[ , , ]
a S b
có thể lấy như sau:
([ , , ]) |[ , , ]| ( , ) ( , ) min ( )
g a S b a S b d a V S d b V S span V S
= + − + − + −
,
trong đó:

|[ , , ]|
a S b
là độ dài đường đi từ a đến b qua S

( , )
d a V S

,
( , )
d b V S

, tương ứng là độ dài từ đỉnh a và b đến tập đỉnh V-
S

min ( )
span V S

là độ dài cây khung bé nhất của V-S.
Quá trình thực hiện thuật toán được biểu diễn bằng một cây, trong đó mỗi nút biểu
diễn một lời giải bộ phận (đường đi từ đỉnh gốc tới đỉnh đó).




Đồ thị và đường đi tối ưu


Tìm kiếm theo nhánh cận thực hiện từ trái sang phải.
Các số trong hộp là cận dưới của chi phí

3. ỨNG DỤNG 2: BÀI TOÁN NGƯỜI BÁN HÀNG RONG (TSP)
Bài toán: Cho ݊ thành phố ܶ



,…,ܶ

. Xuất phát từ một thành phố nào đó người
bán hàng muốn đi qua tất cả các thành phố còn lại, mỗi thành phố một lần, rồi lại
quay về thành phố xuất phát. Biết ܥሺ݅,݆ሻ chi phí đi từ thành phố ܶ

đến thành phố
ܶ

. Tìm cách đi với tổng chi phí bé nhất.
Giải: Cố định thành phố xuất phát là ܶ

và ký hiệu

ݔ


,…,ݔ


là một hoán vị của
tập

2,…,݊

.Khi đó một hành trình đầy đủ có thể biểu diễn bởi chuỗi
ܶ

→ܶ


→⋯→ܶ


→ܶ


Và tổng chi phí của hành trình này là
݂

ݔ

,…,ݔ


ൌܥ


1,ݔ




ݔ




+⋯+ܥ

ݔ
௡ିଵ





ݔ

,1

.
Bài toán TSP được phát biểu dưới dạng bài toán tối ưu
݉݅݊

݂

ݔ


,…,ݔ


|ሺݔ

,…,ݔ

ሻ∈ܲ

,
trong đó ܲ là tập tất cả các hoán vị của

2,…,݊

.
Ký hiệu
ܥ
௠௜௡
ൌ݉݅݊

ܥ

݅,݆

|݅,݆ൌ1,…,݊

.
Xét phương án bộ phận ሺ1,ݑ


,…,ݑ

ሻ, trong đó (ݑ

,…,ݑ

) là một tổ hơp ݇ phần tử
của

2,…,݊

. Phương án này tương ứng với hành trình
ܶ

→ܶ


→⋯→ܶ



và chi phí của nó là
ܵൌܥ

1,ݑ




ݑ





+⋯+ܥ

ݑ
௞ିଵ



.
Để phát triển hành trình bộ phận này thành hành trình đầy đủ người bán hàng còn
phải đi qua ݊−݇ thành phố còn lại, rồi quay về thành phố ܶ

, tức là còn phải đi
qua ݊−݇+1 đoạn đường nữa. Do đó, chi phí cho đoạn đường còn lại này lớn
hơn hoặc bằng ሺ݊−݇+1ሻܥ
௠௜௡
. Vì thế, cận dưới của phương án bộ phận
ሺ1,ݑ

,…,ݑ

ሻ là
݃

ݑ

,…,ݑ



ൌܵ+ሺ݊−݇+1ሻܥ
௠௜௡
.

Thí dụ: Giải bài toán người bán hàng rong với ma trận chi phí sau



C=
ۏ
ێ
ێ
ێ
ۍ
0
3
17
6
9

3
0
9
3
15

14
4

0
7
11

18
22
16
0
5
15
20
4
12
0

ے
ۑ
ۑ
ۑ
ې
.
Ta có ܥ
௠௜௡
ൌ3. Quá trình xây dựng lời giải tối ưu được mô tả bởi cây tìm kiếm
sau






4. ỨNG DỤNG 3: BÀI TOÁN CÁI TÚI TỔNG QUÁT
Bài toán: Có ݊ loại đồ vật và số lượng mỗi loại đồ vật là không hạn chế. Ký hiệu
trọng lượng của đồ vật ݆ là ܽ

và giá trị sử dụng là ܿ
௝
. Cần chất các đồ vật vào túi
với trọng lượng là ܾ sao cho tổng giá trị sử dụng của các đồ vật trong túi là lớn
nhất.
Mô hình toán học:

݂

ݔ



ܿ

ݔ

→݉ܽݔ

௝ୀଵ

ܽ

ݔ

൑ܾ,


௝ୀଵ
ݔ

∈ܼ

, ݆ൌ1,…,݊,

(3)
trong đó ݔ

là số đồ vật loại ݆, ܼ

là tập các số nguyên không âm.
Ký hiệu ܦ là tập các phương án của bài toán (3), tức là
ܦൌ

ݔൌ

ݔ
ଵ,
…,ݔ
௡,

:

ܽ

ݔ


൑ܾ, ݔ

∈ܼ

, ݆ൌ1,…,݊

௝ୀଵ


Không giảm tính tổng quát ta giả sử rằng các đồ vật được đánh số sao cho




൒




൒⋯൒




(4)
Để xây dựng hàm cận dưới ta xét bài toán cái túi với các biến liên tục:
Tìm
݃∗ൌ݉ܽݔ

݂


ݔ

,

ܽ

ݔ

൑ܾ,

௝ୀଵ
ݔ

൒0,݆ൌ1,…,݊

(5)
Mệnh đề 1: Phương án tối ưu của bài toán (5) là véc tơ ݔ̅ൌሺݔ̅

,…,ݔ̅

ሻ với
ݔ̅


ܾ
ܽ

, ݔ̅


ൌ⋯ൌݔ̅

ൌ0
và giá trị tối ưu là
݃∗ൌ
ܿ

ܾ

ܽ

.
Chứng minh. Từ (4) suy ra
ܿ

ݔ

ൌ
ܿ

ܽ

∗ܽ

ݔ

൑
ܿ

ܽ


∗ܽ

ݔ

, ݅ൌ1,…,݊.
Do đó,
݂

ݔ

ൌܿ

ݔ
ଵା
ܿ

ݔ

+⋯+ܿ

ݔ

൑







ܽ

ݔ
ଵା⋯ା
ܽ

ݔ







ܾൌ݂ሺݔ̅ሻ.
Điều đó có nghĩa ݔ̅ là phương án tối ưu.
Xây dựng hàm cận trên:
Giả sử đã có phương án bộ phận cấp k là ሺݑ

,…,ݑ

ሻ. Khi đó giá trị của các đồ vật
trong túi là
ߪ

ൌܿ

ݑ

+⋯+ܿ


ݑ


và trọng lượng còn lại của túi là
ܾ

ൌܾ−ሺܽ

ݑ

+⋯+ܽ

ݑ

ሻ.
Ta có
݉ܽݔ

݂

ݔ

:ݔ∈ܦ,ݔ

ൌݑ

,݆ൌ1,…,݇



ൌ݉ܽݔ

ߪ

+

ܿ

ݔ

:

௝ୀ௞ାଵ


ܽ

ݔ

൑ܾ

;ݔ

∈ܼ

, ݆ൌ݇+1,…,݊

௝ୀ௞ାଵ



൑ߪ

+݉ܽݔ


ܿ

ݔ

:

௝ୀ௞ାଵ


ܽ

ݔ

൑ܾ

;ݔ

∈ܼ

, ݆ൌ݇+1,…,݊

௝ୀ௞ାଵ


ൌߪ


+

ೖశభ



ೖశభ
(theo Mệnh đề 1).
Do đó có thể tính cận trên cho phương án bộ phận

ݑ

,…,ݑ


như sau:
݃

ݑ

,…,ݑ


ൌߪ

+

ೖశభ




ೖశభ
.
Chú ý: Khi tiếp tục xây dựng thành phần thứ k+1 của lời giải các giá trị đề cử cho
ݔ
௞ାଵ
sẽ là
0,1,…,ቂ



ೖశభ
ቃ.
Thí dụ: Xét bài toán cái túi với các dữ kiện sau: b=8

Đồ vật Trọng lượng a Giá trị c
1 5 10
2 3 5
3 2 3
4 4 6








Quá trình xây dựng lời giải của bài toán có thể biểu diễn bởi cây sau:


Trong hình vẽ trên ߪ là giá trị của các đồ vật đã có trong túi, ݓ là khả năng chứa
còn lại của túi và ݃ là cận trên của nút.

5. ỨNG DỤNG 4: BÀI TOÁN CÁI TÚI 0-1
Bài toán: Có ݊ đồ vật với trọng lượng là ܽ

và giá trị sử dụng là ܿ
௝
ሺ݆ൌ1,…,݊ሻ.
Cần chất các đồ vật vào túi với trọng lượng là ܾ sao cho tổng giá trị sử dụng của
các đồ vật trong túi là lớn nhất.
Mô hình toán học:

݂

ݔ



ܿ

ݔ

→݉ܽݔ

௝ୀଵ

ܽ


ݔ

൑ܾ,

௝ୀଵ
ݔ

∈ሼ0,1ሽ, ݆ൌ1,…,݊,

(6)
trong đó ݔ

là biến Boolean biểu thị sự lựa chọn đồ vật ݆,
ݔ



1݊ếݑܿℎọ݊đồݒậݐ݆
0݊ếݑ݇ℎáܿ




Xét bài toán nới lỏng của bài toán trên, cụ thể là xét bài toán với các biến liên tục:
݃∗ൌ݉ܽݔ

݂

ݔ


,

ܽ

ݔ

൑ܾ,

௝ୀଵ
0൑ݔ

൑1, ݆ൌ1,…,݊

(7)
Mệnh đề 2. Giả sử




൒




൒⋯൒




.

Khi đó lời giải tối ưu của bài toán nới lỏng là

ݔ̅

ൌ⋯ൌݔ̅

ൌ1
ݔ̅
௥ାଵ

ܾ−ሺܽ

+⋯+ܽ


ܽ
௥ାଵ

ݔ̅
௥ାଶ
ൌ⋯ൌݔ̅

ൌ0

với
ܽ

+⋯+ܽ

൑ܾ, ܽ


+⋯+ܽ


௥ାଵ
൐ܾ

0൑
௕ିሺ௔

ା⋯ା௔



ೝశభ
൏1.
Giá trị tối ưu là
݂
̅
ൌܿ

+⋯+ܿ

+
ܿ
௥ାଵ

ܽ
௥ାଵ
ܾ


, ܾ

ൌܾ−

ܽ

+⋯+ܽ


.
Xây dựng hàm cận trên:
Giả sử đã có phương án bộ phận cấp k là ሺݑ

,…,ݑ

ሻ. Khi đó giá trị của các đồ vật
trong túi là
ߪ

ൌܿ

ݑ

+⋯+ܿ

ݑ


và trọng lượng còn lại của túi là

ܾ

ൌܾ−ሺܽ

ݑ

+⋯+ܽ

ݑ

ሻ.
Ta có
݉ܽݔ

݂

ݔ

:ݔ∈ܦ,ݔ

ൌݑ

,݆ൌ1,…,݇


ൌ݉ܽݔ

ߪ

+


ܿ

ݔ

:

௝ୀ௞ାଵ


ܽ

ݔ

൑ܾ

;ݔ



0,1

, ݆ൌ݇+1,…,݊

௝ୀ௞ାଵ


൑ߪ

+݉ܽݔ



ܿ

ݔ

:

௝ୀ௞ାଵ


ܽ

ݔ

൑ܾ

;0൑ݔ

൑1, ݆ൌ݇+1,…,݊

௝ୀ௞ାଵ


ൌߪ

+ܿ
௞ାଵ
+⋯+ܿ


+

ೝశభ



ೝశభ
,
nếu ܽ
௞ାଵ
+⋯+ܽ

൑ܾ

, ܽ
௞ାଵ
+⋯+ܽ


௥ାଵ
൐ܾ

, ܾ

ൌܾ

−ሺܽ
௞ାଵ
+⋯+
ܽ



Do đó có thể tính cận trên cho phương án bộ phận

ݑ

,…,ݑ


như sau:
݃

ݑ

,…,ݑ


ൌߪ

+ܿ
௞ାଵ
+⋯+ܿ

+

ೝశభ



ೝశభ

.
Thí dụ: Xét bài toán cái túi với các dữ kiện sau: b=6

Đồ vật Trọng lượng a Giá trị c c/a
1 1 10 10
2 2 18 9
3 4 32 8
4 2 14 7


Quá trình xây dựng lời giải của bài toán có thể biểu diễn bởi cây sau.
Trong các nút lời giải bộ phận để trong dấu ngoặc đơn, thí dụ (1,0), σ là giá trị của
các đồ vật đã có trong túi, ݓ là khả năng còn lại của túi, và ݃ là cận trên của lời
giải bộ phận.




×