Tải bản đầy đủ (.docx) (20 trang)

ỨNG DỤNG GIẢI THUẬT NHÁNH CẬN ĐỂ GIẢI QUYẾT BÀI TOÁN NGƯỜI DU LỊCH

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 (378.08 KB, 20 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM TP.HCM

HỌ VÀ TÊN HỌC VIÊN
ĐỀ TÀI:

ỨNG DỤNG GIẢI THUẬT NHÁNH CẬN ĐỂ
GIẢI QUYẾT BÀI TOÁN NGƯỜI DU LỊCH

Chuyên ngành: KHOA HỌC MÁY TÍNH

Người hướng dẫn:

Thành Phố Hồ Chí Minh – 2017


MỤC LỤC
CHƯƠNG I. LỜI GIỚI THIỆU.......................................................................................................3
CHƯƠNG II. TỔNG QUAN VỀ BÀI TOÁN NGƯỜI DU LỊCH.................................................4
I. Giới thiệu bài toán....................................................................................................................4
II. Mô tả bài toán TSP..................................................................................................................4
III. Các thuật toán giải bài toán TSP............................................................................................5
1. Thuật giải chính xác.............................................................................................................5
2. Thuật giải gần đúng heuristic...............................................................................................5
I. Giới thiệu..................................................................................................................................7
II. Ưu điểm và nhược điểm của giải thuật nhánh cận..................................................................9
III. Code Chương Trình.............................................................................................................10
IV. Bộ dữ liệu.............................................................................................................................14
V. Kết Quả..................................................................................................................................15
VI. Kết Luận..............................................................................................................................18
TÀI LIỆU THAM KHẢO.............................................................................................................19



Trang 2


CHƯƠNG I. LỜI GIỚI THIỆU

Bài toán Người du lịch (Travelling Salesman Problem - TSP) là một trong
những bài toán kinh điển và khó trong tin học. Bài toán có phát biểu rất đơn giản
nhưng rất khó giải trong trường hợp tổng quát với không gian tìm kiếm rộng lớn, khó
bởi các thuật toán hiệu quả nhất đã được biết đến có thời gian giải quyết bài toán này
tăng dần theo cấp số nhân của n, hay độ phức tạp thuật toán tăng theo hàm số mũ. Có
rất nhiều cách tiếp cận giải bài toán này ngay từ khi nó mới ra đời, như sử dụng quy
hoạch tuyến tính, thuật toán vét cạn, thuật toán người láng giềng gần nhất, kỹ thuật
nhánh và cận, nhưng mới chỉ dừng lại ở các bộ dữ liệu nhỏ. Gần đây có nhiều thuật
toán ra đời theo hướng tiếp cận về tiến hóa như thuật toán di truyền Genetic
Algorithm hay cách mô phỏng hành vi của đàn kiến như thuật toán đàn kiến được áp
dụng cho kết quả tốt hơn rất nhiều.
Từ bài toán người du lịch này có thể áp dụng cho nhiều tình huống trong 2
thực tế như: lập lịch tối ưu cho dự án, sắp xếp các hành trình du lịch, định tuyến trong
các mạng viễn thông…
Xuất phát từ nhu cầu tìm đường đi ngắn nhất với một giải thuật tốt cho
không gian tìm kiếm rộng lớn, áp dụng được cho nhiều bài toán tối ưu tổ hợp trong
thực tế, mục tiêu của báo cáo này nhằm tìm hiểu thuật toán đàn kiến, xem xét hiệu quả
của thuật toán đàn kiến áp dụng vào bài toán tối ưu tổ hợp và so sánh tính hiệu quả
của thuật toán đàn kiến với thuật toán di truyền.

Trang 3


CHƯƠNG II. TỔNG QUAN VỀ BÀI TOÁN NGƯỜI DU LỊCH

I. Giới thiệu bài toán
Bài toán người du lịch hay còn được gọi là bài toán TSP là một bài toán khá nổi
tiếng trong lĩnh vực tối ưu tổ hợp được nghiên cứu trong lý thuyết khoa học máy tính
có nội dung như sau: Một người bán hàng xuất phát từ thành phố của anh ta, anh ta
muốn tìm một đường đi ngắn nhất đi qua tất cả các thành phố của khách hàng mỗi
thành phố đúng một lần và sau đó trở về thành phố ban đầu. Nó nhanh chóng trở
thành bài toán khó thách thức toàn thế giới bởi độ phức tạp thuật toán tăng theo hàm
số mũ (trong chuyên ngành thuật toán người ta còn gọi chúng là những bài toán NPkhó).
II. Mô tả bài toán TSP
TSP có thể được mô hình như một đồ thị (hình 1.5), các đỉnh của đồ thị tương
ứng với các thành phố và các cạnh thì tương ứng với đường nối giữa các thành phố,
chiều dài của một cạnh tương ứng với khoảng cách giữa 2 thành phố. Một đường đi
trong bài toán TSP là một chu trình Hamilton trên đồ thị và một lời giải tối ưu của bài
toán là chu trình Hamilton ngắn nhất.
Đồ thị thường là đồ thị đầy đủ, vì vậy mọi cặp cạnh đều được nối bởi các cạnh.
Đây là bước đơn giản hóa bài toán vì việc tìm chu trình Hamilton trong một đồ thị đầy
đủ là dễ. Các bài toán mà không phải hai thành phố nào cũng được nối với nhau có thể
được chuyển đổi thành đồ thị đầy đủ bằng cách thêm những cạnh có độ dài lớn giữa
các thành phố này, những cạnh này sẽ không xuất hiện trong chu trình tối ưu.

Trang 4


Hình 1.5 Mô tả bài toán TSP
Đồ thị thường là đồ thị đầy đủ, vì vậy mọi cặp cạnh đều được nối bởi các cạnh.
Đây là bước đơn giản hóa bài toán vì việc tìm chu trình Hamilton trong một đồ thị đầy
đủ là dễ. Các bài toán mà không phải hai thành phố nào cũng được nối với nhau có thể
được chuyển đổi thành đồ thị đầy đủ bằng cách thêm những cạnh có độ dài lớn giữa
các thành phố này, những cạnh này sẽ không xuất hiện trong chu trình tối ưu.
III. Các thuật toán giải bài toán TSP

1. Thuật giải chính xác
Trong các thuật giải chính xác cho bài toán người du lịch, đầu tiên phải kể đến
thuật toán vét cạn. Thuật toán này tìm tất cả các chu trình hamilton trong đồ thị, sau
đó chọn một chu trình nhỏ nhất làm đáp án.
2. Thuật giải gần đúng heuristic
Khi bài toán có kích thước n đỉnh nhỏ thì các thuật giải chính xác được áp dụng
cho kết quả nhanh chóng và duy nhất. Nhưng khi số đỉnh của bài toán tăng lên đáng
kể thì độ phức tạp của thuật toán do đó cũng tăng lên. Trong trường hợp này, chất
lượng của giải pháp không phải là vấn đề quan tâm nhất mà hiệu suất tính toán và sự
đơn giản về khái niệm được ưu tiên hơn, khi đó thuật toán heuristic được sử dụng để
đưa ra một giải pháp không phải là tối ưu nhất nhưng chấp nhận được do sai số so với
giải pháp tối ưu nhất không nhiều. Trong luận văn này giới thiệu bốn thuật toán nổi
tiếng nhất là: thuật toán láng giềng gần nhất, thuật toán tìm kiếm cục bộ, thuật toán
Trang 5


nhánh cận và thuật toán di truyền. Trong đó thuật toán cục bộ thường được sử dụng
kết hợp với thuật toán đàn kiến ACO để tăng hiệu suất tìm kiếm giải pháp.
Thuật toán tìm kiếm cục bộ
Thuật toán tìm kiếm cục bộ là giải pháp metaheuristic cho việc giải các bài toán tính
toán tối ưu khó trong máy tính. Thuật toán này có thể được áp dụng cho các bài toán
tìm kiếm lời giải gần đúng tối ưu trong một loạt các lời giải ứng viên. Phương pháp
tìm kiếm sẽ duyệt qua các lời giải trong không gian tìm kiếm cho đến khi lời tìm ra lời
giải được cho là tối ưu hoặc vượt quá thời gian tìm kiếm cho phép. Thuật toán tìm
kiếm cục bộ sẽ bắt đầu từ một ứng viên lời giải (chưa tối ưu), kiểm tra và cải thiện dần
bằng cách chỉ quan tâm tới giải pháp hiện thời rồi xem xét chuyển sang ứng viên lời
giải láng giềng của lời giải hiện thời đến khi dừng thuật toán. Tuy nhiên mỗi ứng viên
lời giải đều có thể có hơn một lời giải láng giềng, nên mỗi cách lựa chọn lời giải láng
giềng trong danh sách láng giềng để thành bước duyệt kế tiếp có thể trở thành một
thuật toán khác.

Thuật toán di truyền
Thuật toán di truyền là thuật toán metaheuristic. Metaheuristic là một cách gọi chung
cho các thuật toán heuristic trong việc giải quyết các bài toán tổ hợp khó. Hầu hết các
thuật toán metaheuristic đều lấy cảm hứng từ tự nhiên như: thuật toán luyện thép
(SA), thuật toán di truyền (GA), thuật toán đàn kiến (ACO),… Thuật toán đàn kiến là
metaheuristic dùng chiến lược của kiến trong thế giới thực để giải bài toán tối ưu. SA
xuất phát từ phương thức xác suất và kỹ thuật luyện bao gồm việc nung và điều khiển
àm nguội các kim loại để đạt được trạng thái năng lượng nhỏ nhất. Trong khi đó thuật
toán di truyền dựa trên ý tưởng từ cơ chế di truyền trong sinh học và tiến trình tiến
hóa trong cộng đồng các cá thể của một loài.
Thuật toán láng giềng gần nhất
Thuật giải vét cạn ở trên cho ta một đáp án tối ưu, tuy nhiên độ phức tạp của nó
là quá cao (O(n!)). Do đó trong thực tế, người ta chấp nhận các thuật giải cho kết quả
tốt (nhưng không phải lúc nào cũng tốt) bởi sự đơn giản, nhanh chóng và cài đặt dễ

Trang 6


dàng. Một trong các thuật giải đó là thuật toán láng giềng gần nhất hay còn được gọi
là thuật toán tham lam.
Thuật toán nhánh cận
Thuật toán nhánh cận là phương pháp chủ yếu để giải các bài toán tối ưu tổ
hợp. Tư tưởng cơ bản của thuật toán là trong quá trình tìm kiếm lời giải, sẽ phân
hoạch tập các phương án của bài toán thành hai hay nhiều tập con biểu diễn như một
nút của một cây tìm kiếm và cố gắng bằng cách đánh giá cận các nút, tìm cách loại bỏ
những nhánh cây (những tập con các phương án của bài toán) mà biết chắc chắn
không phải phương án tối ưu. Mặc dù trong trường hợp tồi nhất, thuật toán sẽ trở
thành duyệt toàn bộ, nhưng trong những trường hợp cụ thể nó có thể rút ngắn đáng kể
thời gian tìm kiếm.


Trang 7


CHƯƠNG III. THUẬT TOÁN TỐI ƯU NHÁNH CẬN
I. Giới thiệu
Một trong những bài toán đặt ra trong thực tế là việc tìm ra một nghiệm thoả mãn một
số điều kiện nào đó, và nghiệm đó là tốt nhất theo một chỉ tiêu cụ thể, nghiên cứu lời
giải các lớp bài toán tối ưu thuộc về lĩnh vực quy hoạch toán học. Tuy nhiên cũng cần
phải nói rằng trong nhiều trường hợp chúng ta chưa thể xây dựng một thuật toán nào
thực sự hữu hiệu để giải bài toán, mà cho tới nay việc tìm nghiệm của chúng vẫn phải
dựa trên mô hình liệt kê toàn bộ các cấu hình có thể và đánh giá, tìm ra cấu hình tốt
nhất. Việc liệt kê cấu hình có thể cài đặt bằng các phương pháp liệt kê: Sinh tuần tự và
tìm kiếm quay lui.
Thuật toán quay lui (backtracking) là chiến lược tìm nghiệm bài toán bằng cách xét tất
cả các phương án có thể. Đó là một quá trình tìm kiếm theo độ sâu trong một tập hợp
các lời giải. Trong quá trình tìm kiếm, nếu ta gặp một hướng lựa chọn không thỏa
mãn, ta quay lui về điểm lựa chọn nơi có các hướng khác và thử hướng lựa chọn tiếp
theo. Khi đã thử hết các lựa chọn xuất phát từ điểm lựa chọn đó, ta quay lại điểm lựa
chọn trước đó và thử hướng lựa chọn tiếp theo tại đó. Quá trình tìm kiếm thất bại khi
không còn điểm lựa chọn nào nữa. Đây là một thuật toán có thể áp dụng để giải rất
nhiều bài toán với kích thước dữ liệu thích hợp. Ưu điểm của thuật toán là đảm bảo
tìm ra nghiệm đúng chính xác.
Mô hình thuật toán quay lui là tìm kiếm trên một cây phân cấp. Nếu giả thiết rằng ứng
với mỗi nút tương ứng với một giá trị được chọn cho x[i] sẽ ứng với chỉ 2 nút tương
ứng với 2 giá trị mà x[i+1] có thể nhận thì cây n cấp sẽ có tới 2n nút lá, con số này lớn
hơn rất nhiều lần so với dữ liệu đầu vào n.
Chính vì vậy mà nếu như ta có thao tác thừa trong việc chọn x[i] thì sẽ phải trả giá rất
lớn về chi phí thực thi thuật toán bởi quá trình tìm kiếm lòng vòng vô nghĩa trong các
bước chọn kế tiếp x[i+1], x[i+2], … Khi đó, một vấn đề đặt ra là trong quá trình liệt
kê lời giải ta cần tận dụng những thông tin đã tìm được để loại bỏ sớm những phương

Trang 8


án chắc chắn không phải tối ưu. Kỹ thuật đó gọi là kỹ thuật đánh giá nhánh cận trong
tiến trình quay lui. Kĩ thuật Nhánh cận (Nhánh và cận – Branch and Bound) giúp
chúng ta đánh giá được nghiệm, do có thể cắt bỏ đi những phương án (nhánh) không
cần thiết, việc tìm nghiệm tối ưu sẽ nhanh hơn, cải thiện được độ phức tạp thuật toán.
Những bài toán tìm một nghiệm, liệt kê hoặc bài toán tối ưu là những lớp bài toán có
thể giải bằng Kĩ thuật Nhánh cận.
Ý tưởng của thuật toán:
Nhánh cận là kỹ thuật xây dựng cây tìm kiếm phương án tối ưu, nhưng không xây
dựng toàn bộ cây mà sử dụng giá trị cận để hạn chế bớt các nhánh.
-

Giữ lại phương án mẫu
Tính chi phí cho các phương án khác ngay trong quá trình xây dựng.
o Tốt hơn: cập nhật lại phương án mẫu và tiếp tục tìm phương án tiếp theo.
o Không tốt hơn: quay lại bước trên và xét phương án khác.

Gọi p là 1 hoán vị của {1,2,…,n} ta được hành trình Tp(1)-> Tp(2) -> … Tp(n).
Ta có n! hành trình.
Nếu ta chọn đỉnh 1 là đỉnh xuất phát thì ta có (n-1)! hành trình, bài toán trở thành:
+ Tìm Min{f(x)}
Hàm đệ quy quay lui cho nhánh cận:
Try(i){
For(j=1; jIf ( chấp nhận được phương án) {
Xác định xi theo j;
Ghi nhận trạng thái mới;
If( i=n)

Cập nhật trạng thái tối ưu;
Trang 9


Else{
Xác định cận g(x1, x2, x3,…);
If (g(x1, x2, x3,…) < f* )
Try(i+1);
}
}
}
II. Ưu điểm và nhược điểm của giải thuật nhánh cận
Ưu điểm: Giảm được chi phí do loại bỏ được những bước đi không cần thiết.
Nhược điểm: Việc xây dựng hàm g phụ thuộc vào từng bài toán tối ưu tổ hợp cụ
thể. Hàm g phải đảm bảo các yêu cầu sau:
+ Việc tính giá trị hàm g phải đơn giản hơn bài toán tìm
min=min{ f(a):=a=(a1,a2,a3,…)) thuộc X, Xi=ai, i=1,…,n}
+ Giá trị của f phải sát với giá trị của min.

Trang 10


III. Code Chương Trình
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <cstdlib> // call rand()
#include<stdlib.h> // call itoa(): chuyen so sang chuoi
#include <string.h>

#define max 101
using namespace std;
char duongdan_dulieu[100]="E:\\BaiTapC\\TieuLuan_ThayBao\\TSP\\dulieu\\tsp_";
char duongdan_ketqua[100]="E:\\baitapC\\TieuLuan_ThayBao\\TSP\\output\\kq_tsp";
int a[max][max];// ma tran ke vo huong co trong so
int n;// so luong dinh
bool b[max]={false};// mang danh dau
char s[10];
int kq[max],bestConfig[max]={0};// mang tam, va mang luu cau hinh tot nhat
int mmin=32000,cost=0;// gia tri thap nhat khi di qua cac dinh va gia tri tam
long g,ss;
int start;// dinh bat dau
void Try(int i);
void xoakitu(char *xau,int v,int n=1)
{
v+n-1>strlen(xau)?*xau=NULL:xau[v]=xau[v+n],v+n}
void Init(int kk)
{
// Doc gia tri vao ma tran a[][]
FILE *FileIn;
itoa(kk,s,10);
strcat(duongdan_dulieu,s);
strcat(duongdan_dulieu,".txt");
FileIn=fopen(duongdan_dulieu,"r");
fscanf(FileIn,"%d \n",&n);
if(!FileIn)
{
cout<<"Loi mo tep de doc.";
}


Trang 11


for(int i=0; ifor(int j=0; jif( i==j) a[i][j]=0;
else{
fscanf(FileIn,"%d",&a[i][j]);
a[j][i] = a[i][j];
}
if(kk<10)
{
xoakitu(duongdan_dulieu,strlen(duongdan_dulieu)-5,5);
}
if(kk>=10 && kk<100)
{
xoakitu(duongdan_dulieu,strlen(duongdan_dulieu)-6,6);
}
if(kk>=100 && kk<1000)
{
xoakitu(duongdan_dulieu,strlen(duongdan_dulieu)-7,7);
}
if(kk>=1000 && kk<10000)
{
xoakitu(duongdan_dulieu,strlen(duongdan_dulieu)-8,8);
}
fclose(FileIn);
}
void Try(int i)

{
g=0;ss=0;
//neu i == n thi kiem tra de xem phai la cau hinh tot hon thi luu lai
cout<<"->";
if(i==n)
{
if(cost+a[kq[i-1]][kq[0]]{
mmin=cost+a[kq[i-1]][kq[0]];
g++;ss+=2;
for(int k=0; k < n;k++)
{
bestConfig[k]=kq[k];
ss++; g+=2;
}
}
}
else
{

Trang 12


for(int j=0;j{
g++;ss++;
// neu chua di qua va gia tri con cho phep
if(b[j]==false && cost+a[kq[i-1]][j] < mmin)
{
ss+=2;g+=3;

//ghi nho lai ket qua
kq[i]=j;
b[j]=true;
cost+=a[kq[i-1]][j];
//goi de qui den buoc tiep theo
Try(i+1);
//xoa bo ghi nho
b[j]=false;
cost-=a[kq[i-1]][j];
g+=2;
}
}
}
}
//------------------------------------------------------------void Output()// ham xuat cac gia tri
{
for(int i=0;i{
cout<}cout<cout<<"Chi phi: "<}

Trang 13


//------------------MAIN----------------------------------------int main(void)
{
int soluongtep;
// Ghi ket qua ra tep

FILE *FileOut; FILE *FileIn;
strcat(duongdan_ketqua,".txt");
FileOut=fopen(duongdan_ketqua,"w");
if(!FileOut )
cout<<"Loi mo tep de doc.";
soluongtep=84;
clock_t start = clock();
for (int i=5; i<=soluongtep; i+=2)
{
Init(i);
start=i;
kq[0]=start;
b[start]=true;
Try(1);// bat dau goi tu dinh dau tien di,khi bang n thi dung
Output();
clock_t finish = clock();
float duration = (float)(finish - start) / CLOCKS_PER_SEC;
fprintf(FileOut,"%d\t %d\t %10.7f\t\t%d\t\t%d\n",i,mmin,duration,g,ss);
}
fclose(FileOut);
return 0;
}

Trang 14


IV. Bộ dữ liệu

Phát sinh ngẫu nhiên 48 tệp: Tệp thấp nhất là 5 phần tử, 10 phần tử …83 phần tử


Trang 15


V. Kết Quả
Kết quả chạy thử nghiệm trên 10 bộ test khác nhau cho ra kết quả như sau:

KẾT QUẢ ĐƯỢC THỰC HIỆN TRÊN MÁY TÍNH CORE i3, RAM 8G
Số tệp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Số
lượng

ẩn

Số
phép
gán

Số
phép
so
sánh

Thời
gian

Thời
gian

Thời
gian

Thời
gian

Thời
gian

Thời
gian

Thời

gian

Thời
gian

Thời
gian

Thời
gian

Lần 1

Lần 2

Lần 3

Lần 4

Lần 5

Lần 6

Lần 7

Lần 8

Lần 9

Lần 10


5.000
7.000
9.000
11.000
13.000
15.000
17.000
19.000
21.000
23.000
25.000
27.000
29.000
31.000
33.000
35.000
37.000
39.000
41.000

16.000
22.000
22.000
19.000
21.000
39.000
35.000
48.000
51.000

47.000
51.000
63.000
89.000
83.000
67.000
57.000
69.000
75.000
97.000

10.000
16.000
16.000
15.000
17.000
31.000
29.000
42.000
45.000
41.000
43.000
57.000
77.000
75.000
59.000
51.000
61.000
67.000
89.000


0.052
0.054
0.058
0.062
0.069
0.073
0.077
0.083
0.100
0.107
0.126
0.165
0.231
0.285
0.346
0.376
0.469
0.653
0.999

0.052
0.054
0.058
0.062
0.069
0.073
0.077
0.083
0.100

0.107
0.126
0.165
0.231
0.285
0.346
0.376
0.469
0.653
0.999

0.053
0.055
0.059
0.063
0.070
0.074
0.078
0.084
0.101
0.108
0.127
0.166
0.232
0.286
0.347
0.377
0.470
0.654
0.998


0.049
0.051
0.055
0.059
0.066
0.070
0.074
0.082
0.099
0.106
0.125
0.165
0.228
0.282
0.343
0.373
0.466
0.650
0.996

0.054
0.056
0.060
0.064
0.071
0.075
0.079
0.085
0.102

0.109
0.128
0.167
0.233
0.287
0.348
0.378
0.471
0.655
1.001

0.059
0.061
0.065
0.069
0.076
0.080
0.084
0.090
0.107
0.114
0.133
0.172
0.238
0.292
0.353
0.383
0.476
0.660
1.006


0.058
0.060
0.064
0.068
0.075
0.079
0.083
0.089
0.106
0.113
0.132
0.171
0.237
0.291
0.352
0.382
0.475
0.659
1.005

0.053
0.055
0.059
0.063
0.070
0.074
0.078
0.084
0.101

0.108
0.127
0.166
0.232
0.286
0.347
0.377
0.470
0.654
1.000

0.050
0.052
0.056
0.060
0.067
0.071
0.075
0.083
0.100
0.107
0.126
0.166
0.229
0.283
0.344
0.374
0.467
0.651
0.997


0.055
0.057
0.061
0.065
0.072
0.076
0.080
0.086
0.103
0.110
0.129
0.168
0.234
0.288
0.349
0.379
0.472
0.656
1.002

Trang 16


20
21
22
23
24
25

26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

43.000
45.000
47.000
49.000
51.000
53.000

55.000
57.000
59.000
61.000
63.000
65.000
67.000
69.000
71.000
73.000
75.000
77.000
79.000
81.000
83.000
85.000
87.000
89.000
91.000
93.000
95.000
97.000
99.000

75.000
89.000
101.000
61.000
81.000
61.000

159.000
81.000
75.000
97.000
165.000
95.000
191.000
131.000
105.000
107.000
125.000
139.000
181.000
109.000
89.000
143.000
133.000
203.000
113.000
117.000
191.000
289.000
105.000

69.000
83.000
91.000
57.000
75.000
57.000

149.000
73.000
69.000
91.000
153.000
89.000
181.000
121.000
97.000
101.000
119.000
129.000
169.000
103.000
85.000
133.000
125.000
191.000
107.000
111.000
183.000
275.000
101.000

1.309
2.238
2.728
3.669
4.177
4.964

6.476
7.703
8.843
14.362
15.133
16.715
18.399
21.349
25.589
33.852
35.706
45.252
50.855
58.327
73.107
78.865
88.278
103.895
135.316
149.900
180.682
180.889
181.242

1.309
2.238
2.728
3.669
4.177
4.964

6.476
7.703
8.843
14.362
15.133
16.715
18.399
21.349
25.589
33.852
35.706
45.252
50.855
58.327
73.107
78.865
88.278
103.895
135.316
149.900
180.682
180.889
181.242

Trang 17

1.310
2.239
2.729
3.670

4.178
4.965
6.477
7.704
8.844
14.363
15.134
16.716
18.400
21.350
25.590
33.853
35.707
45.253
50.856
58.328
73.108
78.866
88.279
103.896
135.317
149.901
180.683
180.890
181.243

1.306
2.235
2.725
3.666

4.174
4.961
6.473
7.700
8.840
14.359
15.130
16.712
18.396
21.346
25.586
33.849
35.703
45.249
50.852
58.324
73.104
78.862
88.275
103.892
135.313
149.897
180.679
180.886
181.239

1.311
2.240
2.730
3.671

4.179
4.966
6.478
7.705
8.845
14.364
15.135
16.717
18.401
21.351
25.591
33.854
35.708
45.254
50.857
58.329
73.109
78.867
88.280
103.897
135.318
149.902
180.684
180.891
181.244

1.316
2.245
2.735
3.676

4.184
4.971
6.483
7.710
8.850
14.369
15.140
16.722
18.406
21.356
25.596
33.859
35.713
45.259
50.862
58.334
73.114
78.872
88.285
103.902
135.323
149.907
180.689
180.896
181.249

1.315
2.244
2.734
3.675

4.183
4.970
6.482
7.709
8.849
14.368
15.139
16.721
18.405
21.355
25.595
33.858
35.712
45.258
50.861
58.333
73.113
78.871
88.284
103.901
135.322
149.906
180.688
180.895
181.248

1.310
2.239
2.729
3.670

4.178
4.965
6.477
7.704
8.844
14.363
15.134
16.716
18.400
21.350
25.590
33.853
35.707
45.253
50.856
58.328
73.108
78.866
88.279
103.896
135.317
149.901
180.683
180.890
181.243

1.307
2.236
2.726
3.667

4.175
4.962
6.474
7.701
8.841
14.360
15.131
16.713
18.397
21.347
25.587
33.850
35.704
45.250
50.853
58.325
73.105
78.863
88.276
103.893
135.314
149.898
180.680
180.887
181.240

1.312
2.241
2.731
3.672

4.180
4.967
6.479
7.706
8.846
14.365
15.136
16.718
18.402
21.352
25.592
33.855
35.709
45.255
50.858
58.330
73.110
78.868
88.281
103.898
135.319
149.903
180.685
180.892
181.245


Bảng hồi quy tuyến tính
Regression
Statistics

Multiple R
R Square
Adjusted R Square
Standard Error
Observations
ANOVA

1
1
0.829268293
1.42174E-15
48

df

Intercept
Số lượng ẩn

Coefficients
-1.5
0.5

MS
9212 708.6154
8.28747E-29 2.02E-30
9212
Standard
Error
t Stat
2.33806E-15 -6.4E+14

1.87262E-17 2.67E+16

Số phép gán

-2.24117E-16

1.58048E-16

Regression
Residual
Total

Số phép so sánh

SS

13
41
54

2.52435E-16

F
7.6E+32

Significance
F
0

P-value

0
0

Lower 95%
-1.5
0.5

-1.41803 0.163737

-5.433E-16

1.67934E-16 1.503184 0.140456

-8.67138E-17

Trang 18

Upper 95%
-1.5
0.5
9.50668E17
5.91584E16

Lower
95.0%
-1.5
0.5
-5.433E-16
-8.67138E17


Upper
95.0%
-1.5
0.5
9.50668E17
5.91584E16


VI. Kết Luận
Đã tìm hiểu và cho chạy phát sinh thành công 48 tệp dữ liệu, sau đó đọc dữ liệu xử lí dữ liệu thông qua thuật toán
nhánh cận để giải quyết bài toán người đi du lịch. Trong quá trình tìm hiểu không tránh khỏi các thiếu sót mong được nhận
đóng góp ý kiến từ giáo viên và các bạn trong lớp để tôi được học hỏi nhiều hơn.

Trang 19


TÀI LIỆU THAM KHẢO
[1]. Bài giảng qua các buổi học của Thầy: PGS, TS. Phạm Thế Bảo.
[2]. Tham khảo sách Sáng tạo trong thuật toan và lập trình của Thầy: Nguyễn Xuân Huy.
[3]. Website tham khảo






Trang 20




×