Excel,R求解最優解問題
阿新 • • 發佈:2018-11-04
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代表無