專案委外最小成本計算

場景

  • 某長期配合三家品質與能力相當之協力商 (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 萬元。

問題

    1. 求算專案委外最小成本之金額。

    2. 求算協力商承包子專案委外組合。

解答輸出

最小成本 = 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])) }