2024年国赛高教社杯数学建模B题生产过程中的决策问题解题全过程文档及程序
2026/4/25 19:07:37 网站建设 项目流程

2024年国赛高教社杯数学建模

B题 生产过程中的决策问题

原题再现

某企业生产某种畅销的电子产品,需要分别购买两种零配件(零配件1和零配件2),在企业将两个零配件装配成成品。在装配的成品中,只要其中一个零配件不合格,则成品一定不合格;如果两个零配件均合格,装配出的成品也不一定合格。对于不合格成品,企业可以选择报废,或者对其进行拆解,拆解过程不会对零配件造成损坏,但需要花费拆解费用。
请建立数学模型,解决以下问题:
问题1 供应商声称一批零配件(零配件1或零配件2)的次品率不会超过某个标称值。企业准备采用抽样检测方法决定是否接收从供应商购买的这批零配件,检测费用由企业自行承担。请为企业设计检测次数尽可能少的抽样检测方案。
如果标称值为10%,根据你们的抽样检测方案,针对以下两种情形,分别给出具体结果:
(1) 在95%的信度下认定零配件次品率超过标称值,则拒收这批零配件;
(2) 在90%的信度下认定零配件次品率不超过标称值,则接收这批零配件。
问题2 已知两种零配件和成品次品率,请为企业生产过程的各个阶段作出决策:
(1) 对零配件(零配件1和/或零配件2)是否进行检测,如果对某种零配件不检测,这种零配件将直接进入到装配环节;否则将检测出的不合格零配件丢弃;
(2) 对装配好的每一件成品是否进行检测,如果不检测,装配后的成品直接进入到市场;否则只有检测合格的成品进入到市场;
(3) 对检测出的不合格成品是否进行拆解,如果不拆解,直接将不合格成品丢弃;否则对拆解后的零配件,重复步骤(1)和步骤(2);
(4) 对用户购买的不合格品,企业将无条件予以调换,并产生一定的调换损失(如物流成本、企业信誉等)。对退回的不合格品,重复步骤(3)。 请根据你们所做的决策,对表1中的情形给出具体的决策方案,并给出决策的依据及相应的指标结果。

问题3 对 𝑚 道工序、𝑛 个零配件,已知零配件、半成品和成品的次品率,重复问题2,给出生产过程的决策方案。图1给出了2道工序、8个零配件的情况,具体数值由表2给出。

针对以上这种情形,给出具体的决策方案,以及决策的依据及相应指标。
问题4 假设问题2和问题3中零配件、半成品和成品的次品率均是通过抽样检测方法(例如,你在问题1中使用的方法)得到的,请重新完成问题2和问题3。

整体求解过程概述(摘要)

本文针对某成品加工企业生产过程,以提升利润目的建立决策优化模型,对供应商供应的零配件通过抽样检测法检测次品率,再根据次品率、各阶段成本以及检测费用等数据进行策略优化,最终得到最优决策。
针对问题一,对抽样检测方案的检测次数尽可能少考虑,为了避免检测的偶然性与随机性,我们选择分组抽样的抽样检测方案(具体见附录2中的抽样检测方案)。然后对数据进行参数估计和假设检验,假设供应商提供的零配件数据符合高斯分布。因此对抽取样本的数据建立Z检验模型,然后通过显著性水平α与置信区间之间的关系,提出假设检验。根据检验统计量是否落在拒绝域内,判断拒绝原假设或接受原假设,最后解出是否接收供应商的零配件。
针对问题二,考虑到企业生产过程中各个阶段的成本和损失费用,根据贪心思想对各阶段进行优化和分析并针对6个情况并制定企业的最优生产决策。在题目所给六种情况的次品率、几种成本和损失等信息,建立决策利润模型,以利润为目标函数求利润最大的生产策略。利用贪心算法即可对模型进行求解,最后得到情况1到情况6的最优生产策略为分别为策略4、策略3、策略3、策略4、策略3和策略4,利润分别为20.46A、19.608A、22.63A、12.2A、22.92A和23.025A(A为从供应商接收的零配件数)。策略1到策略4见附录4。
针对问题三,通过对其流程图、通过对零配件价格、检测成本等条件不同点进行针对性分析,得到八种研究方向。通过遗传算法对初步假设的八种检测思路进行优化和整改,指定企业的最优生产决策。以遗传算法为数学模型,将题目所给次品率,检测费用等信息进行带入,最终得到最优决策见附录7,并求解得到最优解为73.88A(A为从供应商接收的零件数量)
针对问题四,该题增加条件为次品率为随机抽样检测得出,针对此条件,利用非参数假设检验中的Kolmogorov-Smirnov检验,能够近似证明该样本次品率满足高斯分布,对数据进行参数估计和假设检验,以次品率10%为标称值。。通过假设检验可得,置信度为95%的情况下,上下波动5%,次品率在5%~15%之间动态变化。并以此动态参数求得不同次品率下检测成本与拆解成本之间的联系,绘出图像得出结果见附录9。
综上所述,本文通过对生产过程各阶段进行分析,基于数据均近似符合高斯分布的情况下建立Z检验模型,针对不同情况的策略优化时应用了贪心思想和遗传思想,并分别建立数学模型对各个情况得出最优策略。

模型假设:

1. 假设问题1中供应商供应零配件(零配件1或零配件2)样本量足够大,近似服从高斯分布。
2. 假设该企业工厂生产过程具有稳定性,生产零件的过程中无较大波动。
3. 假设供应商对零件稳定供应且长期合作。
4. 假设题目2中同一时间企业向供应商购买的零配件1和零配件2数量相同。

问题分析:

问题(1)的问题分析:
问题(1)要求设计零件的抽样检测方案。题目要求检测次数尽可能少,零件的总体样本次品率是否超过标称值10%,选择或拒收该批零件。考虑到抽样检测结果的偶然性与随机性尽可能低,我们将零件1的总量设为X,随机从X中取20%为一组,平均分为5组,然后对所抽样本建立Z检验模型。设总体X服从正态分布,模型中首先然后从题目中的信度可以确定显著性水平α,提出检验假设。显著性水平α与置信区间之间存在关系。最后根据结果是否落在拒绝域内,来得出拒绝原假设或接受原假设。
对于第一小问,设定的信度为95%,即在相应的显著性水平为0.05下进行Z检验,原假设为拒收这批零件。对于第二小问,设定信度为90%,即在显著性水平为0.1下进行相应检验,原假设为接收这批零件。
问题(2)的问题分析
问题(2)给两种零配件的单价和检测成品以及成品和不合格成品的各种成品及损失等信息,要求对企业生产的四个阶段进行决策,那么则需要考虑各个阶段可能会产生的成本,对各个阶段做出合适的决策使利润尽量大,那么可以采用贪心思想进行策略优化。基于贪心思想,我们认为第一阶段我们考虑是否进行某个零件的检测、两零件都进行检测或量零件都不进行检测;第二阶段我们考虑是否将成品检测,只将合格成品进入市场,还是不进行检测,当用户买到不合格品时进行调换;第三阶段需要考虑是否将不合格成品拆解,回到步骤一。上述阶段的选择均会关系到一些费用的产生。
对于整体进行考虑,我们考虑是否通过精细的检测,使进入市场的成品均为合格成品,最大减少调换损失的费用损失,增大利润;还是在保证进入市场不合格成品尽量少的情况下,对用户买到的不合格成品进行调换,减少中间检测成本,增大利润。
因此我们得到多种生产策略,根据企业针对不同的六种情况,需要进行比较,基于贪心算法建立企业生产策略优化模型,求出利润高的生产策略。该题思路分析图如下

问题(3)的问题分析
针对问题3,修改了前两问的生产工序,增加了半成品的中间环节。半成品有三类,分别由八种零配件分别组装而成。而且零件、半成品以及成品均可以进行检测,那么就增加了策略对生产过程中各阶段的检测方案。基于此改动,我们先对生产中的检测方案进行初步分析,作为后续决策方案的方向。后续决策方案的制定中由于决策工序更细致化,因此可以采用遗传思想进行决策制定。
题中给出表2中包含各个零配件的次品率、半成品和成品的次品率以及各种成本等信息,对数据进行分析可以得出零配件、半成品和成品的次品率均为10%,有些零配件的购买单价之间具有较大的差,这对之后决策中零配件的检测中会产生影响。成品与半成品的拆解费用不同对决策时拆解的阶段产生影响。
对于生产中检测方案的初步分析,分为零配件是否需要检测、半成品是否需要检测以及成品需要检测三步进行,对此可以有8种方向进行选择。由第二问的决策结果我们考虑对首先对零部件部分检测,然后进行组装,再进行后续检测。再确定了基本方向后,我们需要考虑零配件检测时零配件检测种类的选择,由第二问得优先对检测成本低的零配件进行检测可以降低最终成本,获得更大利润。针对于检测半成品后不合格的半成品拆解后,我们则不需要再检测上一步检测过的零配件,只对未检测过的零配件进行检测。为了确保对这些零配件检测之后合格的数量足够进行重新组装半成品,我们可以将第一步中剩余的零配件一同检测,那么可以做到重新组装。同理,对成品进行拆解后的半成品,我们也可与上一步重新组装的半成品(此时还未检测)一同检测,可以确保合格的半成品的数量足够组装为成品。求解目标决策的制定时我们可以采用遗传算法进行模型求解。
问题(4)的问题分析
针对问题四,条件改为次品率为随机检测得出,分析此条件,首先应将随即检测所产生的样本量与有限数学模型建立联系。由问题一思路进行延申,引入Kolmogorov-Smirnov检验,通过非参数假设检验,能够近似证明该样本次品率满足高斯分布。由实验一思路,对数据进行参数估计和假设检验,以次品率10%为标称值。通过假设检验可得,置信度为95%的情况下,上下波动5%,次品率在5%~15%之间动态变化。对动态变化的次品率K,设定不同装配成本,检测成本,拆解费用,并以此动态参数求得不同次品率下检测成本与拆解成本之间的联系。
确认联系后,以此为支点,重新对问题二,问题三题目信息进行整合,得出符合上述条件下问题二,问题三的最优决策。

模型的建立与求解整体论文缩略图

全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
非慈善耶稣

部分程序代码:(代码和文档not free)

importnumpyasnpfromstatsmodels.stats.weightstatsimportztestfromscipy.statsimportnorm alpha=0.05;sigma=pro.xlsx u=nk.array=ztest(a,value=pro.xlsx)=a.meanO;s=a.std(ddof-1)Z=t*s/sigma#z=norm.ppf(1-alpha/2,0,1)print('Z统计量值:',z);print('k值:',k);print('分位数:',zb)importnumpyasnpfromstatsmodels.stats.weightstatsimportztestfromscipy.statsimportnorm X=0.05;sigma=pro.xlsx u=nk.array=ztest(a,value=xlsx)=a.meanO;s=a.std(ddof-1)Z=t*s/sigma Z=norm.ppf(1-alpha/2,0,1)print('Z统计量值:',z);print('k值:',k);print('分位数:',zb)importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlibimportcmfrommpl_toolkits.mplot3dimportAxes3D b_x=24z_x=200zi=0.8di=0.005N=50T=[1,8]P=[1,3]defF(a,b):return3*(1-t)**2*np.exp(-(t**2)-(p+1)**2)-10*(t/5-t**3-p**5)*np.exp(-t**2-p**2)-1/3**np.exp(-(t+1)**2-p**2)defplot_3d(ax):T=np.linspace(*T_BOUND,100)P=np.linspace(*P_BOUND,100)T,P=np.meshgrid(T,P)W=F(T,P)ax.plot_surface(T,P,Z,rstride=1,cstride=1,cmap=cm.coolwarm)ax.set_z1im(-10,10)ax.set_xlabel('t')ax.set_ylabel('p')ax.set_zlabel(w')plt.pause(3)plt.show(4)defget_fitness(pop):t,p=translateDNA(pop)pred=F(t,p)returnpred np.min(pred)+1e-3
importpandasaspdimportnumpyasnp# 创建问题2中表1的数据框data={'情况':[1,2,3,4,5,6],'零配件1次品率':[0.10,0.20,0.10,0.20,0.10,0.05],'零配件1购买单价':[4,4,4,4,4,4],'零配件1检测成本':[2,2,2,1,8,2],'零配件2次品率':[0.10,0.20,0.10,0.20,0.20,0.05],'零配件2购买单价':[18,18,18,18,18,18],'零配件2检测成本':[3,3,3,1,1,3],'成品次品率':[0.10,0.20,0.10,0.20,0.10,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]}# 转换为DataFramedf=pd.DataFrame(data)# 评估阶段性的生产决策函数def evaluate_decision(row, d1, d2, dp, d_disassemble, recursion_depth=0):""" 递归评估生产各阶段的最优决策: d1: 是否检测零配件1 d2: 是否检测零配件2 dp: 是否检测成品 d_disassemble: 是否拆解退回的次品成品 recursion_depth: 递归深度,避免无限递归 """# 避免无限递归,设置递归深度限制ifrecursion_depth>10:returnfloat('-inf'),"递归超限"# 初始化总成本total_cost=row['装配成本']# 零配件1的成本处理part1_cost=row['零配件1购买单价']# 零配件1的基础购买成本ifd1==1:# 如果检测零配件1part1_cost+=row['零配件1检测成本']# 加上检测成本ifnp.random.rand()<row['零配件1次品率']:# 根据次品率判断是否次品part1_quality=Falsepart1_cost=0# 如果是次品,成本为0else:part1_quality=Trueelse:part1_quality=np.random.rand()>=row['零配件1次品率']# 如果不检测,直接用次品率判断# 零配件2的成本处理part2_cost=row['零配件2购买单价']# 零配件2的基础购买成本ifd2==1:# 如果检测零配件2part2_cost+=row['零配件2检测成本']# 加上检测成本ifnp.random.rand()<row['零配件2次品率']:# 根据次品率判断是否次品part2_quality=Falsepart2_cost=0# 如果是次品,成本为0else:part2_quality=Trueelse:part2_quality=np.random.rand()>=row['零配件2次品率']# 如果不检测,直接用次品率判断# 如果任一零件不合格,则成品不合格product_quality=part1_qualityandpart2_quality# 成品检测处理ifdp==1:# 如果选择检测成品total_cost+=row['成品检测成本']ifnotproduct_quality:product_quality=False# 如果检测到成品次品elifnp.random.rand()<row['成品次品率']:# 根据成品次品率判断product_quality=False# 如果成品不合格,则考虑拆解和调换次品成品的处理ifnotproduct_quality:ifd_disassemble==1:# 拆解次品total_cost+=row['拆解费用']recursion_cost,_=evaluate_decision(row,d1,d2,dp,d_disassemble,recursion_depth+1)total_cost+=recursion_costelse:total_cost+=row['调换损失']# 退换损失else:# 成品合格的情况下,计算总成本total_cost+=part1_cost+part2_cost# 计算利润revenue=row['市场售价']net_profit=revenue-total_cost# 决策说明decision_desc=f"检测零配件1:{'是'ifd1==1else'否'}, "\f"检测零配件2:{'是'ifd2==1else'否'}, "\f"检测成品:{'是'ifdp==1else'否'}, "\f"拆解退回次品成品:{'是'ifd_disassemble==1else'否'}, "\f"递归深度:{recursion_depth}"returnnet_profit,decision_desc# 初始化空的列表保存净利润和决策best_profits=[]best_decisions=[]# 遍历不同情况的决策组合for idx, row in df.iterrows():# 决策变量:d1, d2, dp, d_disassemble(0-1决策变量,0表示不执行,1表示执行)d1_options=[0,1]d2_options=[0,1]dp_options=[0,1]d_disassemble_options=[0,1]max_profit=float('-inf')# 每种情况下最大净利润best_decision=""# 对应的最佳决策# 对每种决策组合进行计算,选择净利润最大的决策ford1ind1_options:ford2ind2_options:fordpindp_options:ford_disassembleind_disassemble_options:# 计算净利润profit,decision=evaluate_decision(row,d1,d2,dp,d_disassemble)# 选择最大的净利润和对应的决策ifprofit>max_profit:max_profit=profit best_decision=decision# 在每个row循环结束时,仅追加一次最佳决策和净利润best_profits.append(max_profit)best_decisions.append(best_decision)# 确保生成的best_profits和best_decisions列表长度与df行数一致if len(best_profits) == len(df) and len(best_decisions) == len(df):# 将最佳决策和利润合并到DataFrame中df['最佳净利润']=best_profits df['最佳决策']=best_decisions# 输出最佳决策的结果print("\n最佳决策和净利润:")print(df[['情况','最佳净利润','最佳决策']])else:print(f"Error: Length of best_profits ({len(best_profits)}) does not match the number of rows in df ({len(df)}).")
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
非慈善耶稣

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询