統計與計量‎ > ‎應用總覽‎ > ‎

專案委外最小成本計算

場景

  • 某長期配合三家品質與能力相當之協力商 (W1, W2, W3):
    • 現有一專案可委外部份有三項子專案 (T1, T2, T3)。
    • 協力商 W承包子專案 T報價 16 萬元,子專案 T報價 10 萬元,子專案 T報價 13 萬元。
    • 協力商 W承包子專案 T報價 22 萬元,子專案 T報價 18 萬元,子專案 T報價 23 萬元。
    • 協力商 W承包子專案 T報價 15 萬元,子專案 T報價 25 萬元,子專案 T報價 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]))
}
ċ
LP-05.R
(1k)
李智,
2013年6月16日 下午9:02