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

QUY HOẠCH RỜI RẠC - CHƯƠNG 2 doc

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 (487.35 KB, 18 trang )


Bùi Thế Tâm II.1 Quy hoạch rời rạc

Chương 2
NHỮNG KHÁI NIỆM MỞ ĐẦU
Trong chương này sẽ trình bày những khái niệm cơ bản về quy hoạch tuyến tính,
phương pháp đơn hình bình thường, phương pháp đơn hình đối ngẫu từ vựng, và khái
niệm về bài toán quy hoạch tuyến tính nguyên.
1. NHỮNG KHÁI NIỆM CƠ BẢN VỀ QUY HOẠCH TUYẾN TÍNH
1.1.
Bài toán qui hoạch tuyến tính là bài toán có dạng:

0
1
1
1
ax (1)
, 1, 2, , (2)
,1, , (3)
0, 1, , (4)
n
jj
j
n
ij j i
j
n
ij j i
j
j
xcxm


ax b i l
ax b i l m
xjn
=
=
=
=→
==
≤=+
≥=




y Miền xác định: tập hợp các véc tơ x thoả mãn (2) và (4)
y Phương án bài toán: véc tơ x thoả mãn (2) và (4)
y Nếu (x
1
,…,x
n
) là phương án của bài toán,
0
1
n
jj
j
x
cx
=
=


thì
X

= (x
0
,x
1
,…,x
n
) gọi
là phương án mở rộng của bài toán (1) – (4).
y Phương án
*
X làm cực đại (1) gọi là phương án tối ưu. Phương án mở rộng
*
X

gọi

là phương án tối ưu mở rộng nếu X
*
là phương án tối ưu .
y Kí hiệu:
L - miền xác định của bài toán (1)-(4)
(, )LC – kí hiệu bài toán qui hoạch tuyến tính (1) - (4)
(, )XLC – phương án tối ưu của bài toán (1) - (4)
(, )XLC

- phương án tối ưu mở rộng của bài toán (1) - (4)

C
L

là tập hợp các phương án tối ưu của bài toán ( , )LC
y Bài toán qui hoạch tuyến tính gọi là giải được nếu tồn tại phương án tối ưu.





Bùi Thế Tâm II.2 Quy hoạch rời rạc


1.2.
Dạng chính tắc của bài toán qui hoạch tuyến tính


0
1
1
ax
, 1, 2 , ,
0, 1,2, ,
n
jj
j
n
ij j i
j
j

xcxm
ax b i m
xj n
=
=
=→
==
≥=



y Gọi
1
2
.
.
j
j
j
mj
a
a
A
a





=






là véc tơ điều kiện thứ j của bài toán (5)-(7)

1
2
.
.
.
B=
m
b
b
b







là véc tơ ràng buộc của bài toán (5)-(7).
y Phương án X của bài toán (5)-(7) gọi là tựa nếu các véc tơ điều kiện ứng với
các thành phần dương của nó là độc lập tuyến tính.
y Cơ sở của phương án tựa X là tập hợp |0}
j
{A

j
x > . Các thành phần của
phương án tựa ứng với các véc tơ cơ sở gọi là các thành phần cơ sở (các biến tương ứng
gọi là biến cơ sở), các thành phần còn lại gọi là các thành phần phi cơ sở (các biến
tương ứng gọi là biến phi cơ sở).
y Nếu
1
( , , )
n
Xx x=
phương án tựa của bài toán quy hoạch tuyến tính,
1
( , , )
jjk
A
A
là cơ sở của phương án tựa,
{
}
1
, ,
k
B
jj=
,
{
}
1, , \NnB=
thì hàm mục
tiêu

01
, , ,
n
x
xx có thể biểu diễn qua các biến phi cơ sở:
0i j
( ), 0,1, ,
ii j
jN
x
xxxi n

=+ − =


Kí hiệu Q
n
={0,1,…,n}
B
0
=B∪{0}, N
0
=N∪{0}
Bảng đơn hình
0
,
ij n
iQ jN
Tx
∈∈

= gọi là bảng đơn hình đầy đủ.
y Phương án tựa bài toán (5) - (7) gọi là không suy biến nếu số ràng buộc của hệ
(6) - (7) mà phương án thỏa mãn với dấu bằng bằng đúng n (các ràng buộc này là độc
lập tuyến tính). Phương án tựa là suy biến nếu số ràng buộc mà phương án tựa thỏa mãn
chặt là lớn hơn n.
(5)
(6)
(7)

Bùi Thế Tâm II.3 Quy hoạch rời rạc

Phương án tựa X của bài toán (5) - (7) là không suy biến nếu các thành phần cơ sở
của nó là dương. Cơ sở của phương án tựa không suy biến xác định duy nhất. Ứng với
phương án tựa suy biến có nhiều cơ sở.
y Tiêu chuẩn tối ưu: để cho phương án mở rộng
'' '
01
' ( , , , )
n
Xxxx=

là tối ưu điều
kiện cần và đủ là tồn tại cơ sở B sao cho
'
i j
0
( ), 0,1, ,
0,
ii j
jN

j
x
xxxi n
xjN

=+ − =
≥∈


y Giả sử ràng buộc (6) của bài toán (5) - (7) viết ở dạng:
0i j
( ), 0,1 ,
ii j
jN
x
xxxi n

=+ − =

.
Bảng đơn hình tương ứng
0
,
ij
n
iQ jN
Tx
∈∈
=
,

210200
11
1
, , , ) ( , , , ),
( , , , ) ( , , , ).
1
0
X=(x
x
nn
n
njjn
j
xx xx x
Xxx cxxx
=
=
==



Nếu x
i0
≥ 0 (i = 1, 2, . . ., n) thì bảng đơn hình T gọi là chấp nhận được, véc tơ X
là phương án tựa của bài toán quy hoạch tuyến tính.
Nếu x
0j
≥ 0 , j∈N thì bảng đơn hình T là chuẩn (đối ngẫu chấp nhận được), véc tơ
X gọi là giả phương án, X


gọi là giả phương án mở rộng

2. SO SÁNH THEO NGHĨA TỪ VỰNG


2.1. Véc tơ
12
( , , , )
n
Xxx x= gọi là dương từ vựng X>0 nếu X≠(0,…,0) và thành
phần đầu tiên khác 0 là dương.
y Véc tơ X gọi là không âm từ vựng X ≥ 0 nếu X>0 hay X=0
y Véc tơ X gọi là lớn hơn từ vựng véc tơ Y (ký hiệu X > Y) nếu X – Y >0
y Véc tơ X ≥ Y (không nhỏ hơn từ vựng) nếu X – Y ≥0
y X gọi là âm từ vựng (ký hiệu là X < 0) nếu –X >0
y Tương tự ta có các định nghĩa X ≤ 0, X < Y, X ≤ Y.
2.2. Phương án X
*
(phương án mở rộng
*
X

) của bài toán (5)- (7) gọi là phương
án tối ưu từ vựng (phương án
l - tối ưu) nếu đối với mọi phương án mở rộng X

ta có
*** *
01 01
( , , , ) ( , , , )

nn
XxxxXxxx=≥=

.
Định lý 1. Nếu tập hợp các phương án tối ưu của bài toán (5) - (7) khác rỗng và
bị chặn thì tồn tại phương án tối ưu từ vựng X
*

Định lý 2. Nếu X
*
phương án tối ưu từ vựng của bài toán (5)-(7) thì X
*

phương án tựa.

Bùi Thế Tâm II.4 Quy hoạch rời rạc

Bảng đơn hình
0
,
ij
n
iQ jN
Tx
∈∈
=

gọi là chuẩn từ vựng (hay là
l
- chuẩn) nếu


0
1
.
.
.
j
j
j
nj
x
x
R
x





=





> 0 , ∀j∈N


Định lý 3. Để cho phương án tựa X
*

của bài toán (5) – (7) là
l
- tối ưu, điều kiện
cần và đủ là tồn tại cơ sở B sao cho bảng đơn hình
0
,
ij
n
iQ jN
Tx
∈∈
= là l - chuẩn.
Giả phương án X (giả phương án mở rộng
X

) của bài toán (5) – (7) gọi là dương
từ vựng nếu bảng đơn hình tương ứng là
l
- chuẩn, nói gọn lại là
l
- giả phương án (
l
-
giả phương án mở rộng).

3. BẢNG ĐƠN HÌNH, PHƯƠNG ÁN, GIẢ PHƯƠNG ÁN
Phép biến đổi cơ bản của bảng đơn hình: đưa x
k
ra khỏi cơ sở, đưa x
l

vào cơ sở.
Phần tử x
kl
gọi là phần tử quay
Giả sử
0
,
ij
n
iQ jN
Tx
∈∈
=

,
cơ sở là B, N=
{
}
1, , \ , , , 0
kl
nBlN kB x

∈≠
.
Gọi
{
}
(
)
{

}
*
\NNkl=∪
, các biến x
0
, x
1
, , x
n
có thể biểu diễn qua các biến
*
N và ta được bảng
0
*
*
,
*
ij
n
iQ jN
Tx
∈∈
=
và cơ sở mới
{
}
(
)
{
}

*
\
B
Bl k=∪ .
Gọi
j
R
là cột của T,
*
j
R
là cột của
*
T , ta có công thức tính lại như sau
*
*
l
k
kl
kj
jj l
kl
R
R
x
x
R
RR
x


=−




=−



hay viết ở dạng toạ độ
{} { }
*
*
, 0,1, 2, , .
, ( \ ) 0 , 0,1, ,
il
ik
kl
kj
ij ij il
kl
x
xi n
x
x
x
xxjNl i n
x

=− =





=− ∀∈ ∪ =




{
}
(
)
{
}
\0jNl∀∈ ∪

Bùi Thế Tâm II.5 Quy hoạch rời rạc

4. PHƯƠNG PHÁP ĐƠN HÌNH
4.1. Thuật toán
Phương pháp đơn hình cho phép xây dựng dãy hữu hạn các phương án tựa X
0
, X
1
,
…, X
k
, trong đó X
k

là phương án tối ưu của bài toán (5) - (7). Hàm mục tiêu x
0 =
x
0
(X
r
)
không giảm khi r tăng. Ứng với mỗi phương án tựa X
r
có T
r
, B
r
, N
r
. Quá trình giải gồm
bước lặp xuất phát (xây dựng phương án tựa xuất phát X
0
) và dãy các bước lặp tổng
quát.
Bước lặp tổng quát r ≥ 0 có phương án X
r
, tương ứng với nó có bảng đơn hình T
r
và các tập B
r
, N
r
. Kiểm tra bảng T
r

có là chuẩn không (tức là
0
0
jr
x
jN≥∀∈). Nếu
đúng thì X
r
là tối ưu, nếu không thì xác định
l
x
đưa vào cơ sở theo công thức :
{
}
00
min |
ljr
x
xjN=∈
Đưa biến
k
x
ra khỏi cơ sở theo tiêu chuẩn
00
min | 1, 2, , ; 0
ki
il
kl il
xx
inx

xx


=
=>




Nếu không có x
il
(i = 1, 2, , n) dương thì bài toán không giải được, hàm mục
tiêu tiến ra dương vô cùng.
Tính X
r+1
, T
r+1
, B
r+1
, N
r+1
theo các công thức ở tiết 3.
4.2. Cách tính phương án xuất phát
Giải bài toán phụ ứng với bài toán (5) – (7) có b
i
≥ 0 ( i=1, ,m) :
12
1
1
( , , ) max

, 1,2, ,
0, 1, 2, ,
nm
nm j
jn
n
ij j n i i
j
j
fxx x x
ax x b i m
xj nm
+
+
=+
+
=
=− ⇒
+= =
≥= +



Bài toán này có phương án tựa
11
( , , ) (0,0, ,0, , , )
m
nm
n
x

xbb
+
=
 
.
Dùng phương pháp đơn hình giải bài toán phụ, nếu
** *
12
( , , ) 0
nm
fx x x
+
=
thì
*
0
ni
x
+
= (i = 1, , m) và véc tơ
** *
12
( , , )
n
x
xx là phương án tựa phải tìm X
0
.
Nếu
*

f
< 0 thì bài toán (5) – (7) không giải được (không có phương án chấp nhận
được).
Ví dụ. Giải bài toán sau:

Bùi Thế Tâm II.6 Quy hoạch rời rạc

012
12
12
12
12
max x
211 38
7
45 5
,0
x
x
xx
xx
xx
xx
=
+
+≤
+≤
−≤



Bài toán được viết lại thành
012
312
412
512
ax x
38 2 11
7
54 5, 0( 1, ,5)
j
mxx
xxx
xxx
xxxxj
=
+
=− −
=− −
=− − ≥ =
"

Ta có các bảng đơn hinh như sau:











1 -x5 -x4
x0 7 0 1
x1 40/9 1/9 5/9
x2 23/9 -1/9 4/9
x3 1 1 -6
x4 0 0 -1
x5 0 -1 0

Vậy phương án tối ưu là (40/9; 23/9; 1; 0 ;0) với trị hàm mục tiêu là 7. Cách trình bày
của bảng đơn hình ở trên còn gọi là
dạng toạ độ của phương pháp đơn hình.
5. PHƯƠNG PHÁP ĐƠN HÌNH ĐỐI NGẪU TỪ VỰNG
5.1. Phương pháp đơn hình đỗi ngẫu xây dựng một dãy hữu hạn các giả phương
án X
o
, X
1
, , X
k
. Giả phương án cuối cùng X
k
là phương án (vì vậy là phương án tối
ưu) của bài toán (5) - (7) . Hàm mục tiêu x
o
= x
o
(X
r

) không tăng khi r tăng. Mỗi giả
phương án X
r
ứng với bảng T
r
và các tập B
r
, N
r .
1 -x1 -x2
x0 0 -1 -1
x1 0 -1 0
x2 0 0 -1
x3 38 2 11
x4 7 1 1
x5 5 4* -5
1 -x5 -x2
x0 5/4 1/4 -9/4
x1 5/4 1/4 -5/4
x2 0 0 -1
x3 71/2 -1/2 27/2
x4 23/4 -1/4 9/4*
x5 0 -1 0

Bùi Thế Tâm II.7 Quy hoạch rời rạc

Quá trình giải gồm bước lặp ban đầu (xây dựng giả phương án xuất phát X
o
) và
dãy bước lặp tổng quát.


5.2. Tìm cực đại từ vựng của phương án mở rộng
~
X = (
n1o
x, ,x,x ) =
1
1
, , ,
n
jj n
j
cx x x
=






với các điều kiện
1
n
ij j i
j
ax b
=
=



(i = 1, , m)
0( 1,2, ,)
j
x
jn≥="

Ký hiệu bài toán là
(, )LC hay
l
- bài toán. Phương pháp đơn hình đỗi ngẫu từ
vựng gọi gọn là
l
- phương pháp.
5.3. Bước lặp r ≥ 0 tổng quát

l
- giả phương án X
r
với x
0j
≥ 0, j∈ N
r
, và tương ứng T
r
, B
r
, N
r
, các cột là
0

()
r
jr
R
jN∈ .
Kiểm tra xem T
r
có chấp nhận được hay không (tức là x
io
≥ 0 với mọi i = 1, ,n).
Nếu đúng thì X
r
là phương án
l
- tối ưu. Nếu không thì tìm biến x
k
loại khỏi cơ sở theo
quy tắc:
k = min { i | i = 1, , n ; x
io
<0}
Tìm x
l
đưa vào cơ sở theo quy tắc
min ; 0
j
l
rkj
kl
kj

R
R
lex j N x
x
x




=
∈<






Nếu trong các số x
kj
(j∈ N
r
) không có số âm thì bài toán không giải được. Nếu có
thì biến đổi bảng đơn hình theo các công thức ở tiết 3 ta được X
r+1
, T
r+1
, B
r+1
, N
r+1

5.4. Tính l giả phương án Xo
Giả sử ta xây dựng bảng đơn hình T ứng với bài toán (5) - (7) không phải

l

-chuẩn, ứng với nó có các tập B và N. Giả sử hàm

∈Nj
j
x
bị chặn trên tập
(6)- (7). Khi đó ta tìm được số M sao cho:

∈Nj
j
x


M (có thể dùng đơn hình
thường để xác định M).
Đưa vào biến mới






−+=
+


+

0x
)x.(1Mx
1n
Nj
j1n

Viết ràng buộc mới này vào cuối bảng T, chọn x
k
loại khỏi cơ sớ theo
quy tắc: k = n+1. Chọn biến x
l
đưa vào cơ số theo quy tắc

Bùi Thế Tâm II.8 Quy hoạch rời rạc

R
l
= lex min {Rj | j

N }
Thực hiện một bước biến đổi bảng đơn hình theo các công thức của tiết 3
ta nhận được bảng T
o

l
- chuẩn (R
j



0 với j

N
o
) và ứng với nó ta có các
tập B
o
và N
o
:
B
o
= (B

{
l
}), N
o
= (N

{n + 1})\ {
l
}.
5.5. Ví dụ bằng số
Giải bài toán sau bằng phương pháp đơn hình đối ngẫu.
Max
3210
23 xxxx



=

000
2
43
1042
321
321
321
321
≥≥≥
=+−
≥++


+
xxx
xxx
xxx
xxx
, ,



Sau khi thay ràng buộc đẳng thức bằng hai ràng buộc bất đẳng thức bài toán trên
trở thành:
Max
3210
23 xxxx



=

0,0,0
2
2
43
1042
321
321
321
321
321
≥≥≥
−≤−+−
≤+−
−≤−−−


+
xxx
xxx
xxx
xxx
xxx







Tiếp theo thêm các biến bù ta được bài toán:
Max
3210
23 xxxx


=

0,,,,,,
2
2
34
4210
7654321
3217
3216
3215
3214

+−+−=
−+−=
+++−=
+


=
xxxxxxx
xxxx

xxxx
xxxx
xxxx


Ta có các bảng đơn hình sau khi thêm ràng buộc phụ :

Bùi Thế Tâm II.9 Quy hoạch rời rạc


1 -x
1
-x
2
-x
3
x
0
0.00000 -3.00000 1.00000 -2.00000
x
1
0.00000 -1.00000 0.00000 0.00000
x
2
0.00000 0.00000 -1.00000 0.00000
x
3
0.00000 0.00000 0.00000 -1.00000
x
4

10.00000 2.00000 4.00000 -1.00000
x
5
-4.00000 -3.00000 -1.00000 -1.00000
x
6
2.00000 1.00000 -1.00000 1.00000
x
7
-2.00000 -1.00000 1.00000 -1.00000
x
8
100.00000 1.00000* 1.00000 1.00000
Bảng 1
1 -x
8
-x
2
-x
3
x
0
300.00000 3.00000 4.00000 1.00000
x
1
100.00000 1.00000 1.00000 1.00000
x
2
0.00000 - 0.00001 -1.00000 0.00000
x

3
0.00000 - 0.00001 0.00000 -1.00000
x
4
-190.00000 -2.00000 2.00000 -3.00000*
x
5
296.00000 3.00000 2.00000 2.00000
x
6
-98.00000 -1.00000 -2.00000 0.00000
x
7
98.00000 1.00000 2.00000 0.00000
Bảng 2
1 -x
8
-x
2
-x
4
x
0
236.66667 2.33333 4.66667 0.33333
x
1
36.66667 0.33333 1.66667 0.33333
x
2
0.00000 - 0.00001 -1.00000 0.00000

x
3
63.33333 0.66667 - 0.66667 - 0.33333
x
4
0.00000 0.00000 0.00000 -1.00000
x
5
169.33333 1.66667 3.33333 0.66667
x
6
-98.00000 -1.00000* -2.00000 0.00000
x
7
98.00000 1.00000 2.00000 0.00000
Bảng 3

Bùi Thế Tâm II.10 Quy hoạch rời rạc


1 -x
6
-x
2
-x
4
x
0
8.00000 2.33333 0.00000 0.33333
x

1
4.00000 0.33333 1.00000 0.33333
x
2
0.00000 - 0.00001 -1.00000 0.00000
x
3
-2.00000 0.66667 -2.00000* - 0.33333
x
4
0.00000 0.00000 0.00000 -1.00000
x
5
6.00000 1.66667 0.00000 0.66667
x
6
0.00000 -1.00000 0.00000 0.00000
x
7
0.00000 1.00000 0.00000 0.00000
Bảng 4

1 -x
6
-x
3
-x
4
x
0

8.00000 2.33333 0.00000 0.33333
x
1
3.00000 0.66667 0.50000 0.16667
x
2
1.00000 - 0.33333 - 0.50000 0.16667
x
3
0.00000 0.00000 -1.00000 0.00000
x
4
0.00000 0.00000 0.00000 -1.00000
x
5
6.00000 1.66667 0.00000 0.66667
x
6
0.00000 -1.00000 0.00000 0.00000
x
7
0.00000 1.00000 0.00000 0.00000
Bảng 5
Vậy phương án tối ưu là (3, 1, 0, 0, 6, 0, 0) với trị hàm mục tiêu bằng x[0]=-8.

5.6. Chương trình máy tính
• Chương trình nhằm giải bài toán quy hoạch tuyến tính có dạng:
max
1
0

→=

=
j
m
j
j
xcx
ij
m
j
ij
bxa ≤

=1
,
p
i , ,1
=

0≥
j
x
, m
j
, ,2,1
=


Bùi Thế Tâm II.11 Quy hoạch rời rạc


các b[i] có thể dương và âm, phương án xuất phát không đối ngẫu chấp nhận được. Nếu
bài toán giải có ràng buộc đẳng thức dạng:
ii
m
j
ij
bxa =

=1
thì ta thay thế bằng hai bất
đẳng thức:
ii
m
j
ij
bxa ≤

=1

ii
m
j
ij
bxa ≥

=1
.

Sau khi thêm biến bù bài toán trên có thể viết ở dạng:

max))((
1
0
→−−=

=
m
j
jj
xcx
mjxx
jj
, ,2,1))(1(
=


=
., ,2,1))((
1
pixabx
j
m
j
ijiim
=−−+=

=
+



., ,2,10 pmjx
j
+
=


Trong chương trình sử dụng các biến và mảng sau:
- m: số biến chính, n: số biến chính và biến bù của bài toán (n=m+p), gz là một
số dương đủ lớn và thường lấy bằng
},,{max
jiij
cba , ss = 1 nếu bảng s là l- chuẩn
nhưng không chấp nhận được và = 0 nếu bảng không là l- chuẩn.
- Mảng s gồm n + 2 dòng và m+1 cột lúc đầu ghi dữ liệu của bài toán sau đó lưu
bảng đơn hình ở mỗi bước. Dòng n+1 để chứa ràng buộc phụ (8).
- s[0][0] hàm mục tiêu, cột 0 là cột phương án, dòng 0 là các ước lượng
- cs : các biến ở bên trái bảng đơn hình, nc : các biến phi cơ sở
• Cách nhập dữ liệu
Các dữ liệu ban đầu của bài toán được ghi trong một tệp văn bản, gồm:
- n, m,gz, ss.
- Mảng s dữ liệu ban đầu bố trí dạng ở dưới và được ghi vào tệp dữ liệu theo từng
dòng :


Bùi Thế Tâm II.12 Quy hoạch rời rạc













- Mảng cs: nhập các số 0,1,2,…,n.
- Mảng nc: nhập các số 1,2,…,m.
Với dữ liệu bài toán trong mục 5.5 thì tệp dữ liệu DN.SLI có dạng :
7 3 100 0
0 -3 1 -2
0 -1 0 0
0 0 -1 0
0 0 0 -1
10 2 4 -1
-4 -3 -1 -1
2 1 -1 1
-2 -1 1 -1
0 1 2 3 4 5 6 7
1 2 3
• Văn bản chương trình.
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <dos.h>
#define M 30
#define N 30
double s[N+2][M+1],r,gz;
int blap,kgd, kgd2,ss,sb,cmin;

int m,n,i,j,k,l,tg,cs[N+2],nc[M+1];
unsigned long far *t; long int t1,t2; char *s1,*s2;
FILE *f1,*f2;
-x
1
-x
2
. . . . . . . . –x
m
0 -c
1
-c
2
. . . . . . . –c
m
x
0
x
1
x
2
#
x
m
0
0
#
0
-1 0 . . . . . . . . . . 0
0 -1 . . . . . . . . . 0

# # % #
0 0 . . . . . . . . . . -1
x
m+1
#
x
n
b
1

#
b
p
-a
11
. . . . . . . . . - a
1m
# # #
-a
p1
. . . . . . . . . a
p,m


Bùi Thế Tâm II.13 Quy hoạch rời rạc


int cotquay();
void biendoi();
void inbang(int cuoi);

int dhdoingau();

void main()
{ clrscr();
t= (unsigned long far *)MK_FP(0,0X46C); t1=*t;
printf("\nCo in trung gian hay khong 1/0 ? ");
scanf("%d%*c",&tg);
// Nhap du lieu ban dau
printf("\nVao ten tep so lieu : "); gets(s1);
f1= fopen(s1,"r");
fscanf(f1,"%d%d%lf%d",&n,&m,&gz,&ss);
for (i=0;i<=n;i++) for (j=0; j<=m;j++)
{ fscanf(f1,"%lf",&r); s[i][j]=r; }
for (i=0; i<=n;i++) fscanf(f1,"%d",&cs[i]) ;
for (j=1; j<=m; j++) fscanf(f1,"%d",&nc[j]);
fclose(f1); sb=1;
// In so lieu de kiem tra
printf("\n n,m,gz,ss = %d %d %13.5lf %d\n",n,m,gz,ss);
if (tg==1){ printf("\nVao ten tep chua ket qua : "); gets(s2);
f2=fopen(s2,"w");
fprintf(f2,"\n n,m,gz,ss = %d %d %13.5lf %d\n",n,m,gz,ss);
}
printf("\nBang 1, so lieu ban dau");
if (tg==1) fprintf(f2,"\nBang 1, so lieu ban dau");
inbang(0);
if (ss==1){
printf("\nBang 1, so lieu ban dau, l- chuan, khong chap nhan duoc");
if (tg==1)
fprintf(f2,"\nBang 1, so lieu ban dau, l- chuan, khong c.nhan duoc");
goto L1;}

// Them rang buoc phu
cs[n+1]=n+1; s[n+1][0]=gz;
for (j=1;j<=m; j++) s[n+1][j]=1;
printf("\nBang 1, so lieu ban dau them rang buoc phu");
if (tg==1) fprintf(f2,"\nBang 1, so lieu ban dau them rang buoc phu");
inbang(1);
l=n+1;
// Chon cot quay Rl = lexmin { Rj | j (- N }
cmin=1;
for (j=2;j<=m;j++)
{ for (i=0; i<=n;i++)
{ if (s[i][cmin] > s[i][j]) {cmin=j; break;}
if (s[i][cmin] < s[i][j]) break; }
}
printf("\nDong quay = %d, Cot quay = %d Ptq = %13.5lf",l,cmin,s[l][cmin]);
if (tg==1) {
fprintf(f2,"\nDong quay = %d, Cot quay = %d Ptq = %13.5lf",
l,cmin,s[l][cmin]); }
biendoi();sb++;
printf("\nBang %d, l- chuan dau tien",sb);

Bùi Thế Tâm II.14 Quy hoạch rời rạc

if (tg==1) fprintf(f2,"\nBang %d, l- chuan dau tien",sb);
inbang(0);
L1: kgd2= dhdoingau();
if (kgd2==1) {
printf("\nBai toan phu khong giai duoc");
if (tg==1) fprintf(f2,"\nBai toan phu khong giai duoc, STOP");
getch(); return; }

getch();
}
// Phan cac ham
int cotquay()
{ k=0;
for (j=1; j<=m; j++) if (s[l][j]<0) { k=j; break;}
if (k==0) return 1;
cmin=k;
for (j=k+1;j<=m;j++) if (s[l][j]<0)
{ for (i=0; i<=n;i++)
{ double t1,t2;
t1= s[i][cmin]/fabs(s[l][cmin]); t2=s[i][j]/fabs(s[l][j]);
if (t1 > t2) {cmin=j; break;}
if (t1 < t2) break;
}
}
return 0;
}
void biendoi()
{ for (j=0;j<=m;j++) if (j!= cmin)
{ for (i=0;i<=n;i++) if (i!=l)
s[i][j]=s[i][j]-(s[l][j]/s[l][cmin])*s[i][cmin];
s[l][j]=0; }
for (i=0;i<=n;i++) if (i!=l) s[i][cmin]=-s[i][cmin]/s[l][cmin];
s[l][cmin]=-1; nc[cmin]=cs[l];
}
void inbang(int cuoi)
{ int n1; if (cuoi==1) n1=n+1; else n1=n;
printf("\nCo so : ");
for (i=0; i<=n1;i++) printf("%d ",cs[i]) ; printf("\n");

printf("Phi co so : ");
for (j=1; j<=m; j++) printf("%d ",nc[j]);printf("\n");

for (i=0;i<=n1;i++) { for (j=0; j<=m;j++)
printf(" %13.5lf ",s[i][j]);
printf("\n"); }
if (tg==1) { fprintf(f2,"\nCo so : ");
for (i=0; i<=n1;i++) fprintf(f2,"%d ",cs[i]) ; fprintf(f2,"\n");
fprintf(f2,"Phi co so : ");
for (j=1; j<=m; j++) fprintf(f2,"%d ",nc[j]);fprintf(f2,"\n");
for (i=0;i<=n1;i++) { for (j=0; j<=m;j++)
fprintf(f2," %13.5lf ",s[i][j]);
fprintf(f2,"\n"); }
}
getch();
}
int dhdoingau()

Bùi Thế Tâm II.15 Quy hoạch rời rạc

{ blap=0;
Lap0: blap++;
printf("\n ");
printf("\nBuoc lap DHDN %d : ",blap);
if (tg==1) {
fprintf(f2,"\n ");
fprintf(f2,"\nBuoc lap DHDN %d : ",blap); }
l=-1;
for (i=1;i<=n;i++) if (s[i][0]<0) {l=i; break;}
printf("\nDong quay = %d ",l);

if (tg==1) fprintf(f2,"\nDong quay = %d",l);
if (l==-1) {
printf("\nPhuong an toi uu la: ");
for (i=0; i<=n;i++)
printf("\nx[%2d] = %13.5lf",cs[i],s[i][0]);
printf("\nSo bang da lap : %d bang",sb);
if (tg==1)
{ fprintf(f2,"\nPhuong an toi uu la : ");
for (i=0; i<=n;i++)
fprintf(f2,"\nx[%2d] = %13.5lf",cs[i],s[i][0]);
fprintf(f2,"\nSo bang da lap : %d bang",sb);
}
t= (unsigned long far *)MK_FP(0,0X46C);
t2=*t;
printf("\nThoi gian chay chuong trinh: %ld giay",
(long int)((t2-t1)/18.21));
if (tg==1) fprintf(f2,"\nThoi gian chay chuong trinh: %ld giay",
(long int)((t2-t1)/18.21));
fclose(f2); return 0;
}
else { kgd= cotquay(); if (kgd==1) return 1;
printf("\nCot quay = %d, Phan tu quay = %13.5lf",cmin,s[l][cmin]);
biendoi(); sb++;
printf("\nBang %d, DHDN",sb);
if (tg==1) fprintf(f2,"\nBang %d, DHDN",sb);
inbang(0); goto Lap0; }
}
Sau khi chạy chương trình ta nhận được lời giải tối ưu bài toán là:
x[ 0] = 8.00000
x[ 1] = 3.00000

x[ 2] = 1.00000
x[ 3] = 0.00000
x[ 4] = 0.00000
x[ 5] = 6.00000
x[ 6] = 0.00000
x[ 7] = 0.00000
Số bảng đã lập : 5 bảng

Bùi Thế Tâm II.16 Quy hoạch rời rạc


6. BÀI TOÁN QUY HOẠCH TUYẾN TÍNH NGUYÊN
Bài toán sau gọi là bài toán qui hoạch nguyên :
Max x
o
=

=
n
1j
jj
xc
(8)
1
n
ij j
j
ax
=


= b
i
, i =1, ,m (9)
x
j


0 , i =1, ,n (10)
x
j
- nguyên, j = 1, , n
1
(n
1


n) (11)
Nếu n
1
= n thì bài toán (8) - (11) gọi là bài toán quy hoạch tuyến tính
nguyên hoàn toàn. Nếu n
1
< n thì bài toán gọi là bài toán quy hoạch nguyên bộ
phận. Điều kiện (11) đôi khi viết dưới dạng: x
j
nguyên j

J

{1, , n}.

Bài toán (8) - (10) ký hiệu (L,C), miền xác định L, phương án tối ưu là
X(L,C).
Tập hợp các véc tơ X thoả mãn (9) - (11) gọi là miền xác định của bài
toán quy hoạch tuyến tính nguyên. Vécc tơ X thoả (9) - (11) được gọi là
phương án (hay lời giải chấp nhận được). Phương án X
*
làm cực đại (8) gọi là
phương án tối ưu.
Nếu X = (x
1
, , x
n
) là phương án (hay phương án tối ưu) và x
o
=
j
j
cx


thì véc tơ
X

= (
n1o
x, ,x,x
) gọi là phương án mở rộng (phương án tối ưu
mở rộng).
Ký hiệu:
L

N
- miền xác định của bài toán (8) - (11)
(L
N
,C) là bài toán (8) - (11)
X (L
N
,C) là phương án tối ưu.
X

(L
N
, C) phương án tối ưu mở rộng.
Bài toán quy hoạch tuyến tính nguyên gọi là giải được nếu tồn tại
phương án tối ưu X
*
.
Một đa diện L mà tất cả các đỉnh của nó đều là nguyên (mọi thành phần
là nguyên) gọi là đa diện nguyên.
Bảng đơn hình T mà tất cả các phần tử của nó đều là nguyên gọi là bảng
đơn hình nguyên.

Bùi Thế Tâm II.17 Quy hoạch rời rạc

BÀI TẬP
Dùng phương đơn hình hoặc phương pháp đơn hình đối ngẫu từ vựng để giải các
bài toán quy hoạch tuyến tính sau.
1. Một xưởng sản xuất hai loại thép đặc biệt g1 và g2. Một đơn vị sản phẩm loại
g1 cần 2 h để nấu chảy, 4 h để luyện và 10 h để cắt định hình; loại g2 cần 5 h để nấu
chảy, 1 h để luyện và 5 h để cắt định hình. Lợi nhuận mang đến bởi loại g1 là 24$ và

loại g2 là 8$. Khả năng của xưởng có thể bố trí 40 h để nấu chảy, 20h để luyện và 60 h
để cắt định hình. Xác định phương án sản xuất mỗi loại thép là bao nhiêu để mang đến
cho nhà sản xuất lợi nhuận cao nhất.
2. Một nhà sản xuất hai loại đá xây dựng: loại lớn x1, loại bé x2. Loại x1 cần 2 h
để nghiền, 5 h để phân loại, 8 h để làm sạch. Loại x2 cần 6 h để nghiền, 3 h để phân
loại, 2 h để làm sạch. Lợi nhuận mang lại từ loại x1 và x2 tương ứng là 40$ và 50$. Khả
năng cho phép sử dụng thiết bị trong một tuần là : 36 giờ để nghiền, 30 h để phân loại,
40 giờ để làm sạch. Xác định phương án sản xuất có lợi nhuận cao nhất.
3. Một nhà vườn muốn tạo một hỗn hợp phân bón từ hai loại sản phẩm cơ bản sao
cho tối thiểu nhận được 15 đơn vị potasses, 20 đv nitrates, 24 đv phosphates. Loại x1 có
giá 120 $ cung cấp được 3 đơn vị potasses, 1 đv nitrates, 3 đv phosphates. Loại x2 có
giá 60 $ cung cấp được 1 đơn vị potasses, 5 đv nitrates, 2 đv phosphates. Xác định
phương án chọn lựa để cực tiểu hóa chi phí của nhà vườn.
4. Một nghệ sỹ rất quan tâm đến sức khỏe, mong muốn mỗi ngày có được tối thiểu
36 đv vitamin A, 28 đv vitamin C, 32 đv vitamin D. Loại thuốc thứ nhất giá 3$ có thể
cung cấp 2 đv vitamin A, 2 đv vitamin C, 8 đv vitamin D. Loại thuốc thứ hai giá 4$ có
thể cung cấp 3 đv vitamin A, 2 đv vitamin C, 2 đv vitamin D. Xác định lượng thuốc sử
dụng để chi phí của nghệ sỹ này bé nhất.
5. Một nhà sản xuất thiết bị âm nhạc có khả năng chế tạo 3 loại: tiêu chuẩn y1,
chất lượng cao y2, chất lượng đặc biệt y3. Loại tiêu chuẩn cần 3 h để lắp ráp mạch điện,
1 h để hoàn chỉnh, lợi nhuận đem lại là 15$. Loại chất lượng cao cần 1 h để lắp ráp
mạch điện, 5 h để hoàn chỉnh, lợi nhuận đem lại là 20$. Loại chất lượng đặc biệt cần 3
h để lắp ráp mạch điện, 2 h để hoàn chỉnh, lợi nhuận đem lại là 24$. Khả năng xưởng có
thể bố trí 120 h để lắp ráp mạch điện, 60 h để hoàn chỉnh. Xác định phương án sản xuất
để cực đại lợi nhuận.
6. Chủ doanh nghiệp có 3000 ha đất để trồng 3 loại nông sản A, B, C. Để sản
xuất nông sản A cần chi phí về vốn là 300 ngàn đồng/ha, chi phí về lao động là 500
ngàn đồng/ha, sản lượng thu được trị giá 2000 ngàn đồng/ha. Để sản xuất nông sản B
cần chi phí về vốn là 350 ngàn đồng/ha, chi phí về lao động là 400 ngàn đồng/ha, sản
lượng thu được trị giá 1500 ngàn đồng/ha. Để sản xuất nông sản C cần chi phí về vốn là

400 ngàn đồng/ha, chi phí về lao động là 450 ngàn đồng/ha, sản lượng thu được trị giá
2500 ngàn đồng/ha. Khả năng chi về vốn của doanh nghiệp là 1,2 tỷ đồng, chi về lao
động là 1,6 tỷ đồng. Để đảm bảo các hợp đồng đã ký thì nông sản A cần trồng ít nhất là
600 ha. Cần xác định mỗi nông sản cần trồng bao nhiêu ha để sản lượng thu được là
nhiều nhất ?
7. Một trại chăn nuôi gia súc cần mua 3 loại thức ăn tổng hợp T1, T2, T3. Trong 1
kg T1 có 3 đơn vị dinh dưỡng D1, 1 đv dinh dưỡng D2. Trong 1 kg T2 có 4 đơn vị dinh
dưỡng D1, 2 đv dinh dưỡng D2. Trong 1 kg T3 có 2 đơn vị dinh dưỡng D1, 3 đv dinh
dưỡng D2. Giá 1 kg T1, T2, T3 tương ứng là 15, 12, 10 ngàn đồng. Mỗi bữa ăn cho gia

Bùi Thế Tâm II.18 Quy hoạch rời rạc

súc cần tối thiểu 160 đv dinh dưỡng d1, 140 đv dinh dưỡng D2. Cần mua mỗi loại thức
ăn T1, T2, T3 bao nhiêu kg để chi phí cho một bữa ăn là nhỏ nhất.
8. Min CX, AX = B, X>=0
2 4 3 1 0 0 152
A = 4 2 3 0 1 0 B = 60
3 0 1 0 0 1 36
C = (-5 -4 -5 -2 -1 -3)

9. Tìm x1, x2, x3, x4, x5, x6, x7 >= 0 sao cho
6x1 + x2 + x3 + 3x4 + x5 + -7x6 + 6x7 -> min
-x1 + x2 -x4 +x6 + x7 = 15
-2x1 + x3 -2x6 - x7 = 9
4x1 +2x4 + x5 -3x6 = 2

10. Tìm x1, x2, x3, x4, x5 >= 0 sao cho
4x1 + x2 + x3 + 3x4 -> min
2x2 + x3 + x4 = 16
4x2 + 2x5 <= 8

x1 + x2 + 2x4 + x5 = 2

11. Tìm x1, x2, x3, x4, x5 >= 0 sao cho
2x1 + 3x2 - x3 - 4x4 + 6x5 -> max
2x1 + x2 - x3 = 40
5x1 - 2x3 + 2x4 - x5 <= 0
x1 + 2x3 - 4 x4 + x5 >= 12
3x1 + 2x3 + x4 + 2x5 <= 14

12. Tìm x1, x2, x3, x4, x5, x6 >= 0 sao cho
4x1 + 2x2 + 3x3 + 6x4 + 3x5 + 2x6 > MIN
3x1 + 6x3 +2x4 + 3x5 = 30
x2 + x3 - 2x4 + x5 + 3x6 = 14
-x1 + 2x3 - x4 + 12 x6 >= 0
-2x1 + x3 + 3x4 + 2x5 + x6 <= 18

13. Tìm x1, x2, x3, x4, x5 >= 0 sao cho
x1 + 3x2 - 2 x3 - 5x4 - 3x5 > Max
x1 - x3 + 2x4 - x5 = 0
3x1 + 4x2 + 4x4 - 3x5 = 40
x1 + 4x2 + 2x4 <= 29
7x1 - 4x2 -10x4 + x5 = -152


×