Nhiều bài toán tối ưu chưa có thuật toán chính xác để giải quyết cho nên cần có một thuật toán gần đúng để tìm lời giải gần tối ưu.
Trang 1Chương I: 3
Tổng quan thuật toán mô phỏng luyện kim (Simulated Annealing = SA) 3
Sự hội tụ 7
Điều kiện dừng 7
Chương II: 8
Xây dựng khung thuật toán SA 8
Hàm Main_Seq 18
Kết quả thực nghiệm 25
1 Kết quả tuần tự 26
2 Kết quả song song 26
Trang 2BÁO CÁO KHOA HỌC
ĐỂ TÀI:
THUẬT TOÁN LUYỆN KIM SONG SONG
(Parallel Simulated Annealing Algorithms)
GIẢI QUYẾT BÀI TOÁN MAX-SAT
- Để rút ngắn thời gian lập trình chúng ta cần xây dựng khung thuật toán giúp giải quyếtcác bài toán khác nhanh chóng hơn
- Mục đích của đề tài này là sử dụng thuật toán luyện kim song song để giải quyết bài toán tối ưu MAXSAT Đề tài bao gồm các nhiệm vụ sau:
• Nghiên cứu lý thuyết về thuật toán luyện kim
• Xây dựng khung thuật toán chung cho các bài toán sử dụng thuật toán luyện kim
• Áp dụng khung thuật toán luyện kim cho bài toán MAXSAT
• Cài đặt bài toán MAXSAT và đưa ra kết quả thực nghiệm trên cả chương trình tuần tự và chương trình song song
• Từ đó sử dụng khung thuật toán luyện kim để giải quyết các bài toán tối ưu khác trong thực tế như: Bài toán người du lịch, bài toán khôi phục ảnh, thiết kế mạch
IC, bài toán sắp xếp thời khoá biểu cho trường đại học…
Trang 3Chương I:
Tổng quan thuật toán mô phỏng luyện kim
(Simulated Annealing = SA)
I Giới thiệu chung về thuật toán SA
SA là một thuật toán tìm kiếm xác suất di truyền, là phương pháp tối ưu hoá có thể áp dụng để tìm kiếm tối ưu hoá toàn cục của hàm chi phí và tránh tối ưu hoá địa phương bằng việc chấp nhận một lời giải tồi hơn với một xác suất phụ thuộc nhiệt độ T
SA có nguồn gốc từ cơ học hệ thống SA thực thi đơn giản và tương tự quá trình luyện kim vật lý Trong luyện kim vật lý kim loại được đốt nóng tới nhiệt độ cao
và làm lạnh từ từ để nó kết tinh ở cấu hình năng lượng thấp (tăng kích thước của tinh thể và làm giảm những khuyết điểm của chúng) Nếu việc làm lạnh không xảy ra từ từ thì chất rắn không đạt được trạng thái có cấu hình năng lượng thấp sẽ đông lạnh đến một trạng thái không ổn định (cấu trúc tối ưu địa phương)
Gọi E là năng lượng của trạng thái s, E’ là trạng thái năng lượng của trạng thái s’
và ∆E = E’ – E là sự chệnh lệch nhiệt độ giữa trạng thái s’ và trạng thái s Nếu ∆E
≤ 0 thì sự thay đổi kết quả được chấp nhận với xác suất E k T
e−∆ / trong đó T là nhiệt độ, kB là một hằng số vật lý được gọi là hằng số Boltzmann
Trang 4 Nếu có số lượng lớn các bước lặp được thực hiện ở mỗi nhiệt độ, hệ thống sẽ đạt trạng thái cân bằng nhiệt Khi đó, sự phân bố xác suất của hệ thống trong trạng thái s ở nhiệt độ T là E k T
e
T Z
/
) (
1 ∆
trong đó Z(T): là hàm phân phối
SA sử dụng một biến điều khiển toàn cục là biến nhiệt độ T Ban đầu T ở giá trị rất cao và sau đó được giảm dần xuống Trong quá trình tìm kiếm SA thay lời giảihiện thời bằng cách chọn ngẫu nhiên lời giải láng giềng với một xác suất phụ thuộc vào sự chênh lệch giữa giá trị hàm mục tiêu và tham số điều khiển T
Quá trình tối ưu hoá được tiếp tục cho tới khi cực tiểu toàn cục được tìm thấy hoặc tổng số bước chuyển vượt quá một số tối đa các bước chuyển đã được định trước Sự chuyển tiếp ở một nhiệt độ kết thúc khi đạt tới trạng thái cân bằng nhiệt.Sauk hi đạt tới trạng thái cân bằng nhiệt thì nhiệt độ được giảm thấp hơn Nếu hệ thống không đông lạnh và cũng không tìm được cực tiểu toàn cục thì vòng lặp vẫntiếp tục và chỉ số k tăng Hệ thống đông lạnh khi T tiến tới nhiệt độ Tcuối do người dùng đưa ra Ta có sơ đồ thuật toán
II Mô hình toán học của thuật toán SA
1 Không gian trạng thái
SA thực thi trong một không gian trạng thái Không gian trạng thái là một tập hợp các trạng thái, mỗi trạng thái đại diện cho một cấu hình Kí hiệu không gian trạng thái là S, số phần tử của không gian trạng thái là |S|
Một quan hệ láng giềng trên S: µ ⊆S×S
Trang 5o Các phần tử của µ được gọi là các di chuyển
o (s, s’) Є µ kết nối qua một di chuyển được gọi là láng giềng
o (s, s’) Є µk kết nối qua một tập k di chuyển U∞k=1µk =S×S
Tập trạng thái kết nối với trạng thái đã cho si Є S được kí hiệu là Ni, số phần tử của Ni gọi là cấp độ của si Ni là tập các láng giềng của si
Có hai trạng thái si và si-1 và xác suất để si là trạng thái hiện thời phụ thuộc vào hàm chi phí của si và hàm chi phí của si-1 và nhiệt độ T
Có ba trạng thái liên tiếp si-1, si, si+1 thì trạng thái si-1 và si+1 không phục thuộc vàonhau
Xác suất mà s’ là trạng thái kế tiếp của s kí hiệu là P(s,s’,T) gọi là xác suất chuyển tiếp
' )' ,(
) ),' ( ),
((
) ,',
s
s s ss
T s
s T
ss
β ε
εα
α: hàm xác suất chấp nhận (acceptance probability function) β: hàm xác suất lựa chọn (selection probability function)
β cho phép chỉ một cặp trạng thái trong μ được lựa chọn
Xác suất lựa chọn không bao giờ bằng 0 cho một cặp trạng thái được kết nối bởi một di chuyển đơn
0 ) ' , ( ) ' , (
N
S s
s s s
s
s s s
s
β
β µ
β µ
Trang 6* cost 1
1
+
=
fitness
Sự giảm bớt chi phí tương đương với sự tăng của hàm sức khoẻ
Giá trị hàm sức khoẻ tăng khi nhiệt độ giảm thể hiện trong biểu đồ:
4 Sự phân bố trạng thái giới hạn
Cho πTk(si) là xác suất mà si là lời giải hiện thời sau k bước của thuật toán ở nhiệt
S Tk
) / ( exp(
) ( lim π
To : nhiệt độ khởi đầu
Tn: nhiệt độ kết thúc
Ti: nhiệt độ vòng i khi i
= 1, ,N
N N i
T
T T T
1
0
0
=
Trang 7(Phân bố Boltzmann)
• Phân bố giới hạn cho T 0
- Cân nhắc 2 lời giải si và sj với f(si) < f(sj) Trong trường hợp này có:
) / ) ( exp(
) (
)
T i s f j s f T
j s f
T i s f k
j S Tk i S Tk
π π
- Sự khẳng định cuối cùng là giả thiết f(s j) −f(s i) > 0
- Hội tụ tới ∞ chỉ có thể xảy ra nếu có: lim lim ( ) 0
T k
opt S s Tk T k
=
→
∞
Ở đây Sopt là tập tất cả các lời giải tối ưu
5. Sự hội tụ và điều kiện dừng
Sự hội tụ
Cho không gian tìm kiếm hữu hạn S, điều kiện đủ cho sự hội tụ là sự cân bằng chi tiết (detail balance) phụ thuộc vào xác suất giữa hai lời giải bất kỳ sj , si trong không gian trạng thái là bằng nhau:
) ( ).
( ) ( ).
(T ij T j T ji T
i τ π τ
Trong đó πi(T) là sự phân bố ổn định của trạng thái si ở nhiệt độ T
Sự phân phối ổn định là một vectơ
π(T) = (π1(T), π2(T), …, π|s|(T)) Thỏa mãn phương trình: πT(T)*P(T) = πT(T)
P(T): ma trận chuyển tiếp
πT: Hoán vị của π
|S| : là số phần tử của không gian trạng thái S
Nếu P là tối giản và không có chu kỳ thì tồn tại một xác suất ổn định duy nhất π.Điều kiện đủ cho tính không chu kỳ là tồn tại trạng thái si є S sao cho Pii ≠ 0
Trang 8Chương II:
Xây dựng khung thuật toán SA
I Lý do xây dựng khung thuật toán
Chúng ta cần xây dựng khung chung cho thuật toán nhằm đảm bảo:
• Giảm thiểu quá trình code cho người sau
• Cho những người sau thử nghiệm bài toán trên lập trình song song
• Việc xây dựng khung sẽ khiến người đọc hiểu được tổng quan thuật toán và cách cài đặt thuật toán một cách nhanh hơn Giúp cho người sau học có tính khoa học hơn
II Khung chung của thuật toán SA
Tất cả các bài toán giải bằng SA đều thực hiện theo các bước:
• Bước 1: Đầu tiên, tìm điểm xuất phát của bài toán
• Bước 2: Liệt kê các láng giềng có thể có của lời giải hiện thời
• Bước 3: Tiến hành ước lượng hàm mục tiêu hiện thời và hàm mục tiêu củaláng giềng vừa tìm được
• Bước 4: Sinh một biến ngẫu nhiên thường là phân bố mũ có các tham số phụ thuộc vào hiệu quả của các giá trị hàm mục tiêu và tham số T
• Bước 5: Nếu biến ngẫu nhiên lớn hơn hoặc nhỏ hơn một ngưỡng cho trước thì chấp nhận láng giềng vừa tìm được làm phương án hiện tại
• Bước 6: Giảm nhiệt độ T
• Bước 7: Quay trở lại từ đầu
Đã chứng minh được khi T 0 thì tìm được lời giải tối ưu toàn cục Tại những giá trị nhiệt độ cao các bước chuyển được chấp nhận một cách ngẫu nhiên bất luận chúng là bước chuyển có cải thiện hàm chi phí hay không Khi nhiệt độ được giảm xuống xác suất chấp nhận lời giải có cải thiện tăng lên và xác suất chấp nhận lời giải không có cải thiện giảm xuống
Khung thuật toán SA gồm 3 lớp:
- Problem: Định nghĩa bài toán
- Solution: Định nghĩa lời giải
- Default Move: Định nghĩa sự chuyển đổi (sự phát sinh lời giải mới)
Thuật toán Metropolis heuristic:
Algorithm Metropolis (S,T,M)
(*Trả lại giá trị giảm của hàm chi phí*)
Begin Repeat
M = M + 1;
Trang 9NewS neighbor(S);(*sinh ra lời giải mới
NewS*)
gain Gain(NewS,S);(*chênh lệch hàm chi phí*)
If ((gain > 0) or (random < egain/K
B )) then{
S NewS; (*Chấp nhận lời giải*)
If (cost(NewS) < cost(BestS)) thenBestS NewS;
o Hàm neighbor sinh ra lời giải mới NewS
o Hàm Gain: độ chênh lệch hàm chi phí của lời giải S và lời giải mới
NewS tức là gain = chi phí của S – chi phí của NewS
o Random là số ngẫu nhiên từ 0 đến 1
o Nếu chi phí NewS thấp hơn chi phí của S thì chấp nhận lời giải NewS còn nếu chi phí NewS lớn hơn chi phí của S thì vẫn chấp nhận lời giải NewS
nhưng với xác suất là radom < e gain/K
Initialize(T); //khởi tạo nhiệt độ T
Trang 10o Thuật toán SA ban đầu khởi tạo nhiệt độ T và lời giải S0
o Gọi hàm Metropolis để tìm lời giải tốt nhất BestS Sau khi đã tìm được
lời giải tốt nhất thì cập nhật lại nhiệt độ T theo thông số alpha.Thực hiện vòng
lặp cho tới khi T = 0 sẽ tìm được lời giải tốt nhất toàn cục của bài toán
Một điều quan trọng nữa là khi thực hiện thuật toán SA người dùng phải cấu
hình các thông số của thuật toán trong file cấu hình SA.cfg bao gồm:
o // trạng thái toàn cục được cập nhật trong n ước lượng
o // 0: asynchronized mode // 1: synchronized mode
o // số bước lặp để phối hợp ( nếu là 0 không phối hợp)
Thuật toán SA có thể chạy được cả ở môi trường tuần tự và môi trường song song
III.Sơ đồ khung thuật toán
SA có hai phân lớp chính là lớp Required (lớp đòi hỏi) và lớp Provided (lớp cung cấp) được thể hiện trong hình vẽ dưới đây
Trang 111 Lớp cung cấp (Provided)
• Provided: bao hàm các thủ tục chung cho thuật toán SA và được áp dụng cho hầu hết các bài toán sử dụng thuật toán SA (ví dụ như khung của thuật toán SA tuần tự, khung của thuật toán SA song song, thiết đặt các thông số của bài toán ) Bao gồm các lớp:
o SetupParams: Là một lớp quan trọng để đọc file cấu hình và khởi tạo các giá trị trong file cấu hình
o Solver: Thực hiện các chiến lược đưa ra và duy trì các thông tin có liên quan tới trạng thái tìm kiếm trong suốt quá trình thực hiện
class Solver
{
const Problem& problem;
const SetUpParams& params;
UserStatistics _userstat;
Statistics _stat;
Move* move;
Solution current;
Trang 12// khởi tạo nhiệt độ của bài toán void KeepHistory(const Solution& sol, const double curfit,const
float time_spent_trial,const float total_time_spent);
double UpdateT(double temp, int K);//cập nhật nhiệt độ
public:
Solver (const Problem& pbm, const SetUpParams& setup); // Full execution
virtual void run () =0;
virtual void run (có tham số) =0;
// Partial execution virtual void StartUp () =0;
virtual void StartUp (có tham số) =0;
virtual void DoStep () =0;
virtual void run (unsigned long int max_evaluations);
virtual void run (const Solution& sol, unsigned long int max_evaluations);
virtual void run (const double initialTemperature);
virtual void run (const Solution& sol,const double initialTemperature);
Trang 13virtual void run (const double initialTemperature, unsigned long int nb_evaluations);
virtual void run (const Solution& sol,const double initialTemperature, unsigned long int nb_evaluations);
// Partial execution
virtual void StartUp ();
virtual void StartUp (const Solution& sol);
virtual void StartUp (const double initialTemperature);
virtual void StartUp (const Solution& sol, const double initialTemperature);
virtual void DoStep ();
};
Solver_Lan: Chứa thủ tục run(int argc, char** argv) để giải quyết
bài toán một cách song song trên môi trường mạng LAN Với tham sốtruyền vào của hàm chính là các tên máy tham gia vào quá trình tính toán
provides class Solver_Lan: public Solver {
private:
NetStream _netstream;
int mypid;
void send_local_state_to(int _mypid);
int receive_local_state_from(int source_pid);
void check_for_refresh_global_state();
unsigned int _current_trial;
unsigned int _current_iteration;
Trang 14// Partial execution virtual void StartUp ();
virtual void StartUp (có tham số);
2 Lớp đòi hỏi (Required)
• Required: bao hàm các thủ tục riêng trong thuật toán SA của từng bài toán cụ thể(ví dụ như các thủ tục tính nhiệt độ, thủ tục tính hàm sức khoẻ, thủ tục sinh lời giải )
• Các lớp đòi hỏi được sử dụng để lưu trữ dữ liệu cơ bản của thuật toán : bài toán, trạng thái không gian tìm kiếm và vào/ra Bao gồm các lớp:
o Problem: Mô tả bài toán cần được giải quyết Nhận các thông số của bài toán từ file định nghĩa bài toán
o Solution: Miêu tả tập lời giải có thể được thực hiện
o UserStatistic: lưu trữ thông tin cuối cùng của bài toán :lời giải tốt nhất, số đánh giá, thời gian thực thi,…
o DefaultMove: Thực hiện việc cập nhật lời giải mới của bài toán
o TerminateQ: Thực hiện điều kiện dừng của bài toán
Ta có sơ đồ khung thuật toán SA như sau:
Những lớp có dấu * là các lớp RequiredTrong đó:
Trang 15 NetStream: Là một lớp trung gian giữa khung và MPI dễ dàng cho việc xử
lý song song như hình vẽ (thể hiện việc gửi nhận dữ liệu)
State_Center: cho phép tìm kiếm một biến trạng thái, thêm một biến trạng thái, và loại bỏ một biến trạng thái hoặc cập nhật nội dung của một biến trạng thái Tất cả các trường hợp của StateVariable được xếp bên trong StateCenter
State_Vble: cho phép định nghĩa và thiết đặt, lấy tên các biến trạng thái
3 Một số hàm quan trọng trong hai lớp Required và Provide
3.1 SA.pro.cpp
Một số hàm chính Ý nghĩa
istream& operator>> (istream& is,
SetUpParams& setup)
Đọc vào file cấu hình
ostream& operator<< (ostream& os,
const SetUpParams& setup)
In ra file cấu hình vừa đọc được
Khởi tạo các biến của SetupParams
ostream& operator<< (ostream& os,
const Statistics& stats)
In ra kết quả thông kê.
Trang 16ostream& operator<< (ostream& os,
const Problem& pbm){ return os; }
In ra bài toán
istream& operator>> (istream& is,
Problem& pbm){ return is; }
Đọc vào bài toán
const Problem& Solution::pbm()
const { return _pbm; }
istream& operator>> (istream& is,
Solution& sol)
{ return is; }
ostream& operator<< (ostream& os,
const Solution& sol)
{return os;}
Đọc vào và trả ra lời giải bài toán
NetStream& operator << (NetStream&
ns, const Solution& sol){ return
ns; }
NetStream& operator >> (NetStream&
ns, Solution& sol) { return ns; }
Đọc vào và trả ra lời giải bài toán sử dụng cho song song
double Solution::fitness () const
void UserStatistics::update(const
Solver& solver)
bool TerminateQ (const Problem&
pbm, const Solver& solver,const
SetUpParams& setup)
Hàm kết thúc
Chương III:
Ứng dụng của thuật toán SA
I Bài toán MAXSAT
Trang 171 Giới thiệu bài toán
Bài toán MAXSAT bao gồm tập n biến {x1, x2,…,xn } và tập m mệnh đề Mục đích của bài toán MAXSAT là tìm một phân phối các giá trị chân lý T cho các biến sao cho ít nhất k mệnh đề đúng
CNF = Conjunctive Normal Form - Dạng chuẩn hội Ta có:
o Bất kỳ một kí hiệu vị từ P nào đều là một công thức trong CNF
o Nếu F là một công thức trong CNF thì ¬F là một công thức
o Nếu F và G là công thức thì F ∧G là công thức trong CNF
o Nếu F và G là công thức thì F∨G là công thức trong CNF
o Một hàm T: P-> {TRUE, FALSE} nghĩa là T là sự phân bố các giá trị chân
lý {TRUE, FALSE} cho các vị từ trong P
Một công thức F thoả mãn bởi một chỉ thị chân lý T nếu:
• F là một biến logic x thì T(x) = TRUE
Bài toán MAX-SAT được định nghĩa như sau:
Input:
• n biến logic x1,x2, x3,…,xn mà có thể chỉ nhận giá trị TRUE hoặc FALSE
• m mệnh đề C1, C2, C3,…,Cm mỗi mệnh đề là một sự phân cách của các kí tựMỗi kí tự là một biến khẳng định xk hoặc phủ định k và có mệnh đề
) (C j =x i1∨x i2∨ ∨x ik Trọng số w i ≥ 0cho mỗi mệnh đề Ci