PS:仅仅是我们小队的思路和方案
题目:
某建筑和装饰板材的生产企业所用原材料主要是木质纤维和其他植物素纤维材料, 总体可分为 A,B,C 三种类型。该企业每年按 48 周安排生产,需要提前制定 24 周的原 材料订购和转运计划,即根据产能要求确定需要订购的原材料供应商(称为“供应商”)和相应每周的原材料订购数量(称为“订货量”),确定第三方物流公司(称为“转运 商”)并委托其将供应商每周的原材料供货数量(称为“供货量”)转运到企业仓库。
该企业每周的产能为 2.82 万立方米,每立方米产品需消耗 A 类原材料 0.6 立方米, 或 B 类原材料 0.66 立方米,或 C 类原材料 0.72 立方米。由于原材料的特殊性,供应商 不能保证严格按订货量供货,实际供货量可能多于或少于订货量。为了保证正常生产的 需要,该企业要尽可能保持不少于满足两周生产需求的原材料库存量,为此该企业对供 应商实际提供的原材料总是全部收购。 在实际转运过程中,原材料会有一定的损耗(损耗量占供货量的百分比称为“损耗率”),转运商实际运送到企业仓库的原材料数量称为“接收量”。每家转运商的运输 能力为 6000 立方米/周。通常情况下,一家供应商每周供应的原材料尽量由一家转运商 运输。 原材料的采购成本直接影响到企业的生产效益,实际中 A 类和 B 类原材料的采购单 价分别比 C 类原材料高 20%和 10%。三类原材料运输和储存的单位费用相同。 附件 1 给出了该企业近 5 年 402 家原材料供应商的订货量和供货量数据。附件 2 给 出了 8 家转运商的运输损耗率数据。请你们团队结合实际情况,对相关数据进行深入分 析,研究下列问题:
1.根据附件 1,对 402 家供应商的供货特征进行量化分析,建立反映保障企业生产 重要性的数学模型,在此基础上确定 50 家最重要的供应商,并在论文中列表给出结果。
2.参考问题 1,该企业应至少选择多少家供应商供应原材料才可能满足生产的需求? 针对这些供应商,为该企业制定未来 24 周每周最经济的原材料订购方案,并据此制定 损耗最少的转运方案。试对订购方案和转运方案的实施效果进行分析。
3.该企业为了压缩生产成本,现计划尽量多地采购 A 类和尽量少地采购 C 类原材 料,以减少转运及仓储的成本,同时希望转运商的转运损耗率尽量少。请制定新的订购 方案及转运方案,并分析方案的实施效果。
4.该企业通过技术改造已具备了提高产能的潜力。根据现有原材料的供应商和转运 商的实际情况,确定该企业每周的产能可以提高多少,并给出未来 24 周的订购和转运方案。
附件一:企业对402家供应商过去240周的订单量和供应商的供应量
附件二:8家转运商过去240周的转运损耗率
附件A:填写未来24周的订购方案(分三张表对应三道题)
附件B:未来24周的的转运方案(分三张表对应三道题)
题目思路
先分析一下四道问题的的类型和解法
第一问就是一个很简单的评价类模型,需要自己根据数据筛选出一些能够衡量供应商对企业重要程度的指标,然后对各个供应商进行一个综合的得分评价和排序,选出前五十家。
第二问分析题目应该可以得出是两个规划问题,具体的类型可能得根据自己实际建立的模型确定是多目标还是单目标规划。先根据往年的数据设计未来24周的订货方案,再针对每一周的订货方案设计运输方案。
第三问也是类似于第二问,多买A少买C,可以在第二问基础上适当调整一下A、C的权重重新求解
第四问说具备提高产能的潜力。这个潜力具体指什么我们小队也讨论了很久,但是最后的结果还是很好的。我们统计了企业每隔半年的ABC三种原料的订货量,发现前面的四年半ABC整体的订购都是比较稳定的,而且A和B综合起来比C多很多,最后半年里C的订货量突然上升很多(这个好像网上很少有人注意到)于是我们推测是企业对C原料的利用率提高了(这个也很符合提高产能潜力这个描述)
综合来说,供应商是树木的供应商,树木的生长周期应该是相对而言比较稳定的,用EXCEL作折线图也能发现供应量具有很明显的周期性,所以供应商的供应能力相对而言比较稳定,而企业订购多少A多少B多少C则应该是取决于企业本身的生产情况。
再有一点,运输商的损耗率呈现一个很明显的周期性变化,不能理解为该加运输商损耗率低而尽可能挑选这家运输商,还有可能是因为这家运输商运送的货物多了,所以损耗率才上升。损耗率的来源可能主要是木材在货车商因为挤压而损坏。
我们选择尽可能让周期性最明显的供应商去运,而且注意到每个转运商损耗率最高只有5%,所以其实每家转运商的运输能力差不了多少,因为你也不知道过去240周里每家转运商分别运送了多少货物,所以我们队觉得从这些信息里分析转运商的转运能力是不现实的,而周期性最明显的转运商我们可以理解为企业过去选择的最信任的转运商,因此尽可能选损耗率到达5%最多的转运商运送货物。
除了这些点之外,做折线图还能发现有些供应商是具有很明显的周期性的,且一次性供货量特别大,有一些供应商是持续供应的,供应幅度很小,还有一些平时几乎为0,突然供应一次供应了二三十万的,因为不知道未来24周不稳定供应商具体什么时候才能供应货物,所以原则上我觉得不能给这些供应商制定购买计划。但是这些供应商在过去五年又确实供应了很多,所以第一问里也可以认为它们是重要的供应商,也许只是供应周期更久,但是过去五年这种供应商没有供应两次,所以不能由过去的数据推出明年她们是否能够再次供应。
还有就是我们计算的过去五年的供应量其实是很难满足企业的28200的产能的,这点在后面题解里我会讲我们是怎么处理的。
和往年题目的对比(题外话)
我们原本打算也是做C题,比赛前还准备了很多机器学习的东西。感觉今年的题目原本会出一道大数据分析的题目(虽然还确实是)
没有聚类没有预测没有分类 准备的全没用上 第一天真的慌了一下
而且和往年的题目对比,今年题目真的特别坑爹(相信特别多人 被附件B这个复制粘贴3张表×24周×402家供应商×八个转运商 给弄吐了)
今年题目主要就是 横向的数据量特别大,像以前题目比较类似的17B拍照、20C企业信贷策略、18商品这些,都是纵向数据量大,横向还好,今年真的有被坑到,附件还说0订购量得空,不能写0,我也不知咋的脑子一短路 CTRL+F把0全换成空了。。。还把excel关了,强行额外增加工作量
还好队友非常”善解人意“让我活着在这里写题解
题解
第一问
随便选取一些指标建立基于熵权法的TOPSIS模型就行了,举一些如下的例子:
总供应量:能够反映供应商的供应能力
总预定量:能够反映企业对于该供应商的偏好程度
每家供应商年均或者半年均供应量的变异系数:反映供应商供应能力的稳定性
到货率: 供 应 量 预 订 量 \frac{供应量}{预订量} 预订量供应量 能够反映供应商的信誉程度
…等等等等其它指标
但实际用TOPSIS分析之后最重要的指标其实是供应量,只有供的多了企业才能生产的更多。
排个序选50家就行了。
TOPSIS熵权法不懂的可以去看清风的视频
第二问
首先我们剔除掉不稳定供应商,即原则上不从不稳定供应商那里预定原材料。
然后我们把供应商分为了三种类型:
大规模周期性供应商
小规模供应商
不稳定供应商
故名思意不加赘述。
其次前面说到供应量是很难满足的,又要选选尽可能少的商家,所以我们引入了一个产能占比,前面的28200是企业的最高理论产能而不是维系正常生产的产能,我们的目标是选择尽可能少的商家达到尽可能高的产能占比。可以做一个多目标规划,但是权重不好确定。我们最后的思路是:对产能占比 α \alpha α和达到产能占比所需选择的最少商家做一个灵敏度分析(对定步长的每一个 α \alpha α做一个0-1规划,做出每个 α \alpha α所需选择的最少商家,画一个散点图),最后我们挑选了0.8左右的产能占比和30家供应商)
效果分析就是:选择了7%的商家达到了80%的产能占比(听着还不错对吧)
大概结果如下:
然后对于转运方案,我们也把后面四家比较具有规律性的供应商的损耗率每隔6个月取一个平均,然后得到的结论很有意思:
把损耗率往后平移两个周期以后和供应量放一起做一个折线图,大概长下面这样:
除了两个地方突然相反意外,其他吻合的异常的好,至于为什么损耗率需要向后平移:
联系实际,供应量是不是在供应商发出去货物的时候就能够统计,而损耗率是不是要企业收到货物以后实际计算收货量以后才能统计损耗率?那这两个数据必然会有一个时间差,这一点真的特别少有人能发现。
至于中间两个异常值,对比原来八家转运商的损耗率变化图,其实是这段时间由1234家供应商来运输了,1234转运商损耗率突然上升,所以5678家转运商损耗率突然下降。
然后把这几个周期的数据剃掉,重新做个图
吻合得异常得好!!!
这点超级超级感谢我们亲爱得队友的堪称神迹的发现,然后皮尔逊相关分析这两组散点(原本想灰色关联,但实际上跟时间没有关系,仅仅是因为运输量高了所以损耗率才搞了)于是在0.05的显著性水平下自然而然的具有正相关性。
然后就自然而然的得出这样的结论:
在已有的数据下无法推出8家转运商的转运能力的强弱。(因为不知道损耗率高是因为运送的货物多还是转运商本身问题,但是每家转运商最多5%的损耗率,说明大家都存在某种手段讲损耗率控制在一个范围以内)于是企业应该保持原有的策略,让转运损耗率周期性强的去运送。
这边放两张图,
能看的出来转运商的损耗率和某家的供应量特别相关吧。
然后设计运送方案我们就没有采取很高级的算法(尝试过,但是结果并不好,往往是一家供应商被分成了很多家转运商运输,和题目要求不符)仅仅采用了一个贪心算法,由一家转运商来运,运不下了优先考虑让下一家运。运送量大于6000的也是这个思路。因为尽可能要让一家供应商由一家转运商来送。
于是我们的转运方案就设计的很简单
大于6000的流程图很类似,就不放了。
采购策略也很简单,因为木材供应商相对稳定,所以采取这样的订购策略:把240周分成10个24周,求这10个24周里面所有第一周的平均值作为未来24周第一周的与定量。(下文称之为季节因子,可能听着没有各种高级的时间序列分析模型的那么高级,但是建模本身就是追求复杂问题简单化,把要求抽象出来就可以了,毕竟也不是一道预测题,本质上还是规划,虽然像什么ARIMA指数平滑模型当然还是能用的,但我感觉这里没必要)
第三问
多选A少选C,为了简化问题我们简化成了:
多选供应A的商家,少选供应C的商家。同时尽可能减少成本。
继续从第一问中的45家选(剔除了5家不稳定供应商)
我们引入了一个最小购买量的阈值,小于这个阈值的季节因子的商家在这周就不订购。你想,你订购了1立方米的木材还要找专车给你配送,是不是就要额外支付转运成本?所以我们这边有两个参数,一个是产能占比 α \alpha α,一个是最少所需购买的量 X X X,低于这个量就不买了。我们第二问的目标函数是A商家的数量和C商家的数量的比值,重新设定第一问里线性规划矩阵里A和C的系数,然后对 α \alpha α和 X X X进行一个网格搜索,记录 A C \frac{A}{C} CA最大的 α \alpha α和 X X X。
最后的结论是:
取 X = 40 , α = 0.83 X=40,\alpha=0.83 X=40,α=0.83的时候A\C最大,分别是16家和13家,原本第二问A和C是9家和15家来着?(好像,不记得了,反正结论看着是很河狸)
总共选了40家,产能占比到了0.83,同时预计低于40供应量的供应商不购买(虽然和题目说的尽可能全部购买有点违背,但谁会送0.3立方米的货物呢)
第四问
第四问特别特别感谢我的队友们,又发现了一个及其微小不容易察觉的点。题目说企业具备了提高产能的潜力,这个描述就很模糊,提高产能?怎么样提高产能?平白无故从28200涨到30000?这不河狸啊!
联系实际,建材企业具有这种潜力,最可能的是啥?
原料利用率提高了!原材料利用率提高了不就合理了?C原本要0.72立方米才能生产出1立方米产品,会不会现在只需要更少的原料就能生成1立方米产品呢?
大喊一声FJLnb666,然后画一张图:
每半年的订购量的折线图,注意是订购量,之前我们除了第一问,很少再用到订购量这张表,订购量能说明什么?企业本身的生产情况!最后半年C的订购量突然上升,而AB突然减少,能说明什么?我们推断是由于企业对于C原料的利用率突然上升了,通过技术改造,如今C的不在需要0.72,可能只需要0.5就能够生产1立方米的产品。于是企业订购了更多的C,而实际上木材供应商供应量是相对稳定的,突然订购C上涨就是因为企业选择了更多C类商家。
于是我们把第四问转化成了这样一个问题:C类产品利用率需要提高多少,才能够选择尽可能少的商家并且使得 α = 1 \alpha=1 α=1,即达到原始设定的产能。然后对利用率提高率 β \beta β和所需选择最少的商家数做一个灵敏度分析结果如下图:
大概1.18一下无解,就是说利用率提高1.18怎么样都无法选择出商家到达28200,我们最后挑选了1.25和30这个点,因为和第二问30家数据对上,结论就是如果C的利用率在原先基础上提高到125%,就是只要0.576立方米的C就能生产出1立方米的产品,并且只需要选择30个商家就能到达28200的产能,这样做是不是就很河狸了!
不足和缺陷
结论看上去特别棒,但是综合分析下来还是有一定缺陷的,我们没有考虑两周储备这个条件,因为当时发现根本不够用,送多少产多少,哪来的两周储备
其次就是运输成本和损失没有具体分析,只能从我们合理的假设上把问题简化了,比如对于转运方案的设计,整个三问都是基于贪心(其实 也可以试试0-1规划,但是考虑到有6000以上的供应商还是没有这么做,太复杂了)
还有就是实际产能并没有考虑到损耗率,实际上也很难算,因为不知道谁送谁的,损耗率和运输量的关系很难确定。
然后对于题目这个原材料价格这个信息的利用,我们也只是很简单的用1.1、1.2、0.6、0.66、0.72这几个数据改变了一下A、B、C在矩阵方程组里的系数。
这些信息也在附件的数据里很难体现,我看别人有假设初始存货量和提前购买以储备两周的,这点我们真的一点都没考虑到,供不应求了哪还来的储备
但是整体上这个思路的设计和合理性我都觉得很棒,至于算法那些启发式算法对初值敏感的特性直接就让我放弃了这个想法。
建模感想
和两个小伙伴第一次组队第一次参加国赛,写出这样的思路和论文,真的超级超级满意了!而且收获真的特别特别大。
容许我再做一次可耻的CV工程师
三天时间 三个人 三台电脑 一个奇迹
一个从未接触建模的人也和大佬体验了一把三个人的心有灵犀 齐头并进
有遗憾 但是三天时间 我们尽力了 不后悔
二十分钟速成matlab python excel
问题 假设 分析 建模 修正 求解 验证 画图 制表 编程 优化
将实际世界问题变成一个个抽象的模型 一串串优美的数字 一条条靓丽的折线 我们做到了 至少我们在这三天都超越了自己
比赛前 我们从来没有合作过一起建模
但三天里我们无比默契 我也找到了那个我一说就懂 一点就通的人 我的所有逻辑他都可以实现 变成一段段代码求出最优解
他的所有想法我都能迅速理解并帮他修改很多问题和提出新的见解
我也遇见了写工科论文纯手写不复制粘贴就能直接写出将近2w字的人 排版 画图 描述 都恰到好处 组织语言无比流畅
他们俩个一个敲字一个敲代码 而我好像就像一个黏合剂 修正剂 能流畅的进行小组内的沟通交流 提出很多新的点 什么任务都干点 让我们的组合更有力量 当然 还有订房间和点外卖
和强者一起比赛 连熬22小时都感觉不到一丝困意 即便凌晨六点也会因为一点新的发现而激动的无与伦比 往往是头先疼了才发现身体好像该休息了
不管结果如何 大家都太棒了
我们虽然最后有一些失误 但这些都不影响我们在这个过程中一边辛苦一边快乐 数据吻合预测的欢欣雀跃 和我们一起看日出的情谊
当然 这么累也还是要饭后拿队友安卓机玩一会纪念碑谷的
天天睡很少还连着几天异常兴奋从来没有过 不断靠近真相 即便最终是错误终点 都太快乐了 从来没有熬的这么开心过 也许身体是累的 但是精神上的充足真的快要溢出来了 太美妙了
很久没有这么长的小作文了
但是真的是因为太感谢了 感谢我的队友们
感谢努力的自己 感谢互相理解互相付出一起为了一个目标为了一组完美的数据而不懈努力的我们
第一次配合写论文就可以达成这样的结果我是真的从来没想到过的,也从来没有熬夜熬的那么开心过。
很庆幸遇到了一个
没接触过MATLAB,第一天只能在旁边看我写代码,第二天能够帮我找bug,第三天能够放着心让她去帮我写代码、
能够从我晦涩的想法中一下子GET到我的点并且提出更多超级好建议并马上转述成简洁易懂的语言给负责论文写作的队友、
能看一眼就能够立马记住S108 S139 S140 S307和S395这几个商家并且从四五十个乱七八糟的EXCEL中找到我们要的信息、
虽然偶尔意见不合但是争论着争论着突然一下子所有想法冒到一块去、并且能够为了一个偶然的发现和我一样兴奋的通宵且毫无困意、
能够在我把所有零全部删除的时候勇于献身站出来主动当两小时高级CV工程师,还让我活着写到现在的人;
很庆幸遇到了一个
写工科论文纯手写不复制粘贴就能直接写出将近2w字的人 排版 画图 描述 都恰到好处 组织语言无比流畅(绝不是复制粘贴)、
虽然是文科专业但仍然能够很快理解晦涩复杂的逻辑思维和令人脱发的矩阵方程
即便通宵很困,睡了一个小时就艰难的爬起来继续码论文、
做着最枯燥犯困的工作仍然三天只睡了不到12个小时的人。
大家真的都超级棒!
毕竟 直男码长文 眼泪流两盆
美赛冲TMD!