Như trờn đó trỡnh bày để đỏnh giỏ, so sỏnh phương ỏn này với phương ỏn khỏc người ta phải lượng húa cỏc tiờu chuẩn, yờu cầu. Như vậy vấn đề quan trọng ở đõy là xõy dựng cỏc hàm lượng húa cú giỏ trị phụ thuộc vào phương ỏn được chọn. Như vậy một bài toỏn tối ưu thường mụ tả dạng:
Tỡm cực tiểu (min) hay cực đại (max ) giỏ trị của một hàm đỏnh giỏ F phụ thuộc vào cỏc phương ỏn cần xem xột
F(x)-> min(max) với điều kiện
xD
Mụ hỡnh trờn đựơc gọi là mụ hỡnh tổng quỏt của bài toỏn tối ưu, cỏc thuật toỏn và phương phỏp giải quyết đều được dựa trờn mụ hỡnh này.
Hàm F(x) được gọi là hàm mục tiờu của bài toỏn, tập D gọi là tập phương ỏn chấp nhận được của bài toỏn, mỗi phần tử x D đựơc gọi là một phương ỏn, trong tài liệu này ta chỉ xột cỏc bài toỏn với D là tập hữu hạn. Thụng thường tập D được mụ tả như là tập cỏc cấu hỡnh tổ hợp thoả món một số tớnh chất cho trước nào đú.
Phương ỏn x* D đem lại giỏ trị nhỏ nhất( lớn nhất) cho hàm mục tiờu được gọi là phương ỏn tối ưu, khi đú giỏ trị F = F(x*) được gọi là giỏ trị tối - ưu của bài toỏn.
5.1.2. Đƣa bài toỏn tối ƣu về dạng tổng quỏt
phỳ. Bước đầu tiờn tiến hành giải bài toỏn là cần phải đưa về dạng tổng quỏt. Ta xột một vài vớ dụ điển hỡnh sau:
Vớ dụ 5.1. Bài toỏn người du lịch
Một người du lịch muốn đi tham quan n thành phố T1, T2, …, Tn. Xuất phỏt từ một thành phố nào đú người du lịch muốn đi qua tất cả cỏc thành phố cũn lại, mỗi thành phố đỳng một lần, rồi quay trở lại thành phố xuất phỏt. Biết cij
là chi phớ đi từ thành phố Tiđến thành phố Tj( i, j = 1, 2,…, n), hóy tỡm hành trỡnh (một cỏch đi thoả món điều kiện đặt ra) với tổng chi phớ là nhỏ nhất.
Phõn tớch bài toỏn. Với nội dung như vậy của bài toỏn rất khú hỡnh dung mụ hỡnh của nú, ta sẽ phõn tớch và đưa về dạng tổng quỏt. Cú hai yếu tố cần phải xỏc định và chỉ ra: Tập D và hàm mục tiờu F(x).
Ta cú thể thiết lập tương ứng 1-1 giữa hành trỡnh T(1) -> T(2) ->…-> T(n)-> T(1)
với một hoỏn vị = ((1), (2) ,…, (n)) của n số tự nhiờn 1, 2, …, n. Đặt F() = c(1,(2) + ... + c(n-1),(n) + c(n),(1)
và ký hiệu D là tập tất cả cỏc hoỏn vị = ((1), (2),…, (n)) của n số tự nhiờn 1, 2, …, n. Khi đú bài toỏn được đưa về dạng tổng quỏt như sau:
min { F() : D }.
Vớ dụ 5.2. Bài toỏn cỏi tỳi
Một nhà thỏm hiểm cần đem theo một cỏi tỳi cú trọng lượng khụng quỏ
b. Cú n đồ vật cú thể đem theo. Đồ vật thứ j cú trọng lượng là aj và giỏ trị sử dụng làcj(j=1, 2,…, n). Hỏi rằng nhà thỏm hiểm cần đem theo cỏc đồ vật nào để cho tổng giỏ trị sử dụng của cỏc đồ vật đem theo là lớn nhất?
Phõn tớch bài toỏn. Một phương ỏn đem đồ vật của nhà thỏm hiểm cú thể biểu diễn bởi vectơ nhị phõn độ dài n: x = (x1, x2,…, xn), trong đú xj =1 cú nghĩa là đồ vật thứ j được đem theo và xj= 0 cú nghĩa trỏi lại. Với phuơng ỏn x, giỏ trị đồ vật mang theo (hàm mục tiờu của bài toỏn) là:
F(x) = n j j jx c 1
và tổng trọng lượng đồ vật đem theo là g(x) = n j j jx a 1
Từ đú tập chấp nhận được D được biểu diễn như sau: D = { x: g(x) b}
và bài toỏn cỏi tỳi cú thể đưa về dạng tổng quỏt như sau: min{ F(x): x D}
Vớ dụ 5.3. Bài toỏn cho thuờ mỏy
Một ụng chủ cú một cỏi mỏy để cho thuờ. Đầu thỏng ụng ta nhận được yờu cầuthuờ mỏy của m khỏch hàng. Mỗi khỏch hàng i sẽ cho biết tập Ni ngày trong thỏng cần sử dụng mỏy( i= 1, 2, …, m). ễng chủ chỉ cú quyền hoặc là từ chối yờu cầu của khỏch hàng i, hoặc là nếu nhận thỡ phải bố trớ mỏy phục vụ khỏch hàng i theo đỳng những ngày mà khỏch hàng này yờu cầu. Hỏi rằng ụng chủ phải tiếp nhận cỏc yờu cầu của khỏch như thế nào để cho tổng số ngày sử dụng mỏy là lớn nhất.
Phõn tớch bài toỏn. Ký hiệu I= {1, 2,…, m}là tập chỉ số khỏch hàng, S là tập hợp cỏc tập con của I. Khi đú tập hợp tất cả cỏc phương ỏn cho thuờ mỏy là
D = { J S: Nk Np = , k p, k, p J }. và với mỗi phương ỏn J D
F (J) =
J j
j
N
sẽ là tổng số ngày sử dụng mỏy theo phương ỏn đú. Bài toỏn đặt ra cú thể phỏt biểu dưới dạng bài toỏn tối ưu tổng quỏt sau:
Vớ dụ 5.4. Bài toỏn phõn cụng
Cú n cụng việc và n thợ. Biết ci j là chi phớ cần trả để thợ i hoàn thành cụng việc j (i, j = 1, 2, …, n). Cần phải thuờ thợ sao cho cỏc cụng việc đều hoàn thành và mỗi thợ chỉ thực hiện một cụng việc. Hóy tỡm cỏch thuờ sao cho tổng chi phớ thuờ thợ là nhỏ nhất.
Phõn tớch bài toỏn. Rừ ràng mỗi một phương ỏn bố trớ thợ thực hiện cỏc cụng việc Cụng việc Thợ thực hiện 1 (1) 2 (2) … … n (n)
tương ứng với một hoỏn vị = ((1), (2), …, (n)) của n số tự nhiờn 1, 2, …, n. Như vậy tập cỏc phương ỏn chấp nhận được D chớnh là tập cỏc hoỏn vị. Chi phớ theo phương ỏn bố trớ trờn là
F()= c(1), 1 + c(2), 2 +… + c(n),n
Bài toỏn được đưa về dạng tổng quỏt là: min { f() : D}
Vớ dụ 5.5. Bài toỏn lập lịch
Mỗi một chi tiết trong số n chi tiết D1, D2,…, Dn cần phải được lần lượt gia cụng trờn m mỏy M1, M2,…, Mm. Thời gian gia cụng chi tiết Di trờn mỏy Mj là tij. Hóy tỡm lịch (trỡnh tự gia cụng) cỏc chi tiết trờn cỏc mỏy sao cho việc hoàn thành gia cụng tất cả cỏc chi tiết là sớm nhất.
Phõn tớch bài toỏn. Ta sẽ xột bài toỏn trờn với thờm giả thiết là cỏc chi tiết phải được gia cụng một cỏch liờn tục, nghĩa là quỏ trỡnh gia cụng mỗi chi tiết
cho phộp cú khoảng thời gian dừng khi chuyển từ mỏy này sang mỏy khỏc. Tỡnh huống như vậy rất hay gặp trong quỏ trỡnh sản xuất cụng nghiệp. Chẳng hạn, trong cụng nghiệp luyện thộp, vật liệu cần phải được gia cụng một cỏch liờn tục vỡ sự giỏn đoạn sẽ dẫn đến sự giảm nhiệt độ của vật liệu và điều đú cản trở việc gia cụng tiếp theo. Tỡnh huống tương tự cũng cú thể xảy ra trong một số nghành của cụng nghiệp húa chất.
Rừ ràng một lịch gia cụng cỏc chi tiết trờn cỏc mỏy trong tỡnh huống như vậy sẽ tương ứng với một hoỏn vị = ((1),(2),…,(n)) của n số tự nhiờn 1,
2,…, n. Vậy tập cỏc phương ỏn chấp nhận được D là tập cỏc hoỏn vị từ n phần tử. Thời gian hoàn thành theo lịch trờn được tớnh bởi hàm số
F( ) = 1 1 ) 1 ( ), ( n j j j c + m k n k t 1 ) ( .
trong đú ci,j = Sj–Si, Sjlà thời điểm bắt đầu thực hiện việc gia cụng chi tiết j (i,
j = 1, 2,…, n). í nghĩa của hệ số cij cú thể giải thớch như sau: nú là tổng thời gian giỏn đoạn (được tớnh từ khi bắt đầu gia cụng chi tiết i) gõy bởi chi tiết j
khi nú được gia cụng sau chi tiết i trong lịch gia cụng. Vỡ vậy, cij cú thể tớnh theo cụng thức: Cij = m k 1 max{ k l ij t 1 - 1 1 k l ij t } i, j = 1, 2,…, n
Vỡ vậy, bài toỏn được đưa về dạng tổng quỏt sau: min { F(): D }
Trong thực tế lịch gia cụng thường cũn phải thỏa món thờm nhiều điều kiện khỏc. Vỡ những ứng dụng quan trọng của vấn đề này mà trong tối ưu đó hỡnh thành một lĩnh vực lý thuyết riờng về cỏc bài toỏn lập lịch gọi là lý thuyết lập lịch (hay quy hoạch lịch).
5.2. Cỏc thuật toỏn duyệt5.2.1. Duyệt toàn bộ 5.2.1. Duyệt toàn bộ
Một trong những phương phỏp hiển nhiờn để giải bài toỏn tối ưu tổ hợp đặt ra là: Trờn cơ sở cỏc thuật toỏn liệt kờ tổ hợp ta tiến hành duyệt cỏc ph- ương
ỏn của bài toỏn, đối với mỗi phương ỏn ta đều tớnh giỏ trị hàm mục tiờu tại nú, sau đú so sỏnh giỏ trị hàm mục tiờu tại tất cả cỏc phương ỏn được liệt kờ để tỡm ra phương ỏn tối u. Phương phỏp xõy dựng theo nguyờn tắc nhưvậy cú tờn gọi là phương phỏp duyệt toàn bộ. Duyệt toàn bộ là khú cú thể thực hiện được ngay cả trờn mỏy tớnh điện tử hiện đại nhất. Vớ dụ để liệt kờ hết
15! = 1.307.674.368.000
hoỏn vị trờn mỏy tớnh điện tử với tốc độ tớnh toỏn 1 tỷ phộp tớnh một giõy, nếu để liệt kờ một hoỏn vị cần phải làm 100 phộp tớnh, thỡ ta cần một khoảng thời gian là 130767 giõy > 36 tiếng đồng hồ! Vỡ vậy cần phải cú những biện phỏp nhằm hạn chế việc tỡm kiếm thỡ mới cú hy vọng giải được cỏc bài toỏn tối ưu tổ hợp thực tế. Tất nhiờn để cú thể đề ra những biện phỏp như vậy cần phải nghiờn cứu kỹ tớnh chất của bài toỏn tối ưu tổ hợp cụ thể. Nhờ những nghiờn cứu như vậy, trong một số trường hợp cụ thể ta cú thể xõy dựng những thuật toỏn hiệu quả để giải bài toỏn đặt ra. Tuy nhiờn phải nhấn mạnh rằng trong nhiều trường hợp (Chẳng hạn trong cỏc bài toỏn người du lịch, bài toỏn cỏi tỳi, bài toỏn cho thuờ mỏy nờu ở trờn) chỳng ta chưa thể xõy dựng được phương phỏp hữu hiệu nào khỏc ngoài phương phỏp duyệt toàn bộ. Khi đú, một vấn đề đặt ra là trong quỏ trỡnh liệt kờ lời giải ta cần tận dụng cỏc thụng tin đó tỡm được để loại bỏ những phương ỏn chắc chắn khụng phải là tối ưu.
5.2.2. Thuật toỏn nhỏnh cận
Giới thiệu thuật toỏn. Ta sẽ mụ tả tư tưởng của bài toỏn trờn mụ hỡnh bài toỏn tối ưu tổ hợp tổng quỏt sau
min { f(x): xD}
trong đú Dlà tập hữu hạn cỏc phần tử. Giả thiết D được mụ tả như sau:
D = { x = (x1, x2,…, xn) A1 A2…An: x thỏa món tớnh chất P}, với A1, A2,…An là cỏc tập hữu hạn, cũn P là tớnh chất cho trờn tớch Đềcac A1
A2…An.
Nhận thấy rằng cỏc bài toỏn đó trỡnh bày ở mục trước đều cú thể mụ tả dưới dạng bài toỏn trờn.
Với giả thiết về tập D nờu trờn, chỳng ta cú thể sử dụng thuật toỏn quay lui để liệt kờ cỏc phương ỏn của bài toỏn. Trong quỏ trỡnh liệt kờ theo thuật toỏn quay lui, ta sẽ xõy dựng dần cỏc thành phần của phương ỏn. Một bộ gồm k
thành phần (a1, a2,…, ak) xuất hiện trong quỏ trỡnh thực hiện thuật toỏn sẽ gọi là phương ỏn bộ phận cấp k.
Thuật toỏn nhỏnh cận cú thể ỏp dụng để giải bài toỏn đặt ra nếu như cú thể tỡm được một hàm g xỏc định trờn tập tất cả cỏc phương ỏn bộ phận của bài toỏn thỏa món bất đẳng thức sau:
g(a1, a2,…, ak) min{f(x): xD, xi =ai, i= 1,2,…, k } (*) với mọi lời giải bộ phận ( a1,a2,…, ak ), và với mọi k= 1,2,…
Bất đẳng thức (*) cú nghĩa là giỏ trị của hàng g tại phuơng ỏn bộ phận (a1, a2,…, ak ) là khụng vượt quỏ giỏ trị nhỏ nhất của hàm mục tiờu của bài toỏn trờn tập con cỏc phương ỏn
D(a1, a2,…, ak ) = { x D :xi= ai , i = 1, 2,…, k}
hay núi một cỏch khỏc, g(a1, a2, …, ak ) là cận dưới của giỏ trị hàm mục tiờu trờn tập D(a1, a2,…, ak). Vỡ lẽ đú, hàm g được gọi là hàm cận dưới , và giỏ trị g(a1, a2, …, ak) được gọi là cận dưới của tập D(a1, a2,…, ak). Do cú thể đồng nhất tập D(a1, a2,…,ak) với phương ỏn bộ phận (a1, a2,…, ak), nờn ta cũng gọi giỏ trị g(a1, a2, …, ak) là cận dưới của phương ỏn bộ phận (a1, a2, …, ak).
Giả sử đó cú hàm g. Ta xột cỏch sử dụng hàm này để giảm bớt khối lượng duyệt trong quỏ trỡnh duyệt tất cả cỏc phương ỏn theo thuật toỏn quay lui. Trong quỏ trỡnh liệt kờ cỏc phương ỏn cú thể đó thu được một số phương ỏn của bài toỏn. Gọi
x là phương ỏn với giỏ trị hàm mục tiờu nhỏ nhất trong số cỏc phương đó tỡm được, kớ hiệu f = f(x ). Ta sẽ gọi x là phương ỏn tốt nhất hiện cú, cũn f là kỷ lục. Giả sử ta đó cú f . Khi đú nếu g(a1, a2, …, ak) > f , thỡ từ bất đẳng thức (*) suy ra f < g(a1, a2, …, ak) min {f(x): xD, xi =ai, i= 1,2,…, k },
vỡ thế tập con cỏc phương ỏn của bà toỏn D(a1, a2,…,ak) chắc chắn khụng chứa phương ỏn tối u. Trong trường hợp này ta khụng cần tiếp tục phỏt triển phư- ơng ỏn bộ phận (a1, a2,…,ak), núi cỏch khỏc là ta cú thể loại bỏ cỏc phương ỏn trong tập D(a1, a2,…,ak)khỏi quỏ trỡnh tỡm kiếm.
Procedure Try(k);
(* Phỏt triển phương ỏn bộ phận (a1, a2,…,ak-1) theo thuật toỏn quay lui cú kiểm tra cận dưới trước khi tiếptục phỏt triển phương ỏn *)
begin for ak Ak do if <chấp nhận ak> then begin xk := ak; if k = n then <cập nhật kỷ lục> else if g((a1, a2,…,ak) f then Try(k+1) end; end;
Khi đú, thuật toỏn nhỏnh cận được thực hiện nhờ thủ tục sau:
Procedure Nhỏnh_cận;
begin
f :=;
(* Nếu biết một phương ỏn
xnào đú ta cú thể đặt
f = f(x) *). Try(1);
if f < then < f là giỏ trị tối ưu, x là phương ỏn tối u > else < bài toỏn khụng cú phương ỏn>;
end;
Chỳ ý rằng nếu trong thủ tục Try ta thay cõu lệnh
if k=n then < cập nhật kỷ lục> else if g(a1, a2,…, ak) f then Try (k+1) bởi if k= n then < cập nhật kỷ lục> else Try(k+1)
thỡ thủ tục Try sẽ liệt kờ toàn bộ cỏc phương ỏn của bài toỏn, và ta thu đựơc thuật toỏn duyệt toàn bộ.Việc xõy dựng hàm g phụ thuộc vào từng bài toỏn tối ưu tổ hợp cụ thể. Thụng thường ta cố gắng xõy dựng nú sao cho:
Việc tớnh giỏ trị của g phải đơn giản hơn việc giải bài toỏn tối ưu tổ hợp ở vế phải cuả (*).
Giỏ trị của g( a1, a2,…, ak)phải sỏt với giỏ trị của vế phải của (*). Tuy nhiờn hai yờu cầu này trong thực tế thường đối lập nhau.
Bài toỏn ngƣời du lịch
Mụ hỡnh của bài toỏn đó trỡnh bày trong mục trước. Cố định thành phố xuất phỏt là T1,bài toỏn người du lịch dẫn về bài toỏn:
Tỡm cực tiểu của hàm
f( x2, x3,…,xn) = c[1, x2] + c[ x2, x3] +…+ c[ xn-1 + xn] + c[ xn, 1] min Với điều kiện ( x2, x3,…,xn) là hoỏn vị của cỏc số 2, 3,…, n.
Ký hiệu Cmin = min{c[ i, j ], i, j = 1,2,…,n, i j }
là chi phớ đi lại nhỏ nhất giữa cỏc thành phố.
Giả sử ta đang cú phương ỏn bộ phận (u1, u2,…,un). phương ỏn này tương ứng với hành trỡnh bộ phận qua k thành phố:
T1T(u2) ...T(uk-1)) T(uk). Vỡ vậy, chi phớ phải trả theo hành trỡnh bộ phận này sẽ là
= c[1,u2] + c[u2,u3] + …+ c[uk-1,uk].
Để phỏt triển hành trỡnh bộ phận này thành hành trỡnh đầy đủ, ta cũn phải đi qua n-k thành phố cũn lại rồi quay trở về thành phố T1, tức là cũn phải đi qua n-k+1 đoạn đường nữa.
Do chi phớ phải trả cho việc đi qua mỗi một trong số n-k+1 đoạn đường cũn lại đều khụng ớt hơn cmin nờn cận dưới cho phương ỏn bộ phận (u1,u2,…,uk) cú thể tớnh theo cụng thức
Vớ dụ 5.6. Giải bài toỏn người du lịch theo thuật toỏn trỡnh bày trờn với ma trận chi phớ: 0 3 14 18 15 3 0 4 22 20 C = 17 9 0 16 4 6 5 7 0 12 9 15 11 5 0
Ta cú cmin = 3. Quỏ trỡnh thực hiện thật toỏn được mụ tả bởi cõy tỡm kiếm lời giải cho trong hỡnh dưới.
f = + ∞ (2) =3 g=15 (3) = 14 g= 16 (4) = 18 g = 30 (5) = 15 g = 27 (2,3) = 7 g = 16 (2,4) = 25 g = 34 (2,5) = 23 g =32 (2,3,4) = 23 g = 29 (2,3,5) = 11 g = 17 (2,3,4,5) = 35 g = 38 (2,3,5,4) = 16 g = 19 Các nhánh này bị loại vì có cận d- ới g > f = 22 Hành trình (1,2,3,4,5,1) Chi phí là 44. Đặt f =44 Hành trình (1,2,3,5,4,1) Chi phí là 22. Đặt f =22
Thông tin về một ph- ơng án bộ phận trên cây đ- ợc ghi trong các ô ở trên