2024數模b題-問題三思路構建

m0yu發表於2024-11-03

2024數模b題-問題三思路構建

問題三背景

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 道工序的不合格成品進行拆解。

由於零配件不合格的會被丟棄,那麼沒有被丟棄的零配件次品率

2024數模b題-問題三思路構建

且P次品率a 值是持續變化的

得到P

2024數模b題-問題三思路構建

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

我們來計算成本

2024數模b題-問題三思路構建

2024數模b題-問題三思路構建

2024數模b題-問題三思路構建

2024數模b題-問題三思路構建

2024數模b題-問題三思路構建

計算變數

  1. Pqr:
    1. 零件的合格率,Pqr[i] 表示第 i 個零件的合格率,等於 1 - P次品率i[i]。
  1. Ppc:
    1. 零件的單價成本,Ppc[i] 表示第 i 個零件的採購成本。
  1. Ptc:
    1. 零件的檢測成本,Ptc[i] 表示第 i 個零件的檢測成本。
  1. Qh1:
    1. 第一個半成品的合格率,等於前三個零件合格率的乘積。
  1. Qh2:
    1. 第二個半成品的合格率,等於中間三個零件合格率的乘積。
  1. Qh3:
    1. 第三個半成品的合格率,等於最後兩個零件合格率的乘積。
  1. pqr:
    1. 成品的合格率,等於三個半成品合格率的乘積,然後根據是否檢測成品進行調整。
  1. Hac:
    1. 半成品裝配成本,等於 N * C裝成a1。
  1. Ac:
    1. 總裝配成本,等於 N * C裝成a2。
  1. Ftc:
    1. 成品檢測成本,如果檢測成品則為 N * C檢測a2,否則為 0。
  1. Rc:
    1. 更換費用,等於 (1 - pqr) * N * C2。
  1. Sc:
    1. 廢棄成本,如果拆解不合格成品,則為 (1 - pqr) * N * C1。
  1. Sr:
    1. 廢棄收益,如果拆解不合格成品,則為 (1 - pqr) * N * 0.6 * C3。
  1. Tc:
    1. 總成本,等於所有單項成本之和。

則可以計算總成本

E總成本=E零配件成本+E裝配成本+E檢測成本+E拆解成本+E檢測成本+E調換成本

根據以上公式,我們可以得到

以下是我們要根據以下模型來計算決策思路

由於零配件有8個,每個零件有2種情況,半成品有3個,每種也有2種情況,成品1個,2種情況,

所以有

2024數模b題-問題三思路構建

然後我們要對每一種情況進行分析

因此我們利用列舉的方法進行編寫程式碼

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()

相關文章