Thuật toán gần đúng cho bài toán tối ưu tổ hợp ths nguyễn mạnh hùng

7 2 0
Thuật toán gần đúng cho bài toán tối ưu tổ hợp   ths  nguyễn mạnh hùng

Đang tải... (xem toàn văn)

Thông tin tài liệu

1 ThuËt to¸n  gÇn ®óng cho bµi to¸n tèi ­u tæ hîp Ths NguyÔn M¹nh Hïng Khoa CNTT §H Thuû Lîi I Giíi thiÖu Bµi to¸n t×m cùc ®¹i hoÆc cùc tiÓu cña th­¬ng hai hµm thùc trªn tËp D cña kh«ng gian Rn ®­îc[.]

Thuật toán -gần cho toán tối ưu tổ hợp Ths Nguyễn Mạnh Hùng - Khoa CNTT - ĐH Thuỷ Lợi I Giới thiệu Bài toán tìm cực đại cực tiểu thương hai hàm thực tập D không gian Rn gọi toán quy hoạch phân tuyến Bài toán quy hoạch phân tuyến cã nhiỊu øng dơng thùc tÕ nh­ng rÊt khã tìm nghiệm xác, người ta quan tâm đến việc xây dựng thuật giải gần Một thuật toán gọi -gần cho lời giải -tối ưu tức lời giải có sai số tương đối so với giá trị tối ưu bị chặn số dương Xét toán quy hoạch rời rạc phân tuyến sau: P: Max { R(x)= a0  ax , xD } b0  bx ®ã a0, b0 thuéc R, a = (a1, ,an)Rn, b=(b1, ,bn)Rn, x=(x1,x2, ,xn) Rn, D lµ tËp hữu hạn khác rỗng Rn Ta có giả thiết sau đây: 1) bx xD 2) b0 >0 vµ a0  3) R(x) > a0/b0 với x D Giả thiết 1) 2) đảm bảo mẫu số R(x) dương D giả thiết 3) giá trị tối ưu * toán P lớn a0/b0 Xét toán phụ Q() với tham số  : Q() : max{ (a-b)x : xD} Khi ®ã toán P tương đương với việc tìm =* cho Q(*) có giá trị tối ưu *b0 - a0 (trong trường hợp * giá trị tối ưu toán P [3] đà giới thiệu thuật toán giải Q(*) mà không cần biết trước * ) Sau ta nêu thuật toán gọi Frac() cho P đà biết thuật toán PARA(,) tìm nghiệm -gần cho toán Q() Gọi * () giá trị giá trị tối ưu P Q() tương ứng Các tính chất toán bổ trợ : Tính chất () liên tục, tuyến tính khúc, không tăng vµ låi TÝnh chÊt () > b0-a0 nÕu vµ chØ nÕu  < *, () =b0-a0 nÕu vµ chØ nÕu =*, () < b0-a0 nÕu vµ chØ nÕu >* Định lý Tồn khoảng [e,f] cho * [e,f] () > [e,f] Chứng minh Vì tính liên tục () nên cần chứng minh (*) > Vì b0 >0 bx 0, nên tõ gi¶ thiÕt (3 ) suy : (a-(a0/b0 )b)x > với x thuộc D, (a0/b0 ) >0 V× vËy ta cã (a0/b0 )b0 -a0 =0 < (a0/b0 )  theo tÝnh chÊt : a0/b0 0 TiÕp theo, thay cho viƯc gi¶i chÝnh xác P, ta tìm nghiệm gần P cách sử dụng nghiệm - gần x Q() Đặt =(a-b)x Khi từ định nghĩa nghiệm - gần ta có : () vµ (()- ) /()   Chó ý cã thĨ giả sử mà không tính tổng quát cách hạn chế giá trị thoả mÃn () >0 >0 Vì : (1-)() () vµ   ()   / (1-) KÕt hợp với tính chất 2, ta suy : Định lý (A)  > b0-a0 kÐo theo  < *, (B)  < (1-)(b0-a0 ) kÐo theo  >*, (C)Trong trường hợp (1-)(b0-a0 ) b0-a0 ta khẳng định * > hay * Hình vẽ mô tả trường hợp (A),(B) (C) định lý v() v( b0-a0 b0-a0) (A) (A) (C) (C)  (B) a0/b0  II Thuật toán -gần Trong phần này, mô tả thuật toán gần giải P có sử dụng PARA(,) Nếu giá trị -gần Q() với đà cho thoả mÃn điều kiện (C) định lý , hiểu gần với * Vì mục tiêu tìm thoả mÃn điều kiện (C) định lý Ta thực PARA(*,) mà * theo phương pháp Megiddo [2] Từ định lý 1, tồn khoảng [e,f] cho * [e,f] () >0 [e,f] Giả sử [e,f] có sẳn từ đầu, ta áp dụng PARA(*,) mà cần biết * [e,f] Trong trình áp dụng PARA(*,), [e,f] tự động giảm giữ tính chất * [e,f] Dữ liệu Q() cho khoảng khởi đầu [e,f] ai-bi, i=1,2, n Tất tuyến tính theo Nó chứng minh qui nạp tất liệu cần thiết để thực PARA(*, ) cho kho¶ng hiƯn thêi [e,f] tiÕp tơc tun tÝnh theo trình rút gọn Quá trình thực hiƯn PARA(*,) sÏ sinh hai hµm tun tÝnh so sánh g1() g2() cùnh ®o¹n [e,f] Khi ®ã nÕu g1() =g2() cã nghiƯm ' [e,f] : g1() g2() (hoặc g1() g2()) cho bÊt kú [e, ' ] vµ g1()  g2() (hc g1()  g2()) cho bÊt kú  [', f] Suy hàm max { g1(), g2() } (hoặc g1(),g2()) sinh qua phép so sánh tuyến tính đoạn [e, ' ] [ ', f ] Lúc ta chia [e,f] thành hai đoạn [e, ' ] [ ', f ] Mặt khác, g1() =g2() nghiệm khoảng [e,f] g1() =g2() [e,f] [e,f] không chia Vì trường hợp nào, phép toán so sánh phân hoạch đoạn [e,f] thành nhiều hai đoạn liệu sinh tuyến tính đoạn Giả sử đoạn [e,f] chia thành hai đoạn [e, '] [', f] Nếu định đoạn chứa * tiếp tục áp dụng PARA(*,) Để chọn đúng, ta phải giải Q(' ) b»ng c¸ch sư dơng PARA(',) NÕu nã cho nghiƯm -gần Q(' ) thoà điều kiện (A), (hoặc (B)) định lý 2, chọn [', f] (hoặc [e,' ]) khoảng [e,f] Thủ tục tiếp tục nghiệm -tối ưu Q(') điều kiện (C) định lý nghiệm -tối ưu Q(*) tính Trong hai trường hợp, nghiệm -tối ưu P thu phần trình bày Thuật toán gần Frac() giải P sau: Bước Chọn đoạn [e,f] cho * [e,f] () >0 [e,f] Bước Theo bước PARA(*,) để giải Q(*) mà biết * [e,f] Khi tới phép toán so sánh, dừng sang bước Nếu dừng đưa nghiệm -tối ưu x'' Q(*) dừng thuật toán Bước Xét g1() g2() hai hàm tuyến tính so sánh Giải phương tr×nh g1() = g2() NÕu cã nghiƯm nhÊt ' [e,f] chuyển đến bước 4, ngược lại trở ®iĨm dõng cđa PARA(*,) ë b­íc B­íc Thùc PARA(',) thu nghiệm -tối ưu x' Q(' ) Đặt ' = (a-' b)x' Nếu ' thoả điều kiện (C) định lý lấy x' dừng Ngược lại gán e=' (A) thoả mÃn, f=' (B) thoả mÃn Trở điểm dừng PARA(*,) bước Bây ta xem xét độ xác nghiệm gần qua sai số cận nghiệm -gần thu từ Frac() Frac() dõng mét hai tr­êng hỵp sau xÈy ra: (i) Một nghiệm gần x' Q(' ) thu bước thoả mÃn điều kiện (C) định lý (ii) Một nghiệm -tối ưu x'' Q(*) thu bước Trong trường hợp (i), giá trị mục tiêu ' =(a-' b)x' Q(' ) thoả mÃn điều kiện sau tính chất -tối ưu điều kiện(C)của định lý (1-)(' )  (a-' b)x' (1) (1-)('b0-a0 ) (a-' b)x' 'b0-a0 (2) Từ ta có định lý Định lý Nếu nghiệm -tối ưu x' Q(' ) thoả mÃn điều kiện (C) định lý : (1-)(*b0-a0 ) (a-' b)x' (3) Chøng minh NÕu '  *, th× tõ (4.1) vµ tÝnh chÊt (1), (2) cđa () ta cã : (1-)(*b0-a0 ) =(1-)(*)  (1-)((' )  (a-' b)x' Mặt khác, ' *, ta có : (1-)(*b0-a0 ) (1-)('b0-a0 ), b0 >0 Kết hợp với (2) ta có kết luận định lý Ta ký hiÖu : 0 = (1-)* +a0/b0 (1-)(*b0-a0 )= (0b0-a0 ) hay Định lý Với x' đà cho định lý : (4) R(x' ) * Chứng minh : Ta chứng minh bất đẳng thức thứ nhất, bất đẳng thức thứ hai hiĨn nhiªn suy tõ tÝnh chÊt thc miỊn chÊp nhận x' Từ (2) ta có :' (a0+ax' )/(b0+bx') =R(x' ) Điều kéo theo (a-' b)x'  (a-R(x')b)x' (=R(x' )b0 -a0 ) (5) bëi bx'  Từ định lý (4) ta có (0b0-a0 )  (a-' b)x' (6) Tõ (5) vµ (6) dÉn đến R(x' ), b0 >0 Định lý Với x' đà cho định lý x' nghiệm -tối ưu toán P Chứng minh Với * nghiệm tối ưu toán P từ định lý ta có : * -R(x' )  * -0, vµ tõ (3)   a0 *  R( x ' ) *  0      * * *b0  KÕt luận định lý Bây ta xét trường hợp (ii) Định lý Gọi x'' nghiệm -tối ưu Q(*) Khi x'' nghiệm -tối ưu cđa P Chøng minh Tõ tÝnh chÊt nghiƯm -tèi ­u cña Q(*)   (* )  (a  *b) x ''  ,  (* ) Tõ tÝnh chÊt 2) vµ (* ) >0 suy ra: (*b0-a0 )- (a-* b)x''  (*b0-a0 )  *(b0+bx'' ) (Bëi v× -a0 * bx'' ).Vì b0+bx'' > nên * -(a0+ax'' )/(b0+bx'' )  * , hay (* -R(x'' ))/* Từ định lý ta kết ln : Tht to¸n Frac() cho nghiƯm -tèi ­u cđa toán P Ta cải tiến thuật toán cách rút gọn nhanh khoảng [e,f] Gọi xl, xu nghiệm -tối ưu Q(l) Q(u) tương ứng với l =(a-l b)xl u =(a-u b)xu Hơn nữa, xl, xu thoả mÃn điều kiện (A), (B) định lý nên suy R(xl) * R(xu) * chúng thuộc phương án chấp nhận §Ỉt + = (1   )a0 (u  l )   l u   u l (1   )b0 (u  l )   l   u (*) + t­¬ng øng víi giao cđa ®­êng nèi hai ®iĨm (l, l) vµ (u, u ) đường = (1-)(b0-a0) (Hình minh hoạ cận trên, míi cđa [e,f]) v (a-b)xl b0-a0 v b0-a0) vu l  R(x l)   new e   a-b)xu u  new f Bëi v× tÝnh låi cđa (1-)() tính chất nghiệm -tối ưu vl, u nên ta cã : *  + V× vËy suy hai khoảng [R(xl), +] [R(xu), +] chứa * Khi ta chọn khoảng nhỏ xem khoảng [e,f] cho Frac() Vì thuật toán thay đổi sau: Bước Chọn khoảng [e,f] cho * [e,f] vµ () >0  [e,f] Đặt l=0, u=0 Bước Tính PARA(', ) để thu nghiệm -tối ưu x' Q(' ) Đặt ' =(a-' b)x' Nếu v' thoả mÃn điều kiện (C) định lý đưa x' dừng Ngược lại, đặt e=max{e,R(x' )} Đặt l =', l=v' điều kiện (A) thoả mÃn, đặt f=', u=', u = ' điều kiện (B) thoả mÃn.Hơn nữa, l 0, u đặt f=min{ f,+} ®ã + ®­ỵc tÝnh bëi (*) Trë vỊ ®iĨm dõng cđa PARA(*, ) b­íc iii øng dơng vµ kết luận Trong phần này, ví dụ minh hoạ, xét việc áp dụng thuật toán mô tả vào việc xây dựng thuật toán giải toán túi phân tuyến biến Boolean Xét toán túi phân tuyến biến Boolean FKP : Max (a0 + a1x1 + +anxn)/(b0+b1x1+ +bnxn) víi s1x1+ +snxn  M, xi =0,1, i N ={1,2, ,n} Trong ®ã b0 > 0, a0 0, bi >0, M  si >0 víi iN Xây dựng toán bổ trợ KP() FKP víi tham sè  thùc t­¬ng tù nh­ Q() Víi cho trước KP toán túi biến Bun mà giải thuật toán -gần đa thức Đặt pi=ai-bi, iN, R Dưới thủ tục PARA(,) đưa nghiệm -tèi ­u cđa KP() thêi gian O(n4/) víi bÊt kú 0

Ngày đăng: 21/11/2022, 15:03