【2024数模国赛赛题思路公开】国赛B题第二套思路丨附可运行代码丨无偿自提
2024年数模国赛B题解题思路
B 题 生产过程中的决策问题
一、问题1解析
问题1的任务是为企业设计一个合理的抽样检测方案,基于少量样本推断整批零配件的次品率,帮助企业决定是否接收供应商提供的这批零配件。具体来说,企业需要依据两个不同置信度(95% 和 90%)来判断次品率是否超过或不超过标称值(10%)。
供应商声称的次品率为不超过10%,但企业需要通过抽样检测来验证实际次品率是否符合此要求。通过设计合理的抽样方案,企业可以在不同的置信度下做出关于是否接受这批零配件的决策。
情况1:在95%的置信水平下,如果次品率超过标称值(10%),则拒收该批次零配件。
情况2:在90%的置信水平下,如果次品率不超过标称值(10%),则接收该批次零配件。
抽样检测模型
本问题可以使用统计学中的假设检验方法进行抽样检测。具体步骤如下:
1. 假设检验模型
我们可以使用二项分布或正态分布来描述抽样的过程,具体步骤如下:
零假设H0: 次品率等于10%,即 p = 0.1 。
备择假设 H1 : 次品率不同于10%。
在情况1中,我们希望拒收零配件,意味着在95%的置信水平下拒绝H0 ,即认为次品率超过10%。
在情况2中,我们希望接收零配件,意味着在90%的置信水平下不拒绝H0,即认为次品率不超过10%。
2. 检验统计量
次品率的检测可以基于样本中不合格品的比例。假设抽取的样本量为n,不合格品的数量为X,则样本次品率为:
根据二项分布,假设次品率为p,则有:
当n 较大时,二项分布可以近似为正态分布:
其中p0=0.1为标称次品率。
3. 置信区间
根据置信水平的不同,利用正态分布的累积概率可以计算出相应的抽样量 n。对于95%和90%的置信水平,分别使用:
对于95%的置信水平:使用标准正态分布的临界值Z0.95=1.645。
对于90%的置信水平:使用标准正态分布的临界值Z0.90=1.28。
我们需要确定在给定的置信度下,样本次品率是否超出10%。
4. 抽样次数n的计算
情况1:在95%的置信度下,假设次品率大于10%,我们需要拒收零配件。可以根据公式推导出所需的最小样本量n,以保证检验的灵敏度:
通过该公式,我们可以求得n 值。
情况2:在90%的置信度下,假设次品率不超过10%,我们可以接收零配件。对应的样本量n 由:
在这两个条件下,我们可以分别计算所需的样本量n,并根据抽样的结果做出决策。
5. 具体计算步骤
(1) 设定假设:基于样本中观测到的次品率,计算标准差并应用正态分布近似。
(2) 计算临界值:根据给定的置信水平(95%和90%)计算对应的Z值。
(3) 确定抽样次数:使用上述公式确定样本量 n,使得能够满足所需的置信度要求。
(4) 结果分析:在样本量n 下,根据实际检测结果判断是否接收或拒收该批次零配件。
6.总结(问题一总结)
问题1的核心在于为企业设计一个基于抽样检测的方案,以有效评估供应商所提供的零配件是否符合次品率不超过10%的标称值。该问题的解决过程可以通过统计学中的假设检验和置信区间的概念来实现。在不同置信水平(95%和90%)下,企业需要判断是否接收这批零配件。具体而言,若在95%的置信水平下,检测显示次品率超过10%,则企业应拒收该批次零配件;在90%的置信水平下,若次品率未超过10%,则可接收该批次零配件。
为了实现这一目的,本问题采用了假设检验的统计学模型。零假设(H0H0)设定为次品率等于10%,而备择假设(H1H1)则表示次品率不同于10%。通过对抽样结果进行假设检验,企业可以判断是否接受或拒绝这批零配件。使用二项分布或正态分布对样本次品率进行建模,使得在大样本条件下的样本分布可以近似为正态分布。
在计算过程中,关键在于确定样本量 nn 以确保在不同的置信水平下能有效进行检验。样本量的计算基于正态分布的标准化统计量,通过公式推导出最小的样本量,使得在给定的置信水平下,能够做出关于次品率是否超出标称值的判断。
问题1通过假设检验和置信区间分析,成功构建了企业在不同置信水平下的抽样检测方案。该方案能够在减少检测成本的前提下,准确评估供应商提供的零配件质量是否符合企业的标准,帮助企业做出科学决策。
二、问题二解析
对于问题2,题目要求对企业的生产过程中各个阶段做出决策,涉及是否对零配件和成品进行检测,以及如何处理不合格产品。这是一个生产过程中的多阶段决策问题,我们可以通过成本分析、次品率计算以及决策树模型来为企业制定合理的检测和处理策略。以下是解题思路的具体展开:
企业生产某种电子产品,使用两种零配件(零配件1和零配件2)进行装配,最终产生成品。在整个过程中,企业需要做出以下几项决策:
(1)零配件检测:是否对零配件1和零配件2进行检测,不检测的零配件直接进入装配环节。
(2)成品检测:是否对成品进行检测,检测合格的成品进入市场。
(3)不合格成品处理:是否对不合格成品进行拆解,拆解后可以回收合格的零配件并重新使用,或者直接丢弃。
(4)用户退货处理:用户退回不合格成品后,企业承担物流、信誉等成本,需要决定是否再次拆解。
1. 模型设计
决策的关键是考虑检测成本、装配成本、次品率、调换损失和拆解费用之间的权衡,以此来做出最优决策。
决策模型设计:
我们可以采用决策树模型,考虑每个环节可能的决策及其结果。每个决策的目标是最小化总成本,这包括检测成本、次品率引起的损失(包括调换损失和拆解费用)等。
步骤1:零配件检测决策
检测零配件1或零配件2可以减少进入装配环节的不合格零配件,从而减少成品的次品率。
成本与收益分析:检测成本与不检测导致的次品率的损失之间的平衡。检测的目的在于减少不合格成品的数量,因此要比较检测成本与由于不检测导致更多不合格成品的调换损失、拆解费用等。
步骤2:成品检测决策
成品检测可以避免不合格成品直接进入市场,减少调换损失。
成本与收益分析:成品检测的成本要与调换损失、企业信誉的损失相权衡。检测合格的成品可以直接进入市场,而不合格的成品要么拆解、要么丢弃。
步骤3:不合格成品拆解决策
不合格成品的拆解会产生额外的拆解费用,但拆解出的零配件可以重复使用。
成本与收益分析:拆解费用与再次利用合格零配件带来的收益之间的平衡。如果拆解出的零配件价值较大,则拆解是合理的选择;否则可以考虑直接丢弃。
步骤4:退货产品处理
退货处理涉及到物流成本和企业信誉的损失,对于退回的不合格成品,企业要决定是否进行拆解。
成本与收益分析:与前面类似,考虑调换损失与拆解费用之间的平衡。
2. 模型构建:
(1) 设定变量:
Cd:检测成本
Ca:装配成本
Ct:拆解费用
Cr:调换损失
p1、p2:零配件1和零配件2的次品率
pf成品的次品率(基于零配件次品率计算)
(2) 目标函数:最小化总成本
总成本 = 检测成本 + 装配成本 + 不合格产品处理成本 + 调换损失 + 拆解费用
(3)约束条件:
零配件次品率、成品次品率以及检测、拆解成本等实际情况构成了约束条件。
不同情形下的决策方案:
表1中的不同情形(如零配件次品率、装配成本、检测成本等)会影响到每个决策的选择。具体方案可以基于以下原则:
1. 检测成本 vs 不检测损失:当检测成本低于不合格成品带来的损失时,进行检测。
2. 不合格成品处理:当拆解费用低于调换损失时,选择拆解不合格成品。
3. 用户退货处理:对于退回的不合格成品,综合调换损失和拆解费用做出合理决策。
3.总结(问题二总结)
问题二的核心是如何在企业生产过程中,通过合理的决策实现成本的最小化。企业在生产过程中,需要面对多个决策点,包括是否对零配件、半成品和成品进行检测,以及如何处理不合格成品。通过权衡检测成本、次品率、装配成本和不合格品处理成本,企业可以制定出最优的生产策略。
在整个生产流程中,企业首先需要决定是否对零配件1和零配件2进行检测。如果选择检测,这将能够有效减少进入装配环节的不合格品数量,从而降低成品的次品率。企业还需决定是否对成品进行检测。成品检测的目的是避免不合格的成品进入市场,减少因次品流入市场而带来的调换损失和企业信誉的影响。此外,企业在生产过程中还面临不合格成品的处理问题。对于检测出不合格的成品,企业可以选择进行拆解,回收其中的合格零配件,或者直接丢弃这些次品。拆解虽然需要额外的费用,但能减少材料浪费。最后,企业还需处理用户退回的产品,用户退回的不合格成品可能会带来物流和信誉损失,企业需要权衡是否对这些退回的产品进行再次拆解处理。
为了应对这些决策问题,我们可以构建一个数学模型,旨在最小化总成本。模型中包含检测成本、装配成本、调换损失和拆解费用等多种成本因素。在实际计算中,企业需要评估零配件的次品率对成品次品率的影响,以及检测决策对后续装配环节的影响。
在这种多阶段决策问题中,企业可以通过决策树或成本收益分析模型,评估每一个决策点对总成本的影响。在决策过程中,次品率是一个关键的决策变量。当检测成本较低且次品率较高时,企业应优先进行检测,以减少后续环节的不合格品处理成本。而在不合格成品的处理方面,如果拆解费用低于调换损失,企业应选择拆解以回收合格零配件;若调换损失较小,则可以选择丢弃不合格成品。
在不同的生产情境下,企业的决策将随次品率、检测成本、装配成本和拆解费用等因素的变化而调整。总的来说,问题二要求我们在生产的各个环节中做出基于成本最小化的合理决策,确保在减少次品率的同时,优化检测和不合格品处理策略,从而最大程度地降低企业的整体生产成本。
【Python参考代码】
# 导入必要的库
import pandas as pd
# 情况输入,基于表1的数据
data = {
'情境': [1, 2, 3, 4, 5, 6],
'零配件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, 3, 2, 2, 3],
'成品_市场售价': [56, 56, 56, 56, 56, 56],
'不合格成品_调换损失': [6, 6, 30, 30, 10, 10],
'不合格成品_拆解费用': [5, 5, 5, 5, 5, 40]
}
# 将数据转换为DataFrame
df = pd.DataFrame(data)
# 定义成本计算函数
def calculate_cost(row, detect_parts=True, detect_products=True, rework_defects=True):
"""
计算在不同决策下的总成本
:param row: 当前情形的数据
:param detect_parts: 是否检测零配件
:param detect_products: 是否检测成品
:param rework_defects: 是否对不合格成品进行拆解
:return: 总成本
"""
# 获取各类成本和次品率
part1_defect_rate = row['零配件1_次品率']
part2_defect_rate = row['零配件2_次品率']
product_defect_rate = row['成品_次品率']
part1_cost = row['零配件1_购买单价']
part2_cost = row['零配件2_购买单价']
product_price = row['成品_市场售价']
product_assemble_cost = row['成品_装配成本']
product_check_cost = row['成品_检测成本']
swap_loss = row['不合格成品_调换损失']
rework_cost = row['不合格成品_拆解费用']
# 检测零配件的成本
part_check_cost = 0
if detect_parts:
part_check_cost = row['零配件1_检测成本'] + row['零配件2_检测成本']
# 如果检测,假设不合格零配件直接丢弃
part1_defect_rate = 0
part2_defect_rate = 0
# 成品检测成本
product_check_total_cost = 0
if detect_products:
product_check_total_cost = product_check_cost
product_defect_rate = 0 # 如果检测,直接丢弃不合格成品
# 不合格成品处理成本
product_defect_total_cost = product_defect_rate * (swap_loss + rework_cost if rework_defects else swap_loss)
# 计算总成本 = 零配件成本 + 装配成本 + 检测成本 + 不合格处理成本
total_cost = (part1_cost + part2_cost + product_assemble_cost + part_check_cost +
product_check_total_cost + product_defect_total_cost)
return total_cost
# 对每种情境计算成本
decisions = []
for index, row in df.iterrows():
# 三种决策情况的成本计算
cost1 = calculate_cost(row, detect_parts=True, detect_products=True, rework_defects=True)
cost2 = calculate_cost(row, detect_parts=False, detect_products=True, rework_defects=True)
cost3 = calculate_cost(row, detect_parts=True, detect_products=False, rework_defects=False)
# 找到最小的成本决策
min_cost = min(cost1, cost2, cost3)
if min_cost == cost1:
decision = "检测零配件和成品,拆解不合格成品"
elif min_cost == cost2:
decision = "不检测零配件,检测成品,拆解不合格成品"
else:
decision = "检测零配件,不检测成品,不拆解不合格成品"
decisions.append(decision)
# 添加决策结果到DataFrame
df['最优决策'] = decisions
# 打印最终决策结果
import ace_tools as tools; tools.display_dataframe_to_user(name="决策结果", dataframe=df)