Tải bản đầy đủ (.doc) (11 trang)

Báo cáo đồ án trí tuệ nhân tạo: Không gian trạng thái được mô tả là bài toán n- queens. Xây dựng chương trình giải quyết bài toán theo giải thuật gene với phương pháp chọn là Elitism

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (237.16 KB, 11 trang )

Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo


******************
 !"#$%&'
(#)
* Không gian trạng thái được mô tả là bài toán n-
queens. Hãy xây dựng chương trình giải quyết bài toán theo
giải thuật gene với phương pháp chọn là Elitism.
Giảng viên hướng dẫn*+",&

Người thực hiện *+&/0#123
Lớp *#4.56

Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo
Hà Nội- 2010
Mở Đầu
7.+83.. 9#*
1. Giải thuật Gene với phương pháp chọn Elitism.
2. Ý tưởng của bài toán N-queens.
3. Mô tả thuật toán.
4. Chương trình DEMO
5. Chương trình được viết bằng:
+Ngôn ngữ:C-sharp.
+Trình biên dịch: Microsoft Visual Studio 2005.
+Nền tảng.net frame work 3.5
Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo
:;<=&=>#>?@ 1A#+  .4#BC=D3:


2E<=&=>#>*
Trong khoa học máy tính, Thuật toán Gene (GAs) là 1trong các
phương pháp tìm kiếm có sử dụng thông tin. Thuật toán này mô phỏng tiến hóa
tự nhiên (Dawinian Evolution) ở mức gene sử dụng tư tưởng của survival of the
fittest(chọn lọc có tự nhiên), tức là một cá thể trong tự nhiên, các cá thể khỏe, có
khả năng thích nghi tốt với môi trường sẽ được tái sinh và nhân bản ở các thế hệ
sau. Mỗi cá thể có cấu trúc gene đặc trưng cho phẩm chất của cá thể đó. Trong
quá trình sinh sản, các cá thể con có thể thừa hưởng các phẩm chất của cả cha và
mẹ, cấu trúc gene của nó mang một phần cấu trúc gene của cha và mẹ. Ngoài ra,
trong quá trình tiến hóa, có thể xảy ra hiện tượng đột biến, cấu trúc gene của cá
thể con có thể chứa các gene mà cả cha và mẹ đều không có.
Trong giải thuật Gene, mỗi cá thể được mã hóa bởi một cấu trúc dữ liệu mô
tả cấu trúc gene của cá thể đó, ta sẽ gọi nó là nhiễm sắc thể (chroniosome). Mỗi
nhiễm sắc thể được tạo thành từ các đơn vị được gọi là gene. Chẳng hạn, trong
các thuật toán gene cổ điển, các nhiễm sắc thể là các chuỗi nhị phân, tức là mỗi
cá thể được biểu diễn bởi một chuỗi nhị phân. Thuật toán gene sẽ làm việc trên
các quần thể gồm nhiều cá thể. Một quần thể ứng với một giai đoạn phát triển
sẽ được gọi là một thế hệ.
7E1A#+  .4#BC=D3*
ý tưởng: Phương pháp Elitism cho phép copy những cá thể tốt (hoặc một
vài cá thể tốt) sang quần thể mới. Thành phần còn lại của quần thể được tạo từ
cách khác.
Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo
 Phương pháp Elitism có thể tăng tốc cho GA, Nó khác với một số phương
pháp khác vì nó ngăn không làm mất cá thể tốt.
F;G=1H#+.I27=##JK&>>#D7L#++<=&=>#>*
• Yêu cầu bài toán N-queens: Hãy xếp N quân hậu vào một bàn cờ n*n,
sao cho số lượng các quân hậu ăn nhau là ít nhất (hay tức là không có quân hậu
nào ăn nhau cả). Hãy giải quyết bài toán bằng thủ thuật gene với phương pháp

chọn là Elitism.
• Ý tưởng: Ta tiến hành xếp N hậu lên các vị trí bất kì ứng với mỗi
trạng thái của bàn cờ ta mã hóa chúng thành các gen (gọi là các mảng 1 chiều)
cho các gen đó lai ghép vói nhau để tạo ra các gen mới kiểm tra trong số các
gen của chúng ta xem có gen nào là trạng thái kết thúc chưa(trạng thái chứa lời
giải) nếu có thì dừng vòng lặp, nếu chưa thì cho lai ghép tiếp. Trong quá trình
kiểm tra trong số các gen của chúng ta sử dụng phương pháp chọn Elitism để
cop các cá thể tốt phù hợp với yêu cầu đó là số lượng các quân hậu ăn nhau là
ít nhất.
M;!"=<=&==#*
Từ thế hệ ban đầu được tạo ra bằng phương pháp mã hóa nhị phân, thuật
toán gene bắt chước chọn lọc tự nhiên và di truyền để biến đổi các thế hệ. Cấu
trúc cơ bản của thuật toán là như sau:
procedure Genetic_Algorithm;
begin
t

0N
Khởi tạo thế hệ ban đầu P(t)N
Đánh giá P(t) (theo hàm thích nghi)N
repeat
t

t + 1;
Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo
Sinh ra thế hệ mới P(t) từ P(t-1) bởi
-Chọn lọc
-Lai ghép
Đánh giá P(t);

until điều kiện kết thúc được thỏa mãn;
end;
• Để giải quyết một vấn đề này bằng thuật toán Gene, chúng ta cần
thực hiện các bước sau đây:
Trước hết ta cần mã hóa (Encoding)các đối tượng cần tìm bởi một cấu
trúc dữ liệu nào đó. Ở trong bài này thì ta tiến hành phương pháp mã hóa phi nhị
phân, ở đây với bàn cờ n*n sẽ có N quân hậu được đặt vào N vị trí khác nhau
trên bàn cờ, khi đó ta sẽ mã hóa N quân hậu này bằng phương pháp mã hóa phi
nhị phân. Ví dụ: với bàn cờ 8*8 thì khi đó ta sẽ đặt 8 quân hậu vào 8 vị trí trên
bàn cờ như hình khi đó ta sẽ được:
Vị trí cột: 1 2 3 4 5 6 7 8
Cá thể thứ nhất(Chromosome): 1 3 5 2 6 4 7 8, sau khi mã hóa ta được:ở
đây sẽ tương ứng với vị trí của quân hậu trên bàn cờ
Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo

Tiến hành khởi tạo quần thể (innitial population generation) với một cá
thể (Chromosome) sẽ tương ứng với một cách sắp xếp N quân hậu trên bàn cờ.
b) Thiết kế hàm thích nghi (fitness Function). Trong các bài toán tối ưu,
hàm thích nghi được xác định dựa vào hàm mục tiêu: Ở đây ta cần xây dựng một
hàm thích nghi, hàm này sẽ loại bỏ các cá thể vi phạm luật, tức là sau khi sắp
xếp quân hậu nên bàn cờ sẽ tương ứng với một cá thể trong một quần thể. Nếu
một cá thể nào không thỏa mãn hàm thích nghi thì cá thể đó không được chọn và
sẽ bị loại(Tức là có quân hậu ăn nhau).
c) Lựa chọn cho sự kết hợp lại (Selection for recombination):
- Các nhiễm sắc thể được chọn từ quần thể là các cha
cho lai ghép (crossover). Vấn đề là lựa chọn các nhiễm sắc thể như thế nào?
- Theo thuyết tiến hóa Darwin những cá thể tốt nhất sẽ được chọn để tạo ra
các con (offspring).
- Có nhiều phương pháp để chọn nhiễm sắc thể tốt nhất. Ở đây ta sẽ lấy

phương pháp chọn Elitism. Sau khi so sánh các cá thể với hàm thích nghi ta sẽ
có được các cá thể tốt nhất trong một quần thể, sau đó ta sẽ xây dựng hàm
Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo
Elitism để copy các cá thể tốt để từ đó tạo các quần thể tạo thành một quần thể
mới (có phương pháp sắp xếp các quân hậu một cách tốt nhất trên bàn cờ).
d) Trên cơ sở cấu trúc của nhiễm sắc thể, thiết kế các toán tử di truyền
(lai ghép, đột biến) cho phù hợp với các vấn đề cần giải quyết.
e) Xác định cỡ của quần thể và khởi tạo quần thể ban đầu.
f) Xác định xác suất lai ghép pc và xác suất đột biến. Xác suất đột biến
cần là xác suất thấp. Người ta (Goldberg, 1989) khuyên rằng nên chọn xác suất
lai ghép là 0,6 và xác suất đột biến là 0,03. Tuy nhiên cần qua thử nghiệm để tìm
ra các xác suất thích hợp cho vấn đề cần giải quyết.
g) Thuật toán dừng khi quần thể hội tụ, i.e. cá thể tốt nhất trong quần thể
giống với kết quả mong muốn. Kết thúc khi số thế hệ sinh ra đạt đến số sinh ra
trước. Kết thúc khi các cả thể trở lên giống nhau. Kết thúc khi cá thể tốt nhất
trong quần thể không thay đổi theo thời gian.
=> Trong thủ tục trên, điều kiện kết thúc vòng lặp có thể là một số thế hệ đủ
lớn nào đó, hoặc độ thích nghi của các cá thể tốt nhất trong các thế hệ kế tiếp
nhau khác nhau không đáng kể. Khi thuật toán dừng, cá thể tốt nhất trong thế hệ
cuối cùng được chọn làm nghiệm cần tìm.
O;1A#+=$P#QB!R*
2E2S'#*
Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo
Giao diện chương trình gồm 3 phần:
 Khu vực bàn cờ và khu vực thể hiện kết quả lai ghép.
 Kết quả lai ghép: kết quả mã hóa, Số quân hậu ăn nhau,quần thể mới
 Các nút chức năng: Giới thiệu, khởi tạo quần thể (innitial population
generation),Value(số quân hậu ăn nhau), Elitism Gene(quần thể mới, kết

quả vị trí các quân hậu).
 Các Button chính:
-Nút “giới thiệu”: khi ấn nút này sẽ xuất hiện Form2 chứa các
thông tin về người thực hiện, tên đề tài, giảng viên hướng dẫn…
-Nút “create initial population”: khi ấn nút này thì chương trình
sẽ tiến hành mã hóa phi nhị phân bàn cờ và hiển hị thông tin trên
lisview1.
-Nút “Value”: cho ta các thông tin về số quân hậu ăn nhau, nếu
tìm được cá thể nào có số quân hậu ăn nhau =0 thì đó là cá thể tốt.
-Nút “Elitism Gene”: khi ấn vào nút này thì chương trình sẽ tiến
hành cop các cá thể tốt nhất (tương ứng với số quân hậu ăn nhau ít nhất
hay =0) và hiển thị các cá thể đó trên Listview4 và các vị trí sẽ được đặt
tương ứng trên bàn cờ (trên Picturebox1).
Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo

7E...C2DD.%#*
- Taomang(Tự xây dựng)//các process bài toán n-queens.
- Gene(xây dựng các thuật toán)
- Form1(dẫn xuất từ Form) // Giao diện chính của chương trình.
- from2(dẫn xuất từ Form) // hiển thị thông tin về đề tài.
-
T.#23>D 2.>UVDWSX#+Y:Z#23>D 2.>E
▪ System; ▪ System.Collections.Generic; ▪ System.ComponentModel;
▪ System.Data; ▪ System.Drawing; ▪ System.Drawing.Drawing2D;
▪ System.Drawing.Printing; ▪ System.Drawing.Imaging; ▪ System.IO;
▪ System.Linq; ▪ System.Text; ▪ System.Windows.Forms; ▪
System.Collections;
▪ Microsoft.VisualBasic; ▪ System.Threading;
Nguyễn Như Nam.

Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo
7E.3[WC\*
* Class Taomang:
class taomang
{
public int[] arrqueens;
public taomang(int N)
{
arrqueens = new int[N];
for (int i = 0; i < N; i++)
{
arrqueens[i] = i;
}
}
public taomang(int[] arr)
{
arrqueens = new int[arr.Length];
arr.CopyTo(arrqueens, 0);
}

}
Hàm tạo giao diện bàn cờ:
Graphics g;
Bitmap bm;
Pen p;
float W, H;
Random r;
//cac bien dung cho thuat toan
int N;
public gene(int n)

{
N = n;
p = new Pen(Color.Black);
}
//cac ham tao giao dien
public void Drawqueensandboath(System.Windows.Forms.PictureBox
ptbView, int[] ketthucmang)
{
W = (float)Math.Round((decimal)ptbView.Width /N,5);
H = (float)Math.Round((decimal)ptbView.Width /N,5);
bm = new Bitmap(ptbView.Width, ptbView.Height);
g = Graphics.FromImage(bm);

for (int i = 0; i < N; i++)
{
g.DrawLine(p, i * H, 0, i * H, H * N);
g.DrawLine(p, 0, i * W, W * N, i * W);
g.DrawEllipse(p, i * W + W /4, ketthucmang [i] * H + H /4,
H/2, W/2);
}
Nguyễn Như Nam.
Lớp :Tin 5A Báo cáo : Nhập môn trí tuệ nhân tạo

ptbView.Image = bm;
}
public void mahoa(taomang st)
{
r = new Random();
int k;
st = new taomang(st.arrqueens);

for (int i = 0; i < N; i++)
{
st.arrqueens[i] = r.Next(0, N);

}
}
else
str += tmp.ToString();
}
return str;
}

×