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

m0yu發表於2024-11-03

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

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

樣本量計算

根據置信空間的計算公式,

逆累積分佈函式(ICDF):

  • 逆累積分佈函式(ICDF)是從累積分佈函式的值反推出對應的Z分數。
  • 在MATLAB中,norminv 函式就是計算標準正態分佈的逆累積分佈函式的值

我們透過這個公式來得到

我們可以得到

對於95%置信水平,我們能得到Z=1.96

對於90%置信水平,我們能得到Z=1.645

接下來我們可以根據兩種情況來判斷,

第一種:

在95%置信水平下,當p1>p0=10%時,拒收這批零配件, 當樣本檢測到的次品率顯著高於 標稱值時拒收

第二種:

在90%置信水平下,當p2<p0=10%時,接收這批零配件,當次品率在一個合理的範圍內,接收這批零配件。

因此我們可以計算樣本量的值,

利用兩個臨界值的Z,求得95%和90%置信程度下的 最小樣本量

但是還是有一個問題那就是,我們讓樣本足夠小,但是接受率我們沒有進行限定,因此我們還要討論接受率p和樣本量n的關係

p值在統計假設檢驗中起著核心作用。它提供了關於樣本資料與假設之間一致性的度量。具體來說,p 幫助我們判斷在給定的零假設(H0)下,觀察到的資料(或更極端的資料)發生的機率有多大。

然後我們去找到關於p 和 n 的關係圖然後得到

問題二

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

思路

企業要在生產過程中做出決策,然後找到最小的總成本數,然後根據零配件,成品,不合格成品的選擇進行動態規劃,找到最優解進行最佳化。

模型設計

此題的關鍵就是考慮狀態轉移方程,動態規劃的思路

為了使模型更加清晰,我們可以將問題劃為三個階段

第一階段:零配件採購和檢測

第二階段:成本的裝配和檢測

第三階段:不合格成品的調換和拆解

我們來利用這三個階段進行動態規劃模型的建立

動態規劃模型分析

  1. 問題定義給定一系列的成本和機率引數,我們需要決定在每個階段應該採取的最佳行動,從而最大化總收益或最小化總成本。

定義自變數

n:批次大小(生產的產品數量)。
p_1:零配件1的次品率。
p_2:零配件2的次品率。
fp:成品的次品率。
cg1:零配件1的採購單價。
cg2:零配件2的採購單價。
jc1:零配件1的檢測成本。
jc2:零配件2的檢測成本。
zp:成品的裝配成本。
cjc:成品的檢測成本。
dh:成品的調換損失。
cj:不合格成品的拆解費用。
s:成品的市場售價。

2.狀態表示

第一階段:零配件採購和檢測

狀態表示 (a1,a2)

a1表示是否檢測零配件1,a2表示是否檢測零配件2 (1表示檢測,0表示不檢測)

第二階段:成本的裝配和檢測

狀態表示 a3

a3表示是否檢測成品(1表示檢測,0表示不檢測)

第三階段:不合格成品的調換和拆解

狀態表示 a4

a4表示是否拆解不合格產品(1表示拆解,0表示不拆解)

3.轉移方程

第三階段:不合格成品的調換和拆解

這種分兩種情況

第一n種:拆解不合格成品

那麼得到a4=1

則狀態轉移方程可得到

Y(3,1)=−cj⋅n1−(zp+cjc)⋅n1

第二種:不拆解不合格成品

由於 a4=0

則得到

Y(3,0)=0

第二階段:成本的裝配和檢測

這個也是分兩種情況

第一種:不檢測成品

那麼得到a3=0

不檢測成品狀態轉移方程為

Y(2,0)=−fp⋅dh⋅𝑛1+(1−fp)⋅s⋅𝑛1+Y(3,a4)

第二種:檢測成品

那麼得到a4=0

檢測成品的狀態轉移方程

Y(2,1)=−cjc⋅n1+(1−fp)⋅s⋅n1+Y(3,a4)

第一階段:零配件採購和檢測

分四種情況

第一種:檢測零件一檢測零件二

那麼a1=1,a2=1

那麼狀態轉移方程

𝑌(1,1,1)=−(jc1+cg1+jc2+cg2)⋅𝑛1+𝑌(2,a3)Y(1,1,1)=−(jc1+cg1+jc2+cg2)⋅n1+Y(2,a3)

第二種:檢測零件一,不檢測零件二

那麼a1=1,a2=0

狀態轉移方程

Y(1,1,0)=−(cg1+jc2+cg2+(p_1+p_2)⋅n1)+Y(2,a3)

第三種:不檢測零件一,檢測零件二

那麼a1=0,a2=1

狀態轉移方程

𝑌(1,0,1)=−(cg1+cg2+jc2+(p_1+p_2)⋅𝑛)+𝑌(2,a3)Y(1,0,1)=−(cg1+cg2+jc2+(p_1+p_2)⋅n)+Y(2,a3)

第四種:不檢測零件一,不檢測零件二

那麼a1=0,a2=0

狀態轉移方程

Y(1,0,0)=−(cg1+cg2+(p_1+p_2)⋅n1)+Y(2,a3)

步驟

計算階段三-->階段二-->階段一-->最優解

程式碼如下

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑體顯示中文
p_1 = [0.1,0.2,0.1,0.2,0.1,0.05] # 零配件1的次品率
p_2 = [0.1,0.2,0.1,0.2,0.2,0.05] # 零配件2的次品率
fp = [0.1,0.2,0.1,0.2,0.1,0.05] # 成品的次品率

cg1 = [4,4,4,4,4,4] # 零配件1的採購單價
cg2 = [18,18,18,18,18,18] # 零配件2的採購單價
jc1 = [2,2,2,1,8,2] # 零配件1的檢測成本
jc2 = [3,3,3,1,1,3] # 零配件2的檢測成本

zp = [6,6,6,6,6,6] # 成品的裝配成本
cjc =[3,3,3,2,2,3] # 成品的檢測成本
dh= [6,6,30,30,10,10] # 成品的調換損失
cj = [5,5,5,5,5,40] # 不合格成品的拆解費用
colors = ['r', 'g', 'b', 'c', 'm', 'y']
s = 56 # 成品的市場售價
# 初始化DP表和決策路徑表
dp = {}
decision_path = {}
dic={}
# 階段3:不合格成品拆解與市場流轉決策
def calculate_jd_3(n,p_1,p_2,fp,cg1,cg2,jc1,jc2,zp,cjc,dh,cj,s):
# 不拆解不合格成品
dp[(3, 0)] = -fp * (zp+ cjc+ cg1 + cg2) * n
decision_path[(3, 0)] = "不拆解不合格成品"

# 拆解不合格成品
dp[(3, 1)] = -cj * n # 注意這裡需要減去拆解費用,後續計算階段1的收益
decision_path[(3, 1)] = "拆解不合格成品"

# 階段2:成品裝配和檢測決策
def calculate_jd_2(n,p_1,p_2,fp,cg1,cg2,jc1,jc2,zp,cjc,dh,cj,s):
# 不檢測成品
dp[(2, 0)] = -fp * dh* n + (1 - fp) * s * n + dp[(3, 0)]
decision_path[(2, 0)] = "不檢測成品"

# 檢測成品
dp[(2, 1)] = -cjc * n + (1 - fp) * s * n + dp[(3, 1)]
decision_path[(2, 1)] = "檢測成品"

# 階段1:零配件採購和檢測決策
def calculate_jd_1(n,p_1,p_2,fp,cg1,cg2,jc1,jc2,zp,cjc,dh,cj,s):
# 檢測零配件1和零配件2
dp[(1, 1, 1)] = -(jc1 * n + cg1 * n + jc2 * n + cg2 * n) + dp[(2, 1)]
decision_path[(1, 1, 1)] = "檢測零配件1和零配件2"

# 檢測零配件1,不檢測零配件2
dp[(1, 1, 0)] = -(jc1 * n + cg1 * n + cg2 * n + p_2 *dh* n) + dp[(2, 1)]
decision_path[(1, 1, 0)] = "檢測零配件1,不檢測零配件2"

# 不檢測零配件1,檢測零配件2
dp[(1, 0, 1)] = -(cg1 * n + jc2 * n + cg2 * n + p_1 * dh * n) + dp[(2, 1)]
decision_path[(1, 0, 1)] = "不檢測零配件1,檢測零配件2"

# 不檢測零配件1和零配件2
dp[(1, 0, 0)] = -(cg1 * n + cg2 * n + p_1 * dh * n + p_2 * dh * n) + dp[(2, 1)]
decision_path[(1, 0, 0)] = "不檢測零配件1和零配件2"
def calculate_n_money(n,p_1,p_2,fp,cg1,cg2,jc1,jc2,zp,cjc,dh,cj,s,j):
calculate_jd_3(n,p_1,p_2,fp,cg1,cg2,jc1,jc2,zp,cjc,dh,cj,s); # 計算階段3
calculate_jd_2(n,p_1,p_2,fp,cg1,cg2,jc1,jc2,zp,cjc,dh,cj,s); # 計算階段2
calculate_jd_1(n,p_1,p_2,fp,cg1,cg2,jc1,jc2,zp,cjc,dh,cj,s); # 計算階段1
# 找到最優的決策和路徑
optimal_value = max(dp.values()) # 最優總收益
optimal_state = max(dp, key=dp.get) # 最優狀態

# 輸出最優結果和對應的決策路徑
print("最優總收益和成本:", optimal_value)
print("最優策略路徑:")

# 回溯決策路徑
# if len(optimal_state) == 3:
# 從階段1開
calculate_1_state = max(dp.keys(), key=lambda k: dp[k] if k[0] == 1 else float('-inf'))
print(f"階段1:{decision_path[calculate_1_state]}")
calculate_2_state = max(dp.keys(), key=lambda k: dp[k] if k[0] == 2 else float('-inf'))
print(f"階段2:{decision_path[calculate_2_state]}")
calculate_3_state = max(dp.keys(), key=lambda k: dp[k] if k[0] == 0 else float('-inf'))
print(f"階段3:{decision_path[calculate_3_state]}")
dic[i]=optimal_value#將這種情況對應的最優策略的最大利潤

for j in range(0,6,1):
# 初始化DP表和決策路徑表
dp = {}
decision_path = {}
dic={}
for i in range(1,100,1):
calculate_n_money(i,p_1[j],p_2[j],fp[j],cg1[j],cg2[j],jc1[j],jc2[j],zp[j],cjc[j],dh[j],cj[j],s,j)
keys=dic.keys()
values=dic.values()
plt.bar(keys, values,color=colors[j])

plt.xlabel('情況'+str(j+1))
plt.ylabel('利潤')
plt.title('情況'+str(j+1)+"與樣本量的關係圖")
plt.show()
# plt.figure() # 建立一個新的圖形視窗

相關文章