Hướng tiếp cận của luận văn

Một phần của tài liệu NGHIÊN cứu một số vấn đề của LÝTHUYẾT đồ THỊ ỨNG DỤNG TRONG GIẢIQUYẾT một số bài TOÁN THỰC tế (Trang 96)

Trong luận văn này, chúng em muốn hướng đến một cách tiếp cận khác, sử

dụng các thuật toán luồng trên mạng, để giải bài toán giao hàng, bài toán tổng quát của bài toán người du lịch. Với cách tiếp cận này, chúng em muốn rút ngắn thời gian thực hiện việc tìm kiếm một phương án hiệu quả cho việc giao hàng đến các

KHOA CNTT –

ĐH KHTN

CHƯƠNG 7: XÂY DỰNG CHƯƠNG TRÌNH DISTRIBUTION

cầu của bài toán. Những rút gọn này là cần thiết để có thể chuyển bài toán về dạng bài toán luồng trên mạng nhưng cũng làm cho các lời giải nhận được chỉ là các lời giải tốt chứ không hẳn là lời giải tối ưu, điều này là phù hợp trong điều kiện tìm lời giải tối ưu sẽ tốn một chi phí rất lớn.

Sau đây ta sẽ rút gọn lại yêu cầu của bài toán cũng như thêm một số điều kiện để bài toán trở nên sát với thực tế hơn và đưa bài toán về dạng đồ thị để có thể

áp dụng các thuật toán luồng trên mạng.

7.3.4.1. Một số yêu cầu rút gọn

Trước hết ta thu gọn lại yêu cầu của bài toán là đường đi của một phương tiện chỉđược tính là đường đi từ nhà phân phối đến các đại lý chứ không tính

đường đi từđại lý cuối cùng trở về nhà cung cấp như trong bài toán người du lịch.

Điều kiện này thường không làm ảnh hưởng nhiều đến kết quả của bài toán. Trong mô hình toán học thì đường đi này được biểu diễn như sau:

T0 → Ti1 → Ti2 → … → Tin

Ta cũng thêm vào một giả thiết là nhà phân phối có đủ xe đểđi đến tất cả

các đại lý sao cho mỗi đại lý chỉ cần được giao hàng đúng một lần. Điều này cũng phù hợp với điều kiện thực tế là công ty có xe đủ lớn, đủ nhiều để không phải buộc các đại lý ký nhận hàng nhiều lần trong ngày để có được số lượng hàng họ cần.

KHOA CNTT –

ĐH KHTN

7.3.4.2. Mô hình bài toán

Trước tiên ta mô hình lại bài toán như sau:

1 3 2 4 5 0 6

Nhà cung cấp Phương tiện Đại lý Đỉnh ảo i ) , 0 (lij = uij =k i (lij =0,uij =max) j i (lij =0,uij =v) 6 i (lij =0,uij =max) j

Hình 7-1 Mô hình bài toán phân phối hàng

Trong đồ thị trên, k là khả năng vận tải của phương tiện, v là nhu cầu của

đại lý và max là một sốđủ lớn để tổng của các luồng qua cung luôn nhỏ hơn max.

Đỉnh ảo được thêm vào trong mô hình với ý nghĩa: một phương tiện đi cung cấp hàng cho đại lý sẽ có luồng từđại lý đến đỉnh ảo. Độ dài các cung từ nhà cung cấp

đến đỉnh phương tiện và các cung từđại lý đến đỉnh ảo đều bằng 0.

Trong bài toán này, chi phí gửi luồng không giống như các bài toán khác trong lớp bài toán về luồng trên mạng. Luồng vận tải bắt đầu từ phương tiện nào thì chi phí trên quãng đường nó đi qua sẽ bằng C = c * d, trong đó c là chi phí trên một đơn vịđường đi và d là độ dài quãng đường, chi phí này không phụ thuộc vào lượng hàng mà phương tiện phải vận chuyển. Đồng thời, ở bài toán này, luồng đi ra từ 1 phương tiện qua các đại lý cũng không được tách ra, trừ khi luồng đó đi từ đại lý đến đỉnh ảo, vì tính bảo toàn của phương tiện (phương tiện không thể tách ra làm nhiều phần, mỗi phần đến một đại lý khác nhau được).

Chính vì hai lý do trên cùng với điều kiện của bài toán là mỗi phương tiện chỉ chở hàng đến một đại lý khi lượng hàng còn lại trên xe đủđể đáp ứng nhu cầu

KHOA CNTT –

ĐH KHTN

CHƯƠNG 7: XÂY DỰNG CHƯƠNG TRÌNH DISTRIBUTION

của đại lý nên cách giải quyết bài toán này có một đặc thù riêng, không giống như

các bài toán luồng trên mạng khác. Sau đây sẽ là chi tiết của thuật toán.

7.3.4.3. Thuật toán

Chúng em đề xuất một thuật toán dựa trên thuật toán khử chu trình âm để

giải quyết bài toán giao hàng cho các đại lý như sau: như thuật toán khử chu trình âm, chúng ta sẽ tìm một luồng khả thi (các phương tiện đi đến các đại lý xác định), rồi sẽ từng bước cải thiện giá trị hàm mục tiêu của nó bằng cách khử đi các chu trình âm. Tuy nhiên đây là một bài toán có đặc thù riêng nên việc tìm kiếm một luồng khả thi cũng như khử các chu trình âm của nó cũng khác với bài toán thông thường.

Thuật toán tìm luồng khả thi thực chất là tìm đường đi cho các phương tiện

đến các đại lý mà nó có thể đáp ứng nhu cầu. Ở đây chúng ta thêm vào một phương án tìm đường để lời giải của luồng khả thi tốt hơn. Đó là chúng ta sẽ sử

dụng thuật toán tìm đường đi ngắn nhất để đi đến một đại lý gần nhất mà phương tiện có thểđáp ứng nhu cầu của nó. Ởđây, chúng ta sẽ sử dụng thuật toán Dijkstra cùng với một điều kiện là khi ta gán nhãn cốđịnh cho một đỉnh nào đó có nhu cầu mà phương tiện của chúng ta có thể đáp ứng được thì ta kết thúc thuật toán. Nếu không có đại lý nào mà phương tiện có thểđáp ứng được thì phương tiện sẽ trở về

nhà cung cấp. Chúng ta có hàm tìm đường đi ngắn nhất như sau:

Hàm Tìm đường đi ngắn nhất; begin S:= ∅; S:= N; d(i):= ∝ với tất cả các đỉnh i∈N; d(s):= 0 và pred(s):= 0; flag = true;

while (|S| < n) and (flag = true) do begin

đặt i∈Slà đỉnh mà d(i) = min{d(j): j∈S};

KHOA CNTT –

ĐH KHTN

S:= S∪{i};

S:= S - {i};

for mỗi (i, j) ∈ A(i) do

if d(j) > d(i) + cijthen d(j):= d(i) + cij và pred(j):=i;

end;

If (flag = false) then

Tìm đường đi ngắn nhất := i;

else

Tìm đường đi ngắn nhất := 0;

end;

Cũng như thuật toán Dijkstra, hàm tìm đường đi ngắn nhất trên chạy trong thời gian O(n2).

Gọi S là tập hợp các đỉnh đã được thỏa mãn nhu cầu (đã có phương tiện vận chuyển nước đến) và S là tập hợp các đỉnh mà nhu cầu chưa được thỏa mãn. Thủ

tục tìm luồng khả thi chi tiết được mô tả như sau:

Thủ tục Tìm luồng khả thi;

begin

S := ∅;

S := {i, i đại diện cho các đại lý có nhu cầu > 0}; N := |S |;

while |S| < N do begin

x := khả năng vận tải của phương tiện chưa được sử dụng và y := vị

trí của phương tiện đó;

while Tìm được đường đi ngắn nhất từ y đến một đại lý i mà x có thể đáp ứng nhu cầu v của nó do

begin

gửi v đơn vị luồng từđỉnh nguồn qua đỉnh x, đến i theo đường

đi ngắn nhất; y := i;

KHOA CNTT –

ĐH KHTN

CHƯƠNG 7: XÂY DỰNG CHƯƠNG TRÌNH DISTRIBUTION

end; end;

end;

Với các ràng buộc điều kiện bài toán là công ty có đủ xe để vận chuyển nước đến các đại lý sao cho mỗi xe chỉ cần chạy nhiều nhất một lần là đủđể thỏa mãn nhu cầu của các đại lý, thủ tục trên luôn tìm được luồng khả thi. Ta dễ nhận thấy thuật toán tìm luồng khả thi này có độ phức tạp là O(Nn2).

Sau khi đã có được luồng khả thi, chúng ta tiếp tục sử dụng thuật toán tối

ưu hóa luồng để đạt được phương pháp vận chuyển tốt nhất. Thuật toán tối ưu hóa luồng được mô tả chi tiết dưới đây:

Thuật toán Tối ưu hóa luồng;

begin

Tìm luồng khả thi;

while G(x) chứa một chu trình âm và lượng hàng vận chuyển trên chu trình

âm bằng nhau do begin

sử dụng một thuật toán để tìm một chu trình âm W;

δ:= min{rij: (i, j) ∈ W};

tăng δ đơn vị luồng trong chu trình W và cập nhật G(x);

end; end;

Cũng như thuật toán khử chu trình âm, thuật toán này chạy trong thời gian là O(nm2CU).

KHOA CNTT – ĐH KHTN 7.4. Phân tích 7.4.1. Yêu cầu chức năng STT Chức năng Ghi chú 1. Hiển thị bản đồ 2. Phóng to, thu nhỏ bản đồ 3. Di chuyển bản đồ

4. Thông tin về các đại lý trên bản đồ

Thông tin về các đại lý gồm có:

9 Địa chỉ

9 Nhu cầu của đại lý (lượng hàng cần có trong ngày hôm sau)

5. Thông tin về các phương tiện

chuyên chở

Thông tin về các phương tiện chuyên chở gồm có:

9 Khả năng vận tải (có thể

chở được bao nhiêu hàng)

9 Chi phí vận chuyển (tính theo đơn vị mét)

6. Thay đổi nhu cầu của các đại lý

7. Thay đổi thông tin về các phương

tiện chuyên chở 8. Tìm phương pháp vận chuyển hàng hóa tối ưu cho tất cả các đại lý Có thể hiển thị kết quả theo nhiều cách: đường đi của từng xe hoặc tất cả các xe 9. Tìm đường đi ngắn nhất từ nhà cung cấp đến các đại lý

KHOA CNTT –

ĐH KHTN

CHƯƠNG 7: XÂY DỰNG CHƯƠNG TRÌNH DISTRIBUTION

7.4.2. Mô hình Use Case

7.4.2.1. Lược đồ chính của mô hình Use Case

Thay doi nhu cau cua cac dai ly

Thay doi thong tin cac phuong tien

Tim phuong phap van chuyen toi uu

Tim duong di ngan nhat tu nha cung cap den dai ly Xem thong tin cac dai ly

Xem thong tin cac phuong tien Nguoi dung

Xuat lich giao hang

Hình 7-2 Biểu đồ Use Case

7.4.2.2. Đặc tả Use Case

7.4.2.2.1. Xem thông tin các đại lý

7.4.2.2.1.1. Mô tả

Use Case này cho phép người dùng xem thông tin của đại lý như: địa chỉ, lượng hàng cần giao trong ngày của đại lý.

7.4.2.2.1.2. Dòng sự kiện

7.4.2.2.1.2.1. Dòng sự kiện chính

Use Case này bắt đầu khi người dùng muốn xem thông tin của các đại lý.

KHOA CNTT – ĐH KHTN 7.4.2.2.1.2.2. Các dòng sự kiện khác Không có. 7.4.2.2.1.3. Yêu cầu đặc biệt Không có. 7.4.2.2.1.4. Điều kiện đầu Không có. 7.4.2.2.1.5. Điều kiện sau Không có. 7.4.2.2.1.6. Điểm mở rộng

Kết xuất thông tin của tất cả các đại lý dưới dạng văn bản.

7.4.2.2.2. Thay đổi nhu cầu của các đại lý

7.4.2.2.2.1. Mô tả

Use Case này cho phép người dùng thay đổi nhu cầu của các đại lý. 7.4.2.2.2.2. Dòng sự kiện

7.4.2.2.2.2.1. Dòng sự kiện chính

Use Case này bắt đầu khi người dùng yêu cầu thay đổi nhu cầu của một đại lý cụ thể hoặc của tất cả các đại lý.

1) Hệ thống truy xuất và hiển thị nhu cầu hiện thời của các đại lý.

2) Người dùng thay đổi nhu cầu của các đại lý.

3) Hệ thống cập nhật thay đổi vào cơ sở dữ liệu.

7.4.2.2.2.2.2. Các dòng sự kiện khác

Không có.

KHOA CNTT –

ĐH KHTN

CHƯƠNG 7: XÂY DỰNG CHƯƠNG TRÌNH DISTRIBUTION

Không có. 7.4.2.2.2.4. Điều kiện đầu Không có. 7.4.2.2.2.5. Điều kiện sau Không có. 7.4.2.2.2.6. Điểm mở rộng Không có.

7.4.2.2.3. Xem thông tin các phương tiện

7.4.2.2.3.1. Mô tả

Use Case này cho phép người dùng xem thông tin của tất cả các phương tiện hiện có của nhà cung cấp như: mã phương tiện, loại phương tiện, khả năng vận chuyển, chi phí cho một đơn vị đường đi.

7.4.2.2.3.2. Dòng sự kiện

7.4.2.2.3.2.1. Dòng sự kiện chính

Use Case này bắt đầu khi người dùng muốn xem thông tin của các phương tiện.

1) Hệ thống đọc thông tin của các phương tiện từ cơ sở dữ liệu.

2) Hệ thống hiển thị thông tin của tất cả các phương tiện dưới dạng lưới.

7.4.2.2.3.2.2. Các dòng sự kiện khác

Không có

KHOA CNTT – ĐH KHTN 7.4.2.2.3.4. Điều kiện đầu Không có 7.4.2.2.3.5. Điều kiện sau Không có. 7.4.2.2.3.6. Điểm mở rộng Không có.

7.4.2.2.4. Thay đổi thông tin về các phương tiện

7.4.2.2.4.1. Mô tả

Use Case này cho phép người dùng thay đổi thông tin của các phương tiện hoặc thêm vào các phương tiện khác, bao gồm số lượng, khả năng vận tải và chi phí trên một đơn vịđường đi của phương tiện đó.

7.4.2.2.4.2. Dòng sự kiện

7.4.2.2.4.2.1. Dòng sự kiện chính

Use Case này bắt đầu khi người dùng yêu cầu thay đổi thông tin của các phương tiện hoặc thêm các phương tiện mới.

1) Hệ thống đọc thông tin của tất cả các phương tiện từ cơ sở dữ liệu.

2) Hệ thống hiển thị thông tin của các phương tiện dưới dạng lưới.

3) Người dùng thay đổi thông tin của các phương tiện hoặc thêm các phương tiện mới . 4) Hệ thống cập nhật thay đổi vào cơ sở dữ liệu. 7.4.2.2.4.2.2. Các dòng sự kiện khác Không có. 7.4.2.2.4.3. Yêu cầu đặc biệt Không có.

KHOA CNTT –

ĐH KHTN

CHƯƠNG 7: XÂY DỰNG CHƯƠNG TRÌNH DISTRIBUTION

7.4.2.2.4.4. Điều kiện đầu Không có. 7.4.2.2.4.5. Điều kiện sau Không có. 7.4.2.2.4.6. Điểm mở rộng Không có. 7.4.2.2.5. Tìm phương pháp vận chuyển tối ưu 7.4.2.2.5.1. Mô tả

Use Case này cho phép người dùng xác định được phương án vận chuyển tối ưu (đường đi của các phương tiện) đến các đại lý.

7.4.2.2.5.2. Dòng sự kiện

7.4.2.2.5.2.1. Dòng sự kiện chính

Use Case này bắt đầu khi người dùng yêu cầu hệ thống tìm phương pháp vận chuyển hàng hóa đến các đại lý.

1) Hệ thống đọc thông tin các phương tiện, nhu cầu của các đại lý và chiều dài đường đi giữa các đại lý.

2) Hệ thống tìm phương pháp vận chuyển tối ưu.

3) Hệ thống lưu kết quả tính toán xuống cơ sở dữ liệu.

4) Hệ thống hiển thị các đường đi kết quả lên bản đồ.

7.4.2.2.5.2.2. Các dòng sự kiện khác

Nếu không có phương pháp vận chuyển, bản đồ sẽ không thay đổi. 7.4.2.2.5.3. Yêu cầu đặc biệt

KHOA CNTT –

ĐH KHTN

7.4.2.2.5.4. Điều kiện đầu Không có.

7.4.2.2.5.5. Điều kiện sau

Lịch trình giao hàng sẽ đựơc hiển thị trên bản đồ dưới dạng đường đi của từng phương tiện. Nếu có đại lý nào không được giao hàng vì không đủ phương tiện vận chuyển, hệ thống sẽđưa ra thông báo.

7.4.2.2.5.6. Điểm mở rộng Không có.

7.4.2.2.6. Tìm đường đi ngắn nhất từ nhà cung cấp đến các đại lý

7.4.2.2.6.1. Mô tả

Use Case này cho phép người dùng xác định được đường đi ngắn nhất từ

nhà cung cấp đến các đại lý

7.4.2.2.6.2. Dòng sự kiện

7.4.2.2.6.2.1. Dòng sự kiện chính

Use Case này bắt đầu khi người dùng yêu cầu hệ thống tìm đường đi ngắn nhất từ nhà cung cấp đến tất cả các đại lý hoặc đến một đại lý cụ thể

1) Hệ thống đọc thông tin về chiều dài đường đi giữa nhà cung cấp và các đại lý từ cơ sở dữ liệu. 2) Tìm đường đi ngắn nhất từ nhà cung cấp đến đại lý. 3) Hệ thống hiển thị các đường đi kết quả lên bản đồ. 7.4.2.2.6.2.2. Các dòng sự kiện khác Không có. 7.4.2.2.6.3. Yêu cầu đặc biệt Không có.

KHOA CNTT –

ĐH KHTN

CHƯƠNG 7: XÂY DỰNG CHƯƠNG TRÌNH DISTRIBUTION

7.4.2.2.6.4. Điều kiện đầu Không có. 7.4.2.2.6.5. Điều kiện sau Không có. 7.4.2.2.6.6. Điểm mở rộng Không có. 7.4.2.2.7. Xuất lịch giao hàng 7.4.2.2.7.1. Mô tả

Use Case này cho phép người dùng kết xuất lịch giao hàng trong ngày của từng phương tiện.

7.4.2.2.7.2. Dòng sự kiện

7.4.2.2.7.2.1. Dòng sự kiện chính

Use Case này bắt đầu khi người dùng yêu cầu hệ thống kết xuất lịch giao hàng.

1) Hệ thống đọc thông tin về kết quả tính toán phương pháp vận chuyển tối ưu từ cơ sở dữ liệu.

2) Hệ thống kết xuất thông tin giao hàng dưới dạng văn bản.

7.4.2.2.7.2.2. Các dòng sự kiện khác

Không có.

7.4.2.2.7.3. Yêu cầu đặc biệt Không có.

KHOA CNTT –

ĐH KHTN

7.4.2.2.7.5. Điều kiện sau Văn bản về lich giao hàng sẽđược hiển thị.

7.4.2.2.7.6. Điểm mở rộng Không có. 7.5. Thiết kế 7.5.1. Thiết kế dữ liệu 7.5.1.1. Sơđồ các lớp dữ liệu Hình 7-3 Sơđồ các lớp dữ liệu 7.5.1.2. Mô tả các lớp dữ liệu 7.5.1.2.1. clsDatabase clsDatabase MakeConnection() CloseConnection() DoSql() Reader() Table() (from Entities)

KHOA CNTT –

ĐH KHTN

CHƯƠNG 7: XÂY DỰNG CHƯƠNG TRÌNH DISTRIBUTION

STT Phương thức Ý nghĩa

1 MakeConnection Mở kết nối cơ sở dữ liệu 2 CloseConnection Đóng kết nối cơ sở dữ liệu

3 DoSql Thực hiện 1 câu sql

4 Reader Truy vấn 1 câu sql và trả về đối tượng

SqlDataReader

5 Table Truy vấn 1 câu sql và trả về đối tượng

Một phần của tài liệu NGHIÊN cứu một số vấn đề của LÝTHUYẾT đồ THỊ ỨNG DỤNG TRONG GIẢIQUYẾT một số bài TOÁN THỰC tế (Trang 96)

Tải bản đầy đủ (PDF)

(146 trang)