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 道工序的不合格成品进行拆解。
由于零配件不合格的会被丢弃,那么没有被丢弃的零配件次品率
且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()