Bài toán dự trữ
Mục tiêu của bài toán
Nhằm đưa ra các quyết định đúng đắn hỗ trợ cho các doanh nghiệp trong một số
các trường hợp sau:
(1). Nếu chúng ta đang thực hiện một chiến lược dự trữ nào đó mà chi phí đặt
hàng (hay chi phí cố định) quá cao so với chi phí dự trữ thì cần tăng khối lượng hàng đặt
mỗi lần, ngược lại cần giảm hàng đặt mỗi lần.
(2). Xác định qui mô kho cần thiết tại mỗi điểm dữ trữ tối ưu
(3). Xác định lượng vốn cần thiết cho chu kỳ dự trữ và tiêu thụ
(4). Sự thay đổi tổng cầu, giá hàng
(5). ..................
Một số khái niệm cơ bản cần thiết
Sau đây là một vài khái niệm cơ bản cần thiết để có thể mô hình
hoá bài toán thực tế dưới dạng bài toán dự trữ:
1 - Hàng hoá: là đối tượng cần dự trữ cho hoạt động kinh tế, xã
hội nào đó
2 - Nhu cầu: là khối lượng hàng cần thiết và sẽ tiêu thụ trong
khoảng thời gian T (giả thiết rằng T=1). Nhu cầu thông thường là một
biến ngẫu nhiên có qui luật phân phối xác suất nào đó.
3 - Cung cấp: là khả năng cung cấp hàng cho quá trình dự trữ và
tiêu thụ. Trong các trường hợp cụ thể cách thức cung cấp có thể khác
nhau: Cung cấp theo đợt tập trung, cường độ lớn; cung cấp đều đặn
trong khoảng thời gian..
4 - Thời gian đặt hàng: là khoảng thời gian bắt đầu đặt hàng
đến khi hàng bắt đầu được dự trữ và tiêu thụ. Khoảng thời gian này
cũng có thể là một biến ngẫu nhiên.
5 - Chu kỳ dự trữ tiêu thụ: là phần thời gian dự trữ và tiêu thụ
khối lượng hàng của một lần đặt hàng.
6 - Điểm đặt hàng: là mức hàng còn dự trữ khi cần bắt đầu đặt
hàng cho chu kỳ sau đó.
7 - Các chi phí: trong các mô hình sẽ xem xét ở đề tài này ta
quan tâm đến các loại chi phí sau:
a - Chi phí mua hàng hay giá hàng được tính bằng chi phí trực
tiếp cho một đơn vị hàng về đến kho (giá hàng, chi phí vận
chuyển ,bốc xếp,...).
b - Chi phí đặt hàng là chi phí cố định cho 1 lần đặt hàng bao
gồm chi phí giao dịch, chi phí cho các nghiệp vụ khác.
c - Chi phí dự trữ hay chi phí kho: chi phí này tính cho 1 đơn vị
hàng cần bảo quản trong 1 đơn vị thời gian, thông thường nó được tính
tỷ lệ với giá hàng qua 1 hệ số gọi là hệ số chi phí dự trữ ( hay hệ số bảo
quản).
d - Chi phí do không đảm bảo nhu cầu: là thiệt hại khi thiếu 1 đơn
vị hàng trong 1 đơn vị thời gian.
e - Chi phí phát sinh do thừa hàng ( so với nhu cầu thực tế ):
khoản chi phí phát sinh khi chúng ta dự trữ quá mức cần thiết. Thí dụ:
tổn thất do vốn bị ứ đọng do hàng bị hư hỏng...
Một số dạng bài toán quản lý dự trữ
+ Mô hình dự trữ với việc tiêu thụ đều, bổ sung tức thời
Mô tả bài toán: Giả sử nhu cầu một loại hàng trong thời kỳ T là Q đơn vị. Việc
tiêu thụ hàng là đều đặn và thời gian bổ sung hàng vào kho không đáng kể (tức thời). Chi
phí cho mỗi lần đặt hàng là A, giá đơn vị hàng là C, hệ số chi phí dự trữ là I, Thời gian
đặt hàng là T0. Hãy xác định số lần đặt hàng và lượng hàng đặt mỗi lần sao cho tổng chi
phí bé nhất.
+ Mô hình dự trữ tiêu thụ đều, bổ sung dần dần
Mô tả bài toán: Giả sử nhu cầu một loại hàng trong thời kỳ T là Q đơn vị. Việc
tiêu thụ hàng là đều đặn và thời gian bổ sung hàng vào kho được tiến hành với cường độ
không đổi K đơn vị trong thời gian T. Ta giả thiết rằng K>>Q vì nếu K Q thì không
cần đặt vấn đề dự trữ. Chi phí cho mỗi lần đặt hàng là A, giá đơn vị hàng là C, hệ số chi
phí dự trữ là I, Thời gian đặt hàng là T0 . Hãy xác định số lần đặt hàng và lượng hàng đặt
mỗi lần sao cho tổng chi phí bé nhất.
+ Mô hình dữ liệu nhiều mức giá ( giá hàng thay đổi theo số lượng đặt mua mỗi
lần).
Mô tả bài toán: Trong các mô hình trên, ta giả thiết giá của mỗi đơn vị hàng
không đổi. Thực tế do nhiều lý do khác nhau, giá hàng có thể thay đổi theo qui mô của lô
hàng mua mỗi lần, chẳng hạn người ta có thể chia các mức giá thành: giá bán lẻ, giá bán
buôn cấp 1, cấp 2, hay giá theo đơn đặt hàng có ứng vốn. Nói cách tổng quát là giá mỗi
đơn vị hàng có thể thay đổi theo số lượng hàng đặt mỗi lần.
Qui trình xử lý bài toán
Bài toán được thực hiện với qui trình dưới đây. Bài toán có thể về quản lý dự trữ
có thể có rất nhiều các mức giá khác nhau, tuỳ vào từng bài cụ thể mà chúng ta có thể
nhập các mức giá khác nhau => cho ra các kết quả khác nhau. Nhưng về cơ bản để giải
quyết bài toán này chúng ta cần có các thông số vào tổng quát sau:
a. Mô hình quản lý dự trữ với việc tiêu thụ đều, bổ sung tức thời (Mô hình WILSON)
Mô tả bài toán
Giả sử nhu cầu một loại hàng trong thời kỳ T(T=1) là Q đơn vị. Việc tiờu thụ hàng
là đều đặn và thời gian bổ sung hàng vào kho khụng đỏng kể (tức thời). Chi phí cho mỗi
lần đặt hàng là A, giỏ đơn vị hàng là C, hệ số chi phí dự trữ là I, thời gian đặt hàng là T0.
Hóy xỏc định số lần đặt hàng và lượng hàng đặt mỗi lần sao cho tổng chi phí là bộ nhất.
Đầu vào:
1. Tổng nhu cầu
2. Chi phí đặt hàng
3. Hệ số chi phí dự trữ
4. Thời gian đặt hàng
5. Số mức giá
6. Nhập các mức giá
7 ...
Qui trình xử lý
Chương trình máy tính
Kết quả:
1. Chi phí cực tiểu
2. Lượng đặt hàng tối ưu (duy nhất)
3. Số lần đặt hàng
4. Điểm đặt hàng
5 ...
Thiết lập mô hình
Giả sử ta chia T thành n chu kỳ dự trữ và tiờu thụ. Trong mỗi chu kỳ i đặt mua
lượng hàng tương ứng là qi . Ta cú sơ đồ biểu thị số lượng hàng trong kho như sau:
q1 q2
t1 t2 (Sơ đồ kho) T=1
Sơ đồ trên thể hiện cường độ tiêu thụ đều, đường biểu diễn lượng dự trữ tuyến
tính theo thời gian. Mỗi chu kỳ nhập một lượng hàng q i, tiêu thụ đến hết chu kỳ thì phải
có hàng bổ sung vào dự trữ, Như vậy không xảy ra thiếu, thừa dự trữ do đó cũng không
phát sinh các chi phí tương ứng.
Trong mỗi chu kỳ ti lượng hàng dự trữ trung bình là qi/2 phát sinh chi phí dự trữ
tương ứng qitiIC/2; chi phí đặt hàng là nA; ngoài ra tổng số tiền mua hàng là CQ.
Vậy tổng chi phí là:
CQn
1i 2i
qi
ICtnAn),
iF(t
(1)
Vì qui luật tiêu thụ đều nên dễ dàng suy ra t i=qi/Q với i . Như vậy ta có:
CQn
1i 2Q
2iICq
nAn),iF(q
(2)
Qn
1i iq
Với n xác định, ta có thể thấy F(q) bé nhất khi qi=q=Q/n với i , tức là lượng hàng
đặt mua mỗi lần đều bằng q.
Thật vậy, lập hàm f(qi)=F(qi)- iq(λ Q)
điểm dừng của f(qi) là qi=Q/n. Dễ dàng nhận thấy đây là điểm cực tiểu toàn bộ của f(qi).
Tóm lại, việc tìm cực tiểu hàm F(ti,n) qui về tìm cực tiểu hàm:
CQ2
ICqq
AQF(q)
Vì CQ không đổi ta chỉ cần tìm q làm cực tiểu hàm:
2ICq
qAQD(q) (3)
Lời giải
Vì D(q) là tổng của hai số hạng dương có tích không đổi (AQIC/2), theo hệ quả
của bất đẳng thức côsi, D(q) nhỏ nhất khi AQ/q=ICq/2. Giải phương trình này đối với q ,
ta có:
Lượng hàng đặt tối ưu mỗi lần: IC
2AQ*q (4)
và D(q*)= 2AQIC=2AQ/q* + ICq* (5)
F(q*)= CQ2AQIC (6)
hay có thể tính: F(q*) =CQ+2AQ/q*=ICq*+CQ
Số lần đặt hàng tối ưu n*=Q/q*.
Chu kỳ dự trữ, tiêu thụ: t*=1/n*.
Điểm đặt hàng: việc xác định điểm đặt hàng sẽ đơn giản nếu như thời gian đặt
hàng T0 <t*, nhưng trong thực tế có thể T0 t* như vậy cần đặt hàng trước một hay một
số chu kỳ. Lượng hàng trong kho lúc cần đặt hàng (điểm đặt hàng ) chính là lượng hàng
tiêu thụ trong khoảng thời gian được xác định theo công thức sau:
[T0 - t*.int(T0/t*)]
Ta quan sát hai sơ đồ kho sau:
sơ đồ 1 sơ đồ 2
B* B*
------ ----- --------------------
T0 T0 T0
B*=T0Q B*=(T0 - 2t*)Q
Trong sơ đồ 1 điểm đặt hàng được tính lượng hàng tiêu thụ trong thời gian đặt
hàng T0; còn trong sơ đồ 2 cần đặt hàng trước đó hai chu kỳ, vì vậy điểm đặt hàng B* tính
bằng lượng tiêu thụ trong khoảng thời gian bằng phần dư của T0 sau khi trừ đi 2 lần t*, tức
là: =T0-2t*.
Trong trường hợp tổng quát ta có thể tính điểm đặt hàng B* theo công thức sau:
B*=Q[T0-t*.int(T0/t*)]; int(T0/t) là phần nguyên của T0/t.
Ta có thể mô tả hàm D(q) và lời giải trên đồ thị sau:
AQ/q
ICq/2
q’ q* q’’
Ta thấy q* là hoành độ điểm giao của hai đồ thị AQ/q và ICq/2 và
AQ/q > ICq/2 với q<q*
AQ/q < ICq/2 với q>q*
Phân tích kết quả
Với kết quả trên ta có thể có một số phân tích sơ bộ sau:
+ Điểm q* trên đồ thị cho thấy rằng nếu ta đang thực hiện một chiến lược lưu trữ
nào đó mà chi phí đặt hàng (hay chi phí cố định) quá cao so với chi phí dự trữ (q’ chẳng
hạn) thì cần tăng khối lượng hàng đặt mỗi lần, ngược lại, nếu ở tình trạng q’’ thì cần giảm
khối lượng hàng đặt mỗi lần.
+ Công thức tính q* giúp ta xác định qui mô kho cần thiết tại điểm lưu trữ tối ưu.
+ Công thức tính F(q*) cho phép xác định lượng vốn cần thiết cho chu kỳ dự trữ
và tiêu thụ:
IC
AQCA
IC
AQ
Q
CQAQIC
n
qFK
22
2)2(
*
*)(*
+ Sự thay đổi một vài yếu tố (phân tích tĩnh)
Các tham số cơ bản trong mô hình có thể ngoại sinh hoá như các biến. Với sự thay
đổi của các biến này chiến lược dự trữ tối ưu cũng có những thay đổi nhất định. Tuy
nhiên, trong thực tế cần chú ý rằng không phải mọi tham số đều có thể ngoại sinh hoá
mặc dù về mặt toán học chúng ta luôn có khả năng ngoại sinh hoá tất cả các tham số.
Người ta chỉ xét sự thay đổi của những tham số làm thay đổi điều kiện dự trữ thông
thường nhất.
- Trước tiên ta xét sự thay đổi tổng nhu cầu Q tác động đến qui kho và vốn:
Nếu Q’=ỏQ(ỏ>0) thì: q’*= *
2q
IC
QA
Như vậy, qui mô kho cần thiết không tỷ lệ với Q, mà thay đổi với hệ số căn bậc
hai.
Tổng quát, từ công thức (4) ta thấy tại điểm tối ưu q*=q(A, Q, I, C) và dễ dàng
thấy hàm q khả vi theo tất cả các biến (với các biến nhận giá trị dương).
Vậy:
AdQdII
AQdC
C
AQQdA
AQICdq (
2
1(8)
Công thức này, cho phép xác định biến động của q* (có thể xem là qui mô kho)
theo các yếu tố trong mô hình.
Tương tự trong trường hợp đơn giản khi nhu cầu tăng ta có:
Vốn IC
AQCA
IC
QACAK
22
22'*
- Sự thay đổi của giá hàng: Trong trường hợp chủ hàng đặt mốc qui mô lô hàng
mua để hạ giá nhằm khuyến mại hành vi dự trữ sẽ thay đổi như thế nào?
Giả sử có mốc q0 với q ≥ q0 thì giá hàng hạ ồ, (0< ồ <1) ;
tức là c’=c(1- ồ)
Ta có đồ thị sau:
N(q*,C)
N(q’1,C’)
q’ q’1 Smax
+ Khi q0>q*
Nếu *10 qq thì đặt hàng với khối lượng: (*)1
**'
Trong trường hợp ngược lại, cần so sánh F(q*) và F(q0) để xác định lượng hàng
đặt mua tối ưu.
+ Khi q0≤q*: cần thay đổi chiến lược đặt hàng để nhận được ưu đãi, khuyến mại,
điểm tối ưu có thể tính theo công thức (*).
Tổng quát, ta có thể mô tả sự biến đổi của K*=K(A, Q, I, C) nhờ biểu thức sau:
dII
AQICdC
AQIC
AQdQ
AQIC
ACdA
AQIC
QCdK
2
2
22)
22(
+ Vấn đề xác định chi phí dự trữ và lời giải của bài toán:
Chúng ta đã xác định chi phí dự trữ trong mô hình cổ điển có thể thiếu tính thực
tế. Chúng ta có thể tính chi phí dự trữ được đơn vị hoá theo mỗi đơn vị hàng đều có
chung lời giải theo công thức:
0
2*
C
AQq (4’)
Trong đó: C0 là chi phí dự trữ tính cho mỗi đơn vị hàng được dự trữ trong một đơn
vị thời gian. Chẳng hạn, chi phí dự trữ bao gồm hai phần: Chi phí cố định cho mỗi đơn vị
hàng và chi phí do ứ đọng vốn tính theo giá hàng với hệ số là tỷ lệ lãi tiền gửi hay tiền
vay.
Xây dựng chương trình với mô hình Wilson
* Đầu vào:
- Tổng cầu một loại hàng Q
- Đơn giá hàng C
- Chi phí cho mỗi lần đặt hàng A
- Hệ số chi phí dự trữ I
- Thời gian đặt hàng T0
* Đầu ra:
- Lượng hàng đặt tối ưu mỗi làn q*
- Tổng chi phí bé nhất F(q*)
- Số lần đặt hàng tỗi ưu n*
- Chu kỳ dự trữ ,tiêu thụ t*
- Điểm đặt hàng tối ưu B*
* Đoạn chương trình mô phỏng thuật toán bằng ngôn ngữ VB:
Private Sub Command1_Click()
Dim Q1 As Currency
Dim n As Currency
Dim t1 As Currency
Dim b As Currency
Dim Q As Currency
Dim c As Currency
Dim i As Currency
Dim A As Currency
Dim T As Currency
Dim F As Currency
If IsNumeric(txtT) And IsNumeric(txtQ) And IsNumeric(txtI) And IsNumeric(txtA) And
IsNumeric(txtC) Then
T = CCur(txtT) / 365
Q = CCur(txtQ)
c = CCur(txtC)
A = CCur(txtA)
i = CCur(txtI)
Q1 = Sqr((2 * Q * A) / (i * c))
F = i * c * Q1 + Q * c
n = Q / Q1
t1 = 1 / n
b = Q * (T - (t1 * Int(T / t1)))
txtkq = "Lượng hàng đặt mỗi lần làq=" & CStr(Q1) & vbNewLine & "Tổng chi phí bé
nhất F(q*)=" & CStr(F) & vbNewLine & "Thời gian 1 chu kỳ t*=" & CStr(t1) &
"(ngày)" & vbNewLine & "Số chu kỳ trong một năm n*=" & CStr(n) & vbNewLine &
"Điểm đặt hàng B*=" & CStr(b)
Else
MsgBox "du lieu vao sai"
End If
End Sub
Thí dụ minh hoạ
Một cửa hàng kinh doanh thép xây dựng tại một khu vực có tổng nhu cầu 200000
tấn/năm, việc tiêu thụ là đều đặn trong năm, thời gian nhập hàng không đáng kể. Cửa
hàng mua thép từ một nguồn không hạn chế về số lượng. Chi phí cho một lần đặt hàng là
400$, giá một tấn là 240$, hệ số chi phí bảo quản là 0,05. Thời gian từ lúc đặt hàng đến
khi có hàng vào kho là 2 tháng. Xác định các chỉ số cơ bản trong dự trữ và tiêu thụ của
cửa hàng.
Dựa vào bài toán tổng quát trên chúng ta có thể giải bài toán này bằng chương
trình mô phỏng sau đây:
Mô hình dự trữ tiêu thụ đều, bổ sung dần dần
Một trong những tình huống khá phổ biến trong thực tế sản xuất và kinh doanh là
việc bổ sung hàng không tức thời, người ta có thể vừa sản xuất vừa tiêu thụ hay vừa nhập
hàng vừa tiêu thụ. Ở đây, chúng ta xét trường hợp cường độ cung cấp lớn hơn lớn hơn
đáng kể so với cường độ tiêu thụ, vì nếu cường độ cung cấp bằng cường độ tiêu thụ thì
không cần đặt vấn đề dự trữ.
Mô tả bài toán
Giả sử nhu cầu một loại hàng trong thời kỳ T là Q đơn vị. Việc tiêu thụ hàng là
đều đặn và thời gian bổ sung hàng vào kho được tiến hành với cường độ không đổi K đơn
vị trong thời gian T=1. Ta giả thiết rằng K>>Q vì nếu K<=Q thì không cần đặt vấn đề dự
trữ. Chi phí cho mỗi lần đặt hàng là A, giá đơn vị hàng là C, hệ số chi phí dự trữ là I, thời
gian đặt hàng là T0. Hãy xác định số lần đặt hàng và lượng hàng đặt mỗi lần sao cho chi
phí bé nhất.
Thiết lập mô hình
Tương tự như mô hình trên, ta có thể có lượng hàng đặt mỗi lần bằng nhau và
bằng q, số lần đặt hàng sẽ là n=Q/q. Vì Q<<K nên trong mỗi chu kỳ dự trữ, tiêu thụ t, có
hai khoảng thời gian ts- thời gian có bổ sung hàng vào kho; tr- thời gian chỉ tiến hành tiêu
thụ.
Nếu gọi lượng hàng tối đa trong kho là S, ta có trong thời gian T=1 nếu nhập hàng
liên tục thì lượng hàng dư là K-Q; trong thời gian ts lượng hàng dư là S, vậy S/ts=(K-Q)/T
hay S=ts(K-Q).
Mặt khác trong thời gian ts lượng hàng nhập được là q, nên q/ts=K/T hay ts=q/K.
Từ đó ta có :
S=q(K-Q)/K =q(1-Q/K)
Và có sơ đồ biểu thị số lượng hàng dự trữ trong kho như sau:
S S=q(1-Q/K)
ts tr T=1
t = ts + tr
Hàm tổng chi phí là:
CQ)KQ(1
2qIC
qAQF(q) (1)
(Mức dự trữ trung bình được tính bằng S/2 và S = q(1-Q/K)
Nếu đặt I’=I(1-Q/K) ta có hàm chi phí của mô hình Wilson trong đó thay thế I
bằng I’ và dễ dàng có lời giả tương tự.
3.3.3 Lời giải
Lượng hàng đặt tối ưu mỗi lần : )KQIC(1
2AQq*
(2)
Và )KQ2AQIC(1D(q*) (3)
CQ)KQ2AQIC(1F(q*) (4)
Số lần đặt hàng tối ưu : n* = Q/q*.
Chu kỳ dự trữ , tiêu thụ : t*=1/n*.
Điểm đặt hàng trong trường hợp này cần phân biệt mức B* khi đang làm đầy kho
và khi đang làm vơi kho.
Trước tiên ta tính: B= Q[T0-t*.int(T0/t*)].
Nếu B S*=q*(1-Q/K) thì B*=B đặt hàng khi đang làm vơi kho.
Nếu B > S* thì B*=(K-Q)(t*-B/Q) đặt hàng khi đang làm đầy kho.
3.3.4 Phân tích lời giải
Các phân tích trong mô hình Wilson hoàn toàn có thể sử dụng cho mô hình dự trữ
tiêu thụ đều, bổ sung dần dần. Một số bài toán mở rộng có thể ứng dụng được nếu ta tiến
hành thay thế hệ số I bằng I’.
+ Xấp xỉ bởi mô hình Wilson và huỷ bỏ dự trữ
Rõ ràng tỷ lệ Q/K là hoàn toàn xác định, vì vậy sự sai khác của lời giải trong mô
hình này so với mô hình Wilson phụ thuộc vào giá trị Q/K. Nếu Q/K ≈ 0 thì thực chất mô
hình trở thành mô hình bổ sung tức thời. Ngược lại, khi Q/K ≈ 1 thì coi như không có dự
trữ.
Mô hình dự trữ này phù hợp với quá trình tổ chức sản xuất – tiêu thụ hơn là quá
trình kinh doanh thương mại. Trong ta có thể xem K là năng lực sản xuất một mặt hàng
chính, Q là nhu cầu, A là chi phí chuẩn bị 1 đợt sản xuất, C là chi phí trực tiếp cho sản
xuất 1 đơn vị hàng, T0 là thời gian chuẩn bị sản xuất.
+ Bài toán với khối lượng hàng không qua kho
So với mô hình Wilson thì tổng chi phí trong mô hình này nhỏ hơn, nguyên nhân
là có 1 khối lượng hàng có thể xem là không phải qua kho trong mỗi chu kỳ, do đó giảm
được chi phí dự trữ. Có thể xác định số lượng đó tại chiến lược tối ưu như sau:
R=(q*-S*)=q*-q*(1-Q/K) =q*Q/K
Với số chu kỳ là Q/q* và với T=1 tổng lượng hàng không qua kho là: R*=Q2/K.
R* cũng là một chỉ tiêu để đánh giá một khía cạnh của chiến lược dự trữ đang tồn
tại. Trong thực tế, R* không phụ thuộc các chi phí, nó chỉ phụ thuộc K và Q. Vì vậy nếu
doanh nghiệp thực hiện một chiến lược dự trữ q, mà lượng hàng không qua kho lớn hơn
R* tức là nhu cầu lớn hơn mức dự báo hoặc khả năng sản xuất giảm, ngược lại khi lượng
hàng không qua kho bé hơn R* thì nhu cầu lớn hơn mức dự báo hoặc khả năng sản xuất.
Có hai tình huống đơn giản là:
- Vấn đề dự báo và điều chỉnh tổng nhu cầu: Q
- Vấn đề đánh giá năng lực thực tế của đơn vị: K
+ Tổng nhu cầu Q: Khi tiến hành lập kế hoạch tác nghiệp cho một thời kỳ T,
chúng ta dự trên nhiều nguồn thông tin để xác định tổng nhu cầu Q cho một doanh
nghiệp, một khu vực,... Không thể và cũng không có đủ khả năng xác định chính xác Q.
Chúng ta có thể căn cứ vào tình hình dự trữ - tiêu thụ của một phần thời gian để hiệu
chỉnh tham số này.
1. Giả sử trong thời gian T = 1 ta đã dự báo một nhu cầu Q đều đặn. Bằng năng
lực cung cấp K, sau thời gian T ta xác định được lượng hàng không qua kho R1 (hoặc
tương ứng là lượng hàng qua kho R2 = K-R1). Như vậy lượng hàng không qua kho R1
chính là lượng hàng thực tế tiêu thụ trong thời gian T= . Nhu cầu thực tế sẽ là
Q’=R1/.
2. Lời giải trong tình huống đơn giản nói trên có thể không thực tế, do doanh
nghiệp luôn có một chiến lược theo chu kỳ. Vì vậy chỉ sau một chu kỳ hay cả năm người
ta mới có khả năng đánh giá lại thị trường.
Sau đây ta xét trường hợp thời gian sản xuất ban đầu làm cơ sở đánh giá là 1 chu
kỳ:
Trong 1 chu kỳ, giả sử ta sản xuất lượng hàng q, nếu nhu cầu cả năm là Q, lượng
hàng qua kho là S=q(1-Q/K). Giả sử lượng hàng qua kho thực tế là S’ khác S và thời gian
sản xuất của chu kỳ này là ts0, như vậy ta có thể thay q=ts
0K. Nhu cầu thực tế Q’ nhận
được từ phương trình S’=ts0K(1-Q’/K).
Nghiệm phương trình này là: Q’=K-S’/ts0
3. Trường hợp đơn giản nhất, cơ sở đánh giá là một năm sản xuất và tiêu thụ. Như
đã nói ở trên lượng hàng không qua kho lý thuyết là R*=Q2/K, nếu lượng hàng không qua
kho thực tế là R’ khác R* ta có thể xác định lại Q’ nhờ công thức sau: KSQ ''
+ Khả năng sản xuất K: Hoàn toàn như trên, bài toán đánh giá lại khả năng sản
xuất cũng có thể phân chia thành 3 trường hợp tương tự. Tuy nhiên, ta cần chú ý rằng
đánh giá lại khả năng cung cấp thường chỉ có ý nghĩa khi bản thân doanh nghiệp không
tự sản xuất, hàng hoá nhận được từ một hay một số nguồn cung khác.
3.3.5 Xây dựng chương trình
* Đầu vào:
- Tổng công xuất K
- Tổng cầu một loại hàng Q
- Đơn giá hàng C
- Chi phí cho mỗi lần đặt hàng A
- Hệ số chi phí dự trữ I
- Thời gian đặt hàng T0
* Đầu ra của bài toán là:
- Lượng hàng đặt tối ưu mỗi làn q*
- Tổng chi phí bé nhất F(q*)
- Lượng hàng cực đại trong kho S*
- Số lần đặt hàng tỗi ưu n*
- Chu kỳ dự trữ ,tiêu thụ t*
- Điểm đặt hàng tối ưu B*
* Đoạn chương trình mô phỏng thuật toán bằng ngôn ngữ VB
Private Sub Command1_Click()
Dim k As Currency
Dim Q1 As Currency
Dim n As Currency
Dim t1 As Currency
Dim b As Currency
Dim Q As Currency
Dim c As Currency
Dim i As Currency
Dim A As Currency
Dim T As Currency
Dim F As Currency
Dim s As Currency
If IsNumeric(txtT) And IsNumeric(txtQ) And IsNumeric(txtI) And IsNumeric(txtA) And
IsNumeric(txtC) Then
k = CCur(txtK)
T = CCur(txtT) / 365
Q = CCur(txtQ)
c = CCur(txtC)
A = CCur(txtA)
i = CCur(txtI)
Q1 = Sqr(2 * Q * A / (i * c * (1 - Q / k)))
F = Sqr(2 * A * Q * i * c * (1 - Q / k)) + c * Q
n = Q / Q1
t1 = 1 / n
s = Q1 * (1 - Q / k)
b = Q * (T - (t1 * Int(T / t1)))
If b > s Then
b = (k - Q) * (t1 - b / Q)
End If
txtkq = " Lượng hàng đặt mỗi lần là :q*=" & CStr(Q1) & vbNewLine & "Tổng chi phí bé
nhất F(q*)=" & CStr(F) & vbNewLine & "Lượng hàng cực đại trong kho S*=" & CStr(s)
& vbNewLine & " Thời gian 1 chu kỳ t*=" & CStr(CInt(t1 * 365)) & " (ngay)" &
vbNewLine & " Số chu kỳ trong 1 năm n*=" & CStr(n) & vbNewLine & "Điểm đặt hàng
B*=" & CStr(b)
Else
MsgBox "Dữ liệu vào sai hãy nhập lại"
End If
End Sub
3.3.6 Thí dụ minh họa
Một cơ sở sản xuất xăm lốp xe hơi có công suất thiết bị 2000000 bộ/năm, nhu cầu
tiêu thụ 1400000 bộ/năm. Chi phí cho 1 lần chuẩn bị sản xuất là 400$, chi phí sản xuất
mỗi bộ 140$. Chi phí bảo quản có hệ số 0.01. Thời gian chuẩn bị 1 đợt sản xuất 45 ngày.
Hãy phân chia nhu cầu trên thành các đợt sản xuất sao cho tổng chi phí bé nhất.
Dựa vào bài toán tổng quát trên chúng ta có thể giải bài toán này bằng chương
trình mô phỏng sau đây:
3.4 Mô hình dự trữ trong trường hợp giá hàng thay đổi theo số lượng đặt hàng mỗi lần (Mô hình dự trữ nhiều mức giá)
Trong các mô hình trên, ta giả thiết giá cuả mỗi đơn vị hàng không đổi. Thực tế do
nhiều lý do khác nhau, giá hàng có thể thay đổi theo qui mô của lô hàng mua mỗi lần,
chẳng hạn người ta có thể chia các mức giá thành: giá bán lẻ, giá bán buôn câp 1, giá bán
buôn cấp 2, hay giá theo đơn đặt hàng có ứng vốn....Nói một cách tổng quát là giá mỗi
đơn vị hàng có thể thay đổi theo số lượng hàng đặt mỗi lần.
3.4.1 Mô tả bài toán
Nhu cầu một loại hàng trong thời gian T là Q đơn vị. Chi phí cho mỗi lần đặt hàng
là A, hệ số chi phí dự trữ là I, giá hàng thay đổi theo số lượng mua mỗi lần:
Nếu q < s1 giá c1
s1 q<s2 giá c2
s2 q<s3 giá c3
-----------------------
s k-1 q<sk giá ck
------------------------
sn-1 q giá cn
Trong đó : s1 < s2 < ..... < sn-1 ta gọi si (i=1,2,....,n) là các mốc thay đổi giá; có thể xem như
s0=0 và sn=+ ; và c1> c2>..... >cn.
3.4.2 Thiết lập mô hình
Để đơn giản cho việc tìm lời giải ta giả thiết thời gian bổ sung hàng không đáng
kể (bổ sung tức thời).
Đặt QiC2q
iICq
AQ(q)iF
Đây chính là hàm tổng chi phí nếu mua hàng với giá ci.
ta có:
F1(q) khi q (0,s1)
F2(q) khi q (s1,s2)
Fq)= ------------------------
Fn-1(q) khi q (sn-2,sn-1)
Fn(q) khi q (sn-1,sn)
3.4.3 Lời giải
Theo giả thiết ta có: F1(q)>F2(q)>.....>Fn-1(q) với mọi giá trị q>0.
Gọi qi* là điểm cực tiểu hàm Fi(q) ta có:
iIC
2AQ*iq (1)
do Ci giảm nên ta luôn có: qi* > qi-1*
Mặt khác Fi(qi*) = CiQ+2AQ/qi* < Fi-1(qi-1*) = Ci-1Q+2AQ/qi-1*;
F1(q)
F2(q)
F3(q)
0 q1* s1 q2* q3* s2 q
Với các đặc điểm trên ta có thể mô tả thoật toán tìm giá trị tối ưu q* như sau:
a) Trường hợp hai mức giá
- Tính 2IC
2AQ*2q
+ Nếu q2* s1 thì lượng hàng đặt tối ưu q*=q2*. Ta có thể mô tả trên đồ thị:
F F1
F2
s1 q2* q
+ Nếu q2*< s1 tính Q2C2
1s2IC
1sAQ)1(s2F
(Đây là chi phí bé nhất của hàm tổng chi phí với q s1)
- Tính 1IC
2AQ*1q Q1C12AQIC1F *)1(q
Có 3 trường hợp có thể xảy ra như sau:
Nếu F2(s1)<F1(q1*) thì q*=s1
Nếu F2(s1)>F1(q1*) thì q*=q1*
Nếu F2(s1)=F1(q1*) thì q*=q1* hoặc q*=s1
Chúng ta có thể mô tả các trường trên đồ thị:
Trường hợp 1: F2(s1)<F1(q1*) thì q*=s1
F F1
F1(q1*) F2
F2(s1)
q1* q2* s1 q
Trường hợp 2: F2(s1)>F1(q1*) thì q*=q1*
F
F1
F2(s1) F2
F1(q1*)
q1* q2* s1 q
Trường hợp 3: q*=s1=q1*
F
F1
F2
F1(q1*)
q1* q2* s1 q
b) Trường hợp tổng quát (n mức giá)
Thuật toán: Ta xét từ hàm Fn(q) để tìm giá trị nhỏ nhất của hàm F(q) trong
khoảng [sn-1,+ ), nếu giá trị đó đạt tại điểm cực trị thì ta nhận được giá trị q*=qn* là giá
trị tại đó F(q) nhỏ nhất toàn bộ (với q<+ );
Ngược lại, ta lấy giá trị hàm Fn(sn-1) làm giá trị nhỏ nhất địa phương.
Xét khoảng (sn-2,sn-1) để tìm giá trị nhỏ nhất của F(q) biểu hiện bởi giá trị nhỏ nhất
của hàm Fn-1(q) trong khoảng này; so sánh với giá trị nhỏ nhất này ở khoảng trước.
Như vậy ta tìm được q* khi nhận được giá trị đầu tiên qi* [si-1,si).
Cụ thể là :
+ Tính qn*:
- Nếu qn*≥ sn-1 thì q*=qn* giá trị nhỏ nhất của F(q) là: F(qn*).
- Nếu qn*<sn-1, tính Fn(sn-1) và
+ Tính qn-1*,
- Nếu qn-1*≥ sn-2 thì tính Fn-1(qn-1*) và so sánh giá trị này với Fn(sn-1), giá trị nhỏ
nhất tương cho biết lượng q* tối ưu.
- Nếu qn-1*<sn-2, tính Fn-1(sn-2) và
+ Tính qn-2,
- Nếu qn-2*≥ sn-3 thì tính Fn-2(qn-2*) và so sánh giá trị này với Fn-1(sn-2) và Fn(sn-1),
giá trị nhỏ nhất tương cho biết lượng q* tối ưu.
- Nếu qn-2*<sn-3, tính Fn-2(sn-3) ....
Tiếp tục thuật toán này cho đến khi nhận được q i* [si-1,si) và tìm được lượng đặt
hàng tối ưu q*
Cũng có thể thực hiện thuật toán một cách máy móc nhưng đơn giản khi số mức
giá quá lớn như sau:
Tính các giá trị qk* với k=n, n-1, n-2,.... cho đến khi nhận được giá trị qi* thoả
mãn điều kiện qi* [si-1,si).
Tính {Fk(sk-1) với s>i} và Fi(qi*).
Tìm Min{Fk(sk-1) với s>i; Fi(qi*)}.
Điểm đạt giá trị nhỏ nhất chính là điểm cực tiểu của hàm F(q)
3.4.4 Xây dựng chương trình
* Đầu vào:
- Tổng cầu một loại hàng Q
- Số đơn giá D
- Đơn giá hàng Ci
- Lượng hàng đặt Si
- Chi phí cho mỗi lần đặt hàng A
- Hệ số chi phí dự trữ I
- Thời gian đặt hàng T0
* Đầu ra:
- Lượng hàng đặt tối ưu mỗi làn q*
- Tổng chi phí bé nhất F(q*)
- Số lần đặt hàng tỗi ưu n*
- Chu kỳ dự trữ, tiêu thụ t*
- Điểm đặt hàng tối ưu B*
* Đoạn chương trình mô phỏng thuật toán bằng ngôn ngữ VB
Private Sub Command1_Click()
Dim n As Currency
Dim t1 As Currency
Dim b As Currency
Dim qu As Currency
Dim i As Integer
Dim A As Currency
Dim T As Currency
Dim F As Currency
Dim Q1 As Currency
Dim I1 As Currency
Dim Q(100) As Currency
Dim Fs(100) As Currency
Dim Fq(100) As Currency
Dim k As Boolean
If IsNumeric(txtT) And IsNumeric(txtQ) And IsNumeric(txtD) And IsNumeric(txts) And
IsNumeric(txtI) And IsNumeric(txts) And IsNumeric(txtD) And IsNumeric(txtA) And
IsNumeric(txtC) Then
T = CCur((txtT) / 365)
Q1 = CCur(txtQ)
A = CCur(txtA)
I1 = CCur(txtI)
For i = 1 To CInt(txtD)
Q(i) = Sqr(2 * A * Q1 / (I1 * c(i)))
Fq(i) = Sqr(2 * A * Q1 * I1 * c(i)) + c(i) * Q1
Next
i = CInt(txtD)
If Q(i) >= s(i - 1) Then
qu = Q(CInt(txtD))
F = Fq(CInt(txtD))
Else
Do
i = i - 1
If Q(i) < s(i) And Q(i) > s(i - 1) Then
k = True
End If
Loop While i > 1 And k = False
Fs(i) = A * Q1 / s(i) + (I1 * c(i + 1) * s(i)) / 2 + c(i + 1) * Q1
If Fq(i) < Fs(i) Then
F = Fq(i)
qu = Q(i)
Else
F = Fs(i)
qu = s(i)
End If
End If
n = Q1 / qu
t1 = 1 / n
b = Q1 * (T - t1 * Int(T / t1))
txtkq = "Lượng hàng đặt mỗi lần là q=" & CStr(qu) & vbNewLine & "Tổng chi phí
bé nhất F(q*)=" & CStr(F) & vbNewLine & "Thời gian 1 chu kỳ t*=" & CStr(CInt(t1 *
365)) & " (ngày)" & vbNewLine & "Số chu kỳ trong một năm n*=" & CStr(n) &
vbNewLine & "Điểm đặt hàng B*=" & CStr(b)
Else
MsgBox ("Dư liệu nhập sai hãy nhập lại")
End If
End Sub
3.4.5 Thí dụ minh hoạ
Một công ty kinh doanh một loại bóng điện, tổng lượng hàng có khả năng tiêu thụ
là 10000 thùng/năm. Chi phí cho 1 lần đặt mua là 20$; hệ số chi phí bảo quản là 10%,
cường độ bán đều đặn. Thời gian nhập kho không đáng kể. Nếu mỗi lần đặt mua từ 2000
thùng trở lên thì giá 1 thùng là 120$, ngược lại giá 1 thùng là 120,5$. Xác định lượng
hàng mua mỗi lần sao cho tổng chi phí nhỏ nhất; tính thời gian 1 chu kỳ dự trữ và tiêu
thụ, tính điểm đặt hàng tương ứng.