Bảng 3.1 Giới thiệu môi trường phần mềm triển khai thực nghiệm bài toán TSP cho luận văn. Trong phần thực nghiệm tác giả sử dụng hệ điều hành mã nguồn mở Ubuntu 12.04, Ubuntu 13.04 làm môi trường nền.
Bảng 3.1 Các gói phần mềm được cài đặt và cấu hình chạy TSP
tt Phàn mềm
1 PostGres
2 PostGIS
3 pgRouting
4 Osm2pgrouting
a) Hệ quản trị CSDL Postgres: làm nhiệm vụtạo môi trường thực thiện bài toán bằngcách chứa dữ liệu, tổ chức kiến trúc CSDL, và xử lý dữ liệu cấp thấp.
b) Moudle PostGIS: làm nhiệm vụcung cấp các hàm chuyên xử lý dữliệu không gian. Cho phép biểu diễn kiểu dữ liệu không gian, node, ways, … để tổ chức dữ liệu bản
đồ, phục vụ thực nghiệm bài toán TSP.
c) pgRouing: Gói thư viện phần mềm mở rộng của PostGIS được viết trên ngôn ngữ C. pgRouting chứa các hàm giải quyết bài toán về tìm đường đi (routing), tính toán chi phí (cost), đường đi (path) trong hệ thống csdl thông tin địa lý. Các hàm cơ bản của pgRouting trình bày trong bảng 3.2.
Trang 26
Bảng 3.2 Một số hàm routing điển hình trong pgRouting
tt Hàm routing 1 pgr_tsp 2 pgr_astar 3 pgr_makedistancematrix 4 pgr_dijkstra 5 pgr_kdijkstrapath 6 pgr_bdastar 7 pgr_trsp
- Hàm pgr_tsp cho phép thực hiện hiện bài toán tsp. Hàm được cài đặt dựa trên thuật toán GA nhưng không biết chính xác giải thuật cụ thể. Hàm pgr_tsp cho phép tìm ra đường đi TSP với một giá trị xấp xỉ (theo giải thuật xấp xỉ) . Các hàm pgr_tsp trong pgRouting:
o Hàm : pgr_costResult[] pgr_tsp(sql text, start_id integer);
Thực hiện giải thuật TSP với các đối số đầu vào là một điểm bắt đầu và đi tới tất cả các điểm được chỉ ra trong câu lệnh SQL. Điểm đặc biệt trong hàm này là cho phép chỉ ra đường đi tới tất cả các node nhưng không quay lại node ban đầu
Ví dụ:
o pgr_costResult[] pgr_tsp(sql text, start_id integer, end_id integer);
Thực hiện giải thuật TSP với các đối số đầu vào là một điểm bắt đầu và đi tới tất cả node được chỉ ra trong câu lệnh SQL. Bắt đầu từ start_id và kết thúc là end_id. Nếu start_id trùng end_id sẽ được chu trình haminton.
Ví dụ:
o pgr_costResult[] pgr_tsp(„array node‟, start_id integer, end_id integer); Thựchiện giải thuật TSP với các đối số đầu vào là một điểm bắt đầu và đi tới tất cả node còn lại trong mảng. Bắt đầu từ start_id và kết thúc là end_id. Nếu start_id trùng end_id sẽ được chu trình hamilton.
Giải thích:
pgr_costResult: Kết quả trảvềcủa hàm pgr_tsp • seq: thứ tự thực hiện.
• id1: chỉ số trong của ma trận khoảng cách. • id2: id của node.
• cost: chi phí đi tới node tiếp theo.
sql: tập các node( id, x,y) thực hiện giải thuật TSP.
start_id: node bắt đầu
end_id: node kết thúc
o pgr_createtopolog: thiết lập Topology cho dữ liệu không gian
Dữ liệu GIS được nhập vào trong CSDL sẽ không chứa các thông tin topology ( các ràng buộc đối tượng trong bản đồ) để thực hiện các truy vấn không gian thông qua việc sử dụng các hàm pgRouting. Các hàm pgRouting cần các thông tin về nodes (điểm) và ways(tuyến đường) để thực thi các hàm routing trên dữ liệu đã được tạo. pgRouting cung cấp hàm xây dựng topology.
Giao cắt giữa các tuyến đường
Vị trí đặt các điểm trên tuyết đường
Tính chất tuyến đường: một chiếu, hai chiều, đường cấm…
Hàm CreateTopology:
varchar pgr_createTopology (varchar geom_table, double precision tolerance, varchar geo_cname, cvarchar gid_cname); Ý nghĩa: tạo topology cho dữ liệu bản đồ
Trang 28
Các đối: được thể hiện trong bảng 3.3.
Bảng 3.3: Các đối trong câu lệnh truy vấn SQL
tt Đối 1 geom_table 2 Tolerance 3 geo_cname 4 gid_cname Ví dụ:
SELECT pgr_createTopology('edge_table', 0.000001, 'the_geom', 'id'); pgr_createtopology
--- OK (1 row)
Bảng geom_table: Chứa các thông tin về các tuyến đường trong đồ thị. Hỗ trợ cho các hàm routing thực hiện thuật toán. Bảng này giải quyết các vấn đề cần thiết trong hàm routing như tập các cung nối node i tới node j.
o pgr_nodenetwork: chỉ ra mạng lưới các node(địa điểm) trên bản đồ
Vấn đề trong dữ liệu thực tế là vị trí các node không thật sự chính xác. Nên việc sử dụng các hàm routing trở nên không đúng như trong việc dựng topology. Như các điểm node giao cắt gữa hai tuyến đường sẽ không được biểu diễn. Nếu được biểu diễn có thể tìm được các kết quả tốt hơn. Hơn nữa việc định vị các node trên các tuyến đường cũng khó có thể chính xác được. Việc giao cắt giữa các tuyến đường sẽ chia các tuyến đường thành các đoạn đường nhỏ hơn cũng chưa được ghi nhận vào trong CSDL. Đôi khi gặp các tuyến đường trên thực tế là không có giao cắt (giao cắt được xử lý bằng cầu vượt) nhưng nhìn trong bản đồ là có giao cắt. Các trường hợp tương tự đều được pgr_nodenetwork xử lý để có một topology tốt cho các bài toán routing.
Hàm pgr_nodenetwork: Tạo các điểm giao cắt giữa các tuyến được đưa vào một bảng mới.
text pgr_nodeNetwork(text table_in, text gid_cname, text geo_cname,
text table_out, double precision tolerance) Các đối: tt Đối 1 edge_table 2 Tolerance 3 Id 4 the_geom: 5 table_ending Kết quả: bảng được mô tả
tt Đối 1 Id 2 old_id 3 sub_id 4 Source 5 target: the geom:
Ví dụ: sử dụng hàm pgr_nodeNetwork tạo ra các điểm giao giữa các tuyến đường SELECT pgr_nodeNetwork('edge_table', 0.001);
NOTICE: PROCESSING:
NOTICE: pgr_nodeNetwork('edge_table',0.001,'the_geom','id','noded') NOTICE: Performing checks, pelase wait ...
NOTICE: Processing, pelase wait ... NOTICE: Splitted Edges: 3
NOTICE: Untouched Edges: 15 NOTICE: Total original Edges: 18 NOTICE: Edges generated: 6 NOTICE: Untouched Edges: 15
Trang 30
NOTICE: Total New segments: 21
NOTICE: New Table: public.edge_table_noded NOTICE: ---
pgr_nodenetwork
--- OK(1 row)