Cỏc modul tối ưu được xõy dựng ở trờn được gắn vào một giao diện như hỡnh dưới.
Hỡnh V-1. Giao diện chương trỡnh
Chương trỡnh chớnh bừy giờ chớnh là giao diện được tạo ra do thư viện MFC trong Visual C++ cung cấp. Tiếp theo ta chỉ việc ghộp cỏc modul tối ưu với cỏc thư viện của MFC bằng cỏch “add” chỳng vào cựng project đó tạo nờn giao diện trờn. Cũn trong hàm mục tiờu và thủ tục cỏc ràng buộc bừy giờ phải gọi đến thư viện xử lớ kớ tự để xử lớ hàm mục tiờu và cỏc ràng buộc được người sử dụng nhập vào dưới dạng xõu.
Hàm mục tiờu và cỏc ràng buộc được cho dưới dạng kớ tự trong một tệp cú tờn “nhapham.txt” trong thư mục gốc của chương trỡnh. Tệp “nhapham.txt” phải cú cấu trỳc như sau:
- Dũng đầu ghi giỏ trị của n (Vớ dụ: n=2)
- Dũng thứ 2 ghi n giỏ trị khởi tạo ban đầu cho vector x, mỗi giỏ trị cỏch nhau ít nhất một dấu cỏch.
- Dũng thứ 3 ghi biểu thức của hàm mục tiờu dưới dạng kớ tự (Vớ dụ: f(x)=(x1-2)^2+(x2-1)^2).
- Dũng tiếp theo ghi giỏ trị của m là số cỏc ràng buộc đẳng thức (giống như ghi n).
- Trong m dũng tiếp theo, mỗi dũng ghi một biểu thức của ràng buộc đẳng thức (giống như ghi hàm mục tiờu).
- Dũng tiếp theo ghi giỏ trị của p là số cỏc ràng buộc bất đẳng thức (giống như ghi n).
- Trong p dũng tiếp theo, mỗi dũng ghi một biểu thức của ràng buộc bất đẳng thức (giống như ghi hàm mục tiờu). Kết thỳc tệp. Phần xử lớ hàm được thực hiện bởi một modul xử lớ kớ tự riờng, trong đú cỳ cỏc toỏn tử +, -, *, /, và số mũ ^m (với m cú thể là số thực), ngoài ra cũn cỳ 2 hàm lượng giỏc cơ bản (sin, cos) và hàm e mũ (exp). Modul này cú tờn “nhapham” và hàm xử lớ kớ tự được khai bỏo như sau:
double value_function(CString s,double *x)
Trong đú s chớnh là xừu kớ tự của hàm cần phải sử lớ, mảng x là tham số thứ nhất khai bỏo trong hàm mục tiờu, đú là cỏc biến trạng thỏi.
Sau khi đọc xõu hàm mục tiờu trong tệp “nhapham.txt” gỏn vào s thỡ trong hàm mục tiờu f(x,n) thực hiện lệnh:
return value_function(s,x);
nú sẽ trả về đỳng giỏ trị của hàm mục tiờu tại x.
dụ với g1 là xõu của biểu thức ràng buộc bất đẳng thức thứ nhất thỡ ta gỏn như sau:
g[0] = value_function(g1,x);
Ở đõy dựng chỉ số 0 đối với g vỡ trong C++ cỏc mảng bắt đầu từ chỉ số 0.
Để chạy chương trỡnh thỡ thực hiện như sau:
Bấm “Open” để mở tệp “nhapham.txt” rồi nhập dữ liệu. Ghi và đúng tệp đú lại.
Chọn một trong bốn phương phỏp tối ưu rồi bấm “Run” để chạy chương trỡnh. Hộp time để hiển thị thời gian tớnh toỏn. Kết quả được lưu trong tệp cú tờn “ketquanhap2.txt” trong thư mục gốc của chương trỡnh.
Vớ dụ với bài toỏn tối ưu như sau: (xem [2]) Tỡm min: f(x)=(x1-2)2+(x2-1)2
Cỏc ràng buộc: h1(x)=x1-2x2+1=0 g1(x)=-x12/4-x22+1≥0 Điểm khởi tạo: x(0)=[2 2]T
Thỡ tệp “nhap.txt” như sau: n=2 2.0 2.0 f(x)=(x1-2)^2+(x2-1)^2 m=1 h1(x)=x1-2*x2+1 p=1 g1(x)=-(x1^2)/4-x2^2+1
Kết quả ở tệp “ketqua.txt” sẽ như sau:
(Chương trỡnh chạy trờn mỏy Pentium III 600 MHz) Với phương phỏp Nelder Mead, sau 24 giõy:
x*=(0.822902, 0.911440)
Với phương phỏp Hook Jeeves sau 35 giõy: fmin=1.39346
x*=(0.822878, 0.911437)
Với phương phỏp Powell sau 27 giõy: fmin=1.393460
x*=(0.822878, 0.911437)
Với phương phỏp Rosenbrock sau 14 giõy: fmin=1.393456
x*=(0.822880, 0.911437)