Dựa vào cỏc thuật toỏn tối ưu đó trỡnh bày ở cỏc chương trước ta xõy dựng được cỏc modul tương ứng, cỏc modul này chớnh là cỏc thư viện cú thể ghộp nối với cỏc modul khỏc để giải trọn vẹn một bài toỏn, mục III sau đõy sẽ minh hoạ cụ thể cho điều này bằng hai vớ dụ.
Ở chương trước cú 4 thuật toỏn tối ưu: Hook Jeeves, Powell, Rosenbrock, Nelder Mead. Từ đú xõy dựng được 4 thư viện bằng C++ trong 4 tệp tin gốc (cho chi tiết trong Phụ lục): “HookJeeves.cpp”, “Powell.cpp”, “Rosenbrock.cpp”, “NelderMead.cpp” cựng 4 tệp tin đầu tương ứng “HookJeeves.h”, “Powell.h”, “Rosenbrock.h” và “NelderMead.h”. Cỏc thủ tục tối ưu trong mỗi tệp tin đều trựng với tờn của tệp tin đỳ, cỏc tham số phải được khai bỏo rừ ràng. Tất cả cỏc thủ tục đú đều được khai bỏo như sau:
void <Tờn_phương_phỏp>(double *&x, int n, double *h, int m, double *g, int p);
Trong đú:
n là số biến trạng thỏi (độ dài mảng x).
Mảng x cỳ dựng tham chiếu là biến trạng thỏi của hàm mục tiờu. Trước khi cú lời gọi thủ tục tối ưu thỡ mảng x phải được gỏn cho cỏc giỏ trị khởi tạo ban đầu. Sau đú thỡ kết quả tối ưu sẽ được gỏn vào trong mảng x.
m là số cỏc ràng buộc đẳng thức. p là số cỏc ràng buộc bất đẳng thức.
h là mảng chứa cỏc ràng buộc đẳng thức, g là mảng chứa cỏc ràng buộc bất đẳng thức mà trong thủ tục tối ưu dựng đến, cả hai mảng này
Vớ dụ trước khi gọi thủ tục Powell thỡ phải cho trước n, m, p, khai bỏo và cấp phỏt cỏc mảng x, h, g và gỏn cỏc giỏ trị đầu vào mảng x, sau đú gọi:
Powell(x, n, h, m, g, p);
Một yờu cầu nữa đối với người sử dụng cỏc thư viện trờn là cung cấp hàm mục tiờu do trong cỏc thủ tục tối ưu đều gọi đến hàm này. Hàm tớnh hàm mục tiờu nằm trong tập tin gốc “objective_function.cpp” và được khai bỏo trong tập tin đầu “objective_function.h” được khai bỏo như sau:
double f(double *x, int n);
Trong đú x và n là hai biến được cho trong thủ tục tối ưu ở trờn.
Cỏc tập tin khai bỏo hàm mục tiờu luụn đi kốm với cỏc tập tin chứa cỏc thủ tục tối ưu tương ứng, do đú người sử dụng chỉ việc mở tập tin gốc “objective_function.cpp” rồi sửa đổi hàm f(x,n) ở trờn như mong muốn.
Sau khi thay đổi xong hàm mục tiờu thỡ nhập cỏc ràng buộc vào thủ tục:
void constrains(double *x,int n,double *&h,int m,double *&g,int p) cũng được khai bỏo trong cựng tệp với hàm mục tiờu f(x,n).
Tờn cỏc tham số trong thủ tục trờn trựng với cỏc tham số trong lời gọi thủ tục tối ưu đó núi ở trờn.
Ngoài ra cần đặc biệt chỳ ý là tờn hàm mục tiờu (f(x,n)) và tờn thủ rục cỏc ràng buộc (constrains(…)) khụng được thay đổi vỡ trong cỏc thủ tục tối ưu đều gọi tới chỳng với tờn cố định như trờn.
Việc kết nối với cỏc thư viện tớnh toỏn khỏc luụn được gọi đến trong hàm mục tiờu. Do đú trong phần đầu tập tin gốc “objective_function.cpp” người sử dụng phải thờm vào dũng lệnh:
trong đú tờn_tệp_tin_đầu là tờn của thư viện chứa cỏc hàm tớnh toỏn được gọi trong hàm mục tiờu. Cỏc hàm này phải được gọi sao cho phự hợp với cỏc tham số của hàm mục tiờu mà cỏc modul tối ưu sẽ gọi đến.
Trong mỗi tệp tin mà cú gọi đến cỏc thủ tục tối ưu thỡ đầu tệp phải cú lời gọi:
#include “tờn_tệp_tin_đầu”
Trong đú tờn tệp tin đầu là tập tin chứa thủ tục tối ưu mà người sử dụng sẽ gọi.
Chú ý ở đõy cú thể sử dụng bất kỡ ngụn ngữ nào để xõy dựng cỏc thư viện và việc sử dụng cỏc thư viện đú tuõn theo quy tắc của ngụn ngữ lập trỡnh tương ứng.
Như vậy với một chương trỡnh tớnh toỏn hoàn chỉnh cú sử dụng cỏc modul tối ưu thỡ người dựng phải thực hiện cỏc cụng việc sau:
- Xõy dựng chương trỡnh chớnh bao gồm khai bỏo cỏc thư viện tối ưu sẽ gọi tới và khai bỏo đầy đủ cỏc tham số đó núi tới ở trờn. - Ghộp nối cỏc thư viện tớnh toỏn khỏc với thư viện cỏc modul tối
ưu. Cỏch ghộp nối tuỳ theo quy tắc của từng ngụn ngữ mà mỡnh dựng.
- Thay đổi hàm mục tiờu f(x,n) và cỏc ràng buộc như đó núi ở trờn tuỳ theo yờu cầu của từng bài toỏn cụ thể.