商品銷售最佳獲利計算

場景

  • 某商店同時販售兩種商品 (P1, P2):

    • 銷售 P1 獲利 300 元,銷售 P2 獲利 400 元。

    • 搬運 P1 需要 1 小時,搬運 P2 需要 2 小時,但受合約限制,搬運至多只能服務 10 小時。

    • 銷售 P1 至少會帶來有 3 個新客戶詢問,銷售 P2 至少會帶來有 5 個新客戶詢問,每天至少會有 18 個以上之新客戶詢問。

    • 促銷活動中,銷售 P1 贈送 2 元贈品,銷售 P2 贈送 3 元贈品,但無論如何總是贈送價值 12 元贈品。

問題

    1. 求算商店每日最多可獲利之金額。

    2. 求算商店獲利最大之商品販售數量組合。

解答輸出

商品1 商品2 Maximize 300 400 限制1 1 2 <= 10 限制2 3 5 >= 18 限制3 2 3 = 12 Kind Std Std Type Int Int Upper Inf Inf Lower 0 0 獲利=1800 商品(1) 銷售數= 6 商品(2) 銷售數= 0

GNU-R

library(lpSolveAPI) # 作業數 lprec <- make.lp(0, 2) # 求最大值 lp.control(lprec, sense='max') # 目標係數 set.objfn(lprec, c(300, 400)) # 資源限制條件 add.constraint(lprec, c(1, 2), "<=", 10) add.constraint(lprec, c(3, 5), ">=", 18) add.constraint(lprec, c(2, 3), "=", 12) # 作業組合為正整數 set.bounds(lprec, lower = c(0, 0), columns = c(1, 2)) set.type(lprec, c(1, 2), "integer") # 線性規劃表格-列/行-變數 dimnames(lprec) <- list(c("限制1", "限制2", "限制3"), c("商品1", "商品2") ) # 解算 solve(lprec) # 輸出線性規劃表格 lprec # 解答 Ans.Optimization <- get.objective(lprec) Ans.Varibles <- get.variables(lprec) # 輸出最大值 print(sprintf("獲利=%d", Ans.Optimization)) # 輸出最大值下作業組合 for (i in seq(1:2)) { print(sprintf("商品(%d) 銷售數=%2d", i, Ans.Varibles[i])) }