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

製程與資源最佳利用效益計算

場景

  • 某工廠耗用三種資源 (R1=人工,R2=設備 A,R3=設備 B),可生產兩種產品 (P1,P2):
    • 產品 P1 可由兩種製程 (D11, D12) 生產
    • 產品 P2 可由兩種製程 (D21, D22) 生產
    • 製程 D11 分別耗用資源 (R1=1.0,R2=8,R3=3),但可獲利  800。
    • 製程 D12 分別耗用資源 (R1=1.5,R2=4,R3=2),但可獲利 1200。
    • 製程 D21 分別耗用資源 (R1=1.0,R2=8,R3=3),但可獲利  600。
    • 製程 D22 分別耗用資源 (R1=1.5,R2=4,R3=9),但可獲利  700。
    • 人工   最大耗用量   80 小時
    • 設備 A 最大耗用量  150 小時
    • 設備 B 最大耗用量  130 小時

問題

  1. 求算工廠產品每週最多可獲利之金額。
  2. 求算工廠獲利最大之產品生產數量組合。

解答輸出

          作業1  作業2  作業3  作業4         
Maximize    800   1200    600    700         
資源1         1    1.5      1    1.5  <=   80
資源2         8      4      5      4  <=  150
資源3         3      2     10      9  <=  130
Kind        Std    Std    Std    Std         
Type        Int    Int    Int    Int         
Upper       Inf    Inf    Inf    Inf         
Lower         0      0      0      0         

            獲利=44400
            作業(1)= 0
            作業(2)=37
            作業(3)= 0
            作業(4)= 0

GNU R

library(lpSolveAPI)

# 作業數
lprec <- make.lp(0, 4)

# 求最大值
lp.control(lprec, sense='max')

# 目標係數
set.objfn(lprec, c(800, 1200, 600, 700))

# 資源限制條件
add.constraint(lprec, c(1, 1.5, 1, 1.5), "<=", 80)
add.constraint(lprec, c(8, 4, 5, 4), "<=", 150)
add.constraint(lprec, c(3, 2, 10, 9), "<=", 130)

# 作業組合為正整數
set.bounds(lprec, lower = c(0, 0, 0, 0), columns = c(1, 2, 3, 4))
set.type(lprec, c(1, 2, 3, 4), "integer")

# 線性規劃表格-列/行-變數
dimnames(lprec) <- list(c("資源1", "資源2", "資源3"), 
                        c("作業1", "作業2", "作業3", "作業4"))

# 解算
solve(lprec)

# 輸出線性規劃表格
lprec  

# 解答
Ans.Optimization <- get.objective(lprec)
Ans.Varibles <- get.variables(lprec)

# 輸出最大值
print(sprintf("獲利=%d", Ans.Optimization))

# 輸出最大值下作業組合
for (i in seq(1:4)) {
  print(sprintf("作業(%d) 生產數=%2d", i, Ans.Varibles[i]))
}
ċ
LP-02.R
(1k)
李智,
2013年6月15日 下午6:53