Trong hệ thống du lịch thông minh, lập lộ trình tự động là một trong những chức năng phức tạp nhưng rất quan trọng và cần thiết cho du khách trước và trong hành trình thăm quan của mình. Chức năng này không chỉ yêu cầu tạo ra phương án lộ trình phù hợp với điều kiện của du khách một cách nhanh chóng, mà còn phải tối ưu về thời gian thăm quan và hiệu quả kinh tế. Trong bài báo này, chúng tôi trình bày một thuật toán lập lộ trình tự động mới dựa trên ý tưởng của bài toán lập lịch TSP (Traveling Salesman Problem) và bổ sung tham số về thời gian du lịch hợp lý, được gọi là TPA (Travel Planning Algorithm). Thuật toán TPA được cài đặt trong hệ thống du lịch thông minh đa nền tảng của tỉnh Thái Nguyên. Dựa vào điểm du lịch được gợi ý trong quá trình lựa chọn điểm thăm quan của du khách, thuật toán TPA hoạt động ổn định và lập được lộ trình du lịch tốt hơn so với chức năng lập lộ trình trong hệ thống du lịch thông minh của TripHunter và Tập đoàn bưu chính viễn thông Việt Nam (VNPT).
MATLAB viết tắt của từ “matrix laboratory”. Phần mềm Matlab được tạo ra nhằm mục đích làm việc với toàn bộ ma trận và mảng ( không như các phần mềm khác chỉ làm việc với các phần tử số tại 1 thời điểm).
Tất cả các biến trong matlab là mảng nhiều chiều, không kể đó là loại dữ liệu nào (từ số đến chuỗi kí tự). Mộ ma trận là một mảng 2 chiều, 1 vector là mảng 1 chiều. Để sử dụng được chúng thì người dùng nên có kiến thức về đại số tuyến tính.
Tạo mảng Array
Để tạo mảng có 4 phần tử trên 1 hàng người dùng nhập các phần tử trong dấu ngoặc vuông [], phân biệt các phần tử bằng dấu cách hoặc dấu phẩy (,). Ví dụ mảng 1 chiều a (đây cũng gọi là vector hàng):
a = [1 2 3 4] a = 1 2 3 4
Để tạo ma trận có nhiều hàng các hàng được phân biệt bằng dấu chấm phẩy (;).
a = [1 2 3; 4 5 6; 7 8 10] a = 1 2 3 4 5 6 7 8 10
Các khác để tạo 1 ma trận đó là sử dụng hàm có sẵn như hàm ones, zeros, hoặc rand. Tuy nhiên các hàm này tạo ra giá trị mặc định (trừ hàm rand). Ví dụ, Tạo 1 ma trận 5 hàng 1 cột gồm các phần tử 0:
z = zeros(5,1) z = 0 0 0 0 0
Các phép toán đối với Ma trận và Mảng MATLAB cho phép người dùng thực hiện các toán tử đại số cho 1 phần tử đối với tất cả các phần tử của ma trận và mảng. Ví dụ:
a + 10 ans = 11 12 13 14 15 16 17 18 20 sin(a) ans = 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 0.9894 -0.5440
Để chuyển vị mộ ma trận người ta dùng dấu (‘). Ví dụ:
a' ans = 1 4 7 2 5 8 3 6 10
Người dùng cũng có thể thực hiện phép nhân ma trận bằng toán tử nhân (*) nhưng phải tuân theo quy tắc nhân ma trận. Ví dụ ma trận a có thể nhân với ma trận đảo của nó và cho ra ma trận đơn vị (a là ma trận vuông)
p = a*inv(a) p = 1.0000 0 -0.0000 0 1.0000 0 0 0 1.0000
Chú ý trong ví dụ trên p không phải là ma trận có các phần tử nguyên (integer). MATLAB lưu các giá trị số dưới dạng dữ liệu có dấu phẩy động. Người dùng có thể thay đổi và hiển thị ra nhiều giá trị thập phân sau dấu phẩy hơn bằng cách sử dụng câu lệnh format:
format long p = a*inv(a) p = 1.000000000000000 0 -0.000000000000000 0 1.000000000000000 0 0 0 0.999999999999998
Để thiết lập lại định dạng cũ người dùng có thể dùng câu lệnh:
format short
Định dạng chỉ làm thay đổi cách thể hiện các số ra màn hình chứ thông thay đổi cách mà Matlab lưu trức các giá trị đó.
Để tác động toán tử nhân lên từng phần tử trong ma trận người dùng phải dùng toán tử .* (các bạn lưu ý có dấu chấm)
p = a.*a p = 1 4 9 16 25 36 49 64 100
Tương tự như vậy đối với phép chia và hàm mũ. Để tác động lên từng phần tử chúng ta phải sử dụng dấu chấm (.)
a.^3 ans = 1 8 27 64 125 216 343 512 1000
Toán tử ghép (Concatenation)
Toán tử này thực hiện nối các mảng với nhau và tạo nên mảng lớn hơn. Dấu ngoặc vuông [] chính là toán tử này.Ví dụ:
a = [1 2 3; 4 5 6; 7 8 10] a = 1 2 3 4 5 6 7 8 10
0
Người dùng có thể thực hiện nối theo phương ngang (hàng) hoặc theo phương dọc (cột) bằng cách không hoặc có sử dụng dấu chấm phẩy (;). Ví dụ:
Matlab cung
cấp
cho chúng ta 7 hàm
để
tạo
các ma
trận
cơ
bản
:1.Zeros (line,column) : cho phép
tạo
một
ma
trận
toàn
số
0.2.Ones (line,column) : cho phép
tạo
ra ma
trận
toàn
số
1.3.Rand (line,column) : cho phép
tạo
ra
một
ma
trận
với
các
phần
tử
làsinh
ngẫu
nhiên và cùng
loại
.4.Randn (line,column) :
tạo
một
ma
trận
mà các
phần
tử
của
ma
trận
được
sinh ra
một
cách
ngẫu
nhiên.5.Eye (line) : khai báo ma
trận
đơn
vị
.6.Pascal () :
tạo
ma
trận
đối
xứng
(ma
trận
vuông).7.Magic () :
tạo
ma
trận
không
đối
xứng
.Note : B
ạn
có
thể
nhập
trực
tiếp
các
phần
tử
của
ma
trận
đó
theo cú phápsau (các
phần
tử
của
một
hàng
được
cách nhau
bởi
dấu
(,)
hoặc
một
dấu
cách ,
giữa
các hàng thì
được
cách nhau
bởi
dấu
(;) hay
dấu
ngắt
).