BÁO CÁO BÀI TẬP LỚN Đề Tài:Không gian trạng thái được mô tả là bài toán chiếc ba lô loại 1,xây dựng chương trình giải quyết bài toán theo giải thuật gen và phương pháp chọn là bánh xe roulette. I)Mô tả bài toán: Bạn có một số các vật mà bạn có thể cầm theo trong chuyến du lịch Mỗi vật có một trọng lượng và một giá trị. Có một cái túi giới hạn trọng lượng bạn có thế cầm theo. Mỗi vật chỉ được chọn tối đa 1 lần. Bạn muốn cầm các vật mang theo với max giá trị. Đồ vật: 1 2 3 4 5 6 7 Giá trị: 5 8 3 2 7 9 4 T.lượng: 7 8 4 10 4 6 4 Khối lượng tối đa có thể mang là 22 đơn vị. Xếp đồ vật để có giá trị lớn nhất? Phương pháp giải quyết vấn đề:dùng giải thuật gen và phương pháp chọn roulette. II. Xây dựng B1:Mã Hóa Mã hóa nhị phân (Binary encoding) là kiểu thông dụng nhất: nghiên cứu đầu tiên về thuật toán Gen sử dụng kiểu mã hóa này và bởi vì nó đơn giản Trong mã hóa nhị phân, mọi nhiễm sắc thể là chuỗi bits - 0 hoặc 1. Cá thể (Chromosome) A: 101100101100101011100101 Cá thể (Chromosome) B: 111111100000110000011111 Mã hóa nhị phân đưa ra nhiều khả năng của nhiễm sắc thể với một số lượng nhỏ các gen đẳng vị. Các mã hóa này thường không tự nhiên cho nhiều bài toán và thỉnh thoảng sai sau khi thực hiện các phép toán crossover and/or mutation Encoding: 0 = not exist, 1 = exist in the Knapsack Chromosome: 1010110 Generate random population of n chromosomes: a) 0101010 b) 1100100 c) 0100011 B2:xây dựng hàm thích nghi Lựa chọn kết quả tối ưu đc cho là gần với kết
Trang 1HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HỌC TRÍ TUỆ NHÂN TẠO
Giáo viên hướng dẫn: Ngô Hữu Phúc
HÀ NỘI 3/2010
Trang 2BÁO CÁO BÀI TẬP LỚN
Đề Tài:Không gian trạng thái được mô tả là bài toán chiếc ba lô loại 1,xây dựng
chương trình giải quyết bài toán theo giải thuật gen và phương pháp chọn là bánh
xe roulette
I)Mô tả bài toán:
Bạn có một số các vật mà bạn có thể cầm theo trong chuyến du lịch
Mỗi vật có một trọng lượng và một giá trị
Có một cái túi giới hạn trọng lượng bạn có thế cầm theo
Mỗi vật chỉ được chọn tối đa 1 lần
Bạn muốn cầm các vật mang theo với max giá trị
Đồ vật: 1 2 3 4 5 6 7
Giá trị: 5 8 3 2 7 9 4
T.lượng: 7 8 4 10 4 6 4
Khối lượng tối đa có thể mang là 22 đơn vị
Xếp đồ vật để có giá trị lớn nhất?
Phương pháp giải quyết vấn đề:dùng giải thuật gen và phương pháp chọn roulette
Trang 3II Xây dựng
B1:Mã Hóa
Mã hóa nhị phân (Binary encoding) là kiểu thông dụng nhất:
nghiên cứu đầu tiên về thuật toán Gen sử dụng kiểu mã hóa này và bởi vì nó đơn giản
Trong mã hóa nhị phân, mọi nhiễm sắc thể là chuỗi bits - 0 hoặc 1
Cá thể (Chromosome) A: 101100101100101011100101
Cá thể (Chromosome) B: 111111100000110000011111
Mã hóa nhị phân đưa ra nhiều khả năng của nhiễm sắc thể với một số lượng nhỏ các gen đẳng vị
Các mã hóa này thường không tự nhiên cho nhiều bài toán và thỉnh thoảng sai sau khi thực hiện các phép toán crossover and/or mutation
Encoding: 0 = not exist, 1 = exist in the Knapsack
Chromosome: 1010110
Generate random population of n chromosomes:
a) 0101010
b) 1100100
c) 0100011
B2:xây dựng hàm thích nghi
Lựa chọn kết quả tối ưu đc cho là gần với kết quả mà ta cần tìm nhất
a) 0101010: Benefit= 19, Weight= 24
b)1100100: Benefit= 20, Weight= 19
c)0100011: Benefit= 21, Weight= 18
Ta chọn phương án b,c!
Trang 4B3:xây dựng phương pháp chọn cho sự kết hợp
Các nhiễm sắc thể được chọn từ quần thể là các cha cho lai ghép (crossover) Với phương pháp chọn bánh xe roulette
Cha được chọn qua độ thích nghi của chúng
Nhiễm sắc thể tốt hơn, nhiều ngẫu nhiên hơn phải được chọn
Tưởng tượng một roulette wheel nơi tất cả các NST trong quần thể được đặt
lên
Kích thước của đoạn trong roulete wheel tương ứng với giá trị của hàm thích nghi
Một hòn bi được lăn trong roulette wheel và NST nơi nó dừng lại được lựa chọn
NST với giá trị thích nghi lớn sẽ được chọn nhiều hơn
B4:sau khi chọn được các cá thể tốt cho lai ghép,thực hiện thao tác Crossover và mutation là hai phép toán cơ bản của thuật toán gen nhằm tạo nên một quần thể mới có giá trị tốt hơn và đạt được kết quả mà ta tìm kiếm
Trong chương trình này,ta sử dụng phương pháp single_point crossover,two_point và Arithmetic_crossover để lai ghép các cá thể cha
III)Xây dựng chương trình:
Giao diện:
Trang 5Xây dựng mảng để lưu giá trị,khối lượng vật.
public int [,] knapsack = new int [7, 2] { { 5, 7 }, { 8, 8 }, { 3, 4 }, { 2, 10 }, { 7, 4 }, { 9, 6 }, { 4,4} };
private string [] str_dt = new string [30];
private string [] str_p = new string [30];
private string [] str_f = new string [30];
Khi khởi tạo giá trị quần thể ban đầu:
Trang 6Mã lệnh thực thi
private void button1_Click( object sender, EventArgs e)
{
//int dem = 0;
lb.Items.Clear();
for ( int i = 0; i < 30; i++)
{
gen_str: string str_ = Random_ks();
if (i==0)
str_dt[i] = str_;
else
for ( int j = 0; j < i; j++)
{
if (str_dt[j] == str_)
goto gen_str;
else
str_dt[i] = str_;
}
}
C# hỗ trợ và giúp chúng ta tạo nên một chuổi tùy ý với các giá trị và khối lượng vật đã gắn cứng trong chương trình
Giá trị và khối lượng các cá thể tương ứng
Trang 7Botton “value” là hàm thích nghi,lựa chọn các cá thẻ cha tốt cho lai ghép tạo quần thể
Xây dựng hàm Elitism
private string Elitism( string [] str_)
{
int max = 0,sum1=0;
int index = 0,sum2=0;
for ( int i = 0; i < 30; i++)
{
string tmp = str_[i];
for ( int j = 0; j < 7; j++)
{
if ( Convert ToInt16(tmp[j]) == 49)
{
sum1 += knapsack[j, 0];
sum2 += knapsack[j, 1];
}
}
if (sum2 <= 22 && sum1 > max)
{
max = sum1;
index = i;
}
sum1 = sum2 = 0;
}
return str_[index];
Khi tạo quần thể mới bằng crossover hoặc mutation, có thể làm mất cá thể tốt nhất
Trang 8 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
Phương pháp Elitism có thể tăng tốc cho bài toán, vì nó ngăn không làm mất
cá thể tốt
Xây dựng hàm Mutation tạo đột biến trong một cá thể con để tiếp tục lai ghép private void Mutation( string [] str)
{
Random rnd = new Random ();
int index_str = rnd.Next(0,30);
string tmp = str[index_str];
int num = rnd.Next(1, 3);
for ( int i = 0; i < num; i++)
{
int index = rnd.Next(0,6);
if (tmp[index].Equals( "0" ))
{
tmp.Remove(index, 1);
tmp.Insert(index, "1" );
}
else
{
tmp.Remove(index, 1);
tmp.Insert(index, "0" );
}
}
str_p[index_str] = tmp;
}
Xây dựng hàm chọn bánh xe roulette
private int roulette( string [] str_p_)
Trang 9{
int sum1 =0,sum2=0;
string tmp = "" ;
for ( int i=0;i<30;i++)
{
tmp = str_p_[i];
for ( int j = 0; j < 7; j++)
{
if ( Convert ToInt16(tmp[j]) == 49) {
sum1 += knapsack[j, 1];
}
}
sum2 += sum1;
sum1 = 0;
}
Random rnd = new Random ();
int r = rnd.Next(0,sum2);
int sum3 = 0, sum4 = 0,ret=0;
for ( int i = 0; i < 30; i++)
{
tmp = str_p_[i];
for ( int j = 0; j < 7; j++)
{
if ( Convert ToInt16(tmp[j]) == 49) {
sum3 += knapsack[j, 1];
}
}
sum4 += sum3;
sum3 = 0;
if (sum4 > r)
{
ret = i;
goto end;
}
}
end: return ret;
}
Tiến hành lai ghép và kết quả quần thể thu được sau lai ghép:
Trang 10Kết quả ta sẽ tìm đc lời giải tốt nhưng không hẳn là tối ưu nhất của bài toán vì phương pháp chọn vẫn chưa thực sự tốt trong các diễn biến thực tế
Trang 11IV)Các tài liệu tham khảo:
a.Slide bài giảng môn AI của thầy
b. Trang web google.com.vn và các trang khác
Em cảm ơn thầy vì đã dạy em môn Trí tuệ nhân tạo.