ỨNG DỤNG MỘT SỐ MÔ HÌNH TỐI ƯU TRONG NÔNG NGHIỆP
Tối ưu hoá là một trong những lĩnh vực kinh điển của toán học có ảnh hưởng
đến hầu hết các lĩnh vực, trong đó có nông nghiệp. Trong thực tế, việc tìm ra giải pháp
tối ưu cho một vấn đề nào đó chiếm một vai trò hết sức quan trọng. Phương án tối ưu là
những phương án tốt nhất, tiết kiệm chi phí, tài nguyên, sức lực mà lại cho hiệu quả cao.
52 trang |
Chia sẻ: phuongt97 | Lượt xem: 759 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Các mô hình và phần mềm tối ưu hoá và ứng dụng trong nông nghiệp (Phần 1), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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
Các file đính kèm theo tài liệu này:
- bai_giang_cac_mo_hinh_va_phan_mem_toi_uu_hoa_va_ung_dung_tro.pdf