2024數模b題-問題三思路構建
問題三背景
由於該生產過程有多道工序,每一個工序都有涉及多個零件裝配,企業需要自己決定是否檢測零配件和半成品成本,還要決定是否拆解不合格成品等,題目已經給了相應的表格,
這是顯而易見的決策模型
我們要透過每個零配件的次品率以及購買單價,檢測成本,以及半成品的次品率,裝配成本,檢測成本,拆解費用,然後將每個決策方案進行比較,找到成本最低,利潤最高的方案
決策思路
根據上述的思路,我們可以將其應用於生產過程的三個主要階段:
階段1:零件採購和檢測階段
- 對於每個零件,企業需要根據其次品率和檢測成本來決定是否進行檢測。如果零件的次品率較高且檢測成本較低,應該選擇檢測;反之,如果次品率低且檢測成本高,則可以選擇不檢測。
階段2:工序處理和半成品檢測階段
- 在每個工序後,企業需要決定是否對半成品進行檢測。同樣地,如果某道工序產生的半成品次品率較高且檢測成本較低,建議進行檢測,以保證進入下一道工序的半成品質量。
階段3:最終成品檢測和市場流轉決策階段
- 在最終成品階段,企業需要決定是否對成品進行檢測。如果成品的次品率較高,且檢測成本相對於可能產生的損失來說較低,那麼應當進行檢測。否則,如果檢測成本過高或次品率很低,則可以考慮不進行檢測。
建立數學模型
輸入變數
假設有 n 個零配件,其中第 i 個零件的相關成本和次品率如下:
- C單價i:第 i 個零件的購買單價。
- P次品率i:第 i 個零件的次品率。
- C檢成i:第 i 個零件的檢測成本。
- ni:第 i 個零件的數量。
同時,有 m 道工序,每道工序的引數如下:
- P次品率a:第 a 道工序的次品率。
- C裝成a1:第 a 道工序的半成品裝配成本。
- C裝成a2:第 a 道工序的總裝配成本。
- C檢測a1:第 a 道工序的半成品檢測成本。
- C檢測a2:第 a 道工序的成品檢測成本。
- na:第 a 道工序生產出來的成品數量。
其他相關成本如下:
- C拆解i:對不合格零件拆解的成本。
- C1:拆解費用。
- C2:調換費用。
- C3:市場售價。
決策變數
我們需要確定的決策變數如下:
- Si:檢測決策,1 表示檢測,0 表示不檢測。
- Ra:是否對第 a 道工序的成品進行檢測。
- Ta:是否對第 a 道工序的不合格成品進行拆解。
由於零配件不合格的會被丟棄,那麼沒有被丟棄的零配件次品率
且P次品率a 值是持續變化的
得到P
P次品率i = [0.1] * 8
p次品率 = 0.1
C單價i = [2, 8, 12, 2, 8, 12, 8, 12]
C檢成i = [1, 1, 2, 1, 1, 2, 1, 2]
C檢測a2 = 6
C檢測a1 = [4, 4, 4]
C3 = 200
C2 = 40
C1 = 10
C裝成a2 = 8
C未 = 10
C裝成a1 = 8
我們來計算成本
計算變數
- Pqr:
- 零件的合格率,Pqr[i] 表示第 i 個零件的合格率,等於 1 - P次品率i[i]。
- Ppc:
- 零件的單價成本,Ppc[i] 表示第 i 個零件的採購成本。
- Ptc:
- 零件的檢測成本,Ptc[i] 表示第 i 個零件的檢測成本。
- Qh1:
- 第一個半成品的合格率,等於前三個零件合格率的乘積。
- Qh2:
- 第二個半成品的合格率,等於中間三個零件合格率的乘積。
- Qh3:
- 第三個半成品的合格率,等於最後兩個零件合格率的乘積。
- pqr:
- 成品的合格率,等於三個半成品合格率的乘積,然後根據是否檢測成品進行調整。
- Hac:
- 半成品裝配成本,等於 N * C裝成a1。
- Ac:
- 總裝配成本,等於 N * C裝成a2。
- Ftc:
- 成品檢測成本,如果檢測成品則為 N * C檢測a2,否則為 0。
- Rc:
- 更換費用,等於 (1 - pqr) * N * C2。
- Sc:
- 廢棄成本,如果拆解不合格成品,則為 (1 - pqr) * N * C1。
- Sr:
- 廢棄收益,如果拆解不合格成品,則為 (1 - pqr) * N * 0.6 * C3。
- Tc:
- 總成本,等於所有單項成本之和。
則可以計算總成本
E總成本=E零配件成本+E裝配成本+E檢測成本+E拆解成本+E檢測成本+E調換成本
根據以上公式,我們可以得到
以下是我們要根據以下模型來計算決策思路
由於零配件有8個,每個零件有2種情況,半成品有3個,每種也有2種情況,成品1個,2種情況,
所以有
然後我們要對每一種情況進行分析
因此我們利用列舉的方法進行編寫程式碼
import numpy as np
import matplotlib.pyplot as plt
# 設定支援中文的字型
plt.rcParams['font.sans-serif'] = ['SimHei'] # SimHei 是常用的中文字型
# 引數設定
N = 1000
P次品率i = [0.1] * 8
p次品率 = 0.1
C單價i = [2, 8, 12, 2, 8, 12, 8, 12]
C檢成i = [1, 1, 2, 1, 1, 2, 1, 2]
C檢測a2 = 6
C檢測a1 = [4, 4, 4]
C3 = 200 # 這裡假定C3為成品的市場售價
C2 = 40
C1 = 10
C裝成a2 = 8
C未 = 10
C裝成a1 = 8
# 計算所有可能的策略組合
n = 13
num_combinations = 2**n
Bm = np.array([list(map(int, list(np.binary_repr(i, width=n)))) for i in range(num_combinations)])
costs = np.zeros(num_combinations)
# 定義生產成本計算函式
def PC3(N, P次品率i, p次品率, C單價i, C檢成i, C檢測a1, C檢測a2, C3, C2, C1, C裝成a2, C未, C裝成a1, Dp, Dh, Df, D):
Pqr = np.zeros(8) # 零件的合格率
Ppc = np.zeros(8) # 零件的單價
Ptc = np.zeros(8) # 零件的檢測成本
Pq = N # 初始化 Pq
for i in range(8):
if Dp[i]: # 零件決策
Pqr[i] = 1 - P次品率i[i]
Ptc[i] = N * C檢成i[i]
else:
Pqr[i] = 1 - P次品率i[i]
part_quantity = N / Pqr[i]
Ptc[i] = 0
Pq = part_quantity # 更新 Pq
Ppc[i] = Pq * C單價i[i]
Qh1 = np.prod(Pqr[0:3]) # 第一個半成品合格率
Qh2 = np.prod(Pqr[3:6]) # 第二個半成品合格率
Qh3 = np.prod(Pqr[6:8]) # 第三個半成品合格率
Htc = np.zeros(3)
for j in range(3):
if Dh[j]:
Htc[j] = N * C檢測a1[j] # 半成品檢測成本
pqr = Qh1 * Qh2 * Qh3 # 成品的合格率為三個半成品合格率的乘積
pqr *= (1 - p次品率)
Hac = N * C裝成a1 # 半成品的裝配成本
Ac = N * C裝成a2 # 總裝配成本
Ftc = N * C檢測a2 if Df else 0 # 成品檢測成本
Rc = (1 - pqr) * N * C2 # 更換物品的成本
Sc = (1 - pqr) * N * C1 # 廢棄成本
Tc = np.sum(Ppc) + np.sum(Ptc) + \
Hac + np.sum(Htc) + \
Ac + Ftc + Rc + \
Sc # 刪除了廢棄收益部分
return Tc # 總成本
# 遍歷所有可能的策略組合
min_cost = float('inf')
min_index = -1
for i in range(num_combinations):
Dp = Bm[i, :8]
Dh = Bm[i, 8:11]
Df = Bm[i, 11]
D = Bm[i, 12]
Tc = PC3(N, P次品率i, p次品率, C單價i, C檢成i, C檢測a1, C檢測a2, C3, C2, C1, C裝成a2, C未, C裝成a1, Dp, Dh, Df, D)
costs[i] = Tc
if Tc < min_cost:
min_cost = Tc
min_index = i
# 輸出最小成本及其對應的策略組合
print(f'最小成本: {min_cost:.2f}')
print(f'對應策略編號: {min_index}')
print(f'決策變數: {Bm[min_index]}')
# 繪製圖形
plt.figure(figsize=(14, 7))
plt.bar(range(num_combinations), costs, color='skyblue')
plt.xlabel('策略編號')
plt.ylabel('總成本')
plt.title('每種策略的總成本')
plt.show()