Nằm trong số các thuật toán tìm kiếm, thuật toán “Tô màu tham lam greedy coloring” cũng là một trong số các giải thuật được ứng dụng khá nhiều trong việc giải quyết các bài toán thực tế.
Trang 1MỤC LỤC
MỞ ĐẦU
Trí tuệ nhân tạo hay trí thông minh nhân tạo (tiếng Anh: artificial intelligence hay machine intelligence, thường được viết tắt là AI) là trí tuệ
được biểu diễn bởi bất cứ một hệ thống nhân tạo nào Thuật ngữ này thường dùng để nói đến các máy tính có mục đích không nhất định và ngành khoa học nghiên cứu về các lý thuyết và ứng dụng của trí tuệ nhân tạo
Trí thông minh nhân tạo liên quan đến cách cư xử, sự học hỏi và khả năng thích ứng thông minh của máy móc Các ví dụ ứng dụng bao gồm các
tác vụ điều khiển, lập kế hoạch và lập lịch (scheduling), khả năng trả lời các
câu hỏi về chẩn đoán bệnh, trả lời khách hàng về các sản phẩm của một công
ty, nhận dạng chữ viết tay, nhận dạng tiếng nói và khuôn mặt Bởi vậy, trí thông minh nhân tạo đã trở thành một môn học, với mục đích chính là cung
Trang 2cấp lời giải cho các vấn đề của cuộc sống thực tế
Trí tuệ nhân tạo bao gồm nhiều hướng nghiên cứu, có thể ứng dụng cho hầu hết mọi mặt trong đời sống xã hội Một trong những hướng nghiên cứu của Trí tuệ nhân tạo đó là các phương pháp tìm kiếm Trong các nhóm phương pháp tìm kiếm cũng có rất nhiều các phương pháp con
Nằm trong số các thuật toán tìm kiếm, thuật toán “Tô màu tham lam (greedy coloring)” cũng là một trong số các giải thuật được ứng dụng khá nhiều trong việc giải quyết các bài toán thực tế Giải thuật Tô màu tham lam lấy nền tảng là thuật toán tham lam (Greedy) áp dụng trong trường hợp cụ thể
tô màu đỉnh của đơn đồ thị vô hướng
Với thời lượng có hạn, nhóm chúng tôi chỉ nêu khái quát về thuật toán tô màu tham lam đồng thời đề xuất một số ứng dụng thực tế của thuật toán
Trang 3I GIỚI THIỆU GIẢI THUẬT THAM LAM
1.1 Hiểu biết chung về thuật toán tham lam
Tham ăn hiểu một cách dân gian là: trong một mâm có nhiều món ăn, món nào ngon nhất ta sẽ ăn trước và ăn cho hết món đó thì chuyển sang món ngon thứ hai, lại ăn hết món ngon thứ hai này và chuyển sang món ngon thứ ba…
Thuật toán tham lam là thuật toán tối ưu hóa tổ hợp Thuật toán tìm kiếm, lựa chọn giải pháp tối ưu cục bộ ở mỗi bước đi với hy vọng tìm được giải pháp tối ưu toàn cục Chẳng hạn áp dụng thuật toán tham lam với bài toán hành trình của người giao hàng: ở mỗi bước hãy đi đến thành phố gần thành phố hiện tại nhất
1.2 Các thành phần của giải thuật tham lam
Giải thuật tham lam gồm 5 thành phần sau:
- Một tập hợp các ứng viên (candidate) để từ đó tạo ra lời giải;
- Một hàm lựa chọn để theo đó lựa chọn ứng viên tốt nhất để bổ sung vào lời giải;
- Một hàm khả thi (feasibility) dùng để quyết định nếu một ứng viên có
thể được dùng để xây dựng lời giải;
- Một hàm mục tiêu để ấn định giá trị của lời giải hoặc một lời giải chưa hoàn chỉnh;
- Một hàm đánh giá để chỉ ra khi nào ta tìm ra một lời giải hoàn chỉnh
Có 2 thành phần quyết định tới lời giải của giải thuật tham lam:
Tính chất lựa chọn tham lam
Chúng ta có thể lựa chọn giải pháp nào được cho là tốt nhất ở thời điểm hiện tại và sau đó giải bài toán con nảy sinh từ việc thực hiện lựa chọn vừa rồi Lựa chọn của thuật toán tham lam có thể phụ thuộc vào các lựa chọn trước đó Nhưng nó không thể phụ thuộc vào một lựa chọn nào trong tương lai hay phụ thuộc vào lời giải của các bài toán con Thuật toán tiến triển theo kiểu thực hiện các chọn lựa theo một vòng lặp, cùng lúc đó thu nhỏ bài toán
đã cho về một bài toán con nhỏ hơn Đây là khác biệt giữa thuật toán này và giải thuật quy hoạch động Giải thuật quy hoạch động duyệt hết và luôn đảm bảo tìm thấy lời giải Tại mỗi bước của thuật toán, quy hoạch động đưa ra quyết định dựa trên các quyết định của bước trước, và có thể xét lại đường đi của bước trước hướng tới lời giải Giải thuật tham lam quyết định sớm và thay
Trang 4đổi đường đi thuật toán theo quyết định đó, và không bao giờ xét lại các quyết định cũ Đối với một số bài toán, đây có thể là một thuật toán không chính xác
Cấu trúc con tối ưu
Một bài toán được gọi là "có cấu trúc tối ưu", nếu một lời giải tối ưu của bài toán con chứa lời giải tối ưu của bài toán lớn hơn
II GIẢI THUẬT TÔ MÀU THAM LAM
2.1 Phát biểu bài toán
Cho đồ thị G = <V, E> là đơn đồ thị vô hướng với tập đỉnh V = {v1, v2,
…,vn} Tô màu cho các đỉnh trên đồ thị G sao cho các đỉnh kề nhau thì không
tô chung màu đồng thời số màu được tô là ít nhất
- Input: Đồ thị G= <V, E>, đơn đồ thị vô hướng với V ={v1, v2,…, vn}
- Output:
+ Số màu sử dụng tô cho các đỉnh của đồ thị;
+ Các đỉnh với màu tô tương ứng
2.2 Trình bày giải thuật
Thuật toán tô màu tham lam thực hiện theo các bước sau:
Bước 1: Sắp xếp các đỉnh của đồ thị V’ ={v1, v2…., vn} với thứ tự giảm dần của bậc: d(v1) >d(v2) >….>d(vn); đặt i :=1;
Bước 2: Tô màu i cho đỉnh đầu tiên trong danh sách; Duyệt các đỉnh
tiếp theo trong danh sách và tô mầu i cho đỉnh không kề với đỉnh đã được tô màu i;
Bước 3: Nếu tất cả các đỉnh đã được tô màu thì kết thúc, đồ thị được tô
bằng i màu Ngược lại sang bước 4;
Bước 4: Đặt i:=i+1 và quay lại bước 2 tô màu cho các đỉnh (chưa tô)
theo thứ tự tự bậc giảm dần
2.3 Áp dụng thuật toán tô màu cho đồ thị
Cho đồ thị như hình dưới:
1 2 4 3 5 6
Trang 5Thực hiện tô màu cho đồ thị theo giải thuật tô màu tham lam
Bước 1: Sắp xếp các đỉnh theo thứ tự giảm dần của bậc ta được:
V’ = {4, 5, 6, 1, 2, 3, 7}, i:=1 (màu đỏ);
Bước 2: Tô màu i =1 cho đỉnh 4 (đỉnh đầu tiên trong danh sách) Duyệt các
đỉnh tiếp theo có 02 đỉnh không kề với đỉnh 4 là đỉnh 1 và 7 Tô màu i = 1 cho đỉnh 1, vì đỉnh 7 không kề đỉnh 1 và 4 nên có thể tô màu i = 1 cho đỉnh 7 Sau bước 2 ta tô được màu cho 3 đỉnh: 1, 4, 7 với cùng 1 màu (màu đỏ)
1 2 4 3 5 6 7
Bước 3: Ta xét các đỉnh thấy còn 04 đỉnh chưa được tô màu nên chuyển sang
Bước 4;
Bước 4: Tăng i :=2, cấm tất cả các đỉnh đã tô màu không được tô màu khác;
quay lại Bước 2
Lặp lại bước 2: Tô màu i = 2 (màu xanh) cho đỉnh 5 (đỉnh đầu tiên trong
danh sách đã sắp xếp, chưa tô màu) Xét các đỉnh chưa tô còn lại có đỉnh: 2, 3 không kề với đỉnh 5 Tô màu 2 cho đỉnh 2 Do đỉnh 3 không kề với đỉnh 2 nên
Trang 6tô màu 2 cho đỉnh 3 Sau bước này ta tô được màu 2 cho 03 đỉnh gồm: 2, 3, 5:
1 2 4 3 5 6 7
Chuyển bước 3: Xét các đỉnh còn lại thấy còn đỉnh 6 chưa tô, chuyển bước 4 Chuyển bước 4: Tăng i:=3 (màu vàng), cấm tất cả các đỉnh đã tô màu không
được tô, chuyển bước 2
Lặp lại bước 2: Tô màu i:= 3 cho đỉnh 6 Xét các đỉnh chưa tô, không có đỉnh
không kề với đỉnh 6 Sau bước này ta tô được màu 3 cho đỉnh 6
1 2 4 3 5 6 7
Chuyển bước 3: Xét các đỉnh thấy tất cả các đỉnh đã được tô màu Thuật toán
kết thúc và trả về:
- Số màu cần sử dụng: i:=3;
Trang 7- Các đỉnh được tô tương ứng:
+ Màu 1 (màu đỏ): 1, 4, 7 + Màu 2 (màu xanh): 2, 3, 5 + Màu 3 (màu vàng): 6
2.4 Thử nghiệm thuật toán với ngôn ngữ lập trình C
Với đồ thị trên, ta quy về dạng ma trận kề như sau:
Input: Dothi.in
7
0 1 1 0 0 0 0
1 0 0 0 1 0 0
1 0 0 1 0 0 0
0 1 1 0 1 1 0
0 0 0 1 0 1 1
0 0 0 1 1 0 1
0 0 0 0 1 1 0
Code thử nghiệm thuật toán
/*********Code by Ngo Ngoc Thang*********/
#include<stdio.h>
#include<conio.h>
int A[ 30 ][ 30 ],n;
FILE *fp;
//doc ma tran
void Read_Matrix (){
fp= fopen ("Dothi.in","r");
fscanf (fp,"%d",&n);
for ( int i= 1 ;i<=n;i++)
for ( int j= 1 ;j<=n;j++)
fscanf (fp,"%d",&A[i][j]);
fclose (fp);
}
//in ma tran
void Print_Matrix (){
printf ("Do thi da nhap: \n");
for ( int i= 1 ;i<=n;i++){
printf ("\n");
for ( int j= 1 ;j<=n;j++) printf ("%2d",A[i][j]);
}
}
//tinh bac cua dinh
int * Lever ( int n, int A[ 30 ][ 30 ]){
int *d= new int [n+ 1 ];
for ( int i= 1 ;i<=n;i++){
Trang 8for ( int j= 1 ;j<=n;j++) //Duyet de tim dinh ke
d[i]=d[i]+A[i][j];//Xuat hien dinh ke thi tang bac
}
return d; //Tra ve bac cua dinh
}
//Sap xep dinh theo thu tu tang dan cua bac
void SelectSort ( int n, int *d, int *&id){
int i,j;
id= new int [n+ 1 ];
for (i= 1 ;i<=n;i++) id[i]=i;
for (i= 1 ;i<n;i++)
for (j=i+ 1 ;j<=n;j++)
if (d[i]<d[j]){
int t=d[i]; d[i]=d[j]; d[j]=t;
t=id[i]; id[i]=id[j];id[j]=t;
}
}
//Giai thuat to mau
void GreedyColoring ( int n, int A[ 30 ][ 30 ]){
int *m= new int [n+ 1 ];
int *id,*d,i,j,k= 0 ;
d= Lever (n,A);//Bac cac dinh
SelectSort (n,d,id); //Sap xep dinh giam dan cua bac
for (i= 1 ;i<=n;i++) m[i]= 0 ;//khoi tao cac dinh chua to mau
for (i= 1 ;i<=n;i++)
if (m[id[i]]== 0 ){ //Neu mau dinh i = 0
m[id[i]]=k; //gan mau dinh i = k
for (j=i+ 1 ;j<=n;j++)
if (m[id[j]]== 0 ){//Neu dinh duoc duyet chua to mau
int t;
for (t= 1 ;t<=n;t++)
if (m[t]==k && A[id[j]][t]== 1 ) break ;/*Khong
to mau k dinh ke*/
if (t>n) m[id[j]]=k;/* Neu khong ke gan cho cung mau*/
} }
printf ("\nSo mau su dung la %d\n",k);
for (j= 1 ;j<=k;j++){
printf ("\nMau %d :", j);
for (i= 1 ;i<=n;i++)
if (m[i]==j) printf ("%8d",i);
}
}
int main ( void ){
Read_Matrix ();
Print_Matrix ();
Trang 9GreedyColoring (n,A);
getch ();
}
Kết quả thực hiện:
2.5 Trường hợp cụ thể thuật toán không cho về giá trị tối ưu
Như đã nói ở trên, thuật toán tô màu tham không cho kết quả tối ưu trong một số trường hợp Một ví dụ cụ thể là khi ta tô màu đồ thị hình vương miện Ví dụ với đồ thị có 8 đỉnh như hình dưới đây
Nếu ta thực hiện tô màu theo giải thuật tô màu tham lam thì số màu chúng ta cần sử dụng là 04 màu, tuy nhiên phương án tối ưu thì số màu cần sử dụng là 02 màu (như hình bên)
Trang 10III MỘT SỐ ỨNG DỤNG THỰC TẾ CỦA GIẢI THUẬT
Giải thuật tô màu tham lam có rất nhiều ứng dụng thực tế, việc áp dụng giả thuật tham lam được cho là khá hiệu quả vì dễ cài đặt, tốc độ xử lý nhanh Trong phần này, nhóm học viên chỉ đề cập đến 2 ứng dụng khá tiêu biểu của thuật toán tô màu tham lam gồm: Tô màu bản đồ, lập lịch
3.1 Ứng dụng tô màu bản đồ
Cho bản đồ như hình dưới đây Tô màu cho bản đồ sao cho các nước có chung biên giới thì không được tô chung màu, số màu được sử dụng là ít nhất
Tối ưu Greedy
coloring
Trang 11Với đề bài trên, ta đưa bản đồ về dạng đồ thị vô hướng với các nước là các đỉnh, nước có chung đường biên giới thì có đường đi đến nhau Đồ thị có dạng:
Thực hiện tô màu đồ thị theo thuật toán đã nêu ở trên ta sử dụng 04 màu để tô cho đồ thị gồm:
Màu 1: 4, 7; Màu 2: 5, 1;
Màu 3: 3, 6; Màu 4: 2, 8
Trên cơ sở đó tô các màu tương ứng cho bản đồ đã cho ở trên
3.2 Ứng dụng lập lịch
Trong trường hợp cụ thể lập lịch học tín chỉ: Các nhóm học viên đăng
ký học 05 tín chỉ sau: Toán, Lí, Hóa, Anh, Văn; Mỗi nhóm học viên có thể đăng ký nhiều tín chỉ; Mỗi tín chỉ có thể có nhiều nhóm học viên đăng ký;
Lập lịch học sao cho số ca học được tổ chức trong ngày là ít nhất và tất
cả các nhóm học viên đều được học các tín chỉ đã đăng ký
Để giải quyết bài toán trên, ta có thể biểu diễn các tín chỉ dưới dạng đồ thị như ví dụ tại phần 3.1 Với các đỉnh của đồ thị là các tín chỉ, các tín chỉ có chung nhóm học viên đăng ký thì có liên kết với nhau
Ví dụ:
2
8 3
1
4
5
Lí Toán
Hóa
Văn Anh
Trang 12Việc tô màu thực hiện như các ví dụ trước đó Số màu được tô là số ca học cần bố trí, các tín chỉ có chung màu được bố trí học cùng ca Trong trường hợp cụ thể ở trên, sử dụng thuật toán tô màu tham lam thì số màu được
tô là 3 màu, tức là ta phải bố trí tối thiểu 3 ca học với ca 1: Hóa; ca 2: Toán, văn; ca 3: Anh, lý
Trang 13KẾT LUẬN
Thuật toán tô màu tham lam được xem làm thuật toán được sử dụng khá phổ biến trong xây dựng các ứng dụng đặc biệt là các ứng dụng lập lịch như lập lịch công tác, lập lịch học, lập lịch trình cho các chuyến bay Giải thuật tìm lời giải tối ưu cục bộ (tìm lời giải tối ưu cho từng bước) và không có các bước xét lại vì vậy lời giải của giải thuật tô màu tham lam nhiều khi chưa thực sự được tối ưu
Trong báo cáo môn học, với thơi gian hạn hẹp, nhóm học viên chỉ đi nghiên cứu tinh thần thuật toán, các bước giải quyết một bài toán của thuật toán Bên cạnh đó lấy các ví dụ để áp dụng các bước của thuật toán vào giải quyết các vấn đề cụ thể Báo cáo cũng đã trình bày được một số ứng dụng của thuật toán trong thực tế để từ đó có cái nhìn toàn diện hơn về thuật toán
Với nguồn tài liệu khan hiếm, vốn tiếng anh còn hạn hẹp nên trong quá trình thực hiện biên dịch một số tài liệu tiếng Anh liên quan đến báo cáo còn tồn tại nhiều thiếu sót, cần chỉnh sửa, khắc phục Nhóm chúng tôi rất mong được sự đóng góp của thầy PGS.TS Từ Minh Phương và các bạn trong lớp để chúng tôi có thể hoàn thiện hơn nữa báo cáo của nhóm
Xin trân trọng cảm ơn!
Trang 14TÀI LIỆU THAM KHẢO
[1] https://en.wikipedia.org/wiki/Greedy_coloring
[2] https://gist.github.com/rajabishek/b9da2771994f56aa250f4f806977ffa8 [3]https://vi.scribd.com/doc/7009196/BAI-TOAN-TO-MAU%C4%90% E1%BB%92-TH%E1%BB%8A
[4] Giáo trình Trí tuệ nhân tạo, Học viên BCVT – PGS.TS Từ Minh Phương