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

我们来计算成本

计算变量

  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种情况,

所以有

然后我们要对每一种情况进行分析

因此我们利用枚举的方法进行编写代码

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

posted @   m0yu  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示