intTypePromotion=3

CÁC MÔ HÌNH VÀ PHẦN MỀM TỐI ƯU - CHƯƠNG 3

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:12

0
154
lượt xem
35
download

CÁC MÔ HÌNH VÀ PHẦN MỀM TỐI ƯU - CHƯƠNG 3

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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 j = 1, 2, …, k, j = k+1, k+2, …, .m. (i) gj(X) ≤ 0, (ii) gj(X) = 0, 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,...

Chủ đề:
Lưu

Nội dung Text: CÁC MÔ HÌNH VÀ PHẦN MỀM TỐI ƯU - CHƯƠNG 3

  1. 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: X = (x1, x2, …, xn)∈ Rn, với các điều kiện ràng buộc Min (Max) f(X) , (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 40
  2. 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. 41
  3. • 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. N r = random(0,1) p=exp(-beta(f(X*)-f(M))/(f(X*)-f(L))) 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. 42
  4. • 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ợ 43
  5. 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 0010000 0123 0 3.1417 0 3.1417 0 3.1417 0 3.1417 123 234 345 456 567 44
  6. 3 3 0.01 00 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 45
  7. *, 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);} 46
  8. else {return(1);} File vào CUONG1.IN 1 7 2 5 0.001 0.001 10000 2000 0 2000 0000000 01234 0 50 0 50 0 50 0 50 0 50 0101 123 234 345 456 567 0 0 0.01 00 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 47
  9. 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: x 2 − 3x 1 − 3x 4 = 0; x 3 − 2 x 2 − 2 x5 = 0 ; ≤ 4; 4x4 – x6 = 0; x 1 + 2 x 4 ≤ 4 ; x3 + x 6 ≤ 6; x 2 + x5 x 1 ≤ 3 ; x2 ≤ 4 ; x 3 ≤ 4 ; x 4 ≤ 1 ; x5 ≤ 2 ; x 6 ≤ 6; x1, x2, x3, x4, x5, x6 ≥ 0; x4, x5, x6 là các biến nguyên. Your choice: 1 48
  10. 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)
  11. 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
  12. 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) 51

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản