Các mô hình và phần mềm tối ưu hoá và ứng dụng trong nông nghiệp (bài giảng điện tử trong khuôn khổ dự án CNTT)

Phần mềm tính toán khoa học RST2ANU đã được thiết kế và xây dựng có thể sử dụng để giải quyết nhiều mô hình tối ưu phát sinh trong lĩnh vực nông nghiệp, hỗ trợ cho giảng dạy và nghiên cứu khoa học nông nghiệp cũng như trong các lĩnh vực khác. Phần mềm này đã được nâng cấp có tính thân thiện với người sử dụng và tránh được sao chép, có thể được phổ cập có bản quyền một cách rộng rãi. Việc tạo ra các giao diện thân thiện cho phép dễ dàng nhập các hàm mục tiêu và ràng buộc của nhiều dạng bài toán tối ưu phi tuyến là một vấn đề khá phức tạp đã được giải quyết thành công trong phần mềm này

pdf52 trang | Chia sẻ: nguyenlam99 | Lượt xem: 1163 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Các mô hình và phần mềm tối ưu hoá và ứng dụng trong nông nghiệp (bài giảng điện tử trong khuôn khổ dự án CNTT), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
GO, NI và MI tương ứng là: [71,8 - 110,2], [18,1 - 38,4] và [30,8 - 54,5]. Với các thông tin thu được, phần mềm PRELIME (xem bài báo của C. Mohan và Nguyen Hai Thanh,“An interactive satisficing 21 method for solving multiobjective mixed fuzzy-stochastic programming problems”, International Journal for Fuzzy Sets and Systems, Vol. 117, No.1, pp. 61-79, 2001) sẽ cho biết: Đối với từng mục tiêu z1 (GO), z2 (NI) và z3 (MI) các hàm thoả dụng lần lượt là μ1, μ2 và μ3 với các mức đạt được được thể hiện trên các đồ thị. - Đối với hàm thoả dụng về giá trị sản xuất: 0 nếu z1 ≤ 71,8 = a1 μ1 = 0,5 nếu z1 = 80,0 = b1 1 nếu z1 ≥110,2 = c1 - Đối với hàm thoả dụng về thu nhập ròng: 0 nếu z2 ≤ 15,1 = a2 μ2 = 0,5 nếu z2 = 34,0 = b2 1 nếu z2 ≥ 38,4 = c2 - Đối với hàm thoả dụng về thu nhập hỗn hợp: 0 nếu z3 ≤ 38,8 = a3 μ3 = 0,5 nếu z3 = 45,0 = b3 1 nếu z3 ≥ 54,5 = c3 Chúng ta có thể hiểu ý nghĩa của các hàm thoả dụng trên như sau: Đối với hàm z1 (GO) thì một phương án X = (x1, x2, x3, x4, x5, x6, x7) với giá trị z1 ≤ 110,2 triệu/ha = c1 cho ta độ thoả dụng μ1 = 1; với giá trị z1 ≥ 71.8 triệu/ha = a1 thì độ thoả dụng μ1 = 0; với z1 = 80,0 triệu/ha lại cho ta độ thoả dụng μ1 = 0,5. Các giá trị khác của z1 cho các độ thoả dụng được nội suy căn cứ vào các đồ thị trên. Giá trị z1 = 80,0 triệu/ha = b1 (tương ứng với độ thoả dụng 0,5) được gọi là giá trị chốt và được xác định cho bước lặp đầu tiên trong quá trình giải bài toán tối ưu đa mục tiêu. ở các bước sau giá trị chốt b1 có thể được thay đổi căn cứ vào thông tin nội tại của bài toán do máy tính đưa ra. Tương tự ta có thể giải thích ý nghĩa của các hàm thoả dụng μ2 và μ3 ứng với các mục tiêu z2 (NI) và z3 (MI). Một phương án X như vậy cho ta độ thoả dụng ứng với ba mục tiêu z1 (GO), z2 (NI), z3 (MI) là μ1, μ2 và μ3 . Từ ba hàm thoả dụng này ta thiết lập được hàm thoả dụng tổng hợp (Aggregation Utility Function) cho đồng thời ba mục tiêu như sau: μ = Max { Min [μ1 , μ2 , μ3 ] } Trong quá trình giải bài toán qua các bước lặp nếu thu được phương án X với μ > 0,5 thì điều đó có nghĩa là tất cả ba hàm thoả dụng μ1, μ2 và μ3 lớn hơn 0,5. Từ đó ta thấy các giá trị chốt b1, b2, b3 đã đặt ra là thấp nên ta có thể tăng (ít nhất) một trong ba giá trị chốt này, việc ưu tiên mục tiêu nào (z1, z2 hay z3) tuỳ thuộc vào sự quan tâm của nông hộ nhằm sử dụng có hiệu quả nhất nguồn lực của mình. Ngược lại, nếu μ < 0,5, thì ta giảm ít nhất một trong ba giá trị ưu tiên b1, b2 hay b3. Như vậy, trong quá trình giải các giá trị ưu tiên này sẽ được thương lượng với nhau để điều chỉnh sao cho thu được phương án X* thoả mãn nhất với độ thoả dụng tổng hợp μ gần với 0,5. 22 Kết quả tính toán bài toán đa mục tiêu ở vùng đồng khi sử dụng phần mềm PRELIME được thể hiện trong bảng I.11. Có thể thấy rằng, tuỳ vào mục đích của người ra quyết định mà có sự lựa chọn khác nhau về GO, NI hay MI. Đối với vùng đồng, các hộ đều lựa chọn hình thức nuôi chuyên canh (x6 = 1), còn mức và cơ cấu đầu tư tối ưu lại phụ thuộc vào mục đích của hộ sẽ chọn GO, NI hay MI yếu tố nào là quan trọng. Chẳng hạn, người thứ nhất quan tâm nhiều đến GO thì cần đầu tư ở mức 62,7 triệu/ha, tương ứng với cơ cấu đầu tư x1 : x2 : x3 : x4 : x5 = 25,0 : 11,2 : 14,3 : 6,3 : 6,0. Nhìn chung, giá trị lớn nhất đồng thời của ba mục tiêu không có sự thay đổi lớn qua các sự lựa chọn; GOMax đạt từ 95,4 đến 99,6 triệu/ha, NIMax đạt 35,6 đến 36,9 triệu/ha và MIMax đạt từ 52,1 đến 53,4 triệu/ha. Tổng mức đầu tư cũng không có sự biến động lớn, chúng chỉ dao động từ 58,8 đến 62,6 triệu/ha, ứng với các tỉ lệ cơ cấu cũng không có sự biến đổi nhiều. Bảng I.11. Kết quả bài toán đa mục tiêu vùng đồng Tỉ lệ đầu tư (triệu/ha) Biến giả Giá trị max (triệu/ha) Bước lặp thứ Độ thoả dụng (%) x1 x2 x3 x4 x5 Tổn g chi x6 x7 GO NI MI 1 0,82 25, 0 11, 2 14, 3 6,3 6,0 62,7 1 0 99,6 36,9 51, 2 2 0,74 22, 6 10, 0 15, 5 5,4 5,4 58,8 1 0 95,4 36,6 52, 1 3 0,49 23, 1 10, 3 17, 9 5,6 5,7 62,6 1 0 98,1 35,6 53, 4 4 0,46 22, 7 10, 0 16, 6 5,4 5,3 60,0 1 0 96,2 36,2 52, 7 5 0,50 22, 2 9,9 15, 0 5,3 5,3 57,7 1 0 94,5 36,8 51, 8 23 Chương II GIẢI BÀI TOÁN QUY HOẠCH TUYẾN TÍNH BẰNG PHƯƠNG PHÁP ĐƠN HÌNH 1. PHƯƠNG PHÁP ĐƠN HÌNH GIẢI BTQHTT DẠNG CHÍNH TẮC 1.1. Ví dụ . Xét BTQHTT: Max z = 8x1 + 6x2, với các ràng buộc 4x1 + 2x2 ≤ 60 2x1 + 4x2 ≤ 48 x1, x2 ≥ 0 Đưa BTQHTT dạng chuẩn tắc trên về dạng chính tắc bằng các biến bù không âm x3 và x4 như sau: Max z = 8x1 + 6x2 + 0x3 + 0x4 với các ràng buộc 4x1 + 2x2 + x3 = 60 2x1 + 4x2 + x4 = 48 x1, x2, x3, x4 ≥ 0. Chú ý. BTQHTT có dạng chính tắc là BTQHTT với các biến không âm, các ràng buộc có dấu “=”, hệ số vế phải của các ràng buộc không âm. Ngoài ra, mỗi phương trình bắt buộc phải có một biến đứng độc lập với hệ số +1. Cách lập và biến đổi các bảng đơn hình Để giải BTQHTT dạng chính tắc trên đây, cần lập một số bảng đơn hình như trong bảng II.1. Trước hết, cần điền số liệu của bài toán đã cho vào bảng đơn hình bước 1: – Cột 1 là cột hệ số hàm mục tiêu ứng với các biến cơ sở đã chọn. Phương án xuất phát có thể chọn là x1 = x2 = 0 (đây chính là điểm gốc toạ độ O(0, 0) trên hình II.1), do đó x3 = 60, x4 = 48. Như vậy tại bước này chúng ta chưa bước vào sản xuất, nên trong phương án chưa có đơn vị sản phẩm loại I hay loại II nào được sản xuất ra (chỉ “sản xuất” ra các lượng nguyên liệu dư thừa, ta cũng nói là các “sản phẩm” loại III và IV), và giá trị hàm mục tiêu z tạm thời bằng 0. Các biến bù có giá trị lớn hơn 0 có nghĩa là các nguyên liệu loại tương ứng chưa được sử dụng hết. Ta gọi các biến x3 và x4 là các biến cơ sở vì chúng có giá trị lớn hơn 0 còn x1 và x2 là các biến ngoài cơ sở vì chúng có giá trị bằng 0. Với bài toán có hai ràng buộc, tại mỗi bước chỉ có hai biến cơ sở. – Cột 2 là cột các biến cơ sở. Trong cột 3 (cột phương án) cần ghi các giá trị của các biến cơ sở đã chọn. – Các cột tiếp theo là các cột hệ số trong các điều kiện ràng buộc tương ứng với các biến x1, x2, x3 và x4 của bài toán đã cho. 24 Bảng II.1. Các bảng đơn hình giải BTQHTT c1 = 8 c2 = 6 c3 = 0 c4 = 0 Hệ số hàm mục tiêu cj Biến cơ sở Phương án x1 x2 x3 x4 Bảng đơn hình bước 1 0 0 x3 x4 60 48 4 2 2 4 1 0 0 1 Hàng z z0 = 0 z1 = 0 z2 = 0 z3 = 0 z4 = 0 Hàng Δj = cj – zj Δ1 = 8 Δ2 = 6 Δ3 = 0 Δ4 = 0 Bảng đơn hình bước 2 8 0 x1 x4 15 18 1 0 1/2 3 1/4 –1/2 0 1 Hàng z z0 = 120 z1 = 8 z2 = 4 z3 = 2 z4 = 0 Hàng Δj = cj – zj Δ1 = 0 Δ2 = 2 Δ3 = –2 Δ4 = 0 Bảng đơn hình bước 3 8 6 x1 x2 12 6 1 0 0 1 1/3 –1/6 –1/6 1/3 Hàng z z0 = 132 8 6 5/3 2/3 Hàng Δj = cj – zj 0 0 –5/3 –2/3 Phân tích bảng đơn hình bước 1 – Hệ số ứng với biến x1 trên hàng thứ nhất là a11 = 4 có nghĩa là tỷ lệ thay thế riêng giữa một đơn vị sản phẩm loại I và một đơn vị sản phẩm loại III là 4 (giải thích: xét phương trình (hay ràng buộc) thứ nhất 4x1 + 2x2 + x3 = 60, x1 tăng một đơn vị thì x3 phải giảm bốn đơn vị nếu giữ nguyên x2). Tương tự ta có thể giải thích được ý nghĩa của các hệ số aij khác cho trên hàng 1 và hàng 2 trong bảng đơn hình bước 1. – Chúng ta xét hàng z của bảng đơn hình. Để tính z1, cần áp dụng công thức z1 = (cột hệ số của hàm mục tiêu)× (cột hệ số của biến x1) = 0×4 + 0×2 = (giá một đơn vị sản phẩm loại III)×(tỷ lệ thay thế riêng loại I / loại III) + (giá một đơn vị sản phẩm loại IV)×(tỷ lệ thay thế riêng loại I / loại IV) = tổng chi phí phải bỏ ra khi đưa thêm một đơn vị sản phẩm loại I vào phương án sản xuất mới = 0. Các giá trị zj, với j = 1, 2, 3, 4, được tính tương tự và chính là các chi phí khi đưa một thêm một đơn vị sản phẩm loại xj vào phương án sản xuất mới. Còn z0 là giá trị của hàm mục tiêu đạt được tại phương án đang xét: z0 = (cột hệ số của hàm mục tiêu)× (cột phương án) = 0×60 + 0 × 48 = 0. – Trên hàng Δj cần ghi các giá trị Δj , j = 1, 2, 3, 4, tính theo công thức Δj = cj – zj = lợi nhuận / đơn vị sản phẩm – chi phí / đơn vị sản phẩm. Vậy Δj là "lãi biên" / một đơn vị sản phẩm khi đưa một thêm một đơn vị sản phẩm loại xj vào phương án sản xuất mới. Nếu Δj > 0 thì hàm mục tiêu còn tăng được khi ta đưa thêm các sản phẩm loại j vào phương án sản xuất mới. Có thể chứng minh được Δj chính là đạo hàm riêng jz / x∂ ∂ của hàm mục tiêu z theo biến xj . Như vậy, x1 tăng lên 1 thì z tăng lên 8 còn x2 tăng lên 1 thì z tăng lên 6 . Do Δ1 và Δ2 đều lớn hơn 0 nên vẫn còn khả năng cải thiện hàm mục tiêu khi chuyển sang (hay “xoay sang”) một phương án cực biên kề tốt hơn. 25 Thủ tục xoay (pivotal procedure) Bước 1: Chọn cột xoay là cột bất kỳ có Δj > 0. Lúc đó biến xj tương ứng với cột xoay được chọn làm biến cơ sở mới do xj tăng kéo theo hàm mục tiêu tăng. Ở đây ta chọn đưa x1 vào làm biến cơ sở mới. Bước 2: Chọn hàng xoay để xác định đưa biến nào ra khỏi tập các biến cơ sở (vì tại mỗi bước số biến cơ sở là không thay đổi). Để chọn hàng xoay, ta thực hiện quy tắc “tỷ số dương bé nhất” bằng cách lấy cột phương án (60, 48)T chia tương ứng cho cột xoay (4, 2)T để chọn tỷ số bé nhất. Một điều cần chú ý là ta chỉ xét các tỷ số có mẫu số dương. Vì Min {60/4, 48/2} = 60/4 đạt được tại hàng đầu, nên hàng xoay là hàng đầu (hàng tương ứng với biến x3). Do đó cần đưa x3 ra khỏi tập các biến cơ sở. Bước 3: Chọn phần tử xoay nằm trên giao của hàng xoay và cột xoay. Bước 4: Xoay sang bảng đơn hình mới, xác định các biến cơ sở mới để điền vào cột biến cơ sở, đồng thời thay các giá trị trong cột hệ số hàm mục tiêu. Sau đó, tính lại các phần tử của hàng xoay bằng cách lấy hàng xoay cũ chia cho phần tử xoay để có hàng mới tương ứng. Bước 5: Các phần tử còn lại của bảng đơn hình mới tính theo quy tắc “hình chữ nhật”: (1)mới = (1)cũ – (2)cũ× (4)cũ/(3)cũ, trong đó (3) là đỉnh tương ứng với phần tử xoay . Giải thích. Các bước xoay trên đây chỉ là phép biến đổi tương đương hệ phương trình 4x1 + 2x2 + x3 = 60 (2.1) 2x1 + 4x2 + x4 = 48 (2.2) để có hệ x1 + (1/2)x2 + (1/4)x3 = 15 (2.1’) 0x1 + 3x2 – (1/2)x3 + x4 = 18 (2.2’) bằng cách lấy phương trình (2,1) chia cho 4 (phần tử xoay) để có (2,1’), rồi lấy (2,2) trừ bớt 2× (2.1)/4 để có (2,2’). Đây chính là nội dung của bước 4 và bước 5. Còn việc thực hiện bước 3 sẽ đảm bảo rằng giá trị của các biến cơ sở mới không âm (x1 = 15, x4 = 18). Áp dụng thủ tục xoay cho các phần tử nằm trên hàng 1 và 2 của bảng đơn hình bước 1, sau đó tính các giá trị trên hàng zj và Δj tương tự như khi lập bảng đơn hình bước 1, chúng ta sẽ nhận được bảng đơn hình bước 2. (1) (2) (3) (4) Chẳng hạn: nếu (1)cũ = 4,(2)cũ = 2, (3)cũ = phần tử xoay = 4, (4)cũ = 2 thì (1)mới = 4 – 2×2/4 =3 Quy tắc hình chữ nhật 26 Phân tích bảng đơn hình bước 2 Bảng bước 2 có thể được phân tích tương tự như bảng bước 1. Lúc này giá trị của hàm mục tiêu là z0 = 120 đã được cải thiện hơn so với bước 1. Ta thấy Δ2 = 2 > 0 nên còn có thể cải thiện hàm mục tiêu bằng cách đưa biến x2 vào làm biến cơ sở mới. Thực hiện các bước xoay sang phương án cực biên kề tốt hơn, chúng ta sẽ có bảng đơn hình bước 3. Phân tích bảng đơn hình bước 3 Tại bảng đơn hình bước 3 ta thấy điều kiện tối ưu đã được thoả mãn (Δj ≤ 0, ∀j =1,4 ) nên không còn khả năng cải thiện phương án. Phương án tối ưu đã đạt được tại x1 = 12, x2 = 6, x3 = 0, x4 = 0, tức là tại điểm cực biên B(12, 6) với giá trị zmax = 132. Một số chú ý – Điều kiện tối ưu cho các BTQHTT dạng Max là Δj ≤ 0, ∀j . – Đối với các BTQHTT cần cực tiểu hoá hàm mục tiêu thì điều kiện tối ưu (hay tiêu chuẩn dừng) là Δj ≥ 0, ∀j (nếu ∃ j* sao cho j*Δ < 0 thì cần tiếp tục cải thiện hàm mục tiêu bằng cách chọn cột j* làm cột xoay). – Trong thực tiễn giải các BTQHTT dạng tổng quát có thể xảy ra trường hợp không tìm được phương án xuất phát (tức là không có phương án khả thi). Lúc này có thể kết luận mô hình đã thiết lập có các điều kiện ràng buộc quá chặt chẽ, cần xem xét nới lỏng các điều kiện này. – Trong trường hợp ta tìm được cột xoay mà không tìm được hàng xoay thì kết luận hàm mục tiêu không bị chặn trên (đối với các BTQHTT dạng Max) hoặc không bị chặn dưới (đối với các BTQHTT dạng Min). Trong các trường hợp trên cũng phải dừng lại và kết luận mô hình quy hoạch tuyến tính đã thiết lập không phù hợp với thực tế. Khung thuật toán đơn hình Sau đây là khung thuật toán của phương pháp đơn hình được phát biểu cho BTQHTT cực đại hóa dạng chính tắc. Bước khởi tạo – Tìm một phương án cực biên ban đầu (nếu không tìm được thì dừng và in ra thông báo “BTQHTT không có phương án”). – Tính Δj = cj – zj, ∀j = 1,n , trong đó n là số biến của bài toán đang xét. Các bước lặp Bước 1: Kiểm tra điều kiện tối ưu. Nếu điều kiện tối ưu Δj = cj – zj ≤ 0, ∀j = 1,n đã được thoả mãn thì in / lưu trữ kết quả của bài toán và chuyển sang bước kết thúc. Bước 2: Nếu tồn tại một chỉ số j sao cho Δj > 0 thì tiến hành thủ tục xoay gồm năm bước đã biết, tính lại các Δj, ∀j = 1,n và quay lại bước 1 (Chú ý: Trong trường hợp 27 ta tìm được cột xoay mà không tìm được hàng xoay thì kết luận hàm mục tiêu không bị chặn, in / lưu trữ kết quả của bài toán và chuyển sang bước kết thúc). Bước kết thúc. Dừng. 1.2. Thuật toán đơn hình cho BTQHTT dạng chính tắc Xét BTQHTT sau (xem thêm giáo trình của Nguyễn Hải Thanh, Tối ưu hoá, Nxb Bách Khoa, 2007): z = f(x) = c1x1 + c2x2 + .... + cnxn → Max (Min), với các điều kiện ràng buộc a11x1 + a12x2 + ... + a1nxn ≤ b1 a21x1 + a22x2 + ... + a2nxn ≤ b2 ... am1x1 + am2x2 + ... + amnxn ≤ bm x1, x2, ..., xn ≥ 0 (điều kiện không âm). Đưa BTQHTT trên về dạng chính tắc: z = f(x) = c1x1 + c2x2 + .... + cnxn + 0xn+1 + + 0xn+m → Max (Min), với các điều kiện ràng buộc a11x1 + a12x2 + ... + a1nxn + xn+1 = b1 a21x1 + a22x2 + ... + a2nxn + xn+2 = b2 ... am1x1 + am2x2 + ... + amnxn + xn+m = bm x1, x2, ..., xn+m ≥ 0 (điều kiện không âm). Bước khởi tạo – Nhập các hệ số hàm mục tiêu c, ma trận ràng buộc A và các hệ số vế phải b. – Đặt d1 = cn+1= 0, ..., dm = cn+m= 0 , tức là cB = (d1, ..., dm)T. – Đặt chỉ số các biến cơ sở: r(1) = n + 1, ..., r(m) = n + m. – Gán xr(i) = bi , i = 1,m . Đặt flag = 2. Các bước lặp Bước 1: – Tính cTx = z = d1xr(1) + ... + dmxr(m). – Tính zj = m pj p p 1 a d = ∑ , ∀j = 1, n m+ . – Tìm Δ = [ΔN , ΔB] = [ TNc – TBc B–1N, TBc – TBc B–1B], trong đó ΔB = 0. Như vậy Δj = cj – zj, với zj = m pj p p 1 a d = ∑ , ∀j ∈ N = {1, 2, , n + m} \ {r(1), , r(m)} và Δj = cj – zj = 0, ∀j ∈ B = {r(1), , r(m)}, (tức là zN = TBc B–1N và zB = TBc B–1B). 28 Bước 2: Nếu tồn tại chỉ số j ∈ N sao cho Δj > 0 thì thực hiện thủ tục xoay. – Xác định cột xoay: chọn cột xoay s ứng với một chỉ số j có tính chất Δj > 0. Thông thường chọn j ứng với Δj > 0 lớn nhất, hoặc chọn ngẫu nhiên. – Xác định hàng xoay q theo quy tắc tỷ số dương bé nhất: r (q ) r ( i ) is qs is x x Min , a 0 a a ⎧ ⎫= ∀ >⎨ ⎬⎩ ⎭ . Trong trường hợp không tồn tại ais > 0, đặt flag = 0 và chuyển sang bước kết thúc. – Xác định phần tử xoay aqs. – Tính lại (để chuyển sang bảng đơn hình mới): bq := bq/aqs, aqj := aqj/aqs, ∀j . ∀ i ≠ q tính lại bi := bi – bq*ais và aij := aij – aqj*ais, ∀j. – Đặt lại chỉ số các biến cơ sở: r(q) := s, dq := cs, và xr(i) = bi , i = 1,m . Quay về bước 1. Bước 3: Nếu Δj ≤ 0, ∀j ∈ N thì đặt flag = 1 và chuyển sang bước kết thúc. Bước kết thúc: Ghi lại dữ liệu đầu vào của BTQHTT và kết quả cuối cùng. Nếu flag = 0 thì kết luận BTQHTT có hàm mục tiêu không bị chặn trên. Còn nếu flag = 1 thì kết luận BTQHTT có phương án tối ưu đã tìm được. Dừng. 2. PHƯƠNG PHÁP ĐƠN HÌNH HAI PHA GIẢI BTQHTT TỔNG QUÁT Từ trước tới nay, chúng ta luôn giả sử rằng BTQHTT được xem xét luôn có phương án và có thể biết được một phương án (cực biên) ban đầu của nó để khởi tạo quá trình giải. Trong mục này chúng ta sẽ đi xét các trường hợp khi chưa biết BTQHTT có phương án hay không, cũng như chưa biết được phương án cực biên ban đầu. Đối với những trường hợp này có thể sử dụng phương pháp đơn hình hai pha. Chúng ta sẽ trình bày phương pháp đơn hình hai pha thông qua ví dụ sau. 2.1. Ví dụ . Max z = 8x1 + 6x2, với các ràng buộc 1 2 1 2 1 2 4x 2x 60 2x 4x 48 x ,x 0. + ≤⎧⎪ + ≥⎨⎪ ≥⎩ hay: Max z = 8x1 + 6x2 + 0x3 + 0x4, với các ràng buộc 1 2 3 1 2 4 1 2 3 4 4x 2x x 60 2x 4x x 48 x ,x ,x ,x 0. + + =⎧⎪ + − =⎨⎪ ≥⎩ Trước hết cần trả lời câu hỏi BTQHTT dạng chuẩn tắc trên đây có phương án hay không, nếu có thì cần tìm một phương án cực biên xuất phát của nó. Pha 1. Tìm một phương án cực biên xuất phát bằng cách xét BTQHTT sau đây: Min ω = x5, với các ràng buộc 29 1 2 3 1 2 4 5 1 2 3 4 5 4x 2x x 60 2x 4x x x 48 x ,x ,x ,x ,x 0. + + =⎧⎪ + − + =⎨⎪ ≥⎩ (2.3) Bảng II.2. Các bảng đơn hình giải bài toán pha 1 0 0 0 0 1 Hệ số hàm mục tiêu Biến cơ sở Phương án x1 x2 x3 x4 x5 0 1 x3 x5 60 48 4 2 2 4 1 0 0 –1 0 +1 Hàng ω ω0 = 48 ω1 = 2 ω2 = 4 ω3 = 0 ω4= – 1 ω5 = 1 Hàng Δj Δ1 = –2 Δ2 = – 4 Δ3 = 0 Δ4 = 1 Δ5 = 0 0 0 x3 x2 36 12 3 1/2 0 1 1 0 1/2 –1/4 –1/2 1/4 Hàng ω ω0 = 0 0 0 0 0 0 Hàng Δj 0 0 0 0 1 Mục đích của pha 1 là để giải BTQHTT với các ràng buộc (2.3) hay còn gọi là bài toán ω. Nếu tìm được phương án tối ưu của bài toán ω với các biến giả đều nhận giá trị bằng 0 thì điều này chứng tỏ BTQHTT ban đầu có phương án. Trong trường hợp đó dễ dàng tìm được một phương án cực biên của nó (xem bảng II.2). Tại bảng đơn hình cuối cùng, ta thấy Δj ≤ 0, ∀j, nên phương án tối ưu đã đạt được với x2 = 12, x3 = 36, x1 = x4 = x5 = 0 và ωmin = 0. Do đó chúng ta đưa ra kết luận là BTQHTT ban đầu có phương án x1 = 0, x2 = 12, x3 = 36, x4 = 0. Một cách tổng quát, có thể khẳng định được ngay rằng, nếu bài toán ω có phương án tối ưu với giá trị hàm mục tiêu là 0 thì BTQHTT ban đầu có phương án, trong trường hợp trái lại thì nó không có phương án. Pha 2. Giải BTQHTT ban đầu căn cứ phương án cực biên vừa tìm được ở pha 1 (xem bảng II.3): Max z = 8x1 + 6x2 +0x3 + 0x4, với các ràng buộc 1 2 3 1 2 4 1 2 3 4 4x 2x x 60 2x 4x x 48 x ,x ,x ,x 0. + + =⎧⎪ + − =⎨⎪ ≥⎩ Nhận xét. Kết quả giải ví dụ trên bằng phương pháp đơn hình hai pha cũng giống với kết quả đạt được khi giải bằng phương pháp đơn hình mở rộng. Tuy nhiên, khi sử dụng phương pháp đơn hình hai pha, chúng ta tránh được sự phiền phức trong việc khai báo giá trị dương đủ lớn của tham số M như trong phương pháp đơn hình mở rộng. 30 Bảng II.3. Các bảng đơn hình giải bài toán pha 2 8 6 0 0 Hệ số hàm mục tiêu Biến cơ sở Phương án x1 x2 x3 x4 0 6 x3 x2 36 12 3 1/2 0 1 1 0 1/2 –1/4 Hàng z z0 = 72 z1 = 3 z2 = 6 z3 = 0 z4 =–3/2 Hàng Δj Δ1 = 5 Δ2 = 0 Δ3 = 0 Δ4 = 3/2 0 6 x4 x2 72 30 6 2 0 1 1 1/2 1 0 Hàng z 180 12 6 3 0 Hàng Δj –4 0 –3 0 Tại bảng đơn hình cuối cùng, ta thấy Δj ≤ 0, ∀j, nên phương án tối ưu đã đạt được với x2 = 30, x4 = 72, x1 = x3 = 0 và zmax = 180. 2.2. Thuật toán đơn hình hai pha giải BTQHTT dạng tổng quát Xét bài toán gốc: z = n j 1= ∑ cj xj → Min/ Max n ij j i j 1 n ij j i j 1 n ij j i j 1 j i 1, m 1 i m 1, m m1 1 2 i m m 1, m m m1 2 1 2 3 j 1, n m m m1 2 3 a x b ( ) a x b ( ) a x b ( ) x 0 ( ) = = = = = + + = + + + + = + + + ∑ ∑ ∑ ⎧ ≤⎪⎪ ≥⎪⎪⎨⎪ =⎪⎪ ≥⎪⎩ Bước 1: - Nhập dạng bài toán Min, Max. - Nhập tổng số ràng buộc m bao gồm các ràng buộc mang dấu: ≤ (m1 ràng buộc) , ≥ (m2 ràng buộc) và = (m3 ràng buộc). - Nhập số biến: n biến. - Nhập véc tơ hệ số hàm mục tiêu: C = [ c1, c2, . . ., cn ]. - Nhập véc tơ hệ số vế phải: b = [ b1, b2, . . ., bm ]. - Nhập ma trận hệ số ràng buộc: A = [ai j ]m x n. Bước 2: Đưa bài toán về dạng chính tắc: dạng Max đưa về dạng Min. Đưa thêm biến bù thiếu: m1 biến xn+i, 1i 1,m= , Biến bù thừa: m2 biến xn+ m1+p, 2p 1, m= , Biến giả: m2 + m3 biến xn+m1+m2+q, 2 3q 1,m m= + . Nếu m2 + m3 = 0, chuyển sang bước 4. Nếu m2 + m3 ≠ 0, giải bài toán theo hai pha bằng cách chuyển sang bước 3. 31 Sơ đồ thuật giải (cho BTQHTT gốc là bài toán Max) Bước 3: Pha thứ nhất. Xây dựng và giải bài toán phụ: ω = m2 m3 q +∑ xm1 + m2+q+n → Min Giải pha I Tính Δk Giải pha II Khởi tạo, đổi dấu, thêm biến bù, biến giả Bắt đầu ∀k, Δk≤0 ? Y N Kết thúc Xuất kết quả Tính Max Δk, Δk> 0 Tìm cột Hàm mục tiêu không bị chặn, BT vô nghiệm Tìm phần tử Chuyển đổi cơ sở N Y Tìm hàng xoay Tính f( ) BT có nghiệm Tính Δk Y N Có biến giả ? ∃k,Δk<0? Y N Tính Max kΔ , Δk Tìm cột xoay Tìm hàng xoay và phần tử Chuyển đổi cơ sở BT vô nghiệm ∃biến giả≠ 0? Y N Xóa biến giả Pha I Pha II Sơ đồ thuật giải đơn hình hai pha 32 1 2 3m 2*m m ij j i 1 2 3 j 1 j 1 2 3 a x b (i 1, m m m ) x 0 j 1, (n m 2* m m ). + + = ⎧⎪ = = + +⎪⎨⎪ ≥ ∀ = + + +⎪⎩ ∑ Kết thúc pha 1: Xảy ra ba trường hợp sau: – Phương án tối ưu không có biến giả, lấy đó làm phương án xuất phát, thay lại hệ số hàm mục tiêu, loại trừ các cột biến giả và sang bước 4. – Phương án tối ưu có biến giả khác 0 thì bài toán tối ưu không có phương án. Dừng. – Phương án tối ưu có chứa biến giả nhưng biến giả bằng 0, xoá các dòng chứa các biến giả này, thay lại hệ số hàm mục tiêu, loại trừ các cột biến giả và sang bước 4. Bước 4: Pha thứ 2. Giải bài toán gốc với phương án xuất phát tìm được bằng phương pháp đơn hình. Bước 5: In kết quả . 3. GIẢI CÁC BÀI TOÁN TỐI ƯU TRÊN MICROSOFT EXCEL Microsoft Excel 2000, 2003 có các công cụ toán học rất mạnh để giải các bài toán tối ưu và thống kê toán học. Excel có thể giải được các loại bài toán tối ưu: BTQHTT tổng quát, các biến có thể có ràng buộc hai phía, ràng buộc cũng có thể viết ở dạng hai phía; bài toán vận tải có hai chỉ số; bài toán quy hoạch nguyên (các biến có điều kiện nguyên hay boolean); bài toán quy hoạch phi tuyến. Số biến của BTQHTT hay nguyên có thể lên tới 200 biến. Excel còn có thể giải các bài toán hồi quy trong thống kê toán học: hồi quy đơn, hồi quy bội, hồi quy mũ. Dùng Solver ta có thể tìm cực đại hay cực tiểu của một hàm số đặt trong một ô gọi là ô đích. Solver chỉnh sửa một nhóm các ô (gọi là các ô có thể chỉnh sửa) có liên quan trực tiếp hay gián tiếp đến công thức nằm trong ô đích để tạo ra kết quả. Ta có thể thêm vào các ràng buộc để hạn chế các giá trị mà Solver có thể dùng. Đối với BTQHTT Solver dùng phương pháp đơn hình, đối với quy hoạch phi tuyến Solver dùng phương pháp tụt gradient để tìm một cực trị địa phương. 3.1. Giải BTQHTT Xét bài toán quy hoạch c1x1 + c2 x2 + + cnxn = f(x) → max / min a11x1 + a12 x2 + + a1nxn Q b1 a21x1 + a22 x2 + " + a2nxn Q b2 am1x1 + am2 x2 + + amnxn Q bm xj ≥ 0, j = 1, . . . , n nguyên hoặc nhị phân 0–1. 33 Trong đó Q là một trong các phép toán quan hệ ≥ , ≤ hoặc = , thứ tự các phép toán quan hệ trong các ràng buộc là tuỳ ý. Như vậy bài toán trên có thể là BTQHTT thông thường, quy hoạch tuyến tính nguyên hay quy hoạch 0–1. Cách bố trí dữ liệu cho trên bảng tính: c[1] c[2] . . . . . . c[n] Σ c[j] x[j] a[1,1] a[1,2] . . . . . . a[1,n] Σ a[1,j] x[j] b[1] a[2,1] a[2,2] . . . . . . a[2,n] Σ a[2,j] x[j] b[2] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a[m,1] a[m,2] . . . . . . a[m,n] Σ a[m,j] x[j] b[m] x[1] x[2] . . . . . . x[n] Hàng cuối cùng là các giá trị ban đầu của các biến để các công thức của Excel hoạt động, có thể lấy giá trị của tất cả các biến bằng 1. Xét bài toán: x1 +4x2 + x3 → Min , với các ràng buộc: 2x1 +3x2 +4x3 ≥ 20 5x1 – x2 +2x3 ≥12 x1 +2x2 – x3 ≤ 2 x1 +4x2 –2x3 ≤1 x1, x2, x3 ≥ 0 Các bước thực hiện để giải bài toán: Bước 1. Nhập dữ liệu bài toán vào bảng tính dưới dạng sau: Phương án ban đầu X = (1, 1, 1), nó có thể không chấp nhận được. Bước 2. Tính giá trị hàm mục tiêu tại ô E2 bằng công thức = SUMPRODOCT($B$7 : $D$7, B2 : D2) Hàm Sumproduct cho tích vô hướng của hai dãy ô. Copy công thức từ ô E2 sang dãy các ô E3 : E6 nhằm tính giá trị vế trái của bốn ràng buộc bài toán (1). Bước 3. Dùng lệnh Tools / Solver, xuất hiện hộp thoại Solver Parameters. 34 Mục Set Target Cell: chọn ô đích (chứa giá trị hàm mục tiêu), có thể nháy vào biểu tượng của Excel bên phải hộp văn bản để xác định ô, trong ví dụ chọn ô E2. Mục Equal To: chọn Max nếu cực đại hàm mục tiêu, chọn Min nếu cực tiểu hàm mục tiêu, chọn Value of và nhập giá trị nếu muốn ô đích bằng một giá trị nhất định, trong ví dụ chọn Min. Mục By Changing cells: chọn các ô chứa các biến của bài toán, ta chọn khối ô B7:D7. Nháy nút Add để nhập tất cả các ràng buộc vào khung Subject to the Constraints (dòng đầu trong khung ứng với ràng buộc không âm trên các biến, dòng thứ hai ứng với hai ràng buộc đầu bài toán (2), dòng cuối ứng với 2 ràng buộc cuối). Khi nháy nút Add, hiện hộp thoại Hộp văn bản Cell Reference để chọn các ô cần đặt ràng buộc lên chúng, hộp văn bản ở giữa để chọn loại ràng buộc (>= = <= interger, binary), hộp văn bản Constraint để chọn giá trị ràng buộc (có thể là số hay giá trị trong các ô). Sau khi nhập xong các ràng buộc, nháy vào nút Options, hiện hộp thoại Solver Options, đánh dấu kiểm vào mục Assume Linear Model (khảng định mô hình của ta là tuyến tính). Bước 4. Trong hộp thoại Solver Parameters nháy vào nút Solve để bắt đầu giải bài toán tối ưu. Giải xong bài toán xuất hiện hộp thoại Solver Results, chọn mục Keep Solver Solution (giữ lại lời giải), nháy OK, kết quả giải bài toán nằm ở các ô B7 : D7. Kết quả ta được phương án tối ưu là X = (0.5 , 0 , 4.75), giá trị cực tiểu hàm mục tiêu là 5.25 ở ô E2. 35 3.2. Giải bài toán quy hoạch phi tuyến có ràng buộc tuyến tính Xét bài toán quy hoạch phi tuyến Min{f(x)| gi (x) = 0, i = 1, 2, , m, x∈Rn}. Để giải bài toán quy hoạch phi tuyến bằng Solver ta cần xác định khối ô để chứa các biến (x[1], x[2], . . . , x[n]), một ô chứa giá trị hàm mục tiêu f(x), khối m ô chứa giá trị các hàm gi (x) . Ví dụ. Giải bài toán quy hoạch toàn phương: – x1 –2x2 +0,5x1 2 +0,5x2 2 →Min 2x1 +3x2 + x3 =6 x1 +4x2 + x4 =5 x1, x2, x3, x4 ≥ 0 Bảng tính để giải bài toán này như sau: Phương án trong khối ô B2:E2 (phương án ban đầu cho mọi phần tử bằng 0), hàm mục tiêu trong ô F2 xác định bởi công thức = - b2 - 2*c2 + 0.5*b2^2 + 0.5*c2^2. Ô F3 tính theo công thức = sumproduct ($b$2: $e$2, b3 : e3), công thức này chép sang ô F4. Các ràng buộc bài toán B2 : E2 >= 0, và F3:F4 = G3:G4. Khi giải các bài toán quy hoạch phi tuyến ta phải bỏ chọn mục Assume Linear Model trong hộp thoại Solver Options. Kết quả dùng Solver giải bài toán: trị tối ưu -2.0294, phương án tối ưu (0.7647, 1.0588, 1.294, 0). Tóm lại Solver có thể giải được nhiều bài toán tối ưu, số lượng biến tối đa của bài toán là 200 biến. Tuy nhiên cũng có nhiều bài toán nó không giải được, khi đó nó đưa thường đưa ra các thông báo: – Solver could not find a feasible solution: bài toán không có lời giải chấp nhận được. Hoặc có thể do các giá trị khởi đầu của những ô chứa biến khác quá xa các giá trị tối ưu, hãy thay đổi các giá trị khởi đầu và giải lại. – The maximum iteration limit was reached, continue anyway ? số bước lặp đã đến số cực đại. Ta có thể tăng số bước lặp ngầm định nhờ lệnh Tools/ Solver, chọn Options, nhập giá trị mới vào hộp Iterations. – The maximum time limit was reached, continue anyway ? thời gian chạy vượt quá thời gian tối đa ngầm định. Ta có thể sửa giá trị trong mục Max Time trong gộp thoại Solver Options. Chú ý, nếu các lệnh Solver và Data Analysis không có trong menu Tools ta phải cài đặt bổ sung từ đĩa CD: dùng lệnh Tools / Add-Ins, hiện hộp thoại, chọn mục Solver Add in và Analysis ToolPak. 36 3.3. Một số ví dụ khác Bài 1. Giải BTQHTT nguyên bộ phận: z=5x1 +x2 +x3 +2x4 +3x5 →min –x2 +5x3 –x4 –2x5 ≤ 2 5x1 –x2 +x5 ≥7 x1 +x2 +6x3 +x4 ≥4 xj ≥ 0 j=1, 2, 3, 4, 5 xj = interger, j = 1, 2, 3. Đáp số: Giá trị tối ưu là 12, phương án tối ưu (2, 2, 0, 0, 0). Bài 2. Giải BTQHTT 0–1 (bài toán cái túi) sau: 30x1 +19x2 +13x3 +38x4 +20x5 +6x6 +8x7 +19x8 +10x9 +11x10 →max 15x1 +12x2 +9x3 +27x4 +15x5 +5x6 +8x7 +20x8 +12x9 +15x10 → 62 xj ∈{0, 1}, j=1, 2,",10 Đáp số: Giá trị tối ưu là 95, phương án tối ưu là ( 1, 1, 0, 1, 0, 0, 1, 0, 0, 0). Bài 3. Giải bài toán quy hoạch lõm (có thể có nhiều cực tiểu địa phương) –x1 2 +2x1 –x2 2 +4x2 –x3 2 +8x3 –x4 2 +14x4 –x5 2 +18x5 –180 →Min –x1 –2x2 +x3 +2x4 +3x5 ≤ 85 –7x1 +9x2 –5x3 +33x4 –11x5 ≤500 2x1 –x2 +2x3 –x4 +2x5 ≤ 150 1.3x1 +x2 +x3 +x4 +x5 ≤ 300 x1 +x2 +x3 +x4 +x5 ≤ 300 x1, x2, x3, x4, x5 ≥0 Đáp số. Với phương án ban đầu X = (50, 50, 50, 50, 50) dùng Solver có phương án tối ưu là X = (0, 190, 0, 0, 110) và trị tối ưu hàm mục tiêu là - 45640. 4. GIẢI BTQHTT TRONG LINGO LINGO cho phép giải rất nhiều loại toán tối ưu, trong đó có BTQHTT (biến liên tục cũng như biến nguyên). Để giải bài toán này, chúng ta cần cài đặt Lingo vào trong máy tính. Nhấn vào biểu tượng Lingo trên màn hình để vào cửa sổ Lingo. Sau đó thực hiện các lệnh Lingo: Menu > New > và gõ vào các dữ liệu của bài toán. Nhập bài toán max = 8*x1+6*x2; 4*x1+2*x2<=76; 37 2*x1+5*x2<=52; @gin(x1); @gin(x2); Hai điều kiện sau cùng là các điều kiện biến nguyên. Kết quả chạy bài toán khi các biến đều liên tục Rows= 3 Vars= 2 No. integer vars= 0 ( all are linear) Nonzeros= 8 Constraint nonz= 4( 0 are +- 1) Density=0.889 Smallest and largest elements in absolute value= 2.00000 76.0000 No. : 0, Obj=MAX, GUBs <= 1 Single cols= 0 Optimal solution found at step: 0 Objective value: 159.0000 Variable Value Reduced Cost X1 17.25000 0.0000000E+00 X2 3.500000 0.0000000E+00 Row Slack or Surplus Dual Price 1 159.0000 1.000000 2 0.0000000E+00 1.750000 3 0.0000000E+00 0.5000000 Kết quả chạy bài toán khi biến x1 nguyên Rows= 3 Vars= 2 No. integer vars= 1 ( all are linear) Nonzeros= 8 Constraint nonz= 4( 0 are +- 1) Density=0.889 Smallest and largest elements in absolute value= 2.00000 76.0000 No. : 0, Obj=MAX, GUBs <= 1 Single cols= 0 Optimal solution found at step: 5 Objective value: 157.6000 Branch count: 1 Variable Value Reduced Cost X1 17.00000 -5.600000 X2 3.600000 0.0000000E+00 Row Slack or Surplus Dual Price 1 157.6000 1.000000 2 0.8000000 0.0000000E+00 3 0.0000000E+00 1.200000 38 Kết quả chạy bài toán khi các biến đều nguyên Rows= 3 Vars= 2 No. integer vars= 2 ( all are linear) Nonzeros= 8 Constraint nonz= 4( 0 are +- 1) Density=0.889 Smallest and largest elements in absolute value= 2.00000 76.0000 No. : 0, Obj=MAX, GUBs <= 1 Single cols= 0 Optimal solution found at step: 7 Objective value: 156.0000 Branch count: 2 Variable Value Reduced Cost X1 18.00000 -8.000000 X2 2.000000 -6.000000 Row Slack or Surplus Dual Price 1 156.0000 1.000000 2 0.0000000E+00 0.0000000E+00 3 6.000000 0.0000000E+00 5. GIẢI BTQHTT BẰNG PHẦN MỀM QHTT Sử dụng phần mềm QHTT trên mạng giáo dục edu.net.vn, dễ dàng nhập được dữ liệu BTQHTT và có đáp số với toàn bộ các bảng trung gian. Tuy nhiên phần mềm này chỉ áp dụng cho các biến liên tục và vẫn còn sai sót. Bài toán dạng chính tắc: F(x) = 8x1 + 6x2 => MAX Các ràng buộc: 4x1 + 2x2 + x3 = 60 2x1 + 4x2 + x4 = 48 Trong đó: 39 x3, x4 là biến bù x1 >=0, x2 >=0, x3 >=0, x4 >=0 Ci Xi Yi X1 X2 X3 X4 Lamda 0 X3 60 4 2 1 0 15 0 X4 48 2 4 0 1 24 F(x) 0 -8 -6 0 0 Ci Xi Yi X1 X2 X3 X4 Lamda 8 X1 15 1 1/2 1/4 0 30 0 X4 18 0 3 -1/2 1 6 F(x) 120 0 -2 2 0 D Ci Xi Yi X1 X2 X3 X4 Lamda 8 X1 12 1 0 1/3 -1/6 - 6 X2 6 0 1 -1/6 1/3 - F(x) 132 0 0 5/3 2/3 Phương án tối ưu của bài toán là : (12,6,0,0) Giá trị tối ưu của hàm mục tiêu là : F(x) = 132 40 Chương III BÀI TOÁN QUY HOẠCH PHI TUYẾN 1. PHƯƠNG PHÁP RST2ANU GIẢI BÀI TOÁN TỐI ƯU PHI TUYẾN TOÀN CỤC HỖN HỢP NGUYÊN 1.1. Đặt vấn đề Dạng chính tắc của bài toán tối ưu một mục tiêu được biểu diễn như sau: Min (Max) f(X) , X = (x1, x2, , xn)∈ Rn, với các điều kiện ràng buộc (i) gj(X) ≤ 0, j = 1, 2, , k, (ii) gj(X) = 0, j = k+1, k+2, , .m. Trong các bài toán thực tế có thể bổ sung thêm các ràng buộc (iii) ai ≤ xi ≤ bi, i = 1, 2, , n. Trong trường hợp hàm mục tiêu f(X) hay có ít nhất một trong các hàm ràng buộc gj(X), j = 1, 2, , m, là hàm phi tuyến, chúng ta có bài toán tối ưu phi tuyến. Khi tất cả các toạ độ xi đều bắt buộc nhận các giá trị nguyên, i = 1, 2, , n, thì ta có bài toán tối ưu nguyên. Còn nếu chỉ có một số toạ độ (nhưng không phải tất cả các toạ độ) bắt buộc nhận giá trị nguyên thì ta có bài toán tối ưu hỗn hợp nguyên. Ký hiệu D là miền các phương án (miền ràng buộc) cho bởi các ràng buộc (i), (ii) và / hoặc (iii) thì bài toán tối ưu trên đây có thể viết gọn hơn như sau: f(X) → Min (Max) với X ∈ D. Lúc này, đối với bài toán cực tiểu hoá, X* ∈ D được gọi là phương án tối ưu toàn cục nếu ∀ X∈D ta luôn có: f(X*) ≤ f(X). Trong trường hợp f(X*) ≤ f(X) chỉ đúng với ∀X∈D trong một lân cận nào đó của X* thì X* được gọi là phương án tối ưu địa phương. Một cách tương tự, ta có thể định nghĩa khái niệm phương án tối ưu toàn cục / địa phương cho bài toán cực đại hoá. Nếu chúng ta chỉ quan tâm tới việc tìm kiếm phương án tối ưu toàn cục thì ta có bài toán tối ưu toàn cục. Các phương pháp giải bài toán tối ưu toàn cục phi tuyến đơn mục tiêu được phân ra thành hai lớp: phương pháp tất định và phương pháp ngẫu nhiên (deterministic and stochastic methods). Phương pháp tất định sử dụng các tính chất giải tích của hàm mục tiêu và các hàm ràng buộc. Một số dạng bài toán tối ưu toàn cục với những tính chất giải tích nhất định của hàm mục tiêu và các hàm ràng buộc có thể giải được bằng các phương pháp tất định thích hợp, chẳng hạn như phương pháp quy hoạch toàn phương, quy hoạch tách, quy hoạch lồi, quy hoạch d.c Trong các trường hợp đó phương án tối ưu toàn cục có thể tìm được sau một số hữu hạn bước tính toán với độ chính xác chọn trước. Tuy nhiên, đối với nhiều lớp bài toán tối ưu toàn cục phương pháp tất định tỏ ra không có hiệu quả. Trong khi đó, các phương pháp ngẫu nhiên như: phương pháp đa khởi tạo (multistart), mô phỏng tôi (simulated annealing), thuật giải di truyền (genetic 41 algorithm) có thể áp dụng để giải các bài toán tối ưu toàn cục dạng bất kỳ, không đòi hỏi các tính chất đặc biệt của hàm mục tiêu hay các hàm ràng buộc. Các phương pháp ngẫu nhiên đặc biệt tỏ ra có hiệu quả đối với các bài toán tối ưu phi tuyến nguyên và hỗn hợp nguyên. Tuy nhiên, các phương pháp này thường chỉ cho phương án “gần” tối ưu khá tốt sau một số hữu hạn bước mà không kiểm soát được độ chính xác của phương án tìm được. Như vậy, hiện tại có nhiều phương pháp tối ưu toàn cục được đề xuất. Tuy nhiên chưa có một phương pháp nào tỏ ra hữu hiệu cho mọi bài toán tối ưu, đặc biệt là các bài toán tối ưu với biến nguyên hay hỗn hợp nguyên. Hơn nữa, các phương pháp tối ưu cần phải được lập trình để đóng gói thành các phần mềm thân thiện đối với người sử dụng. Đây là một đòi hỏi rất thực tế của các kĩ sư, các nhà khoa học, các doanh nghiệp trong nhiều lĩnh vực công nghiệp cũng như nông nghiệp. Trong bài báo này, chúng tôi trình bày một phần mềm tính toán khoa học (RST2ANU) có thể đáp ứng được phần nào các đòi hỏi nêu trên đối với người sử dụng để giải các bài toán tối ưu phi tuyến toàn cục với các biến liên tục, nguyên hoặc hỗn hợp nguyên. Phần mềm này được xây dựng dựa trên phương pháp tìm kiếm ngẫu nhiên có kiểm soát (cùng tên gọi RST2ANU) do Mohan và Nguyễn Hải Thanh đề xuất (Xem “A controlled random search technique incorporating the simulated annealing concept for solving integer and mixed integer global optimization problems”, Computational Optimization and Applications, Vol. 14, pp. 103-132, 1999). Đây là một phương pháp tối ưu đã được chạy kiểm thử trên hàng trăm bài toán mẫu và nhiều bài toán thực tế với độ tin cậy rất cao và tốc độ tính toán chấp nhận được. 1.2. Thuật giải tìm kiếm ngẫu nhiên có kiểm soát RST2ANU Thuật giải RST2ANU là thuật giải lặp, bao gồm hai pha, pha địa phương và pha toàn cục. Trong pha toàn cục, một số lượng thích hợp đủ lớn các phương án chấp nhận được được phát sinh ra một cách ngẫu nhiên và lưu trữ trong mảng có tên A. Đánh dấu hai điểm có giá trị hàm mục tiêu lớn nhất và nhỏ nhất tương ứng là M và L. Trong pha địa phương, các phương án được xử lý nhằm thu được giá trị ước lượng tốt hơn của hàm mục tiêu. Trong pha này, thuật giải xác định X* là điểm được nội suy bậc hai dựa trên phương án L và hai phương án khác được chọn ngẫu nhiên trong mảng A. Nếu như X* chấp nhận được thì với f(X*) ≤ f(M), M sẽ được thay thế bởi X* trong mảng A, còn với f(X*)>f(M) M sẽ được thay thế bởi X* với xác suất p= exp(-β(f(X*)-f(M))/(f(X*)-f(L))) , trong đó β >0 là tham số được lựa chọn thích hợp. Nếu X* không phải là phương án chấp nhận được, bỏ qua X* và chọn hai phương án khác trong A một cách ngẫu nhiên rồi cùng với L tiếp tục sinh ra phương án mới. Quá trình cứ thế tiếp diễn như vậy cho tới khi tập hợp các phương án trong A sẽ có xu hướng co cụm lại xung quanh một phương án tối ưu toàn cục. Lưu đồ thuật giải RST2AN được thể hiện trên hình minh hoạ, trong đó: • n, f(X), g(j), ai, bi, là các đầu vào. 42 • A = RandomNSolution (N) phát sinh N phương án ngẫu nhiên chấp nhận được, đồng thời tính giá trị của hàm mục tiêu và trả về kết quả cho mảng A. Như vậy, mảng A chứa luôn cả giá trị hàm mục tiêu tương ứng với từng phương án. Lưu đồ thuật giải RST2ANU • Arrange(A) sắp xếp mảng A theo thứ tự tăng dần của hàm mục tiêu. r = random(0,1) p=exp(-beta(f(X*)-f(M))/(f(X*)-f(L))) N 43 • Max(A), Min(A) trả về phương án có giá trị hàm mục tiêu lớn nhất và nhỏ nhất trong A. • Clustered(A, eps1, eps2) cho biết mảng A đã hội tụ theo hàm mục tiêu hay chưa. • Nếu (f(M) – f(L))/FM) < eps1 thì mảng A hội tụ, ngược lại chưa hội tụ, với FM = f(M) nếu f(M) > eps2, ngược lại FM = 1. • NewSolution() trả về một phương án mới được suy ra từ 3 điểm: L và hai điểm được chọn ngẫu nhiên khác trong mảng A theo phương pháp nội suy. • Feas(X) nhận giá trị TRUE nếu X chấp nhận được, ngược lại nhận giá trị FALSE • Random(0,1) trả về giá trị ngẫu nhiên nằm trong khoảng (0,1). • Replace(A, M, X*) thay thế M trong A bởi X* kèm theo cả giá trị hàm mục tiêu sao cho không cần phải sắp xếp lại mảng A mà vẫn đảm bảo các điểm được sắp xếp theo thứ tự giá trị hàm mục tiêu tăng dần. • Kết thúc 1: Số lần tìm kiếm liên tiếp mà không cải thiện được giá trị hàm mục tiêu vượt quá số lần cho phép. Thuật giải dừng với giá trị tốt nhất của hàm mục tiêu tìm được là FL tương ứng với phương án L. • Kết thúc 2: Phương án tối ưu toàn cục đã đạt được là L với giá trị hàm mục tiêu là FL. • Kết thúc 3: Số lần nội suy liên tiếp mà không tìm được phương án thay thế M trong A vượt quá số lần cho phép. Thuật giải dừng với giá trị tốt nhất của hàm mục tiêu tìm được là FL tương ứng với phương án L. • Kết thúc 4: Số lần lặp vượt quá số lần cho phép. Thuật giải dừng với giá trị tốt nhất của hàm mục tiêu tìm được là FL tương ứng với phương án L. 1.3. Một số nhận xét về phiên bản nâng cấp của phần mềm Phần mềm tính toán khoa học RST2ANU đã được thiết kế và xây dựng có thể sử dụng để giải quyết nhiều mô hình tối ưu phát sinh trong lĩnh vực nông nghiệp, hỗ trợ cho giảng dạy và nghiên cứu khoa học nông nghiệp cũng như trong các lĩnh vực khác. Phần mềm này đã được nâng cấp có tính thân thiện với người sử dụng và tránh được sao chép, có thể được phổ cập có bản quyền một cách rộng rãi. Việc tạo ra các giao diện thân thiện cho phép dễ dàng nhập các hàm mục tiêu và ràng buộc của nhiều dạng bài toán tối ưu phi tuyến là một vấn đề khá phức tạp đã được giải quyết thành công trong phần mềm này. Trong tình hình hiện tại, khi các phần mềm tối ưu phi tuyến không có sẵn trên thị trường trong và ngoài nước, phần mềm RST2ANU nên được triển khai sử dụng để giải quyết các bài toán tối ưu trong các lĩnh vực khác nhau, bao gồm cả các bài toán nguyên và hỗn hợp nguyên. Các nghiên cứu cần tiếp tục được triển khai và được hỗ trợ 44 về mặt tài chính để tích hợp RST2ANU vào các gói phần mềm trong điều khiển tự động hóa hay trong các hệ hỗ trợ ra quyết định. 2. MỘT SỐ VÍ DỤ ÁP DỤNG RST2ANU 2.1. Bài 1: Bài toán xác định tham số sàng phân loại Sau đây là cách viết chương trình con tính giá trị hàm mục tiêu và kiểm tra tính khả thi của phương án đã được phát sinh khi thực hiện chương trình máy tính RST2ANU. float f() { float fv, g; g= 0.05*cos(0+3.1417/18)+0.3*cos(x[0])+0.15*cos(x[1])+0.5*cos(x[2])- 0.365; g=1000*g*g; fv=g; g= 0.05*sin(0+3.1417/18)+0.3*sin(x[0])+0.15*sin(x[1])+0.5*sin(x[2])-0.635; g=1000*g*g; fv=fv+g; g=0.05*cos(0+3.1417/18)+0.3*cos(x[0])+1.075*cos(x[1]- 3.1417/8)+0.4*cos(x[3])-1.365; g=1000*g*g; fv=fv+g; g=0.05*sin(0+3.1417/18)+0.3*sin(x[0])+1.075*sin(x[1]- 3.1417/8)+0.4*sin(x[3])-0.635; g=1000*g*g; fv=fv+g; return(fv); } int feas() {int flag=1; return(1); } File vào v1.in 1 4 0 4 0.000001 0.000001 10000 2000 0 2000 0 0 1 0 0 0 0 0 1 2 3 0 3.1417 0 3.1417 0 3.1417 0 3.1417 123 234 345 456 567 45 3 3 0.01 0 0 File ra v1.out PROBLEM No 1 **crs2.c n=4,nc=0,nint=4,epsilon=0.000001,eps1=0.000001,iterlast=10000 ifailast=2000,imlast=0,islast=2000,iprint=0,id=0,imp=1,ipat=0 noninteger variables are: x[0] x[1] x[2] x[3] guess=0,nguess=0,lppatt=0 lower and upper bounds of coordinates: xmin[0]=0.000000,xmax[0]=3.141700 xmin[1]=0.000000,xmax[1]=3.141700 xmin[2]=0.000000,xmax[2]=3.141700 xmin[3]=0.000000,xmax[3]=3.141700 itnlast=3,istnlast=3,eps2=0.010000 ***CRS SOLUTION FOR NLPP by type 1 as usually **case 1 na=50 seed[0]=*, s*,f=0.000000,fm=0.000001,iter=763,ifun=1664,t1=0 *, s*,f=0.000000,fm=0.000001,iter=1069,ifun=1619,t1=0 *, s*,f=0.000000,fm=0.000001,iter=1026,ifun=1557,t1=0 *,f*,f=4.300038,fm=4.300157,iter=1941,ifun=25813,t1=0 t*, f= 0.000000,iter2=4799 ifun2=30653,t2=0 fopt=0.000000 0.198735,0.550661,1.784750,1.670850, seed[1]=*,f*,f=4.300035,fm=4.300137,iter=1891,ifun=32299,t1=0 *,f*,f=4.300043,fm=4.300156,iter=1705,ifun=31407,t1=0 *,f*,f=4.300050,fm=4.300186,iter=967,ifun=21132,t1=1 *, s*,f=0.000000,fm=0.000001,iter=938,ifun=1481,t1=0 t*, f= 0.000000,iter2=5501 ifun2=20783,t2=1 fopt=0.000000 0.198752,0.550653,1.784751,1.670846, seed[2]=*,f*,f=4.300051,fm=4.300158,iter=1168,ifun=-27879,t1=0 *, s*,f=0.000000,fm=0.000001,iter=933,ifun=1398,t1=0 *,f*,f=4.300040,fm=4.300148,iter=1295,ifun=-32336,t1=0 *, s*,f=0.000000,fm=0.000001,iter=1063,ifun=1643,t1=0 t*, f= 0.000000,iter2=4459 ifun2=8362,t2=0 fopt=0.000000 0.198742,0.550658,1.784749,1.670847, seed[3]=*, s*,f=0.000000,fm=0.000001,iter=943,ifun=1430,t1=0 46 *, s*,f=0.000000,fm=0.000001,iter=868,ifun=1345,t1=0 *, s*,f=0.000000,fm=0.000001,iter=1048,ifun=1634,t1=0 *,f*,f=4.300054,fm=4.300150,iter=2354,ifun=-30714,t1=0 t*, f= 0.000000,iter2=5213 ifun2=-26305,t2=0 fopt=0.000000 0.198741,0.550658,1.784751,1.670850, seed[4]=*, s*,f=0.000000,fm=0.000001,iter=1216,ifun=1905,t1=0 *, s*,f=0.000000,fm=0.000001,iter=1191,ifun=1859,t1=0 *,f*,f=4.300034,fm=4.300148,iter=1659,ifun=27170,t1=0 *, s*,f=0.000000,fm=0.000001,iter=801,ifun=1234,t1=0 t*, f= 0.000000,iter2=4867 ifun2=32168,t2=0 fopt=0.000000 0.198742,0.550658,1.784751,1.670848, ***b1=1196,b2=1883,*** ***a1=4967,a2=25,*** 2.2. Bài 2: Bài toán xác định cơ cấu đầu tư chăn nuôi cá float f() { float fv; fv=19.375*pow(x[0],0.236)*pow(x[1],0.104)*pow(x[2],0.096)*pow(x[3],0.056); fv=fv*pow(x[4],0.056)*exp(0.168*x[5])*exp(0.066*x[6]); return(fv); } int feas() { int flag=1; float g; g=x[0]+x[1]+x[2]+x[3]+x[4]; if(g>50) { flag=0; goto LAST; } g=x[5]+x[6]; if(g>1) { flag=0; goto LAST; } LAST: if(flag==0) {return(0);} 47 else {return(1);} File vào CUONG1.IN 1 7 2 5 0.001 0.001 10000 2000 0 2000 0 0 0 0 0 0 0 0 1 2 3 4 0 50 0 50 0 50 0 50 0 50 0 1 0 1 123 234 345 456 567 0 0 0.01 0 0 File ra CUONG1.OUT PROBLEM No 1 **crs2.c n=7,nc=2,nint=5,epsilon=0.001000,eps1=0.001000,iterlast=10000 ifailast=2000,imlast=0,islast=2000,iprint=0,id=0,imp=0,ipat=0 noninteger variables are: x[0] x[1] x[2] x[3] x[4] guess=0,nguess=0,lppatt=0 lower and upper bounds of coordinates: xmin[0]=0.000000,xmax[0]=50.000000 xmin[1]=0.000000,xmax[1]=50.000000 xmin[2]=0.000000,xmax[2]=50.000000 xmin[3]=0.000000,xmax[3]=50.000000 xmin[4]=0.000000,xmax[4]=50.000000 xmin[5]=0.000000,xmax[5]=1.000000 xmin[6]=0.000000,xmax[6]=1.000000 itnlast=0,istnlast=0,eps2=0.010000 ***CRS *** SOLUTION FOR NLPP by type 1 as usually **case 1 na=16 seed[0]=0*, s*,f=-88.334068,fm=-88.248016,iter=81,ifun=15061,t1=0 t*, f= -88.334068,iter2=81 ifun2=15061,t2=0 fopt=-88.334068 20.970308,9.272722,9.084186,5.446885,5.225899,1.000000,0.000000, seed[1]=0*, s*,f=-88.360970,fm=-88.274643,iter=688,ifun=15912,t1=0 t*, f= -88.360970,iter2=688 ifun2=15912,t2=0 fopt=-88.360970 21.514578,9.515970,8.769965,5.103930,5.095558,1.000000,0.000000, seed[2]=0*, s*,f=-88.360855,fm=-88.272774,iter=588,ifun=14737,t1=1 t*, f= -88.360855,iter2=588 ifun2=14737,t2=1 fopt=-88.360855 48 21.570715,9.461304,8.736217,5.097508,5.134254,1.000000,0.000000, seed[3]=0*, s*,f=-88.359039,fm=-88.270882,iter=691,ifun=17550,t1=0 t*, f= -88.359039,iter2=691 ifun2=17550,t2=0 fopt=-88.359039 21.375309,9.651163,8.772411,5.121580,5.079536,1.000000,0.000000, seed[4]=0*, s*,f=-88.360451,fm=-88.273888,iter=691,ifun=16477,t1=0 t*, f= -88.360451,iter2=691 ifun2=16477,t2=0 fopt=-88.360451 21.518408,9.449259,8.761295,5.180042,5.090996,1.000000,0.000000, ***t3=0/1*** ***b1=547,b2=2840,*** ***a1=547,a2=2840,*** 3. TÍCH HỢP RST2ANU VỚI MATLAB Trong Matlab không có lệnh nhảy vô điều kiện goto. Để xử lí vấn đề này cần lập trình theo từng khối tuần tự, kết hợp với cách sử dụng các lời gọi hàm thông qua các file chương trình, khối lệnh khác nhau. Chương trình RST2ANU gồm nhiều file, mỗi file có thể là một chương trình con, cũng có thể là một khối lệnh. Chương trình hoàn chỉnh được chứa trong thư mục RST2ANU, file CRS là file chính và cũng là lệnh gọi chương trình từ Matlab. Nhập / lưu bài toán và các dữ kiện Chạy chương trình bằng cách dùng lệnh crs từ dòng lệnh của Matlab. Khi chạy sẽ thấy xuất hiện: 1. Enter the problem. 2. Load problem from file. 3. Exit. Your choice: Nhập dữ liệu cho bài toán có thể nhập từ file dữ liệu có sẵn (chọn 2), hoặc có thể nhập lần lượt các tham số đầu vào (chọn 1), nếu chọn 3 là thoát khỏi chương trình. 3.1. Nhập từ bàn phím Ví dụ. Xét bài toán tối ưu phi tuyến toàn cục hỗn hợp nguyên z = x10,6 + x20,6 + x30,4 + 2x4 + 5x5 − 4x3 – x6, → Min với các ràng buộc: x2 − 3x1 − 3x4 = 0; x3 − 2x2 − 2x5 = 0; 4x4 – x6 = 0; x1 + 2x4 ≤ 4; x2 + x5 ≤ 4; x3 + x6 ≤ 6; x1 ≤ 3; x2 ≤ 4; x3 ≤ 4; x4 ≤ 1; x5 ≤ 2; x6 ≤ 6; x1, x2, x3, x4, x5, x6 ≥ 0; x4, x5, x6 là các biến nguyên. Your choice: 1 49 Sau đó lần lượt xuất hiện các dòng nhắc nhập dữ liệu đầu vào, ta lần lượt nhập như sau: +++++ THE PROBLEM +++++ Number of variables (N):6 Array to describe integer variables:[0 0 0 1 1 1] Goal function f(x)=(X(1)^0.6)+(X(2)^0.6)+(X(3)^0.4)+2*X(4)+5*X(5)-4*X(3)- X(6) Feasible conditions: (Leave blank for none) 1. X(1)=(X(2)-3*X(4))/3 2. X(3)=2*(X(2)+X(5)) 3. X(6)=4*X(4) 4. X(2)-3*X(1)-3*X(4)==0 5. X(3)-2*X(2)-2*X(5)==0 6. 4*X(4)-X(6)==0 7. X(1)+2*X(4)<=4 8. X(2)+X(5)<=4 9. X(3)+X(6)<=6 10. Number of feasible conditions entered: 9 Array to describe min values of X: [0 0 0 0 0 0] Array to describe max values of X: [3 4 4 1 2 6] +++++ CONDITIONS FOR ALGORITHM +++++ Limit Random Trying to find one feasible solution to (1000): 1000 Number of solutions in array A (20): 30 Limit Number of Interactive to(1000): 1000 Limit Number of Consecutive searches to (500): 200 Limit Number of Improve Failures to (500): 200 Epsilon 1 (1e-6): 1e-006 Epsilon 2(1e-1): 0.1 Beta (1): 1 Enter file name to save this problem (*.mat, leave blank for unsave):demo_01.mat Kết quả nhận được như sau: ===== Here is the result ===== Stop with number of failure on improve goal value exceed. X* = 0.6667 2.0000 4.0000 0 0 0 f(X*) = -11.9591 ± 1.1959e-005 50 Total time: 6.875 second(s) Source: demo_01.mat Results saved to res.txt End. 3.2. Nhập từ tệp Bài toán xác định cơ cấu đầu tư 1. Enter the problem. 2. Load problem from file. 3. Exit Your choice:2 Enter file name (*.mat):p01_50.mat The problem is: MIN f(X)=- 19.3753*X(1)^0.236*X(2)^0.104*X(3)^0.096*X(4)^0.056*X(5)^0.056*exp(0.168*X(6 ))*exp(0.066*X(7)) 1. X(5)=50-(X(1)+X(2)+X(3)+X(4)); 2. X(6)+X(7)==1 3. X(1)+X(2)+X(3)+X(4)+X(5)==50 0 <= X(1) <= 50 real 0 <= X(2) <= 50 real 0 <= X(3) <= 50 real 0 <= X(4) <= 50 real 0 <= X(5) <= 50 real 0 <= X(6) <= 1 integer 0 <= X(7) <= 1 integer Epsilon approximately: 0.0001% Searching. Be patient... Searching completed. ===== Here is the result ===== Stop with epsilon approximately. X* = Columns 1 through 6 21.0902 9.4856 9.2223 5.0966 5.1052 1.0000 Column 7 0 51 f(X*)= -88.3465 ± 8.8346e-005 Total time: 5.217 second(s) Source: p01_50.mat Results saved to res.txt End. Chú ý: – Để xoá màn hình dùng lệnh: clc – Để đọc tệp *.mat dùng lệnh: open(‘*.mat)

Các file đính kèm theo tài liệu này:

  • pdfbaigiangcacmohinh_phanmemtoiuuphan1_5011.pdf
Tài liệu liên quan