Tải bản đầy đủ (.pdf) (81 trang)

Giải thuật di truyền và ứng dụng đối với bài toán vận tải

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (508.49 KB, 81 trang )

ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

---------------------------------------

VŨ THỊ KHÁNH TRÌNH

GIẢI THUẬT DI TRUYỀN VÀ ỨNG DỤNG ĐỐI VỚI
BÀI TOÁN VẬN TẢI

Chuyên ngành: Khoa học máy tính

Thái Nguyên - 2014


i

LỜI CAM ĐOAN

Sau quá trình học tập tại Trường Đại học Công nghệ thông
tin và Truyền thông, với những kiến thức lý thuyết và thực hành đã
tích lũy được, với việc vận dụng các kiến thức vào thực tế, em đã tự
nghiên cứu các tài liệu, các công trình nghiên cứu, đồng thời có sự phân
tích, tổng hợp, đúc kết và phát triển để hoàn thành luận văn thạc sĩ của
mình. Em xin cam đoan luận văn này là công trình do bản thân em tự
tìm hiểu, nghiên cứu và hoàn thành dưới sự hướng dẫn của thầy giáo,
TS. Vũ Vinh Quang.
Thái Nguyên, tháng 7 năm 2014
Học viên

Vũ Thị Khánh Trình




ii

LỜI CẢM ƠN

Trong thời gian hai năm của chương trình đào tạo thạc sĩ, trong đó
gần một nửa thời gian dành cho các môn học, thời gian còn lại dành cho
việc lựa chọn luận văn, giáo viên hướng dẫn, tập trung vào nghiên cứu,
viết, chỉnh sửa và hoàn thiện luận văn. Với quỹ thời gian như vậy và với
vị trí công việc đang phải đảm nhận, không riêng bản thân em mà hầu
hết các sinh viên cao học muốn hoàn thành tốt luận văn của mình trước
hết đều phải có sự sắp xếp thời gian hợp lý, có sự tập trung học tập và
nghiên cứu với tinh thần nghiêm túc, nỗ lực hết mình; tiếp đến là có sự
ủng hộ về tinh thần, sự giúp đỡ về chuyên môn - một trong những điều
kiện không thể thiếu quyết định đến việc thành công của luận văn.
Để hoàn thành được luận văn này trước tiên em xin gửi lời cảm ơn
sâu sắc đến thầy giáo hướng dẫn TS. Vũ Vinh Quang, là người định
hướng nội dung, hướng phát triển của luận văn và có nhiều ý kiến đóng
góp quan trọng về những vấn đề chuyên môn của luận văn, giúp em tháo
gỡ kịp thời những vướng mắc trong quá trình làm luận văn.
Em cũng xin chân thành cảm ơn các thầy, cô giáo Trường Đại học
Công nghệ thông tin và Truyền thông và bạn bè cùng lớp đã có những
ý kiến bổ ích để luận văn được hoàn thiện hơn. Xin cảm ơn gia đình,
người thân, đồng nghiệp luôn quan tâm, ủng hộ về tinh thần trong suốt
thời gian học tập và hoàn thành luận văn.
Em xin hứa sẽ cố gắng tự nghiên cứu, nâng cao năng lực chuyên môn
của mình để sau khi hoàn thành luận văn này sẽ có hướng tập trung
nghiên cứu sâu hơn, tiếp tục hoàn thiện luận văn này để có những ứng
dụng thiết thực trong thực tế.

Thái Nguyên, tháng 7 năm 2014
Học viên

Vũ Thị Khánh Trình


iii

MỤC LỤC

Lời cam đoan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

i

Lời cám ơn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ii

Danh mục các chữ viết tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

vi

Danh mục các bảng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

vii

Danh mục các hình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

viii


LỜI MỞ ĐẦU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1

Chương 1. Bài toán vận tải . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.1. Bài toán quy hoạch tuyến tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.1.1. Mô hình một số bài toán thực tế . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.1.2. Bài toán quy hoạch tuyến tính . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

1.2. Bài toán vận tải . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

1.3. Thuật toán phân phối giải bài toán vận tải . . . . . . . . . . . . . . . . .

13

1.3.1. Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


13

1.3.2. Cơ sở lý luận của thuật toán . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

1.3.3. Thuật toán phân phối . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

1.3.4. Vấn đề chọn phương án ban đầu . . . . . . . . . . . . . . . . . . . . . . . .

17

1.4. Các dạng khác của bài toán vận tải . . . . . . . . . . . . . . . . . . . . . . . .

18

1.4.1. Bài toán vận tải không cân bằng thu phát . . . . . . . . . . . . . .

18

1.4.2. Bài toán vận tải dạng cực đại. . . . . . . . . . . . . . . . . . . . . . . . . . .

20

Chương 2. Giải thuật di truyền và ứng dụng đối với bài toán
vận tải . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1. Giới thiệu về Giải thuật di truyền . . . . . . . . . . . . . . . . . . . . . . . . . .


28


iv
2.2. Các khái niệm cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

2.2.1. Cá thể, nhiễm sắc thể . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

2.2.2. Quần thể . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.3. Chọn lọc (Selection) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29
30

2.2.4. Lai ghép (Crossover) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

2.2.5. Đột biến (Mutation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

2.3. Mô hình GA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30


2.4. Các tham số của GA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.4.1. Kích thước quần thể . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.4.2. Xác suất lai ghép . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.4.3. Xác suất đột biến . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.5. Cơ chế thực hiện GA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

2.5.1. Mã hóa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

2.5.2. Khởi tạo quần thể ban đầu . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

2.5.3. Xác định hàm thích nghi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


34

2.5.4. Cơ chế lựa chọn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

2.6. Thuật toán di truyền kinh điển . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

2.6.1. Mã hóa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

2.6.2. Toán tử chọn lọc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

2.6.3. Toán tử lai ghép . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

2.6.4. Toán tử đột biến . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

2.7. Thuật toán di truyền mã hóa số thực (RCGA) . . . . . . . . . . . . .

40


2.7.1. Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

40

2.7.2. Các toán tử của RCGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

2.8. Thuật toán di truyền với bài toán vận tải cân bằng . . . . . . . . .

46

2.8.1. Biểu diễn lời giải bài toán vận tải bằng véc tơ . . . . . . . . . .

46

2.8.2. Biểu diễn lời giải bài toán vận tải bằng ma trận . . . . . . . .

51

Chương 3. Một số kết quả thực nghiệm . . . . . . . . . . . . . . . . .

56

3.1. Mô tả các thuật toán di truyền . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

3.1.1. Toán tử khởi tạo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


56


v
3.1.2. Toán tử lai ghép . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58

3.1.3. Toán tử đột biến . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58

3.1.4. Toán tử lựa chọn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

3.2. Một số kết quả cài đặt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

Phần kết luận . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

Tài liệu tham khảo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

64

Phần phụ lục. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


65


vi

DANH MỤC CÁC CHỮ VIẾT TẮT

GA – Genetic Algorithm:
EC - Evolutionary computation:
EP - Evolutionary Programming:
ES - Evolutionary Strategies:
GP - Genetic Programming:
CS - Classifier Systems:
NST:
Selection:
Crossover:
Mutation:
Reproduction:
pop_size:
RCGA:

giải thuật di truyền
tính toán tiến hóa
quy hoạch tiến hóa
các chiến lược tiến hóa
lập trình di truyền
các hệ thống phân loại
nhiễm sắc thể
chọn lọc
lai ghép

đột biến
sinh sản
kích cỡ quần thể
thuật toán di truyền
mã hóa số thực
Arithmetic Crossover: lai số học
BLX-α - Blend Crossover: lai ghép BLX-α
UNDX - Unimodal Normal
Distributed Crossover: lai ghép UNDX
CMX - Center of Mass Crossover: lai ghép CMX
MFX - Multi-parent
Feature-wise Crossover: lai ghép - MFX
SX - Seed Crossover: lai ghép SX


vii

DANH MỤC CÁC BẢNG

Bảng
Bảng
Bảng
Bảng
Bảng
Bảng

1.1:
1.2:
1.3:
1.4:

3.1:
3.2:

Hợp đồng chở hàng
Cự ly vận chuyển
Khả năng thu - phát
Tổng số tấn × km xe rỗng ít nhất
Kết quả sau 10 lần chạy ngẫu nhiên.
Kết quả sau 10 lần chạy ngẫu nhiên.


viii

DANH MỤC CÁC HÌNH

Hình 2.1: Sơ đồ mô tả GA
Hình 2.2: Lai ghép CMX
Hình 2.3: Phân bố của xci
j
Hình 2.4: Toán tử lai ghép SX
Hình 3.1: Đồ thị nghiệm tại lần chạy thứ 10
Hình 3.2: Đồ thị nghiệm tại lần chạy thứ 10


1

LỜI MỞ ĐẦU

Trong thực tế, việc tìm kiếm các phương pháp giải lớp các bài toán
tối ưu là một lĩnh vực được các nhà khoa học trên thế giới đặc biệt quan

tâm. Đã có rất nhiều các công trình nghiên cứu về lĩnh vực này, chủ
yếu được phát triển trong lý thuyết tối ưu hóa áp dụng trong lý thuyết
quy hoạch toán học và mô hình các bài toán trong công nghệ thông tin
để tìm kiếm các thuật toán giải các lớp bài toán NPC. Trong thời gian
gần đây một hướng nghiên cứu quan trọng được phát triển trong lĩnh
vực tính toán tiến hóa, đó chính là nghiên cứu về thuật toán di truyền
(Genetic Algorithm - GA).
Xuất phát từ thuyết tiến hóa muôn loài của Darwin, các nhà toán
học John Holland (1975) và Goldberg (1989) đã đề xuất và phát triển
GA. Đây là một kỹ thuật chung tìm cách giải quyết bài toán bằng việc
mô phỏng sự tiến hóa của con người hay của sinh vật nói chung dựa trên
những điều kiện được qui định sẵn của bài toán.
GA là một thuật toán đưa ra lời giải tương đối tối ưu. Tư tưởng
chính của thuật toán là tìm kiếm lời giải tối ưu dựa trên cơ chế lai ghép,
chọn lọc, sử dụng các nguyên lý về tính di truyền, sự thích nghi và sự
sống các cá thể thích nghi nhất trong tự nhiên từ đó tiếp cận đến lời
giải tối ưu của bài toán đang xét.
Đối với lý thuyết quy hoạch tuyến tính nói chung thì bài toán vận
tải là một mô hình có ứng dụng quan trọng trong thực tế, đây là bài
toán kinh điển đã được nghiên cứu. Đã có nhiều thuật toán được đề xuất
trong lý thuyết tối ưu để giải bài toán này như: Các thuật toán thế vị
(thuật toán phân phối, thuật toán quy không ô chọn), bài toán quy hoạch
nguyên.
Với những lý do trên, em chọn đề tài "Giải thuật di truyền và
ứng dụng đối với bài toán vận tải" làm luận văn tốt nghiệp.
Nội dung chính của luận văn gồm 3 chương:
Chương 1 - Bài toán vận tải: trình bày những kiến thức cơ bản
nhất về bài toán vận tải - một dạng đặc biệt của bài toán quy hoạch
tuyến tính và thuật toán phân phối để giải bài toán vận tải.



2
Chương 2 - Giải thuật di truyền và ứng dụng đối với bài
toán vận tải: trình bày các khái niệm cơ bản, mô hình, các tham số cơ
bản, các phép toán, cơ chế thực hiện tổng quát của thuật toán di truyền,
thuật toán di truyền kinh điển, thuật toán di truyền mã hóa số thực,
thuật toán di truyền với bài toán vận tải cân bằng.
Chương 3 - Một số kết quả thực nghiệm: trình bày các kết quả
cài đặt thử nghiệm khi giải bài toán vận tải bằng thuật toán GA.
Các kết quả lý thuyết về bài toán vận tải kiểm nghiệm thông qua các
chương trình thực nghiệm viết trên Matlab version 7.0


3

Chương 1
BÀI TOÁN VẬN TẢI

Nội dung của chương được tham khảo ở các tài liệu [1], [2], [3], [4].

1.1. Bài toán quy hoạch tuyến tính
1.1.1. Mô hình một số bài toán thực tế
Chương này sẽ trình bày những kiến thức cơ bản nhất của bài toán
quy hoạch tuyến tính. Năm 1947, G. B. Dantzig đã đưa ra mô hình toán
học này sau khi nghiên cứu các bài toán lập kế hoạch cho lực lượng không
quân Mỹ. Ban đầu, ông gọi là "Quy hoạch trong cấu trúc tuyến tính"
(Programming in a linear structure). Mùa hè năm 1948, G. B. Dantzig
đã đồng ý sử dụng tên gọi ngắn gọn là "Quy hoạch tuyến tính" (Linear
Programming) sau khi được Tijalling Koopmans góp ý. Nhiều năm sau,
Albert Tuckey dùng thuật ngữ ngắn hơn là "Linear Program". Ngay sau

khi G. B. Dantzig đưa ra mô hình quy hoạch tuyến tính, người ta thấy
nhiều bài toán thực tế thuộc nhiều lĩnh vực khác nhau có thể mô tả
bằng mô hình bài toán quy hoạch tuyến tính.
Ví dụ 1.1. Bài toán lập kế hoạch sản xuất (Production Planning Problem). Công ty Reddy Mikks sản xuất hai loại sản phẩm là sơn nội thất
và sơn ngoài trời. Nguyên liệu gồm hai loại A và B với nguồn dự trữ
tương ứng là 60 tấn và 80 tấn. Để sản xuất một tấn sơn nội thất cần
2 tấn nguyên liệu A, 1 tấn nguyên liệu B và để sản xuất một tấn sơn
ngoài trời cần 1 tấn nguyên liệu A, 2 tấn nguyên liệu B. Được biết nhu
cầu thị trường sử dụng hai loại sản phẩm này trong một ngày là:
- Nhu cầu sơn nội thất không hơn nhu cầu sơn ngoài trời quá 1 tấn;
- Nhu cầu cực đại của sơn nội thất là 2 tấn.
Giá bán buôn 1 tấn sơn nội thất là 2000 USD, 1 tấn sơn ngoài trời


4
là 3000 USD.
Vấn đề đặt ra là cần sản xuất mỗi ngày như thế nào để doanh thu
là lớn nhất.
Gọi x1 là số lượng sơn nội thất cần sản xuất trong một ngày;
Gọi x2 là số lượng sơn ngoài trời cần sản xuất trong một ngày;
x1 , x2 gọi là các biến (variable) hay là một phương án (alternative)
của bài toán. Vì sản lượng sản phẩm phải là một số thực không âm, nên
x1 ≥ 0, x2 ≥ 0, đơn vị tính là tấn. Khi đó doanh thu trong một ngày thu
được sẽ là
F (x) = 2000x1 + 3000x2
và F được gọi là hàm mục tiêu (objective funtion).
Mặt khác, số lượng sản phẩm được sản xuất x1 , x2 không thể vượt
quá số lượng nguyên liệu dự trữ hạn chế. Các hạn chế trên các biến x1 , x2
gọi là các ràng buộc (constraint), cụ thể là:
2x1 + x2 ≤ 60

x1 + 2x2 ≤ 80
Hơn nữa, việc sản xuất lại phải đảm bảo không nhiều hơn nhu cầu
của thị trường, do đó:
x1 − x2 ≤ 1
x1
≤2
Ta gọi cặp sắp thứ tự (x1 , x2 ) gọi là phương án chấp nhận được
(feasible) nếu nó thoả mãn mọi ràng buộc. Khi đó (x1 , x2 ) được gọi là
nghiệm chấp nhận được (feasible solution).
Ta có mô hình toán học của bài toán lập kế hoạch sản xuất như sau:
Tìm phương án chấp nhận được làm hàm mục tiêu F (x) đạt cực đại
max và được biểu diễn dưới dạng toán học dưới đây:
F (x) = 2000x1 + 3000x2
2x1 + x2
x1 + 2x2
x1 − x2
x1
x1 ≥ 0, x2

→ max
≤ 60
≤ 80
≤1
≤2
≥0

Ví dụ 1.2. Bài toán phân công lao động. Ta xét một bài toán cụ thể
sau đây:



5
Một đội sản xuất cần phân công một số người đi gặt, số còn lại thì ở
nhà đập lúa. Cả đội có 12 lao động loại A, 26 lao động loại B và 16 lao
động loại C. Năng suất làm việc của lao động loại A trong một ngày gặt
được 2 sào và đập được 5 sào; tương ứng với lao động loại B là 1, 8 và
3, 6; lao động loại C là 1, 5 và 2, 4. Hãy phân công lao động sao cho gặt
được nhiều nhất và số lúa được gặt về cũng được đập hết trong ngày.
Gọi x, y, z lần lượt là số lao động các loại A, B, C được phân công để
đi gặt lúa, x ≥ 0, y ≥ 0, z ≥ 0. Khi đó số lao động ở nhà đập lúa tương
ứng là: 12 − x, 26 − y và 16 − z.
Mặt khác, hai công việc phải đảm bảo cân đối, nên:
2x + 1, 8y + 1, 5z = 5(12 − x) + 3, 6(26 − y) + 2, 4(16 − z)
hay
7x + 5, 4y + 3, 9z = 192
Khi đó mô hình toán học của bài toán này là:
F (x) = 2x + 1, 8y + 1, 5z → max
0 ≤ x ≤ 12
0 ≤ y ≤ 26
0 ≤ z ≤ 16
x, y, z ∈ Z
7x + 5, 4y + 3, 9z = 192
Ví dụ 1.3. Bài toán vận tải (Transportation Problem). Ta xét một dạng
bài toán tổng quát.
Trong quá trình sản xuất, hàng hoá được vận chuyển từ 02 kho A,
B đến 02 cửa hàng bán lẻ I, II. Lượng hàng ở kho A 15 tấn, kho B 15
tấn và nhu cầu tiêu thụ ở kho I là 10 tấn, kho II là 20 tấn. Cước phí vận
chuyển một tấn hàng hoá từ kho A đến hai cửa hàng I, II tương ứng là
1 triệu VNĐ, 3 triệu VNĐ và kho B đến hai cửa hàng I, II tương ứng là
2 triệu VNĐ, 5 triệu VNĐ:
Yêu cầu đặt ra là hãy lập kế hoạch vận chuyển hàng hoá từ kho A, B

đến cửa hàng thứ I, II sao cho tổng chi phí là ít nhất, với điều kiện các
kho phát hết hàng và các siêu thị, cửa hàng nhận đủ số hàng hoá theo
nhu cầu.
Gọi lượng hàng vận chuyển từ kho i đến cửa hàng j là xij (i = 1, 2;
j = 1, 2; xij ≥ 0). Ta có kế hoạch vận chuyển, hay còn gọi là phương án
vận chuyển hàng hoá là một ma trận thực cấp 2 × 2, X = (xij ). Khi đó
cước phí vận chuyển hàng hoá là
F (x) = x11 + 3x12 + 2x21 + 5x22 .


6
Ta phải tìm các xij sao cho F là nhỏ nhất. Chú ý rằng xij ≥ 0 không
được giảm tùy ý, vì phải đảm bảo phải phát hết hàng ở các kho và các
cửa hàng phải nhận đủ số hàng theo nhu cầu. Ta có:

x11 + x12 = 15



 x + x = 15
21
22

x11 + x21 = 10



x12 + x22 = 20
Khi đó, mô hình toán học của bài toán vận tải này như sau:
F (x) = x11 + 3x12 + 2x21 + 5x22 → min

x11 + x12 = 15
x21 + x22 = 15
x11 + x21 = 10
x12 + x22 = 20
xij ≥ 0, i = 1, 2; j = 1, 2.
Mô hình này gọi là mô hình vận tải đóng (close transportation model)
hay còn gọi là mô hình vận tải cân bằng vì khả năng phát và khả năng
thu bằng nhau. Trong trường hợp khả năng phát và khả năng thu khác
nhau thì mô hình bài toán của chúng ta gọi là mô hình vận tải mở (open
transportation model) hay mô hình vận tải không cân bằng.
Nhận xét 1.1. Các bài toán trên đều dẫn đến một mô hình chung là
tìm nghiệm của hệ ràng buộc sao cho một hàm mục tiêu F (x) đạt max
hoặc min. Đây chính là mô hình tổng quát của bài toán tối ưu.

1.1.2. Bài toán quy hoạch tuyến tính
Bài toán quy hoạch tuyến tính có dạng tổng quát đầy đủ như sau:
n

cj xj → min(max)

(1.1)

aij xj ≥ bi , (i = 1, 2, ..., m1 )

(1.2)

aij xj = bi , (i = m1 + 1, m1 + 2, ..., m)

(1.3)


F (x) =
j=1
n

j=1
n

j=1

xj ≥ 0 (j = 1, 2, ..., n1 ; n1 ≤ n).

(1.4)


7
trong đó F (x) gọi là hàm mục tiêu.
Một ràng buộc đẳng thức có thể thay thế bằng hai ràng buộc dạng
bất đẳng thức, cụ thể là:

n



aij xj ≥ bi

n

j=1
aij xj = bi ⇔
n



j=1

aij xj ≥ −bi

 −
j=1

Một ẩn xj nào đó không bị ràng buộc về dấu có thể được thay bằng
hai ẩn không âm bằng cách đặt:
xj = xj − xn+j ; xj ≥ 0, xn+j ≥ 0,
trong đó:

xj = max{0, xj }
xn−j = max{0, −xj }.

Như vậy, mọi bài toán quy hoạch tuyến tính đều có thể đưa được về
dạng chuẩn tắc sau đây:
n

cj xj → min(max)

F (x) =

(1.5)

j=1
n


aij xj ≥ bi , (i = 1, 2, ..., m)

(1.6)

j=1

xj ≥ 0 (j = 1, 2, ..., n).

(1.7)

Mặt khác, một ràng buộc bất đẳng thức có thể đưa về ràng buộc
dạng đẳng thức bằng cách bổ sung thêm ẩn phụ, cụ thể:
n

n

aij xj ≥ bi ⇔
j=1

aij xj − yi = bi , yi ≥ 0
j=1

Việc thêm ẩn phụ yi cùng điều kiện không âm của nó không làm ảnh
hưởng đến kết quả của bài toán.
Khi đó ta có dạng chính tắc của bài toán quy hoạch tuyến tính:
n

cj xj → min(max)

F (x) =


(1.8)

j=1
n

aij xj = bi , (i = 1, 2, ..., m)

(1.9)

j=1

xj ≥ 0 (j = 1, 2, ..., n).

(1.10)


8
Định lý sau đây cho ta thấy phép biến đổi đó không làm thay đổi
bản chất của bài toán.
Định lý 1.1. Mỗi nghiệm X = (α1 , α2 , ..., αn ) của bất phương trình:
n

aij xj ≥ bi
j=1

ứng với một nghiệm duy nhất Y = (α1 , α2 , ..., αn , αn+1 ) của hệ:

n



aij xj − yi = bi
j=1


yi ≥ 0
và ngược lại.
Chứng minh. Giả sử X = (α1 , α2 , ..., αn ) sao cho:
n

aij αj ≥ bi .
j=1

Tiếp theo ta chọn:
n

aij αj − bi .

yi = αn+1 =
j=1

Khi đó ta có Y = (α1 , α2 , ..., αn , αn+1 ) thoả mãn hệ:
 n


aij xj − yi = bi
j=1





yi ≥ 0.

Ngược lại, nếu Y = (α1 , α2 , ..., αn , αn+1 ) thoả mãn:
 n


aij αj − αn+1 = bi
j=1



thì ta có ngay:

α1 , ..., αn , αn+1 ≥ 0,
n

aij αj ≥ bi
j=1
n

aij xj ≥ bi .

hay X = (α1 , α2 , ..., αn ) thoả mãn bất đẳng thức
j=1


9
Ví dụ 1.4. Đưa bài toán sau đây về dạng chính tắc:



F (x) = 2x1 − 3x4 + x5 + 2x6 → min





x1 + x2
− 3x4
+ 2x6 = 5

2x2 − 3x3 + x4 + x5
≤4



3x1 − x2 + 2x3
− 2x5
≥3




x1 , x2 , x5 , x6 ≥ 0
Đầu tiên ta đưa thêm hai ẩn phụ x7 ≥ 0, x8 ≥ 0 để đưa các ràng
buộc về dạng đẳng thức. Ta có bài toán:


F (x) = 2x1 − 3x4 + x5 + 2x6 → min






x1 + x2
− 3x4
+ 2x6
=5

2x2 − 3x3 + x4 + x5
+ x7
=4



3x1 − x2 + 2x3
− 2x5
+ x8 = 3




x1 , x2 , x5 , x6 , x7 , x8 ≥ 0
Tiếp theo, do x3 , x4 không có ràng buộc về dấu, nên ta đặt:
x3 = x3 − x11 ; x4 = x4 − x12 ; x4 ≥ 0; x12 ≥ 0; x3 ≥ 0, x11 ≥ 0.
Khi đó ta có dạng chính tắc của bài toán đã cho là:


F (x) = 2x1 − 3(x4 − x12 ) + x5 + 2x6 → min






+ 2x6
=5
x1 + x2
− 3x4 + 3x12

2x2 − 3x3 + 3x11 + x4 − x12 + x5
+ x7
=4



− 2x5
+ x8 = 3
3x1 − x2 + 2x3 − 2x11



 x ,x ,x ,x ,x ,x ,x ,x ,x ,x ≥ 0
1 2 5 6 7 8 4 12 3 11
Tóm lại: Mọi bài toán quy hoạch tuyến tính đều có thể đưa về dạng
chính tắc, hoặc dạng chuẩn tắc nhờ các phép biến đổi đơn giản sau:
1. Thay một biến xj không có ràng buộc về dấu bằng hiệu của hai
biến không âm với phép đặt:
xj = xj − xn+j ; xj ≥ 0; xn+j ≥ 0
n


aij xj = bi bằng hai ràng buộc

2. Thay một ràng buộc đẳng thức
j=1


10
bất đẳng thức:










 −

n

aij xj ≥ bi
j=1
n

aij xj ≥ −bi
j=1
n


aij xj ≥ bi bằng ràng buộc

3. Thay một ràng buộc bất đẳng thức
j=1

đẳng thức:

n

aij xj − yi = bi , yi ≥ 0.
j=1




 
x1
b1
 x2 
 b2 
 
 


 
c
c
c
...
c

x
4. Ký hiệu c = 1 2 2
n , x =  3 , b =  b3  và A =
 ... 
 ... 
xn
bm
(aij )m×n , ta có dạng ma trận của bài toán quy hoạch tuyến tính
dạng chính tắc như sau:


 F (x) = Cx → min
Ax = b

 x ≥ 0.
Trong thực tế, cần sử dụng hợp lý, linh hoạt các phép biến đổi ở trên
để số các biến số và các ràng buộc của bài toán là ít nhất. Ta có một
chú ý quan trọng sau đây:
Chú ý 1.1. Không giảm tính tổng quát, đối với bài toán quy hoạch
tuyến tính dạng chính tắc, ta đặt một số giả thiết sau:
n

aij xj = bi ; i = 1, 2, ..., m gồm có m phương trình

1. Hệ ràng buộc
j=1

độc lập;
n


2. m < n, vì nếu m = n thì hệ ràng buộc

aij xj = bi ; i = 1, 2, ..., m
j=1

có duy nhất nghiệm hoặc không có nghiệm. Do đó vấn đề tìm
phương án tối ưu là vô nghĩa;


11
3. bi ≥ 0, (i = 1, 2, ..., m). Trong trường hợp ngược lại ta nhân hai vế
của phương trình với −1;
4. Bài toán yêu cầu tìm cực tiểu min. Nếu đề bài yêu cầu tìm cực đại
max thì ta chuyển về bài toán tìm cực tiểu min bằng phép biến
đổi:
max(F (x)) = − min(−F (x)).

1.2. Bài toán vận tải
Giả sử có m kho hàng (gọi là các trạm phát) và n điểm tiêu thụ (gọi
là các trạm thu). Khả năng cung cấp hàng ở kho thứ i tương ứng là ai
đơn vị, i = 1, 2, ..., m và nhu cầu tiêu thụ ở điểm thứ j là bj đơn vị,
j = 1, 2, ..., n (ai ≥ 0, bj ≥ 0). Cước phí vận chuyển một đơn vị hàng hoá
từ kho i đến điểm tiêu thụ j là cij VNĐ. Giả thiết khả năng cung cấp
bằng nhu cầu tiêu thụ.
Cần phải lập kế hoạch vận chuyển hàng hoá từ kho thứ i đến điểm
tiêu thụ j sao cho tổng chi phí là ít nhất, với điều kiện các kho phát hết
hàng và điểm tiêu thụ nhận đủ số hàng hoá theo nhu cầu.
Ký hiệu xij là số hàng cần vận chuyển từ điểm i đến điểm j (i =
1, 2, ..., m; j = 1, 2, ..., n; xij ≥ 0). Khi đó phương án vận chuyển hàng
hoá là một ma trận thực cấp m × n, X = (xij ) và cước phí vận chuyển

hàng hoá là:
m

n

cij xij .

F =
i=1 j=1

Bên cạnh đó ta còn phải chú ý khả năng cung cấp hàng hoá của kho
i, cũng như khả năng tiêu thụ hàng hóa của cửa hàng j, do đó các ràng
buộc về ẩn sẽ là:
 n



xij = ai , i = 1, 2, ..., m.




j=1


 m
xij = bj , j = 1, 2, ..., n.


i=1



m
n




ai =
bj .


i=1

j=1


12
Ta có mô hình toán học của bài toán vận tải là:
m

n

cij xij → min

F (x) =
i=1 j=1
n
















xij = ai , i = 1, 2, ..., m.
j=1
m

xij = bj , j = 1, 2, ..., n.
i=1
m















(1.11)

n

ai =
i=1

bj .
j=1

xij ≥ 0; i = 1, 2, ..., m; j = 1, 2, ..., n.

Chú ý 1.2.
1. Mô hình này là một bài toán quy hoạch tuyến tính ở
dạng chính tắc nhưng có cấu trúc đặc biệt. Mỗi ẩn có mặt trong
hai phương trình của hệ ràng buộc và tất cả các hệ số của ẩn trong
hệ ràng buộc đều bằng 1.
m

n

ai =

2.

bj ("tổng phát" không bằng "tổng thu") ta gọi là bài


i=1

j=1

toán không cân bằng.
3. Ta luôn giả thiết bài toán vận tải cân bằng thu - phát.
m

n

ai <

Nếu
i=1

bj thì ta bổ sung thêm một trạm phát giả thứ
j=1

m + 1 và

n

m

bj −

am+1 =
j=1


ai
i=1

với cước phí vận chuyển cm+1,j = 0; j = 1, 2, ..., n.
m

n

ai >

Nếu
i=1

bj thì ta bổ sung thêm một trạm thu giả thứ n+1
j=1



n

m

ai −

bn+1 =
i=1

bj ; ci,n+1 = 0; i = 1, 2, ..., m.
j=1



13

1.3. Thuật toán phân phối giải bài toán vận
tải
1.3.1. Định nghĩa
Xét bài toán vận tải:
m

n

cij xij → min

F (x) =

(1.12)

i=1 j=1

Với hệ ràng buộc:
n

xij = ai , i = 1, 2, ..., m;

(1.13)

xij = bj , j = 1, 2, ..., n;

(1.14)


j=1

m

i=1

xij ≥ 0

(1.15)

Ma trận X = (xij ) (i = 1, 2, ..., m, j = 1, 2, ..., n) được gọi là một
phương án của bài toán vận tải nếu các giá trị của nó thoả mãn đồng
thời các điều kiện ràng buộc (1.13), (1.14), (1.15). Một phương án được
gọi là phương án tối ưu (hay là nghiệm) và ký hiệu là Xopt nếu nó làm
hàm mục tiêu (1.12) đạt cực tiểu.
Ô (i, j) ứng với xij > 0 được gọi là ô chọn của phương án X.
Một phương án mà các ô chọn không lập thành một chu trình gọi là
một phương án cơ sở (hay phương án cực biên).
Ký hiệu H là tập hợp các ô chọn của phương án cơ sở X, khi đó số
ô chọn không vượt quá m + n − 1. Trong trường hợp số ô đúng bằng
m + n − 1 thì phương án cơ sở gọi là không suy biến, nếu số ô nhỏ thua
m + n − 1 thì phương án cơ sở gọi là suy biến.
Nếu phương án cơ sở là suy biến thì ta có thể bổ sung vào tập H thêm
một số ô suy biến với giá trị xij = 0 sao cho tập H có đúng m + n − 1 ô
và không chứa chu trình. Ô chọn loại này gọi là ô chọn 0.
Do vậy ta luôn có thể giả thiết phương án cơ sở X ứng với tập H
luôn có đúng m + n − 1 ô chọn và không chứa chu trình.


14


1.3.2. Cơ sở lý luận của thuật toán
Định lý 1.2. Gọi C = (cij ) là ma trận cước phí của bài toán vận tải
(i = 1, 2, ..., m; j = 1, 2, ..., n). Nếu ta cộng vào mỗi phần tử của hàng i
một số ri và cộng vào mỗi phần tử của cột j một số sj tùy ý, ta sẽ được
một bài toán vận tải mới, tương đương với bài toán vận tải ban đầu có
cùng phương án tối ưu
Chứng minh. Nếu thay C = (cij ) bởi ma trận C = (cij + ri + sj ) ta được
bài toán vận tải mới chỉ khác bài toán ở hàm mục tiêu, còn tất cả các
ràng buộc đều giống nhau. Ta có:
m

n

F =

m

n

cij xij =
i=1 j=1
m
n

(cij + ri + sj )xij
i=1 j=1
m
n


cij xij +

=
i=1 j=1
m

j=1

sj

i=1

n

ri a i +
i=1

xij

ri +

j=1

sj xij

i=1 j=1
m

n


n

xij

=F+

n

ri xij +
i=1 j=1

=F+
i=1
m

m

sj bj
j=1

= F +A
Suy ra hàm mục tiêu của hai bài toán chỉ khác nhau đúng một hằng
số. Do đó nếu X là nghiệm của bài toán ban đầu thì X cũng là nghiệm
của bài toán mới và ngược lại.
Trên cơ sở của Định lý 1.2 ta có thể tìm phương án tối ưu bằng cách
quy 0 ô chọn, tức là biến cước phí của các ô chọn trong một phương án
cơ sở thành 0 mà vẫn có được một bài toán tương đương. Cụ thể như
sau:
Giả sử X là một phương án cơ sở, H là tập hợp các ô chọn tương
ứng gồm m + n − 1 ô chọn không chứa chu trình. Với mỗi ô (i, j) ∈ H

ta chọn cặp số ri , sj sao cho:
cij = cij + ri + sj = 0,
tức là ta phải giải hệ phương trình m + n ẩn ri , sj dạng:
cij + ri + sj = 0, (i, j) ∈ H, i = 1, 2, ..., m, j = 1, 2, ..., n.

(1.16)


15
Hệ phương trình (1.16) có m + n ẩn, nhưng chỉ có m + n − 1 phương
trình độc lập với nhau, nên hệ nghiệm phụ thuộc đúng một tham số và
luôn luôn có vô số nghiệm. Do đó ta sẽ chọn tham số đó bằng 0 để tính
nhanh các ẩn còn lại. Việc giải hệ phương trình (1.16) gọi là quy 0 ô
chọn.
Định lý 1.3. Giả sử X = (xij ) là một phương án cơ sở với tập hợp các
ô chọn H và cij = 0 với (i, j) ∈ H.
1. Nếu cij > 0 với mọi ô (i, j) ∈
/ H thì X là phương án tối ưu;
2. Nếu có ít nhất một số cij < 0 với ô (i, j) ∈
/ H thì X không là
phương án tối ưu. Khi đó ta có thể xây dựng được một phương án
cơ sở mới X tốt hơn phương án X.
Chứng minh. 1. Đặt z = F (c). Vì các cij = 0 với (i, j) ∈ H, nên:
m

n

cij xij = 0.

z=

i=1 j=1

Suy ra, mọi phương án X = X, ta đều có z ≥ 0 = z vì cij > 0 với
mọi ô (i, j) ∈
/ H.
2. Giả sử tồn tại cio jo < 0 với ô (io , jo ) ∈
/ H. Khi đó tập hợp H ∪
{(io , jo )} sẽ chứa đúng một chu trình duy nhất V và số ô của chu trình
là chẵn.
Bắt đầu từ ô (io , jo ) ta đánh số thứ tự từ số 1 cho chu trình V . Khi
đó số các ô trên V chia thành hai lớp. Ký hiệu V c là tập hợp các ô chẵn,
V l là tập hợp các ô lẻ.
Tiếp theo, đặt θo = min{xij , (i, j) ∈ V c } là lượng hàng nhỏ nhất
trong những ô chẵn của V .
Ta xây dựng phương án mới X như sau:

c

 xij − θo nếu (i, j) ∈ V
xij =
xij + θo nếu (i, j) ∈ V l

 x
nếu (i, j) ∈
/V
ij
Trong chu trình V sẽ có một ô chọn tương ứng với giá trị θo = min{xij ,
(i, j) ∈ V c } bị loại ra và thêm vào một ô (io , jo ) ∈
/ H ứng với cio jo < 0.
Ta sẽ được một phương án mới X có đúng m + n − 1 ô chọn và không

chứa chu trình. Vậy nên, X’ là một phương án cơ sở.
Vì cio jo < 0, nên z = cio jo θo < 0 = z, nên phương án X tốt hơn X.
Điều phải chứng minh


16
Chú ý 1.3. Nếu phương án cơ sở X là không suy biến thì θo > 0, do
đó X thực sự tốt hơn X. Nếu X suy biến thì θo có thể bằng 0, trong
trường hợp này X tốt bằng X. Cả hai trường hợp X là phương án chấp
nhận được.
Định lý 1.3 xác định một dấu hiệu tối ưu của các phương án cơ sở và
đề ra một phương pháp, thuật toán để điều chỉnh phương án cơ sở cho
gần đến phương án tối ưu hơn.

1.3.3. Thuật toán phân phối
Thuật toán phân phối tìm phương án tối ưu của bài toán vận tải
gồm các bước sau:
Bước 1. Xây dựng phương án cơ sở ban đầu X với tập hợp H có
m + n − 1 ô chọn;
Bước 2. Quy 0 các ô chọn, xác định được các giá trị ri , sj ; tính giá
trị của cước phí giả cij = cij + ri + sj ở các ô loại, kiểm tra dấu cước phí
giả ở các ô loại.
Nếu cij ≥ 0, (i, j) ∈
/ H, thì X là phương án tối ưu;
/ H, thì ta thực hiện điều
Nếu tồn tại ít nhất một số cij < 0, (i, j) ∈
chỉnh để xác định một phương án cơ sở mới X không xấu hơn X, trong
đó ô (io , jo ) là một ô chọn trong phương án cơ sở mới X ;
Bước 3. Xác định ô đưa vào trong số các ô loại mà cước phí giả âm
có giá trị nhỏ nhất, giả sử đó là ô (i∗ , j ∗ ). Tìm ô đưa ra trong số các ô

chọn thuộc H. Xác định chu trình V gồm các ô chọn thuộc H và đi qua ô
(i∗ , j ∗ ), ô (i∗ , j ∗ ) chia V thành tập đỉnh chẵn V c và tập đỉnh lẻ V l , trong
đó (i∗ , j ∗ ) ∈ V l . Ô đưa ra là ô (io , jo ) mà có θo = min{xij , (i, j) ∈ V c };
Bước 4. Xây dựng phương án mới X = (xij ) như sau:

c

 xij − θo , (i, j) ∈ V
xij =
xij + θo , (i, j) ∈ V l

 x ,
(i, j) ∈
/V
ij
Quay trở lại bước 2 để kiểm tra xem phương án X có phải là phương
án tối ưu hay không. Quá trình sẽ dừng lại khi xác định được phương
án tối ưu Xopt .


×