Để giải bài toán Người bán hàng Travelling Salesman TSP bằng các các thuật toán, kỹ thuật, phương pháp nêu trên gặp nhiều khó khăn vì độ phức tạp tính toán cao, việc giải bài toán này vớ
Trang 1ĐỂ GIẢI QUYẾT BÀI TOÁN TSP
Chuyên ngành: Khoa học máy tính
Mã số: 60.48.01.01
TÓM TẮT LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Đà Nẵng – Năm 2018
Trang 2Công trình được hoàn thành tại TRƯỜNG ĐẠI HỌC BÁCH KHOA
Người hướng dẫn khoa học: PGS.TS NGUYỄN TẤN KHÔI
Phản biện 1: TS Huỳnh Hữu Hưng
Phản biện 2: TS Phạm Văn Việt
Luận văn đã được bảo vệ trước Hội đồng chấm Luận văn tốt nghiệp thạc sĩ Khoa học máy tính tại Trường Đại học Bách khoa vào ngày 16 tháng 6 năm 2018
Có thể tìm hiểu luận văn tại:
- Trung tâm Học liệu, Đại học Đà Nẵng tại Trường Đại học Bách khoa
- Thư viện Khoa Công nghệ thông tin, Trường Đại học Bách khoa – Đại học Đà Nẵng
Trang 3MỞ ĐẦU
1 Lý do chọn đề tài
Trong tin học cũng như lý thuyết đồ thị bài toán Người bán hàng (Travelling Salesman Problem-TSP) là một trong những bài toán kinh điển và khó[2][3] 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 n, hay độ phức tạp của thuật toán tăng dần theo hàm mũ[4] Có rất nhiều cách tiếp cận bài toán này từ khi 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 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 phương pháp tối ưu hóa đàn kiến (Ant Colony Optimization)
Để giải bài toán Người bán hàng (Travelling Salesman TSP) bằng các các thuật toán, kỹ thuật, phương pháp nêu trên gặp nhiều khó khăn vì độ phức tạp tính toán cao, việc giải bài toán này với tính chất tuần tự của giải thuật tuần tự khi số đỉnh lên đến hàng chục ngàn đỉnh sẽ gặp phải về vấn đề thời gian thực hiện chương trình, tốc độ xử lý, khả năng lưu trữ của bộ nhớ,…Để xử lý dữ liệu
Problem-có quy mô lớn, kích thước của bài toán tăng lên và không gian tìm kiếm lớn Điều đó đặt ra là ta phải chia bài toán cho nhiều bộ xử lý đồng thời tham gia tính toán, dẫn đến ta phải xây dựng thuật toán song song trên đa bộ xử lý [1][5][6][7][8]
Với sự phát triển của công nghệ đặt ra cho chúng ta nhiều thách thức Bởi thời đại mà chúng ta đang sống ngành công nghệ máy tính phát triển như vũ bão Từ thế kỷ thứ 3 trước công nguyên, thư viện Alexandria được coi là nơi chứa đựng toàn bộ kiến thức của loài
Trang 4người Ngày nay, tổng lượng thông tin trên toàn thế giới đủ để chia đều cho mỗi đầu người một lượng nhiều gấp 320 lần lượng thông tin
mà các sử gia tin rằng thư viện Alexandria từng lưu trữ - ước tính vào khoảng 120 exabyte Nếu tất cả những thông tin này được ghi lại vào đĩa CD và chúng ta xếp chồng các đĩa CD này lên nhau, sẽ có tới
5 chồng đĩa mà mỗi chồng đều vươn dài chạm tới mặt trăng
Sự bùng nổ dữ liệu này chỉ mới xuất hiện gần đây Cách đây không lâu, vào năm 2000, chỉ mới có một phần tư lượng thông tin lưu trữ trên toàn thế giới ở dạng kỹ thuật số Ba phần tư còn lại được người ta lưu trên giấy tờ, phim, và các phương tiện analog khác Nhưng do lượng dữ liệu kỹ thuật số bùng nổ quá nhanh – cứ 3 năm lại tăng gấp đôi – cục diện trên nhanh chóng đảo ngược Ngày nay, chỉ dưới 2% tổng lượng thông tin chưa được chuyển sang lưu trữ ở dạng kỹ thuật số Theo tài liệu của Intel vào tháng 09/2013, hiện nay thế giới đang tạo ra 1 petabyte dữ liệu mỗi 11 giây, tương đương với đoạn video HD dài 13 năm Nhà bán lẻ online Amazon.com thì phải
xử lí hàng triệu hoạt động mỗi ngày, cũng như yêu cầu từ khoảng nữa triệu đối tác bán hàng Tương tự, Facebook cũng phải quản lí 50
tỉ bức ảnh từ người dùng tải lên, YouTube hay Google thì phải lưu lại hết các lượt truy vấn và video của người dùng cùng nhiều loại thông tin khác có liên quan
Để xử lý lượng dữ liệu khổng lồ đó, rất nhiều công nghệ đã ra đời Trong đó phải kể đến công nghệ tính toán phân tán Ý tưởng chính của việc tính toán phân tán là chia bài toán thành những bài toán con và giải quyết trên các máy riêng biệt nhau được kết nối trong một cluster Chúng ta có thể thấy sự thành công của các công
ty như Google, Facebook trong thời đại bùng nổ về công nghệ hiện nay Đằng sau sự thành công đó có sự đóng góp không nhỏ của một
mô hình lập trình được đưa ra bởi Google – đó là mô hình lập trình
Trang 5phân tán MapReduce [9][10][11] MapReduce là một mô hình lập trình phân tán, bao gồm hai giai đoạn chính là Map và Reduce Mô hình lập trình MapReduce được dùng để xử lý dữ liệu lớn dựa trên lý thuyết của mô hình tính toán song song và mô hình xử lý dữ liệu phân tán trên những cụm máy tính MapReduce có các ưu điểm nổi bật như: Xử lý tốt bài toán với lượng dữ liệu lớn có các tác vụ phân tích và tính toán phức tạp không lường trước được; Có thể tiến hành chạy song song trên các máy phân tán một cách chính xác và hiệu quả Không cần quan tâm đến sự trao đổi dữ liệu giữa các cụm máy tính với nhau vì chúng hoạt động một cách độc lập; Có thể thực hiện
mô hình MapReduce trên nhiều ngôn ngữ (Java, C/ C++, Python, Perl, Ruby) với các thư viện tương ứng [10][12][13]
Trong thực tiễn, có nhiều bài toán với yêu cầu xử lý dữ liệu lớn, thời gian xử lý ngắn hơn Do đó hướng ứng dụng MapReduce để giải bài toán Người bán hàng(Travelling Salesman Problem-TSP) là mục tiêu mà tôi lựa chọn cho đề tài luận văn cao học:
“Ứng dụng mô hình xử lý phân tán Mapreduce để giải quyết
bài toán TSP ”
2 Mục tiêu và nhiệm vụ nghiên cứu
2.1 Mục tiêu nghiên cứu
Nghiên cứu ứng dụng mô hình xử lý phân tán MapReduce trên nền tảng hadoop để giải quyết bài toán Người bán hàng(Travelling
Salesman Problem-TSP) có kích thước dữ liệu lớn
2.2 Nhiệm vụ nghiên cứu
-Tìm hiểu về nền tảng tính toán phân tán với Hadoop
-Tìm hiểu về mô hình tính toán MapReduce
-Tìm hiểu lý thuyết đồ thị
-Tìm hiểu bài toán Người bán hàng(TSP)
Trang 6-Xây dựng giải thuật giải quyết bài toán Người bán hàng(TSP)
dựa theo mô hình MapReduce
3 Đối tượng và phạm vi nghiên cứu
3.1 Đối tượng nghiên cứu
-Cấu trúc Framework, Hadoop, Kiến trúc HDFS
-Bài toán Người bán hàng(TSP)
-Tìm hiểu xây dựng các hàm Map, hàm Reduce
-Triển khai mô hình hệ thống
3.2 Phạm vi nghiên cứu
-Mô hình xử lý phân tán MapReduce trên nền tảng hadoop -Ứng dụng mô hình MapReduce để giải quyết bài toán Người bán hàng(TSP)
4 Phương pháp nghiên cứu
4.1 Phương pháp nghiên cứu lý thuyết
Tìm hiểu các mô hình xử lý phân tán
Bài toán Người bán hàng(TSP)
Giải thuật xử lý phân tán
4.2 Phương pháp nghiên cứu thực nghiệm
Xây dựng sơ đồ, các thuật toán giải bài toán Người bán hàng(TSP)
Lập trình ứng dụng bằng ngôn ngữ Java
Xây dựng chương trình thử nghiệm
5 Ý nghĩa khoa học và thực tiễn của luận văn
5.1 Ý nghĩa khoa học
Xây dựng được giải thuật giải bài toán Người bán hàng (TSP)
từ giải thuật tuần tự sang xử lý song song trên mô hình phân tán MapReduce
5.2 Ý nghĩa thực tiễn
Trang 7Ứng dụng xử lý dữ liệu lớn trên mô hình phân tán giải bài toán Người bán hàng (TSP)
CHƯƠNG 1 - TỔNG QUAN VỀ DỮ LIỆU LỚN VÀ
BÀI TOÁN TSP 1.1 Dữ liệu lớn
Trước đây, chúng ta mới chỉ biết đến dữ liệu có cấu trúc (structure data), ngày nay, với sự kết hợp của dữ liệu và internet, đã xuất hiện một dạng khác của dữ liệu Big data (dữ liệu lớn)[10] Dữ liệu này có thể từ các nguồn như: Hồ sơ hành chính, giao dịch điện
tử, dòng trạng thái (status), chia sẻ hình ảnh, bình luận, nhắn tin của chính chúng ta, nói cách khác chúng là dữ liệu được sản sinh qua quá trình chia sẻ thông tin trực tuyến liên tục của người sử dụng Sự bùng
nổ dữ liệu này chỉ mới xuất hiện gần đây Cách đây không lâu, vào năm 2000, chỉ mới có một phần tư lượng thông tin lưu trữ trên toàn thế giới ở dạng kỹ thuật số Ba phần tư còn lại được người ta lưu trên giấy tờ, phim, và các phương tiện analog khác Nhưng do lượng dữ liệu kỹ thuật số bùng nổ quá nhanh – cứ 3 năm lại tăng gấp đôi – cục diện trên nhanh chóng đảo ngược Ngày nay, chỉ dưới 2% tổng lượng thông tin chưa được chuyển sang lưu trữ ở dạng kỹ thuật số Theo tài liệu của Intel vào tháng 09/2013, hiện nay thế giới đang tạo ra 1 petabyte dữ liệu mỗi 11 giây, tương đương với đoạn video HD dài 13 năm Nhà bán lẻ online Amazon.com thì phải xử lí hàng triệu hoạt động mỗi ngày, cũng như yêu cầu từ khoảng nữa triệu đối tác bán hàng Tương tự, Facebook cũng phải quản lí 50 tỉ bức ảnh từ người dùng tải lên, YouTube hay Google thì phải lưu lại hết các lượt truy vấn và video của người dùng cùng nhiều loại thông tin khác có liên quan
Trang 8Hình 1.1: Mô tả dữ liệu lớn 1.1.1 Đặc trưng của dữ liệu lớn và sự khác biệt với dữ liệu truyền thống
1.1.2 Đặc trưng 5V của dữ liệu lớn
1.1.3 Sự khác biệt giữa dữ liệu lớn với dữ liệu truyền thống
Dữ liệu lớn khác với dữ liệu truyền thống ở 4 điểm cơ bản: Dữ liệu đa dạng hơn; lưu trữ dữ liệu lớn hơn; truy vấn nhanh hơn; độ chính xác cao hơn
a) Dữ liệu đa dạng hơn
Khi khai thác dữ liệu truyền thống (dữ liệu có cấu trúc),
chúng ta thường phải trả lời các câu hỏi: Dữ liệu lấy ra kiểu gì? Định dạng dữ liệu như thế nào? Đối với dữ liệu lớn, không phải trả lời các câu hỏi trên Hay nói khác khi khai thác, phân tích dữ liệu lớn chúng
ta không cần quan tâm đến kiểu dữ liệu và định dạng của chúng, điều quan tâm là giá trị mà dữ liệu mang lại có đáp ứng được cho công việc hiện tại và tương lai hay không
b) Lưu trữ dữ liệu lớn hơn
Lưu trữ dữ liệu truyền thống vô cùng phức tạp và luôn đặt ra câu hỏi lưu như thế nào? Dung lượng kho lưu trữ bao nhiêu là đủ? Gắn kèm với câu hỏi đó là chi phí đầu tư tương ứng Công nghệ lưu trữ dữ liệu lớn hiện nay đã phần nào có thể giải quyết được vấn đề
Trang 9trên nhờ những công nghệ lưu trữ đám mây, phân phối lưu trữ dữ liệu phân tán và có thể kết hợp các dữ liệu phân tán lại với nhau một cách chính xác và xử lý nhanh trong thời gian thực
c) Truy vấn dữ liệu nhanh hơn
Dữ liệu lớn được cập nhật liên tục, trong khi đó kho dữ liệu
truyền thống thì lâu lâu mới được cập nhật và trong tình trạng không theo dõi thường xuyên gây ra tình trạng lỗi cấu trúc truy vấn dẫn đến không tìm kiếm được thông tin đáp ứng theo yêu cầu
d) Độ chính xác cao hơn
Dữ liệu lớn khi đưa vào sử dụng thường được kiểm định lại
dữ liệu với những điều kiện chặt chẽ, số lượng thông tin được kiểm tra thông thường rất lớn, và đảm bảo về nguồn lấy dữ liệu không có
sự tác động của con người vào thay đổi số liệu thu thập
1.2 Các khái niệm cơ bản về đồ thị
1.2.1 Định nghĩa đồ thị
1.2.2 Đồ thị Hamilton
1.3 Bài toán người bán hàng (TSP)
1.3.1 Giới thiệu bài toán người bán hàng (TSP)
Bài toán người bán hàng hay còn được gọi là bài toán TSP [4][5]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 NP-khó)
1.3.2 Mô tả bài toán TSP
Trang 10Bài toán TSP có thể được mô hình như một đồ thị (hình 1.10), 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
Hình 1.10: 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
1.3.3 Các thuật toán giải bài toán TSP
1.4 Kết chương
Chương này trình bày tổng quan về dữ liệu lớn, bài toán người bán hàng, lý thuyết đồ thị và các thuật toán để giải bài toán người bán hàng Trong số các phương pháp đã giới thiệu ở chương 1, cách giải bài toán người bán hàng bằng thuật toán nhánh cận được lựa chọn làm thuật toán để triển khai trên mô hình Mapreduce Nội dung chi tiết mô hình tính toán phân tán Hadoop-Mapreduce sẽ được trình bày ở chương 2
Trang 11CHƯƠNG 2 - XỬ LÝ PHÂN TÁN HADOOP-MAPREDUCE
2.1 Giới thiệu nền tảng Hadoop
2.1.1 Giới thiệu Hadoop
Apache Hadoop hay Hadoop là một software framework hỗ trợ các ứng dụng phân tán dữ liệu chuyên sâu theo một giấy phép miễn phí Nó cho phép các ứng dụng làm việc với hàng ngàn máy tính tính toán độc lập và petabyte dữ liệu Hadoop được bắt nguồn từ các bài báo MapReduce của Google và Google File System (GFS)[11]
Hadoop là một trong những dự án hàng đầu của Apache, được xây dựng và được sử dụng bởi một cộng đồng những người đóng góp toàn cầu, viết bằng ngôn ngữ lập trình Java Yahoo! đã đóng góp lớn nhất cho dự án, và Hadoop được sử dụng rộng rãi trên khắp các doanh nghiệp của nó
2.1.2 Lịch sử Hadoop
2.1.3 Các thành phần của Hadoop
2.1.4 Ứng dụng của Hadoop trong một số công ty
2.1.5 Cụm máy tính Hadoop(Hadoop cluster)
HDFS và MapReduce là hai thành phần chính của một cụm máy tính Hadoop Nhìn chung, kiến trúc của Hadoop là kiến trúc master-slave, và cả hai thành phần HDFS và MapReduce đều tuân theo kiến trúc master-slave này Kiến trúc của một cụm máy tính Hadoop như sau:
Trang 12Hình 2.2: Tổng quan một Hadoop cluster
2.2 Hệ thống file phân tán Hadoop
2.2.1 Giới thiệu
2.2.2 Kiến trúc HDFS
Hình 2.4: Quá trình các nodes đọc một file trên HDFS
Hình 2.5: Quá trình các nodes ghi một file trên HDFS
Trang 132.3 Mô hình tính toán MapReduce
xử lý một cách song song, sau đó thu thập lại các kết quả Với mô hình này, các doanh nghiệp đã cải thiện được đáng kể về hiệu suất xử
lý tính toán trên dữ liệu lớn, chi phí đầu tư rẻ và độ an toàn cao[11][12]
2.3.2 Tổng quan về mô hình tính toán Mapreduce
2.3.3 Cơ chế hoạt động của MapReduce
2.3.4 Quá trình xử lý MapReduce
MapReduce được xây dựng từ mô hình lập trình hàm và lập trình song song Tăng tốc độ thực thi xử lý dữ liệu là mục đích quan trọng nhất của MapReduce
Trang 14Quy trình này gồm 2 phần:
Map: Đầu vào là nút chủ (master node) và sau đó chia nhỏ nó
ra thành các vấn đề bé hơn Gọi là các split 0, split 1, split 2, …
Reduce: Từ các đầu ra trung gian sẽ tổng hợp lại để đưa ra
các kết quả cuối cùng cho vấn đề master Để xử lý khối dữ liệu bao gồm rất nhiều cặp (key, value), lập trình viên viết hai hàm Map và Reduce
Thực hiện hàm Map
- Trộn và sắp xếp các kết quả thu được từ các máy tính làm sao để được kết quả tiện lợi nhất so với mục đích của quá trình
- Tổng hợp các kết quả trung gian thu được từ các máy tính phân tán
Thực hiện hàm Reduce
Đưa ra kết quả cuối cùng
Hình 2.7: Mô hình làm việc của một công việc MapReduce
Lấy ý tưởng từ lập trình hàm, mô hình MapReduce dựa trên
hai hàm Map và Reduce Để xử lý khối dữ liệu bao gồm nhiều cặp (key, value), lập trình viên viết hai hàm Map và Reduce Hàm Map
có đầu vào là một cặp (k1,v1) và đầu ra là một danh sách các cặp (k2,
v), như vậy hàm Map có thể viết một cách hình thức như sau: