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種不夠用的,看來這個方法還是有點問題,我得再研究研究

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


分享到:


相關文章: