1. Trang chủ
  2. » Luận Văn - Báo Cáo

Chương 2 review of linear programming

52 25 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 1,68 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài toán đường đi ngắn nhất Tìm đường đi ngắn nhất là một trong những bài toán quy hoạch tuyến tính phổ biến trong hầu hết các vấn để về mạng, có thể mô tả như sau: Cho một mạng gồm tập

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

BÀI TIỂU LUẬN MÔN HỌC

Khoa học dịch vụ

Chương 2: Review of Linear Programming

Mark S Daskin Network and Discrete Location Models, Algorithms, and

Applications (2nd edition) John Wiley _ Sons

Trang 2

Mục lục

Phân công công việc của nhóm sinh viên

1 Nguyễn Tuấn Anh Biên soạn tài liệu bài toán nghiệm nguyên (2.9)

Trang 3

Bảng thuật ngữ

Out-of-kilter Thuật toán tối thiểu hóa lưu

lượng mạngPACB Phương án cơ bản Phương án cơ bản trong bước đầu

giải bài toán vận tải

I Vấn đề đường đi ngắn nhất

I.1 Bài toán đường đi ngắn nhất

Tìm đường đi ngắn nhất là một trong những bài toán quy hoạch tuyến tính phổ biến trong

hầu hết các vấn để về mạng, có thể mô tả như sau: Cho một mạng gồm tập các nút N và các đường liên kết trực tiếp A, đi cùng với chi phí của mỗi liên kết Câu hỏi đặt ra là tìm đường đi ngắn nhất (tổng chi phí nhỏ nhất) từ một nút s thuộc N đến một nút t thuộc N

I.1.1 Mô tả bài toán

Vấn đề đường đi ngắn nhất được mô tả dưới dạng bài toán quy hoạch tuyến tính như sau

Đầu vào:

Biến quyết định:

Trang 4

Định nghĩa 2 tập các nút như sau: A i là tập tất cả các nút có thể kết nối trực tiếp từ nút i thuộc N, B i là tập tất cả các nút có thể kết nối trực tiếp đến nút i thuộc N.

Với các định nghĩa như trên, bài toán cơ bản được phát biểu như sau:

Cực tiểu hóa:

Điều kiện:

Mục tiêu của bài toán là cực tiểu hóa tổng chi phí của những liên kết được lựa chọn Điềukiện thứ nhất quy định về giá trị dòng vào và dòng ra của một nút Điều kiện thứ hai đảm

bảo mỗi liên kết chỉ xuất hiện một lần trong quãng đường từ s đến t.

Bài toán đối ngẫu được phát biểu như sau:

Cực đại hóa:

Điều kiện:

Trong đó, V j là chi phí tối thiểu để đến được nút j Các điều kiện đảm bảo các hiệu V j với

V i không vượt quá chi phí trực tiếp từ i đến j và V i có thể tính được với mọi i thuộc N.

Về mặt kỹ thuật, vấn đề này nếu theo công thức trên không phải là bài toán quy hoạch

tuyến tính bởi các biến quyết định X (i, j) là các số nguyên (nhận giá trị 0 hoặc 1) và không

Trang 5

này đảm bảo rằng nếu chúng ta giải quyết vấn đề này dưới dạng quy hoạch tuyến tính, kếtquả sẽ được các biến quyết định nguyên, vì vậy ta có thể định nghĩa lại biến quyết định

thành một biến không âm (X (i, j) >= 0) và giải bài toán này như quy hoạch tuyến tính.

Nếu một số liên kết có chi phí âm, lời giải của quy hoạch nguyên hoặc quy hoạch tuyếntính đều có thể chứa những vòng lặp âm (một chuỗi các liên kết tạo thành chu trình, ví dụ

một chuỗi bắt đầu từ nút p, đi qua một vài nút rồi quay lại nút p với tổng chi phí âm

-nghĩa là càng lặp lại nhiều lần chu trình này chi phí càng nhỏ)

Trong giải quyết vấn đề đường đi ngắn nhất, việc sử dụng các phương pháp quy hoạchtuyến tính chuẩn cho hiệu quả kém Dưới đây giới thiệu 2 thuật toán có hiệu quả hơnnhiều với vấn đề này

I.1.2 Thuật toán Dijkstra

Thuật toán Dijkstra, mang tên của nhà khoa học máy tính người Hà Lan Edsger Dijkstra,

là một thuật toán giải quyết bài toán đường đi ngắn nhất nguồn đơn trong một đồ thị cóhướng không có cạnh mang trọng số âm Thuật toán này được sử dụng phổ biến trong các

kỹ thuật định tuyến

Lời giải của bài toán đường đi ngắn nhất chứa 2 thông tin: chi phí đường ngắn nhất từ s đến t và thứ tự các liên kết được đi qua Một nhãn của nút vì vậy sẽ có 2 phần: (1) giá trị chi phí tối thiểu đi từ s và (2) nút phía trước trong kết quả Như vậy, ta sẽ sử dụng nhãn

có dạng: [ giá trị chi phí thấp nhất đã biết, nút phía trước ]

Giá trị chi phí thấp nhất đã biết để tới được nút j được ký hiệu là V j Nút liền trước trong

đường đi được ký hiệu là P j → nhãn của mỗi nút j sẽ có dạng [V j , P j] Những nhãnnày có thể là tạm thời hoặc vĩnh viễn Ta sẽ gán nhãn vĩnh viễn nếu giá trị tốt nhất hiệntại cũng là tốt nhất mà chúng ta có thể tìm được khi xét xong tất cả các liên kết liên quan

Những nút có nhãn vĩnh viễn được gọi là "đã được quét", những nút nhãn tạm thời sẽ ở nhóm "chưa được quét" Dưới đây là mô tả thuật toán để tìm đường từ nút s đến tất cả

các nút khác Nhìn chung, chi phí tính toán khi tìm đường tới tất cả các nút không caohơn quá nhiều chi phí tìm đường đến một nút Thêm vào đó, đường đến các nút khác lại

liên quan đến đường đến nút t, và công việc này sẽ lại phải thực hiện lại khi chúng ta muốn tìm đường từ s đến một nút u khác.

Bước 1: Khởi tạo

(a) Gán nhãn cho nút s [ 0, _ ] (V s = 0 và không có nút phía trước s)

(b) Gán nhãn tất cả các nút còn lại [ ∞, _ ]

Trang 6

(c) Đặt nút s vào danh sách "đã duyệt"

Bước 2: Cập nhật nhãn

(a) Gọi nút duyệt mới nhất, nút m

(b) Với tất cả liên kết (m, j) mà nút j chưa được duyệt, tính:

Bước 4: Kiểm tra kết thúc

(a) Tất cả các nút đã được duyệt?

Trang 7

Hình 2.22 Ví dụ vấn đề với các nhãn nút khởi đầu và nút A đã được kiểm tra.

Ta cập nhật các nhãn của các nút có thể đi từ A (là nút gần nhất được duyệt), kết quả của

việc cập nhật này được thể hiện trong Hình 2.23

Hình 2.23 Mạng các nút được đánh nhãn từ nút A

Trang 8

Hình 2.24 Mạng sau khi nút F được đánh nhãn

Tiếp theo, vì F là nút có giá trị V thấp nhất, ta đã có thể gán nhãn vĩnh viễn cho F và tiếp

tục mở rộng từ đây Kết quả được biểu thị trong hình 2.24, các đường đi ngắn nhất được

tô đậm Nút F đã được quét và tiến hành cập nhật một số nhãn của nút liền kề Nhãn trên nút D được thay đổi từ [ 15, A ] sang [ 12, F ] chỉ ra đường ngắn nhất đã biết (chi phí 12)

để đi đến D là đi qua F.

Các hình tiếp theo (2.25 đến 2.30) mô tả trạng thái mạng sau mỗi vòng lặp của thuật toán

Hình 2.25 Mạng sau khi nút D được đánh nhãn

Trang 9

Hình 2.26 Mạng sau khi nút B bị đánh nhãn

Hình 2.27 Mạng sau khi nút G bị đánh nhãn

Trang 10

Hình 2.28 Mạng sau khi nút E bị đánh nhãn

Hình 2.29 Mạng sau khi nút C được đánh nhãn

Trang 11

Hình 2.30 Mạng sau khi nút H được đánh nhãn

Cuối cùng, ta thấy mạng được tạo thành từ các liên kết trong đường đi ngắn nhất từ A tới

mọi nút là một cây bao trùm (đồ thị mà trong đó tất các các nút được kết nối và chỉ códuy nhất một đường từ nút này đến nút kia)

Thuật toán Dijkstra với trọng số âm

Ta đã biết Dijkstra chỉ đảm bảo đúng đắn trong trường hợp các trọng số chi phí không

âm Dưới đây ta xét 2 ví dụ với trọng số chi phí âm, một trong số đó Dijkstra hoạt động

vẫn cho kết quả chính xác, trường hợp còn lại cho kết quả không chính xác

Xét đồ thị như hình sau:

Trang 12

Giả sử ta cần tìm đường đi ngắn nhất từ nút (0) Thực hiện các bước theo thuật toánDijkstra, ta thu được trạng thái các nhãn như hình dưới:

Sau khi duyệt tất cả các nút, thuật toán Dijkstra vẫn cho kết quả đúng: chi phí thấp nhất

từ nút (0) đến nút (2) là 1 và đường đi là (0) - (1) - (2)

Ta xét một đồ thị khác dưới đây Giả sử ta cần tìm đường đi ngắn nhất từ nút (0)

Thực hiện các bước theo thuật toán Dijkstra thu được trạng thái cuối như sau:

Trang 13

Ta thấy, sau khi nút số (2) được coi là đã duyệt, nhãn nút số (2) được gán vĩnh viễn vàkhông được cập nhật trong giai đoạn duyệt nút số (3), nên thu được kết quả sai.

Với thuật toán Dijkstra, một khi nút được coi là đã duyệt nó sẽ không được xét lại, đây là

lý do thuật toán bị sai với trọng số âm, tuy nhiên lại có hiệu quả với trọng số không âmkhi có thể thực hiện nhanh và không xét lại trên tư tưởng rất thực tế "đi thêm một liên kết

sẽ mất thêm chi phí"

Dưới đây giới thiệu thuật toán Bellman - Ford, có thể được sử dụng trong các bài toán cóxuất hiện trọng số chi phí âm

I.1.3 Thuật toán Bellman - Ford

Thuật toán Bellman - Ford được đặt tên theo Richard Bellman and Lester Ford, là một

thuật toán tìm đường đi ngắn nhất từ một đỉnh tới các đỉnh khác trong một đồ thị có trọng

số Thuật toán này chậm hơn Dijkstra, tuy nhiên linh hoạt hơn nhiều khi có thể xử lý đồ

thị với trọng số âm

Các bước của thuật toán này được mô tả như sau:

Trang 14

Bước 1: Khởi tạo

(a) Với mỗi đỉnh j thuộc đồ thị, gán V j = ∞; P j = null

Bước 3: Kiểm tra chu trình âm

(a) Với mỗi liên kết (u, v):

Nếu V u + c (u, v) < V v : → đồ thị chứa chu trình âm

Thuật toán Bellman Ford có các bước lặp để xét lại các đỉnh mà ở thuật toán Dijkstra bỏ qua, tuy chậm hơn thuật toán Dijkstra (đặc biệt trong trường hợp các trọng số đều không

âm và các nút theo đường thẳng) nhưng lại đảm bảo được tính đúng đắn với các trọng sốâm

I.2 Vấn đề đường đi ngắn nhất trong Excel

Trong phần này, chúng tôi sẽ phác thảo cách xây dựng bài toán tìm đường đi ngắn nhất sửdụng công cụ bảng tính Excel Đồ thị trong hình 2.21 phía dưới sẽ được lấy làm ví dụ chobài toán

Hình 2.21 Ví dụ mạng đối với vấn đề đường đi ngắn nhất

Trang 15

Các thiết lập cơ bản được thể hiện trong Hình 2.31 Dải ô màu xanh dương thể hiện biểudiễn của đồ thị dưới dạng ma trận Các hàng của ma trận tương ứng với nút khởi đầu, cáccột tương ứng với nút kết thúc Giá trị mỗi điểm của ma trận là giá trị trọng số của vòngcung tương ứng trên đồ thị - hay chính là chi phí (ArcCost) của mỗi cung Hình 2.21 chỉcho thấy các liên kết vô hướng, còn ma trận trong hình 2.7.1 biểu diễn mỗi liên kết haichiều dưới dạng hai vòng cung một chiều (VD như ô C7 và ô D4) Ô C7 đại diện chocung (D;A) trong khi ô D4 đại diện cho cung (A;D) chỉ số chi phí của cung (A;D) làgiống hệt với cung (D;A)

Dải ô màu xanh lá thể hiện ma trận đường đi kết quả tính được Tương tự các hàng là nútkhởi đầu, các cột tương ứng với nút kết thúc Mỗi ô trong ma trận thể hiện liên kết giữacác cung với nhau - là một biến quyết định sẽ nhận giá trị 1 nếu cung đó được sử dụngtrong đường đi ngắn nhất từ nút đầu tới nút kết thúc và 0 nếu không

Hình 2.7.1 Tổng quan thiết lập bài toánCác ràng buộc (2.69) được thể hiện trong dải ô L16:N23 màu vàng của bảng tính Các ôN16:N23 thể hiện các nút bắt đầu và kết thúc để xác định các giá trị bên phải thích hợpcho các ràng buộc (giá trị 1 tương ứng với đầu vào và -1 tương ứng với đầu ra) Trong ví

dụ này ta sẽ tìm đường đi ngắn nhất từ nút A tới nút H

Trang 16

Hàm mục tiêu được đưa ra trong ô M4 (màu da cam) được viết bởi công thứcSUMPRODUCT(ArcCost, Usage) Trong đó ArcCost đề cập tới dải ô C4:J11 và Usageđược thể hiện trong dải ô C16:J23 Ô này thể hiện tổng chi phí của tất cả các cung được

sử dụng trên đường đi ngắn nhất từ nút bắt đầu tới nút kết thúc (Total Distance)

Cách thực hiện:

Sau khi thiết lập xong bài toán (biểu diễn lại đồ thị dưới dạng ma trận, tạo ma trận kếtquả, thiết lập ràng buộc, ) ta sử dụng công cụ Solve của Excel để thực hiện tính toánđường đi ngắn nhất

Hình 2.7.2: Giao diện hộp thoại Solve

● Tại trường Set Objective, chọn ô M4 thể hiện giá trị tổng chi phí đường đi ngắnnhất

Trang 18

Hình 2.7.3 Các bước chọn các tham số của Solver

=> Thu được kết quả như hình dưới Theo dự kiến chi phí tối ưu của đường đi ngắn nhất

từ nút A đến nút H là 34

Hình 2.7.4 Công cụ tìm ra lời giải

Kết quả đường đi chi tiết được thể hiện trong Hình 2.7.5 Theo đó, chi phí tối ưu củađường đi ngắn nhất từ A tới H là 34 Đường đi ngắn nhất tìm được là là A => F => D =>

E => H

Trang 19

Hình 2.7.5 Kết quả tối ưu sau khi sử dụng Solver

II Thuật toán tối ưu lưu lượng Out-of-kilter

II.1 Giới thiệu

Lớp cuối cùng của những vấn đề lập trình tuyến tính đặc biệt mà chúng tôi thảo luận làcác vấn đề về lưu lượng mạng chi phí tối thiểu tổng quát hơn Chúng tôi thảo luận nhữngvấn đề này trong ngữ cảnh của thuật toán lưu lượng out-of-kilter Trước khi bàn luận vềthuật toán này, chúng tôi cần định nghĩa lưu lượng lưu thông Một luồng lưu thông trongmột mạng là một luồng trong đó lưu lượng vào mỗi nút chính xác bằng lưu lượng ra khỏimỗi nút Thuật toán lưu lượng out-of-kilter tìm thấy luồng lưu thông chi phí tối thiểuthông qua mạng đáp ứng các giới hạn dưới và trên có thể áp dụng cho mỗi luồng liên kết(Fulkerson, 1961)

Nhiều vấn đề về lưu lượng mạng bao gồm vấn đề vận chuyển và vấn đề đường đi ngắnnhất có thể được cấu trúc như các vấn đề lưu lượng mạng chi phí tối thiểu và có thể đượcgiải quyết bằng cách sử dụng thuật toán lưu lượng out-of-kilter (Glover, Klingman vàPhillips (1992) đưa ra một đánh giá nổi bật về các vấn đề có thể được cấu trúc như cácvấn đề lưu lượng mạng tuyến tính .) Thuật toán lưu lượng out-of-kilter là một trongnhiều thuật toán lưu lượng mạng Người đọc quan tâm đến các thuật toán như vậy nêntham khảo bất kỳ một trong số các văn bản bao gồm: Ahuja, Magnanti và Orlin (1993),

Trang 20

Bertsekas (1991), Jensen và Barnes (1980), Kennington và Helgason (1980), Minieka(1978) , và Phillips và Garcia-Diaz (1981) Chúng tôi đã chọn để thảo luận về thuật toánlưu lượng out-of-kilter ở đây vì mối quan hệ mật thiết giữa thuật toán và lý thuyết nhịnguyên trong lập trình tuyến tính Việc triển khai thuật toán lưu lượng out-of-kilter -MENU-OKF — được bao gồm trong phần mềm đi kèm với văn bản này

II.2 Phát biểu bài toán

Như trước đây, chúng ta sẽ định nghĩa N là một tập hợp các nút và A là một tập hợp cácliên kết trực tiếp Vấn đề lưu lượng out-of-kilter có thể được hình thành như một vấn đềlập trình tuyến tính bằng cách sử dụng ký pháp sau:

Đầu vào

● = đơn vị chi phí của liên kết từ i đến j

● = lưu lượng yêu cầu tối thiểu trên liên kết (i, j) [ví dụ cận dưới của lưulượng trên liên kết (i, j)]

● = lưu lượng cho phép tối đa trên liên kết (i, j) [ví dụ cận trên của lưu lượngtrên liên kết (i, j)]

Các biến quyến định

= lưu lượng của liên kết (i, j)

Với những định nghĩa này, cơ sở có thể được hình thành như sau:

II.2.1 Bài toán cơ sở

Trang 21

Hàm (2.74) cực tiểu hóa toàn bộ chi phí lưu lượng trên những liên kết Quan hệ (2.75)quy định rằng lưu lượng tạo thành lưu lượng lưu thông Quan hệ (2.76) là ràng buộc giớihạn trên của lưu lượng của mỗi liên kết, trong khi quan hệ (2.77) là ràng buộc cận dướicủa lưu lượng trên mỗi liên kết.

II.2.2 Bài toán đối ngẫu

● = biến đối ngẫu kết hợp với ràng buộc (2.75)

● = biến đối ngẫu kết hợp với ràng buộc (2.76)

● = biến đối ngẫu kết hợp với ràng buộc (2.77)

Một lần nữa, sự quan tâm của chúng tôi đối với vấn đề này xuất phát từ thực tế là nhiềuvấn đề về mạng có thể dễ dàng được nêu ra về các vấn đề lưu lượng out-of-kilter Ví dụ,

để mô hình hóa một vấn đề giao thông vận tải thành một vấn đề lưu lượng out-of-kilter,chúng tôi thêm một nút siêu nguồn Chúng tôi kết nối nút siêu nguồn với mỗi nút cungcấp với giới hạn dưới là 0, chi phí là 0 và giới hạn trên bằng với nguồn cung cấp của nútcung cấp Tương tự, chúng tôi kết nối mỗi nút nhu cầu với nút siêu chìm Giới hạn dướitrên một liên kết giữa một nút nhu cầu và nút siêu chìm bằng với nhu cầu tại nút đó; giớihạn trên là vô hạn; và chi phí là 0 Chúng tôi cũng kết nối mọi nút cung cấp với mọi nút

Trang 22

nhu cầu Các liên kết này có giới hạn dưới 0, giới hạn trên , và chi phí bằng chi phívận chuyển đơn vị giữa nút cung cấp và nút nhu cầu được kết nối Cuối cùng, chúng ta

thêm một liên kết từ siêu chìm tới siêu nguồn với giới hạn dưới là 0, giới hạn trên

và chi phí là 0 Hình 2.34 minh họa một mạng cho vấn đề giao thông được giải quyếttrong Phần 2.6 ở trên (Giới hạn và chi phí thấp hơn và trên chỉ được hiển thị cho các liênkết đã chọn) Nhiều vấn đề về mạng khác cũng có thể được hình thành như các vấn đềlưu lượng out-of-kilter Vì vậy, nó rất hữu ích để biết làm thế nào để chuyển đổi một vấn

Trang 23

Hình 2.34 Mẫu mạng lưu lượng out-of-kilter đối với vấn đề vận chuyển được giải quyếttrong Phần 2.6.

II.2.3 Tìm giải pháp tối ưu

Với các luồng tối ưu, và các giá trị nút, , chúng ta có thể suy ra các giá trị tối

ưu cho các biến đối ngẫu và Chúng tôi bắt đầu bằng cách lưu ý rằng trongbất kỳ giải pháp tối ưu nào thì hoặc (hoặc cả hai bằng 0) cho mỗiliên kết (i, j) Rõ ràng hơn, nếu và chúng tôi có một giải pháp mà cả

và , chúng tôi có thể giảm cả hai giá trị cho đến khi một trong số chúng bằng

Trang 24

0 Điều này sẽ không ảnh hưởng đến hàm mục tiêu kép khi Nó cũng khôngảnh hưởng tính khả thi của ràng buộc kép (2.79) hoặc điều kiện lỏng bổ sung (2.83) Nhưvậy, chúng tôi có thể luôn tìm thấy một giải pháp mà ít nhất một trong hai biến

hoặc bằng 0

Tiếp theo, chúng tôi cho thấy rằng chúng tôi có thể suy ra các giá trị của và

từ kiến thức về các giá trị nút Để xem điều này hoàn thành như thế nào, chúng tôi

sẽ thay thế bằng Những điều kiện (2.83) - (2.85) có nghĩa là:

● Nếu , thì [Để thấy rằng điều này phải đúng, lưu ý rằng nếuchúng ta có , chúng ta cần có để thỏa mãn (2.85) Tuynhiên, nếu và và , chúng tôi sẽ cần

để thỏa mãn (2.83) Tuy nhiên, chúng ta chỉ đồng ý rằng

và không thể đồng thời lớn hơn 0 ] Chúng tôi cũng sẽ có

(2.87)

Trang 25

Ý nghĩa của ba điều kiện này là nếu chúng ta biết [nghĩa là biết giá trị của các biếnđối ngẫu liên kết với các nút], thì chúng ta có thể phỏng đoán các giá trị của các

biến đối ngẫu liên kết với các liên kết ( và ) Điều này làm giảm đáng kểlượng thông tin chúng ta cần theo dõi

Điều kiện (2.86)-(2.88) có thể được tóm tắt trong một sơ đồ kilter mà trong đó chúng ta

phác thảo lưu lượng trên trục X và giá trị của trên trục Y Ảnh 2.35 làmột sơ đồ kilter thông thường

Bất kỳ liên kết nào có lưu lượng và các giá trị được phác thảo trên đườngkilter là "trong kilter" và thỏa mãn tất cả các điều kiện tối ưu (miễn là chúng tôi đảm bảorằng chúng tôi luôn có luồng lưu thông) Bất kỳ liên kết nào không được phác thảo trênđường kilter thì tức là ngoài kilter và vi phạm một hoặc nhiều điều kiện tối ưu Để thuậntiện cho việc thảo luận, chúng ta thường kết hợp số kilter và trạng thái kilter với các vùngkhác nhau của sơ đồ kilter Chúng được thể hiện trong Hình 2.36 và Bảng 2.2

Trang 26

Hình 2.35 Sơ đồ kilter thông thường

Ngày đăng: 04/08/2020, 00:38

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w