專案委外最小成本計算
場景:
某長期配合三家品質與能力相當之協力商 (W1, W2, W3):
現有一專案可委外部份有三項子專案 (T1, T2, T3)。
協力商 W1 承包子專案 T1 報價 16 萬元,子專案 T2 報價 10 萬元,子專案 T3 報價 13 萬元。
協力商 W2 承包子專案 T1 報價 22 萬元,子專案 T2 報價 18 萬元,子專案 T3 報價 23 萬元。
協力商 W3 承包子專案 T1 報價 15 萬元,子專案 T2 報價 25 萬元,子專案 T3 報價 17 萬元。
問題:
求算專案委外最小成本之金額。
求算協力商承包子專案委外組合。
解答輸出:
最小成本 = 46 協力商 (1) 承包子專案=0 協力商 (2) 承包子專案=0 協力商 (3) 承包子專案=1 協力商 (4) 承包子專案=0 協力商 (5) 承包子專案=1 協力商 (6) 承包子專案=0 協力商 (7) 承包子專案=1 協力商 (8) 承包子專案=0 協力商 (9) 承包子專案=0
GNU-R:
library(lpSolveAPI) # 限制條件數目, 效益變數數目 lprec <- make.lp(0, 9) # 求最大值 lp.control(lprec, sense='min') # 目標係數 set.objfn(lprec, c(16, 22, 15, 10, 18, 25, 13, 23, 17)) # 資源限制條件 add.constraint(lprec, c(1, 1, 1, 0, 0, 0, 0, 0, 0), "=", 1) add.constraint(lprec, c(0, 0, 0, 1, 1, 1, 0, 0, 0), "=", 1) add.constraint(lprec, c(0, 0, 0, 0, 0, 0, 1, 1, 1), "=", 1) add.constraint(lprec, c(1, 0, 0, 1, 0, 0, 1, 0, 0), "=", 1) add.constraint(lprec, c(0, 1, 0, 0, 1, 0, 0, 1, 0), "=", 1) add.constraint(lprec, c(0, 0, 1, 0, 0, 1, 0, 0, 1), "=", 1) lprec # 變數為正整數 set.bounds(lprec, lower = c(0,0,0, 0,0,0, 0,0,0), columns = seq(1:9)) set.type(lprec, seq(1:9), "integer") # 解算 solve(lprec) # 輸出線性規劃表格 lprec # 解答 Ans.Optimization <- get.objective(lprec) Ans.Varibles <- get.variables(lprec) # 輸出最大值 print(sprintf("最小成本=%d", Ans.Optimization)) # 輸出最大值下作業組合 for (i in seq(1:9)) { print(sprintf("協力商 (%d) 承包子專案=%d", i, Ans.Varibles[i])) }