1. Excel最優化
本人使用的是2016版Excel,一開始是沒有Solver這個求解最優解的包的按鈕的。MS Excel在裝載時會下載該包,但是不予激活。所以如果在“數據”這一欄沒有找到“Solver/規劃求解”按鈕,需要自行激活,方法如下:
(1)點開“選項”按鈕,選中“加載項”,點擊“轉到”。
(2)“跳轉”後會顯示如下彈窗,選中“分析工具庫”和“規劃求解加載項”,點擊“確定”。
(3)Excel工具欄就會多出右下方“分析”這一欄
然後我們就可以使用Excel求解最優化問題啦~
假設李皮皮要進行一個增重計劃,以下爲約束條件和決策變量信息:
變量:每個月分別吃烤肉的次數x1和吃火鍋的次數x2(B3和B4),目前設定爲1次和2次;x1不能超過5次,x2不能超過10次(會破產)。
每次吃烤肉會消耗掉300g肉;每次吃火鍋會消耗掉400g肉;一個月總耗肉量不能超過5000g;
李皮皮每吃一次烤肉增重500g,每吃一次火鍋增重600g;
那麼李皮皮一個月依靠吃火鍋和烤肉的淨增重就是:y=500x1+600x2;
目標就是在約束條件下,求解y最大值。
針對這個數學問題,我們做了如下輸入。將目標函數公式所在處選中,然後點擊“規劃求解參數”,設定條件,求解。
得到的結果可以看出,在給定條件下,我們得到的最優解爲每個月吃3次烤肉,10次火鍋,就能長最大胖7500g。這麼一算我就想去吃飯了。
2. R最優化
同樣的問題,我們用R再來一次:
看了下好像包不少,這裏使用Rsymphony包裏的Rsymphony_solve_LP()函數。
https://www.rdocumentation.org/packages/Rglpk/versions/0.6-3/topics/Rglpk_solve_LP
整理一下上述應用題的公式,有:
代碼如下:
//導入包
require(Rsymphony)
//目標函數
obj <- c(500,600)
//各個值
mat <- matrix(c(1,1,0,0,300,0,0,1,1,400),nrow = 5)
//顯示矩陣
mat
[,1] [,2]
[1,] 1 0
[2,] 1 0
[3,] 0 1
[4,] 0 1
[5,] 300 400
//確定約束條件符號
> dir <- c("<=",">=","<=",">=","<=")
//約束條件符號右邊值
> rhs <- c(5,0,10,0,5000)
//求最大解
> max <- TRUE
//兩個變量類型均爲int
> types <- c("I","I")
//求解
> Rsymphony_solve_LP(obj,mat,dir,rhs,types = types, max = max)
$solution
[1] 3 10 //解分別爲3和10
$objval
[1] 7500 //最優解爲7500
$status
TM_OPTIMAL_SOLUTION_FOUND
0 //0代表有最優解,1代表無