R语言——广义逆矩阵能怎么用咧

今天想到了一个做法,不确定可行程度,想尝试一下

R语言——广义逆矩阵能怎么用咧

作为一个做计划的,有时偶尔会碰到一类翻白眼的问题,那就是生产的东西不够做,反过来找咱要计划

这时,咱很有团队精神的老板基本上转头就会问上咱这样一句话:"咱库存里的原材料能凑出多少台给他们生产做啊?"

这个问题的表达是挺简洁的,可是,计算答案的过程貌似做不到这么简洁啊,毕竟,就咱一般的计算步骤来说,情况是这样的:

比如咱有10个型号,每个型号对应有10个不同的原材料组成清单,大概像这样:

#导入物料清单数据
BOMbycol str(BOMbycol)
#单独拎出组件号、成品型号和每台用量
BOMbycol #将长格式转换为宽格式
library("reshape2")
BOM BOM
R语言——广义逆矩阵能怎么用咧

然后,咱还有一个库存清单(这里我没有,所以随便编一个,真做的话需要原材料编号能和上面那份BOM对应上)

Stockqty 
R语言——广义逆矩阵能怎么用咧

可接着该咋办咧??要知道,如果咱有一份现成的成品数量,通过成品数和物料清单做加权和,倒是可以很快就计算出需要用多少原材料,因为,加权和本身是个矩阵乘法嘛,但这个过程如果要倒过来计算,那就有点懵逼了

但是,数学上有个很神奇的概念叫做假设,这时,我想到了某个不靠谱的假设——如果现有的库存可以比较齐整的匹配到全部成套,那么可以假设此时消耗量接近等于库存数量,那么,通过在式子两边各乘一个物料清单的广义逆矩阵,就能反过来计算成品数

R语言——广义逆矩阵能怎么用咧

在有了这个神奇的想法后,我便立刻付诸实践了,结果,开启了第一次打脸

#求BOM矩阵广义逆*库存量 

library("MASS")
Origin
R语言——广义逆矩阵能怎么用咧

好吧,忘记了这个世界上有负数的存在是我的错,那么,有没有啥法子可以挽个尊呢?

这时我想到了另一个函数,optim

#先把小于0的项归零
Origin[which(Origin <0)] #尝试用optim缩小库存和消耗量差距
#optim计算用的function
CanProduce Consume Dev2 return(Dev2) }
#开始优化

MaxQty
R语言——广义逆矩阵能怎么用咧

这回我可是把取正数这件事记住了,在优化过程里还特意设了数据下限lower = 0

但是,我好像还是没能逃脱打脸的命运,因为,优化过程只是减少了一部分消耗量和库存数量之间的差距,但是做不到完全避免超量

R语言——广义逆矩阵能怎么用咧

所以,按照现有的计算结果去做3470台成品的话,会面临800多种原材料里头还是会有13种不够用的,看来这个方法还是有点问题,我得再研究研究

--------------今日拖堂,下回再续---------------


分享到:


相關文章: