当前位置: 首页 > news >正文

【全网最全】2024年数学建模国赛B题31页完整建模过程+25页成品论文+matlab/python代码等(后续会更新

您的点赞收藏是我继续更新的最大动力!

一定要点击如下的卡片,那是获取资料的入口!

【全网最全】2024年数学建模国赛B题31页完整建模过程+25页成品论文+matlab/python代码等(后续会更新「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」👋👋更新修改版的matlab代码(后续会更新) 👋�icon-default.png?t=O83Ahttps://mbd.pub/o/bread/Zpqbk59w

进一步更新了各题目完整代码可视化:

2024全国大学生数学建模竞赛(国赛)B题决策优化+鲁棒模型

摘要

本研究围绕企业生产过程中如何优化决策,针对次品率的不确定性进行了深入的分析和建模。我们首先在问题1中设计了一种基于抽样检测的次品率估计方法,旨在帮助企业在不同的信度水平下做出接收或拒收零配件的决策。接着,在问题2和问题3中,我们构建了一个优化模型,针对企业生产过程中的各个阶段(零配件检测、半成品检测、成品检测及不合格品处理)进行了决策优化,以最小化生产成本。问题4进一步将前述问题的次品率设定为基于抽样检测方法得出的估计值,并引入置信区间,使用鲁棒优化方法,考虑次品率的不确定性对生产过程决策的影响。通过优化模型的构建和Python实现,我们提出了一系列创新性和前沿性的决策方案,并通过可视化分析展示了不同情况下的最优决策方案。这些方案为企业在面临复杂生产环境和质量控制要求时,如何平衡成本和质量提供了有力的理论支持和实用工具。

关键词:生产过程优化、次品率、抽样检测、鲁棒优化、决策模型、成本最小化。

1. 问题描述的核心要素

  • 两种零配件(零配件 1 和零配件 2):需要考虑两种零配件的采购数量、合格率和成本。
  • 成品的合格条件
  • 如果任何一个零配件不合格,则成品不合格。
  • 即使两个零配件均合格,成品也可能不合格。这意味着成品合格与否不仅取决于零配件,还可能取决于其他因素(如装配工艺)。
  • 不合格品的处理
  • 不合格成品可以选择报废或拆解。
  • 拆解不会对零配件造成损坏,但需要额外的拆解费用。

变量定义和符号说明

以下是本文中涉及的主要变量和符号的定义和说明:

Ni :第 i 个零配件的数量。 单位:件 范围: i=1,2,…,8

q^i :第 i 个零配件的次品率,通过抽样检测估计得到。

单位:百分比(%) 范围: i=1,2,…,8

p^j :第 j 个半成品的次品率,通过抽样检测估计得到。

单位:百分比(%) 适用范围: j=1,2,3

q^f :成品的次品率,通过抽样检测估计得到。 单位:百分比(%)

Ci :第 i 个零配件的采购单价。 单位:元/件 适用范围: i=1,2,…,8

Di :第 i 个零配件的检测成本。 单位:元/件 适用范围: i=1,2,…,8

pj :第 j 个半成品的次品率。 单位:百分比(%) 适用范围: j=1,2,3

Dhj :第 j 个半成品的检测成本。 单位:元/件 适用范围: j=1,2,3

qf :成品的次品率。 单位:百分比(%)

Cassem :成品的装配成本。 单位:元/件

Df :成品的检测成本。 单位:元/件

Cscrap :报废费用。 单位:元/件

Cdis :拆解费用。 单位:元/件

Cswap :调换损失。 单位:元/件

Cmarket :成品的市场售价。 单位:元/件

yi :第 i 个零配件的检测决策变量。 取值范围: {0,1} 说明: 1 表示检测, 0 表示不检测

zj :第 j 个半成品的检测决策变量。 取值范围: {0,1} 说明: 1 表示检测, 0 表示不检测

zf :成品的检测决策变量。 取值范围: {0,1} 说明: 1 表示检测, 0 表示不检测

w :不合格品拆解的决策变量。 取值范围: {0,1} 说明: 1 表示进行拆解, 0 表示直接报废

Ctotal :总成本,包括采购成本、检测成本、装配成本、报废成本、拆解成本和调换损失等。 单位:元

置信区间:估计次品率的统计区间,用于表示次品率估计的上下限,反映不确定性。

鲁棒优化(Robust Optimization):一种优化方法,考虑参数不确定性(如次品率的置信区间),在最坏情况下优化目标函数。

以上符号和变量在本文中用于建立和优化生产过程中的各类决策模型,目标是通过优化生产过程的各阶段决策来最小化总成本。

2. 可能的考点分析

  • 质量控制模型:如何定义零配件和成品的合格率?如何估计和优化生产过程中不合格品的数量?
  • 成本优化模型:如何最小化生产过程中的成本?这里需要考虑零配件采购成本、拆解费用和报废损失。
  • 概率统计分析:成品的合格与否是基于零配件的合格率和其他潜在因素的,这可能涉及到概率模型(如条件概率)。
  • 决策模型:在面对不合格品时,是选择报废还是拆解,这需要建立一个决策模型来确定在什么情况下选择哪种处理方式,以最小化成本。
  • 动态规划或优化算法:如果考虑生产过程中多个阶段的决策(如分批生产、实时质量检测与调整等),可以使用动态规划或其他优化算法来求解。

3. 解决方案的初步思路

  1. 定义变量

x1,x2 :零配件1和零配件2的采购数量

p1,p2 :零配件1和零配件2的合格率

C1,C2 :零配件1和零配件2的采购成本

Cdis :拆解费用

Cscrap :报废费用

q :两个零配件均合格时,成品合格的概率

  1. 构建目标函数
  2. 目标函数应当考虑采购成本、拆解费用和报废费用。可以表示为: 总成本拆解费用报废费用总成本=C1⋅x1+C2⋅x2+拆解费用+报废费用
  3. 约束条件
  4. 根据成品合格与否的条件,建立相关约束条件。例如,不合格成品的数量与零配件的合格率和成品合格概率有关。
  5. 优化模型
  6. 可以使用线性规划(如果问题是线性的)或非线性规划(如果问题是非线性的)来求解成本最小化问题。

在进一步确定和构建模型之前,需要明确以下信息: - 零配件1和零配件2的采购成本和合格率。 - 成品合格与否的具体条件(特别是两个零配件均合格时,成品不合格的概率)。

问题 1:抽样检测方案设计

  1. 问题描述
  2. 企业需要决定是否接收供应商的零配件,要求在抽样检测方案中,检测次数尽可能少。
  3. 根据两种不同的信度(95% 和 90%),分别决定是否接收零配件。
  4. 建模思路
  5. 统计检验模型:可以使用二项分布模型或超几何分布模型来模拟抽样检测的过程。假设零配件的次品率为 p ,我们需要设计一个检测方案,使得在给定的信度下,能够判断次品率是否超过或不超过标称值(10%)。
  6. 创新性思路:利用贝叶斯方法结合抽样检测数据,逐步更新对次品率的估计,减少样本量。同时,采用自适应抽样方法,根据前期检测结果动态调整样本量,进一步优化检测成本。

问题 2:生产过程各阶段的决策问题

  1. 问题描述
  2. 企业在生产的不同阶段(零配件、装配、成品)需要作出检测与处理决策,决定是否检测、拆解、报废以及如何处理不合格品。
  3. 要求根据不同的情况(零配件次品率、购买单价、检测成本等)制定决策方案。
  4. 建模思路
  5. 多阶段决策模型:使用动态规划模型(Dynamic Programming)来处理多阶段的决策过程。每个阶段(零配件检测、装配检测、成品检测)都有不同的决策选择(检测、拆解、报废),目标是最小化总成本。
  6. 成本-收益分析模型:对每个决策进行成本和预期收益分析,结合概率模型计算不同决策的期望成本和收益。
  7. 创新性思路:引入强化学习模型(如Q-learning),模拟在生产过程中的长期学习和决策,优化每个阶段的策略选择。

问题 3:多工序多零配件的生产过程决策

  1. 问题描述
  2. 企业有多个工序和多个零配件,已知各个零配件、半成品和成品的次品率,需要对生产过程进行全局优化。
  3. 建模思路
  4. 网络流模型:将整个生产过程建模为一个有向图(Directed Graph),节点代表零配件、半成品和成品,边代表不同的工序和装配过程。通过网络流算法(如最小费用最大流)优化整个生产过程的成本和次品率。
  5. 多目标优化模型:考虑到生产成本、次品率、市场需求等多个目标,使用多目标优化算法(如遗传算法、粒子群优化算法)来优化生产策略。
  6. 创新性思路:在模型中引入不确定性因素(如市场波动、供应商质量变化等),通过鲁棒优化(Robust Optimization)来设计具有高抗干扰能力的生产方案。

问题 4:基于抽样检测方法的重新决策

  1. 问题描述
  2. 假设问题2和问题3中的零配件、半成品和成品次品率均是通过抽样检测方法得到的,需要重新完成问题2和问题3。
  3. 建模思路
  4. 贝叶斯更新模型:在进行抽样检测后,根据检测结果不断更新对次品率的估计。结合问题1的抽样检测模型,调整问题2和问题3的决策模型。
  5. 序贯决策模型:利用序贯检验方法(Sequential Testing),在检测过程中实时更新决策方案,减少不必要的检测次数和成本。
  6. 创新性思路:将贝叶斯推断与马尔可夫决策过程(MDP)相结合,动态调整生产策略,优化生产过程中的每一个决策。

问题1:抽样检测方案设计

1.1 问题分析

目标是设计一个抽样检测方案,使得在最小的检测次数下,以一定的置信度判断零配件的次品率是否超过标称值10%。我们需要考虑两种情形:

1. 在95%的信度下认定次品率超过10%,则拒收该批零配件。

2. 在90%的信度下认定次品率不超过10%,则接收该批零配件。

1.2 数学模型

1.2.1 假设条件

  • 次品率:标称值为10%,即 p_0 = 0.10 。
  • 样本大小:设样本大小为 n 。
  • 次品数:设在样本中检测出的次品数为 x 。

1.2.2 检验方法

利用二项分布进行假设检验。

假设次品率为 p ,则次品数 x 服从二项分布: x∼Binomial(n,p) 我们需要进行两类假设检验:

  • 对于情况 (1)(拒收):检验次品率是否大于 10 ,即 对H0:p≤0.10对H1:p>0.10 。
  • 对于情况 (2)(接收):检验次品率是否小于等于 10

使用二项分布的累积分布函数(CDF)计算对应的检验统计量:

P(X≤k|p0)=∑i=0k(ni)p0i(1−p0)n−i 其中 k 是可以接受的最大次品数。

根据不同的置信度,确定临界值 k ,使得: 或P(X≤k|p0)=0.95或0.90

1.2.4 样本量的确定

需要通过计算来确定最小的样本量 n ,使得在给定的置信水平下,能够有效地拒收或接收零配件。

1.3 Python代码实现及可视化

以下是使用Python进行计算和可视化的实现代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom# 假设次品率
p0 = 0.10# 设定信度
confidence_level_1 = 0.95  # 拒收
confidence_level_2 = 0.90  # 接收# 样本量范围
n_range = np.arange(10, 101)# 计算对应的k值和拒收/接收的概率
k_values_1 = []
k_values_2 = []
for n in n_range:# 拒收情形的k值# 相关代码k_values_1.append(k1)# 接收情形的k值# 相关代码k_values_2.append(k2)# 绘制k值随样本量变化的图
plt.figure(figsize=(12, 6))
plt.plot(n_range, k_values_1, label='95% confidence level (Refuse)', marker='o')
plt.plot(n_range, k_values_2, label='90% confidence level (Accept)', marker='x')
plt.xlabel('Sample Size (n)')
plt.ylabel('Critical Value (k)')
plt.title('Critical Value vs. Sample Size for Different Confidence Levels')
plt.legend()
plt.grid(True)
plt.show()

1.4 可视化结果分析

  • 图中显示了在不同样本量下,对于95%和90%信度的情况,拒收和接收零配件的临界值 k 如何变化。
  • 通过观察这些曲线,可以选择一个合适的样本量,使得在保证足够信度的前提下,检测次数最少。

问题2:生产过程的各阶段决策问题详细解题过程

2.1 问题分析

根据表1中提供的情况,企业需要在生产过程中各个阶段做出决策以最小化总成本。决策包括:

  1. 零配件检测决策
  2. 是否对零配件1和/或零配件2进行检测。
  3. 如果检测,检测出的不合格零配件将被丢弃。
  4. 成品检测决策
  5. 是否对装配好的每一件成品进行检测。
  6. 如果检测,只有检测合格的成品才能进入市场。
  7. 不合格成品处理决策
  8. 对检测出的不合格成品是否进行拆解。
  9. 如果拆解,拆解后的零配件会重复零配件检测步骤。
  10. 如果不拆解,直接将不合格成品丢弃。
  11. 用户调换决策
  12. 对用户退回的不合格品进行无条件调换,产生调换损失。

2.2 数学模型

我们需要最小化总成本,综合考虑采购成本、检测成本、装配成本、拆解费用、调换损失等。

2.2.1 定义变量

N1,N2 :零配件1和零配件2的采购数量

q1,q2 :零配件1和零配件2的次品率

C1,C2 :零配件1和零配件2的采购单价

D1,D2 :零配件1和零配件2的检测成本

qf :成品的次品率

Cassem :成品的装配成本

Df :成品的检测成本

Cscrap :报废费用

Cdis :拆解费用

Cswap :调换损失

Cmarket :成品的市场售价

2.2.2 成本计算公式

  1. 采购成本: Cpurchase=C1⋅N1+C2⋅N2
  2. 零配件检测成本: 相关公式Cdet parts=y1⋅D1⋅N1⋅(1−q1)+y2⋅[相关公式]
  3. 成品装配成本: 相关公式Cassem=Cassem⋅[相关公式]
  4. 成品检测成本: 相关公式Cdet finish=zf⋅Df⋅(1−qf)⋅[相关公式]
  5. 报废成本: 相关公式相关公式相关公式Cscrap=(1−w)⋅[相关公式]⋅[相关公式]⋅[相关公式]
  6. 拆解成本: 相关公式相关公式Cdis=w⋅[相关公式]⋅qf⋅min[相关公式]
  7. 调换损失: 相关公式Cswap=Cswap⋅qf⋅[相关公式]

2.2.3 优化目标

min Ctotal=Cpurchase+Cdet parts+Cassem+Cdet finish+Cscrap+Cdis+Cswap

2.2.4 约束条件

y1,y2,zf,w∈{0,1} :决策变量,表示是否检测或处理(0表示不做,1表示做)。

零配件和成品数量关系约束。

2.3 Python代码实现及可视化

以下是使用Python进行决策优化和可视化的实现代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import minimize# 输入数据
data = {'零配件1次品率': [0.1, 0.2, 0.1, 0.2, 0.1, 0.05],'零配件1采购单价': [4, 4, 4, 4, 4, 4],'零配件1检测成本': [2, 2, 2, 1, 8, 2],'零配件2次品率': [0.1, 0.2, 0.1, 0.2, 0.2, 0.05],'零配件2采购单价': [18, 18, 18, 18, 18, 18],'零配件2检测成本': [3, 3, 3, 1, 1, 3],'成品次品率': [0.1, 0.2, 0.1, 0.2, 0.1, 0.05],'成品装配成本': [6, 6, 6, 6, 6, 6],'成品检测成本': [3, 3, 30, 30, 10, 10],'市场售价': [56, 56, 56, 56, 56, 56],'调换损失': [6, 6, 30, 30, 10, 10],'拆解费用': [5, 5, 5, 5, 5, 40]
}df = pd.DataFrame(data)# 成本函数
def total_cost(decision_vars, row):y1, y2, z_f, w = decision_varsy1, y2, z_f, w = round(y1), round(y2), round(z_f), round(w)# 读取输入数据p1 = df.loc[row, '零配件1次品率']p2 = df.loc[row, '零配件2次品率']C1 = df.loc[row, '零配件1采购单价']C2 = df.loc[row, '零配件2采购单价']D1 = df.loc[row, '零配件1检测成本']D2 = df.loc[row, '零配件2检测成本']p_f = df.loc[row, '成品次品率']C_assem = df.loc[row, '成品装配成本']D_f = df.loc[row, '成品检测成本']C_scrap = df.loc[row, '调换损失']C_dis = df.loc[row, '拆解费用']C_swap = df.loc[row, '调换损失']C_market = df.loc[row, '市场售价']# 计算成品数量product_count = 1000 * (1 - p1) * 相关代码# 采购成本purchase_cost = C1 * 1000 + C2 * 1000# 零配件检测成本det_parts_cost = y1 * D1 * 1000 * 相关代码# 装配成本assembly_cost = C_assem * product_count# 成品检测成本det_finish_cost = z_f * 相关代码# 报废成本scrap_cost = (1 - w) * 相关代码# 拆解成本dis_cost = w * 相关代码# 调换损失swap_cost = 相关代码# 总成本# 相关代码# 优化过程
optimal_decisions = []for i in range(len(df)):# 相关代码print(f"Case {i+1}: Optimal Decisions -> y1 = {round(y1_opt)}, y2 = {round(y2_opt)}, z_f = {round(z_f_opt)}, w = {round(w_opt)}")print(f"Minimum Total Cost for Case {i+1}: {result.fun:.2f}\n")# 可视化
decision_matrix = np.array(optimal_decisions)plt.figure(figsize=(12, 6))
for i, label in enumerate(['检测零配件1', '检测零配件2', '检测成品', '拆解不合格品']):# 相关代码plt.xticks(range(1, 7))
plt.ylim(-0.1, 1.1)
plt.xlabel('Case Number')
plt.ylabel('Decision (0 = No, 1 = Yes)')
plt.title('Optimal Decisions Across Different Cases')
plt.legend()
plt.grid(True)
plt.show()

2.4 可视化结果分析

  • 图示解释:折线图展示了在不同情况下,每个决策变量(是否检测零配件1、检测零配件2、检测成品、拆解不合格品)的最优决策(0表示不做该决策,1表示做该决策)。
  • 结果解读:通过优化模型和计算,可以明确在生产过程中应采取的最优决策,以最小化整体生产成本。不同情形下的最优决策可能不同,具体取决于每种情况下的成本参数和次品率。

问题3:多工序多零配件的生产过程决策

3.1 问题分析

在问题3中,企业生产流程包含多个工序和零配件,具体来说是8个零配件通过两道工序组装成3个半成品,然后组装成最终成品。已知每个零配件、半成品和成品的次品率和成本,企业需要制定一个优化的生产过程决策方案,以最小化生产总成本。

决策需要考虑以下方面:

1. 零配件检测决策:是否检测零配件,检测的成本与次品率。

2. 半成品检测决策:是否检测半成品,检测的成本与次品率。

3. 成品检测决策:是否检测成品,检测的成本与次品率。

4. 不合格品的处理决策:是否对不合格品进行拆解或报废,以及对应的成本。

3.2 数学模型

3.2.1 定义变量

:第个零配件的数量,Ni:第i个零配件的数量,i=1,2,…,8

:第个零配件的次品率,qi:第i个零配件的次品率,i=1,2,…,8

:第个零配件的采购单价Ci:第i个零配件的采购单价

:第个零配件的检测成本Di:第i个零配件的检测成本

:第个半成品的次品率,pj:第j个半成品的次品率,j=1,2,3

:第个半成品的检测成本Dhj:第j个半成品的检测成本

:成品的次品率qf:成品的次品率

:成品的装配成本Cassem:成品的装配成本

:成品的检测成本Df:成品的检测成本

:报废费用Cscrap:报废费用

:拆解费用Cdis:拆解费用

:调换损失Cswap:调换损失

:成品的市场售价Cmarket:成品的市场售价

3.2.2 成本计算公式

  1. 零配件采购成本: Cpurchase=∑i=18Ci⋅Ni
  2. 零配件检测成本: 相关公式Cdet parts=∑i=18yi⋅Di⋅Ni⋅[相关公式]
  3. 半成品装配和检测成本: 相关公式相关公式相关公式Cdet half=∑j=13[相关公式]⋅[相关公式]⋅(1−pj)⋅[相关公式] 其中,N_{\text{half}} 为半成品数量,与零配件数量和装配次品率有关。
  4. 成品装配和检测成本: 相关公式相关公式Cassem det finish=[相关公式]⋅Df⋅(1−qf)⋅[相关公式] 其中,N_{\text{finish}} 为成品数量,与半成品数量和次品率有关。
  5. 报废成本: 相关公式相关公式Cscrap=(1−w)⋅[相关公式]⋅qf⋅[相关公式]
  6. 拆解成本: 相关公式Cdis=w⋅Cdis⋅qf⋅[相关公式]
  7. 调换损失: 相关公式相关公式Cswap=Cswap⋅[相关公式]⋅[相关公式]

3.2.3 优化目标

min Ctotal=Cpurchase+Cdet parts+Cdet half+Cassem det finish+Cscrap+Cdis+Cswap

3.2.4 约束条件

yi,zj,zf,w∈{0,1} :决策变量,表示是否检测或处理(0表示不做,1表示做)。

零配件、半成品和成品数量关系的约束。

3.3 Python代码实现及可视化

以下是使用Python进行决策优化和可视化的实现代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import minimize# 输入数据
data = {'零配件次品率': [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1],'采购单价': [2, 8, 12, 2, 8, 12, 8, 12],'检测成本': [1, 1, 2, 1, 1, 2, 1, 2],'半成品次品率': [0.1, 0.1, 0.1],'半成品检测成本': [4, 4, 4],'成品次品率': [0.1],'装配成本': [8],'成品检测成本': [6],'市场售价': [200],'调换损失': [40],'拆解费用': [10]
}df_parts = pd.DataFrame(data)# 成本函数
def total_cost(decision_vars, df_parts):y_vars = decision_vars[:8]  # 零配件的检测决策z_vars = decision_vars[8:11]  # 半成品的检测决策# 相关代码# 计算采购成本purchase_cost = np.sum(df_parts['采购单价'] * 1000)# 计算零配件检测成本det_parts_cost =  # 相关代码# 计算半成品检测成本half_product_count = 1000 * np.prod(1 - df_parts['零配件次品率'][:3])det_half_cost = np.sum(z_vars * df_parts['半成品检测成本'][:3] * half_product_count * (1 - df_parts['半成品次品率']))# 计算成品检测成本finish_product_count = half_product_count * (1 - df_parts['半成品次品率']).prod()det_finish_cost = z_f * df_parts['成品检测成本'][0] * finish_product_count * (1 - df_parts['成品次品率'][0])# 报废成本scrap_cost = (1 - w) * df_parts['调换损失'][0] * df_parts['成品次品率'][0] # 相关代码# 拆解成本dis_cost = w * df_parts['拆解费用'][0] * # 相关代码# 调换损失swap_cost = # 相关代码# 总成本# 相关代码# 优化目标
initial_guess = [0] * 13  # 初始猜测值
bounds = [(0, 1)] * 13  # 决策变量的取值范围
result = minimize(total_cost, initial_guess, args=(df_parts,), bounds=bounds, method='SLSQP')# 获取最优解
optimal_decisions = result.x
print("Optimal Decisions:")
print(f"零配件检测: {optimal_decisions[:8]}")
print(f"半成品检测: {optimal_decisions[8:11]}")
print(f"成品检测: {optimal_decisions[11]}")
print(f"拆解决策: {optimal_decisions[12]}")
print(f"Minimum Total Cost: {result.fun:.2f}")# 可视化
plt.figure(figsize=(10, 6))# 相关代码', '半成品1检测', '半成品2检测', '半成品3检测', '成品检测', '拆解不合格品']
plt.bar(decision_labels, optimal_decisions, color='skyblue')
plt.xticks(rotation=45)
plt.ylim(0, 1.1)
plt.ylabel('Decision (0 = No, 1 = Yes)')
plt.title('Optimal Decisions for Production Process')
plt.grid(axis='y')
plt.show()

3.4 可视化结果分析

  • 图示解释:条形图展示了在不同阶段(零配件检测、半成品检测、成品检测、拆解不合格品)的最优决策(0表示不做该决策,1表示做该决策)。
  • 结果解读:通过优化模型和计算,明确了在生产过程中应采取的最优决策,以最小化整体生产成本。不同零配件、半成品和成品的检测和处理决策是根据各自的次品率和成本优化的。

问题4:基于抽样检测的生产过程优化决策

4.1 问题分析

在问题4中,假设问题2和问题3中所有的零配件、半成品和成品的次品率均是通过抽样检测方法(如问题1中的方法)得出的。这意味着,我们在决策过程中,需要考虑抽样检测的不确定性,重新优化生产过程中的检测和处理决策。

问题4要求我们在重新评估这些次品率的基础上,重新设计生产过程的各阶段决策方案,以最小化生产总成本。由于抽样检测的次品率是基于样本数据估计的,这些次品率本身存在不确定性,我们需要考虑这种不确定性对决策的影响。

4.2 数学模型

4.2.1 假设条件

  • 抽样检测估计次品率:设零配件、半成品和成品的次品率分别为 \hat{q}_i、\hat{p}_j 和 \hat{q}_f,这些次品率是通过抽样检测方法估计得到的,具有一定的置信区间。
  • 置信区间:在一定置信水平下(例如95%),每个估计次品率都有其对应的置信区间。这些置信区间反映了次品率的潜在不确定性。

4.2.2 引入置信区间的优化目标

我们需要在决策模型中引入置信区间,考虑次品率的不确定性对总成本的影响。我们可以使用鲁棒优化方法,确保在最坏情况下的成本最低。

  1. 次品率的置信区间

对于零配件 i ,次品率的置信区间为 [q^iL,q^iU] 。

对于半成品 j ,次品率的置信区间为 [p^jL,p^jU] 。

对于成品,次品率的置信区间为 [q^fL,q^fU] 。

  1. 鲁棒成本函数: 我们定义一个鲁棒优化目标函数,在所有可能的次品率范围内(即次品率在其置信区间内变化时),最小化最大成本。

minmaxq^i∈[q^iL,q^iU],p^j∈[p^jL,p^jU],q^f∈[q^fL,q^fU]Ctotal

  1. 鲁棒优化问题: 目标是找到检测和处理的最优决策,以确保在最坏情况下(即次品率达到其置信区间的上限)总成本最低。

4.2.3 优化目标

min Ctotal=Cpurchase+Cdet parts+Cdet half+Cassem det finish+Cscrap+Cdis+Cswap

其中,各个成本计算公式与问题2和问题3相同,但次品率使用的是其置信区间内的最大值。

4.3 Python代码实现及可视化

以下是使用Python进行鲁棒优化的实现代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import minimize# 输入数据 - 抽样检测的置信区间
data = {'零配件次品率': [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1],'采购单价': [2, 8, 12, 2, 8, 12, 8, 12],'检测成本': [1, 1, 2, 1, 1, 2, 1, 2],'半成品次品率': [0.1, 0.1, 0.1],'半成品检测成本': [4, 4, 4],# 相关代码'市场售价': [200],'调换损失': [40],'拆解费用': [10]
}# 假设置信区间宽度为0.02
confidence_interval_width = 0.02# 构建DataFrame
df_parts = pd.DataFrame({# 相关代码})df_half = pd.DataFrame({'半成品次品率': [0.1, 0.1, 0.1],'半成品检测成本': [4, 4, 4]
})df_finish = pd.DataFrame({'成品次品率': [0.1],'装配成本': [8],'成品检测成本': [6],'市场售价': [200],'调换损失': [40],'拆解费用': [10]
})# 成本函数
def total_cost(decision_vars, worst_case=True):y_vars = decision_vars[:8]  # 零配件的检测决策z_vars = decision_vars[8:11]  # 半成品的检测决策z_f = decision_vars[11]  # 成品的检测决策w = decision_vars[12]  # 拆解决策# 根据worst_case选择次品率的上限或下限part_defects = df_parts['零配件次品率'] + (confidence_interval_width if worst_case else -confidence_interval_width)half_defects = df_half['半成品次品率'] + (confidence_interval_width if worst_case else -confidence_interval_width)finish_defect = df_finish['成品次品率'][0] + (confidence_interval_width if worst_case else -confidence_interval_width)# 计算采购成本purchase_cost = np.sum(df_parts['采购单价'] * 1000)# 计算零配件检测成本det_parts_cost = np.sum(y_vars * df_parts['检测成本'] * 1000 * (1 - part_defects))# 计算半成品检测成本half_product_count = 1000 * np.prod(1 - part_defects[:3])det_half_cost = np.sum(z_vars * df_half['半成品检测成本'] * half_product_count * (1 - half_defects))# 计算成品检测成本finish_product_count = 	# 相关代码det_finish_cost = 	# 相关代码# 报废成本scrap_cost = (1 - w) * df_finish['调换损失'][0] * finish_defect * finish_product_count# 拆解成本dis_cost =  	# 相关代码# 调换损失swap_cost =  	# 相关代码# 总成本total =  	# 相关代码return total# 鲁棒优化
initial_guess = [0] * 13
bounds = [(0, 1)] * 13# 求解最坏情况下的总成本最小化
result_worst = minimize(total_cost, initial_guess, args=(True,), bounds=bounds, method='SLSQP')
optimal_decisions_worst = result_worst.x# 求解最优情况下的总成本最小化(用于比较)
result_best = minimize(total_cost, initial_guess, args=(False,), bounds=bounds, method='SLSQP')
optimal_decisions_best = result_best.xprint("Worst Case Optimal Decisions:")
print(f"零配件检测: {optimal_decisions_worst[:8]}")
print(f"半成品检测: {optimal_decisions_worst[8:11]}")print(f"成品检测: {optimal_decisions_worst[11]}")
print(f"拆解决策: {optimal_decisions_worst[12]}")
print(f"Minimum Total Cost (Worst Case): {result_worst.fun:.2f}\n")print("Best Case Optimal Decisions:")
print(f"零配件检测: {optimal_decisions_best[:8]}")
print(f"半成品检测: {optimal_decisions_best[8:11]}")
print(f"成品检测: {optimal_decisions_best[11]}")
print(f"拆解决策: {optimal_decisions_best[12]}")
print(f"Minimum Total Cost (Best Case): {result_best.fun:.2f}")# 可视化结果比较
plt.figure(figsize=(10, 6))
decision_labels = ['零配件1检测', '零配件2检测', '零配件3检测', '零配件4检测', '零配件5检测', '零配件6检测', '零配件7检测', '零配件8检测', '半成品1检测', '半成品2检测', '半成品3检测', '成品检测', '拆解不合格品']# 最坏情况下的决策
plt.bar(np.arange(len(decision_labels))-0.15, optimal_decisions_worst, width=0.3, color='red', label='Worst Case')# 最优情况下的决策
plt.bar(np.arange(len(decision_labels))+0.15, optimal_decisions_best, width=0.3, color='green', label='Best Case')plt.xticks(np.arange(len(decision_labels)), decision_labels, rotation=45)
plt.ylim(0, 1.1)
plt.ylabel('Decision (0 = No, 1 = Yes)')
plt.title('Comparison of Optimal Decisions (Worst vs. Best Case)')
plt.legend()
plt.grid(axis='y')
plt.show()

4.4 可视化结果分析

  • 图示解释:条形图展示了最坏情况下和最优情况下的最优决策对比(0表示不做该决策,1表示做该决策)。红色条形表示最坏情况下的决策,绿色条形表示最优情况下的决策。
  • 结果解读:通过鲁棒优化,可以看到在最坏情况下(即所有次品率达到其置信区间的上限),系统做出了不同的决策,确保了在最不利情况下的成本最低。相比之下,最优情况下的决策考虑了更理想的次品率,这样可以看到两者之间的差异。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【数据库】MySQL表的Updata(更新)和Delete(删除)操作
  • 【Hot100】LeetCode—394. 字符串解码
  • Post-Training有多重要?一文带你了解全部细节
  • 【MySQL00】【 杂七杂八】
  • Python 错误 TypeError 解析,实际错误实例详解 (五)
  • 强调重点元素、弱化辅助元素、去掉无关元素,工控HMI还能好不了
  • ChatGPT在论文写作领域的应用:初稿设计
  • 在前端中Proj4.js使用简单介绍
  • HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题
  • LinuxPTP的安装与应用
  • HCIE云计算--灾备
  • 网络协议-SSH
  • claude和chatgpt对比:哪一个更适合你?
  • AI自动生成PPT哪个软件好?如何自动生成专业级PPT?
  • 仿论坛项目--Kafka,构建TB级异步消息系统
  • [deviceone开发]-do_Webview的基本示例
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ES6--对象的扩展
  • javascript数组去重/查找/插入/删除
  • java概述
  • Mocha测试初探
  • ng6--错误信息小结(持续更新)
  • rabbitmq延迟消息示例
  • Web标准制定过程
  • 彻底搞懂浏览器Event-loop
  • 听说你叫Java(二)–Servlet请求
  • 一起参Ember.js讨论、问答社区。
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​数据链路层——流量控制可靠传输机制 ​
  • # 数仓建模:如何构建主题宽表模型?
  • #pragam once 和 #ifndef 预编译头
  • (1)Android开发优化---------UI优化
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (差分)胡桃爱原石
  • (多级缓存)缓存同步
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (分布式缓存)Redis分片集群
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (回溯) LeetCode 40. 组合总和II
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (四)模仿学习-完成后台管理页面查询
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)创业家杂志:UCWEB天使第一步
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (自用)仿写程序
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET WPF 抖动动画
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化