写在前面:学校最近搞数学建模竞赛培训,以2022华数杯B题作为训练题目,在查资料过程中发现网上没有哪一篇论文解出了正确答案,而我们组利用Lingo软件准确的解出了正确答案,但是在第三问时,由于决策的变量激增,基于Lingo的模型已经无法解出,所以选择使用模拟退火算法进行解算。另外在文末给出了官方的标准答案。代码也在文末给出,自行复制,可直接运行。(如有读者发现错误,请及时联系指正。)另外,本文仅供大家参考交流使用^^。
还有就是,下面的论文中的表的标号会出现错误是因为把附录中的表部分粘到了正文中,排版正确文章见pdf。
不用付费,直接下(2022华数杯B题论文思路分析+完整代码(水下机器人组装计划)(一二问答案接出来和标准答案一样)(问题三四逼近正确答案)(完整论-其它文档类资源-CSDN下载)
基于线性规划的水下机器人组装计划的研究与分析
摘要
本文主要研究了水下机器人组装计划问题。主要基于Lingo软件建立线性规划模型,完成了对问题一、问题二和问题四中周生产计划的求解,并且利用Matlab软件编写模拟退火算法对第三问中检修日进行确定,最后利用SPSS软件,采取季节性一元预测模型对问题四中的历史数据进行预测。
针对问题一,从题目中提炼出五个约束条件:在周一和周日没有任何库存;忽略小组件从采购到组装与从小组件组装完成到组装WPCR的中间时间;每日的WPCR需求量必须按时、按量完成(也可以提前完成);A、B、C的生产总工时必须符合总工时限制条件;每天只采购能满足当天需求量的小组件数量,不进行小组件的存储,不产生小组件的库存费用。基于上述条件分三步建立线性规划模型“确定决策变量——确定目标函数——确定约束条件”,对问题一进行求解。结果显示按照求解出的生产计划,可使得生产总成本最小,最小值为6260.9元。
针对问题二,从题目中提炼出四个约束条件:A、B、C的生产总工时必须符合总工时限制条件;组件A、B、C需要提前一天生产入库才能组装WPCR,A1、A2、A3、B1、B2、C1、C2、C3也需要提前一天生产入库才能组装A、B、C;对于WPCR而言,某天的需求量可由当天的组装量和前一天的库存量共同提供;本周日与上个周日的相比较,各个变量的相关数值应该完全相等。基于上述条件分三步建立线性规划模型“确定决策变量——确定目标函数——确定约束条件”,对问题二进行求解。结果显示按照求解出的生产计划,可使得生产总成本最小,最小值为177212.5元。
针对问题三,从题目中提炼出四个约束条件:在30周210天内设置7次检修,并且每次检修一天,任意两次检修之间间隔6天以上;检修日停工停产,检修日的订单只能提前安排生产;检修之后设备生产能力提高,检修后的第一天A、B、C生产总工时限制将会放宽10%,随后逐日减少放宽2%的比例,直至为0;总工时限制。基于上述约束条件,本文选择使用模拟退火算法进行优化求解。
针对问题四,从题目中提炼出两个约束条件:以过去30周数据作为历史周订单数据;既保障每天的WPCR订单均以95%以上的概率正常交付,又保障每周的WPCR订单以85%以上的概率正常交付;基于上述约束条件,首先采取基于一元时间序列预测模型对WPCR未来某周7天的订单数进行预测,再以预测结果通过问题二中建立的模型求解稳妥的单周生产计划。
关键词:线性规划 Lingo 模拟退火算法 SPSS 优化 Matlab
- 问题重述
自来水管道清理机器人(WPCR)由3个A组件、4个B组件和5个C组件组装而成;其中A组件由6个A1组件、8个A2组件和2个A3组件组装而成,B组件由2个B1组件和4个B2组件组装而成,C组件由8个C1组件、2个C2组件和12个C3组件组装而成。
该工厂每次生产计划期为一周(即每次按照每周7天的订购数量实行订单生产),并且只有WPCR有外部需求,其他组件不对外销售。另外,A 、B 、C的工时消耗分别为 3 时/件、5 时/件和 5 时/件,表5为每天的WPCR外部 需求数及关键设备总工时限制。
在生产WPCR时需要付出生产准备费用和库存费用,生产准备费用和库存费用数据见表6。另外,所有订单到期必须全部交货,轻易不能有缺货事件发生。
请尝试建立数学模型讨论下列问题:
(1)工厂周一开始时和周日结束时不能有任何组件库存,每天各组件都可立刻用于组装。在使总成本最小的情况下,制定每周7天的生产计划,结果填入表一。
(2)组件A、B、C需要提前一天生产入库才能组装WPCR,A1、A2、A3、B1、B2、C1、C2、C3也需要提前一天生产入库才能组装A、B、C。在使总成本最小的情况下,制定每周7天的生产计划,结果填入表二。
(3)在问题二的基础上,工厂要在30周210天里设置7次停工检修,每次停工检修一天。检修之后关键设备生产能力有所提高,检修后的第一天A、B、C生产总工时限制将会放宽10%,随后逐日减少放宽2%的比例,直至为0(如第一天放宽10%,第二天就放宽8%,...)。检修日的订单必须提前安排,任意两日检修要相隔6天以上。30周的WPCR外部需求数据见表7。在使总成本最小的情况下,制定7次检修的检修日期,结果填入表三。
(4)将30周的WPCR外部需求数据作为历史订单数据,在保障每天的WPCR订单均以95%以上的概率保证正常交付,又能够以85%以上的概率保证整周的WPCR订单能正常交付的条件下,制定稳妥的周生产计划,结果填入表四。
- 问题分析
该题目是以自来水管道清理机器人的组装为背景的多变量约束规划问题,问题一到问题四,逐步增加约束条件,本文采取先基于问题一简单的约束条件建立初级数学模型,再根据逐步增加的约束条件对建立的初级模型进行修改完善,最后完成对问题的求解。
2.2 对问题一的分析
问题一要求制定每周七天的生产计划,使得总成本最小,并且给出如下约束条件:
- 在周一和周日没有任何库存;
- 忽略小组件从采购到组装与从小组件组装完成到组装WPCR的中间时间;
- 每日的WPCR需求量必须按时、按量完成(也可以提前完成);
- A、B、C的生产总工时必须符合总工时限制条件;
另外根据题目中条件“每天采购的组件马上就可用于组装,组装出来的组件也可以马上用于当天组装成WPCR”,有充分的理由可以推导出如下结论:“每天的小组件(指的是组装A/B/C所需要的组件)没有必要进行储存,即这些小组件不需要付库存费用”,理由如下:如果为了省下某组件的开工费,需要在前一天储存好能满足第二天WPCR生产的需要,而此时对应该部件储存的费用已经远远地大于了开工费。所以添加如下约束条件:
- 每天只采购能满足当天需求量的小组件数量,不进行小组件的存储,不产生小组件的库存费用。
基于上述约束条件,本文认为解决该问题的模型方法由以下三个步骤组成:
- 确定决策变量与相关符号说明,其目的主要是对题目中的条件进行数学化处理,找出决定目标函数大小的决策变量;
- 确定目标函数,主要是通过决策变量建立目标函数的表达式;
- 确定约束条件,对已经分析出来的约束条件用数学符号进行表达。
2.3 对问题二的分析
问题二仍然要求在总成本最低情况下,制定每周7天的生产计划,并给出如下约束条件:
- A、B、C的生产总工时必须符合总工时限制条件;
- 组件A、B、C需要提前一天生产入库才能组装WPCR;A1、A2、A3、B1、B2、C1、C2、C3也需要提前一天生产入库才能组装A、B、C;
另外,根据约束条件(2)可以推导出如下约束条件:
- 对于WPCR而言,某天的需求量可由当天的组装量和前一天的库存量共同提供;
然后根据问题二中的信息“在连续多周生产情况下”和“每周的WPCR需求和关键设备工时限制以及每次生产准备费用和单件库存费用数据见表5、表6”可以得出如下结论:
- 本周日与上个周日的相比较,各个变量的相关数值应该完全相等;
2.4 对问题三的分析
问题三要求在总成本最低的情况下,确定7次检修的检修日期,并给出约束条件如下:
- 在30周210天内设置7次检修,并且每次检修一天,任意两次检修之间间隔6天以上;
- 检修日停工停产,检修日的订单只能提前安排生产;
- 检修之后设备生产能力提高,检修后的第一天A、B、C生产总工时限制将会放宽10%,随后逐日减少放宽2%的比例,直至为0;
- 总工时限制。
本文在求解问题三时,在采用问题一中建立模型的整体思路“确定决策变量——确定目标函数——确定约束条件”时,遇到变量数量过多的问题,因此选择使用模拟退火算法进行求解。
2.5 对问题四的分析
问题四要求在未知WPCR外部需求订单的前提下,给公司制定稳妥的单周生产计划,并给出如下约束条件:
- 以过去30周数据作为历史周订单数据;
- 既保障每天的WPCR订单均以95%以上的概率正常交付,又保障每周的WPCR订单以85%以上的概率正常交付;
因此,本文基于上述约束条件,首先采取基于一元时间序列预测模型对WPCR未来某周7天的订单数进行预测,再以预测结果通过问题二中建立的模型求解稳妥的单周生产计划。
3、模型假设
- 生产过程中,不会因为工厂停电、机械故障等突发情况打断生产;
- 工厂资金流正常,不会因为缺乏资金而影响生产;
- 只有最终WPCR装置有外部需求,其他组件不对外销售;
- 机器人的需求按计划而定,不受市场价格波动影响;
- WPCR的外部需求量不会临时发生改变。
4、符号说明
5、模型的建立与求解
5.1 问题一模型的建立与求解
5.1.1 确定决策变量与相关符号说明
为了便于后续计算与表示,本文首先对WPCR装置及其所有组件进行编号处理,编号结果如下:
表 1 WPCR装置及各组件编号
名称 |
编号i |
WPCR |
1 |
A |
2 |
B |
3 |
C |
4 |
A1 |
5 |
A2 |
6 |
A3 |
7 |
B1 |
8 |
B2 |
9 |
C1 |
10 |
C2 |
11 |
C3 |
12 |
另外对周一到周日进行编号,编号结果如下:
表 2 周一到周日对应编号
名称 |
编号t |
周一开始的时候 |
1 |
周一结束的时候 |
2 |
周二结束的时候 |
3 |
周三结束的时候 |
4 |
周四结束的时候 |
5 |
周五结束的时候 |
6 |
周六结束的时候 |
7 |
周日结束的时候 |
8 |
接着设出相关变量来表示题目中对应信息,列表如下:
5.1.2 确定目标函数
5.1.3 确定约束条件
5.1.4 问题一的求解
根据上述步骤,本文通过Lingo软件进行进行编程解算(代码见附录一),得到如下结果:
表 5 WPCR及各组件每日剩余量
日期 |
WPCR剩余量 |
A剩余量 |
B剩余量 |
C剩余量 |
生产准备费用 |
库存费用 |
周一 |
44 |
0 |
0 |
1 |
1200 |
221.7 |
周二 |
8 |
0 |
344 |
1 |
340 |
557.7 |
周三 |
51 |
0 |
20 |
0 |
860 |
285 |
周四 |
11 |
0 |
20 |
0 |
0 |
85 |
周五 |
22 |
0 |
1 |
0 |
1200 |
111.5 |
周六 |
40 |
0 |
0 |
0 |
1200 |
200 |
周日 |
0 |
0 |
0 |
0 |
0 |
0 |
总和 |
176 |
0 |
385 |
2 |
6260.9 |
表 6 问题一的结果
日期 |
WPCR组装数量 |
A组装数量 |
B组装数量 |
C组装数量 |
生产准备费用 |
库存费用 |
周一 |
83 |
249 |
332 |
416 |
1200 |
221.7 |
周二 |
0 |
0 |
344 |
0 |
340 |
557.7 |
周三 |
81 |
243 |
0 |
404 |
860 |
285 |
周四 |
0 |
0 |
0 |
0 |
0 |
85 |
周五 |
48 |
144 |
173 |
240 |
1200 |
111.5 |
周六 |
51 |
153 |
203 |
255 |