Thuật toán Di truyền GA

Một phần của tài liệu (LUẬN văn THẠC sĩ) thuật toán xấp xỉ ứng dụng vào một số bài toán lớp NP (Trang 34)

Hình 1 .1 Bài tốn xếp ba lô dạng 0-1

2.4 Thuật toán Di truyền GA

2.4.1 Giới thiệu

Thuật toán di truyền GA do D.E. Goldberg đề xuất là kỹ thuật phỏng theo q trình thích nghi tiến hóa của các quần thể sinh học dựa trên học thuyết Darwin. Trong GA, việc tìm kiếm được bắt đầu với một quần thể, hay một tập hợp có chọn lọc ban đầu. Các cá thể của quần thể hiện tại khởi nguồn cho quần thể thế hệ kế tiếp bằng các hoạt động lai ghép và đột biến ngẫu nhiên – được lấy mẫu sau các q trình tiến hóa. Ở mỗi bước, cá thể nào phát triển hơn, thích ứng hơn với mơi trường sẽ tồn tại và ngược lại sẽ bị đào thải. GA giải quyết các bài tốn tối ưu thơng qua các quá trình cơ bản: lai tạo, đột biến và chọn lọc cho các cá thể trong quần thể. Để sử dụng GA đòi hỏi phải xác định được: khởi tạo quần thể ban đầu, hàm đánh giá các lời giải theo mức độ thích nghi – hàm mục tiêu, các toán tử di truyền tạo hàm sinh sản.

Trong công nghệ thông tin GA là một lĩnh vực mới được coi là có tốc độ phát triển nhanh. Có thể chia thành 5 hướng nghiên cứu như sau :

- GA (Genetic Algorithm - GA): Dựa vào quá trình di truyền trong tự nhiên để cải tiến lời giải qua các thế hệ bắt nguồn từ một tập các lời giải ban đầu.

- Quy hoạch tiến hoá (Evolutionary Programming - EP): Dựa vào quy luật tiến hố, tìm phương pháp kết hợp đủ khả năng giải quyết trọn vẹn một bài toán từ một lớp các phương pháp giải quyết được một số phần của bài toán.

- Các chiến lược tiến hoá (Evolutionary Strategies - ES): Dựa trên một số chiến lược ban đầu, tiến hoá để tạo ra những chiến lược mới phù hợp với môi trường thực tế một cách tốt nhất.

- Lập trình di truyền (Genetic Programming - GP): Mở rộng GA trong lĩnh vực các chương trình của máy tính. Mục đích của nó là để sinh ra một cách tự động các chương trình máy tính giải quyết một cách tối ưu một vấn đề cụ thể.

- Các hệ thống phân loại (Classifier Systems- CS): Các GA đặc biệt được dùng trong việc học máy và việc phát hiện các quy tắc trong các hệ dựa trên các quy tắc.

Ngày nay GA càng trở nên quan trọng, đặc biệt là trong lĩnh vực tối ưu hoá với lớp các bài tốn NP, một lĩnh vực có nhiều bài tốn thú vị, được ứng dụng nhiều trong thực tiễn nhưng thường khó và chưa có giải thuật hiệu quả để giải .

2.4.2 Các khái niệm cơ bản

Cá thể, nhiễm sắc thể: Trong GA, một cá thể biểu diễn một phương án của bài toán. Trong trường hợp tổng quát, một cá thể có nhiều NST (NST), ở đây ta quan niệm một cá thể chỉ có một NST. Do đó khái niệm cá thể và NST trong GA coi như là tương đương.

Quần thể: Quần thể là một tập hợp các cá thể có cùng một số đặc điểm nào

đấy. Trong GA ta quan niệm quần thể là một tập các lời giải của một bài toán.  Chọn lọc: Chọn lọc trong GA chính là cách chọn các cá thể có độ thích nghi

tốt để đưa vào thế hệ tiếp theo hoặc để cho lai ghép, với mục đích là sinh ra các cá thể mới tốt hơn. Thông thường việc chọn lọc được thông qua hàm mục tiêu

Lai ghép: Trong GA, lai ghép được coi là một sự tổ hợp lại các tính chất

trong hai lời giải cha mẹ nào đó để sinh ra một lời giải mới mà có đặc tính mong muốn là tốt hơn thế hệ cha mẹ. Đây là một quá trình xảy ra chủ yếu trong GA.

Đột biến: Đột biến có thể tạo ra một cá thể mới tốt hơn hoặc xấu hơn cá thể

ban đầu. Tuy nhiên trong GA thì ta ln muốn tạo ra những phép đột biến cho phép cải thiện lời giải qua từng thế hệ.

2.4.3 Thuật toán GA

Với các khái niệm được giới thiệu ở trên, giải thuật GA được thực hiện thông qua các

bước cơ bản sau đây:

1. Xác lập các tham số ban đầu của bài toán.

2. Khởi tạo: Sinh ngẫu nhiên một quần thể gồm n cá thể (là n lời giải ban

đầu của bài toán).

3. Xác lập quần thể mới:

3.1 Tiến hành lai ghép các cặp bố-mẹ với một xác suất lai ghép được chọn để tạo ra một cá thể mới đưa tiếp vào quần thể.

3.2 Tính độ thích nghi của tất cả các cá thể thuộc quần thể.

3.3 Chọn lọc n cá thể mới từ quần thể mới theo độ thích nghi để tạo ra quần thể cho thế hệ tiếp sau.

3.4 Đột biến k các thể

4. Kiểm tra điều kiện dừng: Nếu điều kiện được thỏa mãn thì thuật tốn kết

thúc và trả về lời giải tốt nhất chính là quần thể hiện tại.

2.4.4 Cơ chế thực hiện GA

Mã hóa

Để có thể thực hiện GA, vấn đề đầu tiên là xuất phát từ bài tốn thực tế, ta cần phải mơ tả các phương án của bài tốn dưới một dạng nào đó (mơ hình tốn học, tin học, …). Vấn đề mơ tả đó được gọi là các phương pháp mã hóa. Thơng thường người ta sử dụng một trong các phương pháp như sau:

+ Mã hoá nhị phân: Mã hoá nhị phân là phương pháp mã hoá NST phổ biến

nhất. Trong mã hoá nhị phân, mỗi NST là một chuỗi nhị phân. Khi đó, mỗi chuỗi nhị phân sẽ biểu diễn hàm tại một tập giá trị của các biến. Mã hố nhị phân tuy là phổ biến nhưng nó có một nhược điểm là có thể tạo ra khơng gian mã hố lớn hơn so với không gian giá trị của NST. Do đó, với nhiều bài tốn thì biểu diễn nhị phân là không hữu hiệu.

+ Mã hoá hoán vị: Trong mã hoá hoán vị, mỗi NST là một chuỗi các số biểu diễn một thứ tự sắp xếp. Mã hoá hoán vị phù hợp cho các bài toán liên quan đến thứ tự. Đối với các bài tốn này. Mã hố hốn vị có thể được sử dụng trong các bài toán liên quan đến thứ tự như bài toán du lịch hay bài toán lập lịch.

+ Mã hoá số thực: Mã hoá trực tiếp theo giá trị có thể được dùng trong các bài toán sử dụng giá trị phức tạp như trong số thực. Trong đó, mỗi NST là một chuỗi các giá trị thực. Mã hoá số thực thường dùng cho các bài tốn đặc biệt. Thơng thường mỗi NST được mã hóa là một véc tơ trong khơng gian. Cách mã hóa này thường sử dụng đối với các bài toán tối ưu số và được phát triển mạnh trong giai đoạn hiện nay.

 Khởi tạo quần thể ban đầu

 Khởi tạo quần thể ban đầu là bước đầu tiên trong GA để tạo ra một cách ngẫu nhiên các lời giải ban đầu. Tuỳ vào từng bài tốn cụ thể mà ta có các phương pháp khởi tạo khác nhau. Chất lượng của quần thể ban đầu càng cao thì lời giải mà GA đưa ra càng tốt. Thông thường chúng ta dùng phương pháp ngẫu nhiên để khởi tạo.

 Xác định hàm thích nghi

 Hàm thích nghi được xây dựng sao cho giá trị thích nghi phải phản ánh được giá trị thực của NST trong việc đáp ứng yêu cầu của bài toán. Đối với bài tốn tối ưu hóa thì hàm thích nghi chính là hàm mục tiêu của bài toán.

 Cơ chế lựa chọn

 Cơ chế lựa chọn được áp dụng khi chọn các cá thể từ quần thể để thực hiện việc lai ghép và đột biến, tạo ra quần thể ở thế hệ tiếp sau Có nhiều cách để lựa chọn các cá thể từ một quần thể. Tùy từng mơ hình bài tốn khác nhau, chúng ta có thể xây dựng các phương pháp lựa chọn khác nhau: thông thường người ta sử dụng một trong 2 phương pháp sau để lựa chọn các cá thể vào quá trình lai ghép

 + Lựa chọn ngẫu nhiên theo xác suất từ quần thể lấy N cá thể để thực hiện lại ghép

 Các toán tử di truyền

 Các toán tử di truyền của GA là toán tử lai ghép và đột biến. Đây là hai tốn tử có tác động lớn đến chất lượng của giải thuật. Các toán tử này được xây dựng phụ thuộc vào cách mã hoá các NST. Tuỳ thuộc vào các bài toán cụ thể và cách mã hoá NST mà ta xây dựng hai loại tốn tử này thích hợp. Thông thường người ta thưởng sử dụng các toán tử lai ghép dưới dạng sau đây

+ Lai ghép đơn điểm:

- Một điểm cắt được chọn tại một vị trí thứ k trên NST.

- Từ đầu NST đến vị trí thứ k, NST con sao chép từ cha, phần còn lại sao chép từ mẹ.

+ Lai ghép hai điểm:

- Hai điểm cắt được chọn .

- Từ đầu cho đến điểm cắt thứ nhất được sao chép từ cha, từ điểm cắt thứ nhất đến điểm cắt thứ hai sao chép từ mẹ và phần còn lại sao chép từ cha.

+ Lai ghép mặt nạ :

- Xây dựng một mặt nạ là một chuỗi nhị phân có chiều dài bằng chiều dài NST, Mặt nạ được phát sinh ngẫu nhiên đối với từng cặp cha mẹ.

- Xây dựng NST mới: Duyệt qua mặt nạ, bit có giá trị 1 thì sao chép gen tại vị trí đó từ NST cha sang con, bit có giá trị 0 thì sao chép từ mẹ.

Sau đây chúng ta nghiên cứu một số bài toán NP mà lời giải xấp xỉ nhận được từ GA

Ví dụ 2.4: Bài tốn KNAPSACK

Input: + Cho n đồ vật, đồ vật thứ i có thể tích là ai, có giá trị là pi + Cho 1 ba lơ có thể tích b

Output: Hãy xác định nhóm đồ vật thỏa mãn: tổng thể tích khơng vượt quá ba lô đồng thời tổng giá trị là lớn nhất

Phân tích

Kí hiệu: Một phương án lấy đồ vật là một dãy nhị phân X = ( ,x x1 2, ...,xn)có độ dài n trong đó giá trị bit 0 tương ứng với khơng lấy đồ vật và giá trị bit 1 là lấy đồ vật tương ứng.

Khi đó: + Hàm mục tiêu của bài toán là 1 ( ) ax n i i k f X x p m = = å ®

+ Điều kiện ràng buộc của bài toán

1 n i i k x a b = £ å

Chúng ta sử dụng toán tử lại ghép nhị phân đơn điểm hoặc đa điểm. Trong quá trình lai ghép và chọn lọc luôn luôn chọn các phương án thỏa mãn điều kiện ràng buộc. Khi đó thuật tốn GA được mơ tả bằng ngôn ngữ Matlab như sau

function KA = KNAPSACK (A,C,b,KK) clc; N=length(A);M=10;%popsize %Khoi tao M=0; while M<=10 z=round(rand(1,N));s=0; for i=1:N s=s+A(i)*z(i); end; if s<=b M=M+1; Quan_the(M,:)=z; end; end; % thuat toan GA count=0;k=3; while count<KK count=count+1; socon=M;

for i=1:M-1 % Lai ghep for j=i+1:M bo=Quan_the(i,:);me=Quan_the(j,:); for j1=1:k con1(j1)=bo(j1); con2(j1)=me(j1); end; for j2=k+1:N con1(j2)=me(j2); con2(j2)=bo(j2); end; s1=0; for l=1:N s1=s1+A(l)*con1(l);

end; if s1<=b socon=socon+1; Quan_the(socon,:)=con1; end; s2=0; for l=1:N s2=s2+A(l)*con2(l); end; if s2<=b socon=socon+1; Quan_the(socon,:)=con2; end; end;

end; %Ket thuc lai ghep % Chon loc for i=1:socon f(i)=0; for j=1:N f(i)=f(i)+Quan_the(i,j)*C(j); end; end; for i=1:socon-1 for j=i+1:socon if f(i)<f(j) tgf=f(i);f(i)=f(j);f(j)=tgf; tgz=Quan_the(i,:);Quan_the(i,:)=Quan_the(j,:);Quan_the(j,:)=tgz; end; end; end;

end; %ket thuc GA % Phuong an toi uu

phuong_an_toi_uu=Quan_the(1,:) gia_tri_toi_uu=f(1)

Ví dụ 2.5: Bài tốn qn cờ DOMINO

Định nghĩa 1: Một quân bài Domino là một bộ (a,b) trong đó được gọi a là số hàng

trên, b là số hàng dưới.

Định nghĩa 2: Phép lật quân được hiểu là một phép biến đổi bộ (a,b) thành bộ (b,a) Bài toán:

Output: Hãy xác định các phép lật quân để sao cho độ chênh lệnh giữa tổng các số hàng trên so với tổng các số hàng dưới đạt giá trị nhỏ nhất.

a1 a2 .... an-1 an

b1 b2 bn-1 bn

Có thể thấy rằng mơ hình bài tốn trên cũng là bài tốn thuộc lớp NP.

Phân tích

+ Kí hiệu một phương án lật quân là một bộ X=(x1,x2,…,xn) trong đó xk=1 tức là lật quân thứ k, xk=0 tức là không lật qn thứ k. Khi đó để tìm phương án lật quân tối ưu, chúng ta có thể sử dụng thuật tồn duyệt tồn bộ tất cả các phương án từ đó xác định phương án có độ chênh lệch nhỏ nhất. Kí hiệu hàm mục tiêu

1 ( ) os( )( ) n i k k k f X c px a b = = å -

Chú ý: cos(0)=1 ứng với trạng thái không lật quân, cos( )p = -1 ứng với trạng thái lật quân

Khi đó sử dụng thuật tốn duyệt tất cả các dãy nhị phân độ dài n bằng thuật tốn quay lui, ta có thể tìm được lời giải chính xác của bài tốn. Tuy nhiên khi n là lớn thì thuật tốn khơng khả thi vì độ phức tạp của thuật toán là O(n!)

Sau đây chúng ta thiết kế thuật tốn GA tìm lời giải xấp xỉ.

+ Kí hiệu 1 cá thể là X=(x1,x2,…,xn) ứng một phương án lật quân trong đó xk=1 tức là lật quân thứ k, xk=0 tức là không lật quân thứ k.

+ Sử dụng phương pháp toán tử lai ghép đa điểm hoặc lại ghép mặt nạ + Q trình chọn lọc ln sử dụng hàm mục tiêu f(X).

Khi đó thuật tốn GA được mơ tả bằng ngơn ngữ Matlab như sau

function domino=domino(tren,duoi,KK) clc; N=length(tren);M=10;%popsize z=round(rand(M,N)); for i=1:M for j=1:N if z(i,j)==0 A(i,j)=tren(j); B(i,j)=duoi(j); else A(i,j)=duoi(j); B(i,j)=tren(j); end; end;

end; % thuat toan GA count=0;k=3; while count<KK count=count+1; socon=M; for i=1:M-1 for j=i+1:M bo=[A(i,:);B(i,:)];me=[A(j,:);B(j,:)]; for j1=1:k con1(:,j1)=bo(:,j1); con2(:,j1)=me(:,j1); end; for j2=k+1:N con1(:,j2)=me(:,j2); con2(:,j2)=bo(:,j2); end; socon=socon+1; A(socon,:)=con1(1,:); B(socon,:)=con1(2,:); socon=socon+1; A(socon,:)=con2(1,:); B(socon,:)=con2(2,:); end; end; for i=1:socon sa=0; sb=0; for j=1:N sa=sa+A(i,j); sb=sb+B(i,j); end; f(i)=abs(sa-sb); end;

% Phep chon loc for i=1:socon-1 for j=i+1:socon if f(i)>f(j) tgf=f(i);f(i)=f(j);f(j)=tgf; tgA=A(i,:);A(i,:)=A(j,:);A(j,:)=tgA; tgB=B(i,:);B(i,:)=B(j,:);B(j,:)=tgB; end; end; end;

tg=A(7,5);A(7,5)=B(7,5);B(7,5)=tg; end;

phuong_an_toi_uu=A(1,:) B(1,:) Gia_tri_toi_uu=f(1)

Nhận xét: Qua 2 ví dụ trên chúng ta có thể thấy

+ Thuật toán GA được thiết kế rất đơn giản, dễ hiểu, các bài tốn tương tự thì cấu trúc của các chương trình là như nhau

+ Thuật tốn chỉ sử dụng 1 vịng lặp duy nhất nên độ phức tạp là rất thấp + Các thao tác lai ghép, đột biến, thích nghi đều thao tác trên vector nên khả năng thiết kế thuật toán song song trên máy tính có bộ nhớ vector là rất khả thi

+ Vì là thuật tốn xác suất nên lời giải là gần đúng và với các lần thử nghiệm khác nhau thì kết quả có thể là khác nhau.

Kết luận:

Nội dung chương 2 đã nghiên cứu một số nguyên tắc thiết kế các thuật toán giải bài toán tối ưu theo tư tưởng Heuristic tìm nghiệm xấp xỉ của các bài tốn thuộc lớp NP. Các ví dụ minh họa chứng tỏ tính khả thi của các thuật toán ứng dụng cho các bài tốn trong thực tế.

CHƯƠNG 3

MƠ HÌNH BÀI TỐN LẬP LỊCH TRONG BỆNH VIỆN 3.1 Đặt vấn đề

Trong thực tế hiện nay thì lớp các bài tốn lập lịch là một lớp các bài tốn quan trọng vì tính thời sự của nó, có thể kể đến các mơ hình: Lập lịch kế hoạch sản xuất trong các xí nghiệp, lập lịch giảng dạy trong các trường học, lập lịch bay cho các sân bay, lập lịch trực cho các nhà máy, bệnh viện… Đặc điểm chung của các bài toán lập lịch là do rất nhiều các ràng buộc từ điều kiện thực tế nên khó có thể tìm được lịch biểu tối ưu, trong khi đó lịch biểu vẫn phải lập và thực hiện do nhu cầu thường ngày của các đơn vị nhà trường và doanh nghiệp. Do đó việc sử dụng các thuật tốn xấp xỉ để tìm lịch biểu gần tối ưu luôn luôn là một lựa chọn hợp lý nhiều khi là bắt buộc.

Trong các mơ hình thực tế hiện nay, mơ hình phân cơng các ca trực tại các phòng khám của các bệnh viện là một mơ hình đã và đang diễn ra thường xuyên liên tục. Mơ hình này là mơ hình chung cho tất cả các bênh viện tuy rằng với mỗi bệnh viện lại có những ràng buộc đặc thù riêng biệt. Vì lý do đó, trong luận văn, chúng tơi sẽ nghiên cứu chi tiết hai mơ hình bài tốn lập lịch các ca trực tại các bệnh viện. Mơ hình được tham khảo từ bệnh viện A tỉnh Thái Nguyên.

Một phần của tài liệu (LUẬN văn THẠC sĩ) thuật toán xấp xỉ ứng dụng vào một số bài toán lớp NP (Trang 34)