優化是一種爲全部可能的解決方案找到給定問題的最佳解決方案的技術。優化使用嚴格的數學模型來找出給定問題的最有效解決方案。html
要從優化問題開始,首先肯定目標很是重要。目標是績效的量化衡量。例如:最大化利潤,最小化時間,最小化成本,最大化銷售。編程
對於這篇文章,只解釋了線性規劃問題。函數
R中可用於優化的經常使用包包括:優化
Problem Typeui
Package編碼
Functionspa
General (1-dimensional)code
Built-inhtm
optimize()
General (n-dimensional)blog
Built-in
optim()
Linear Programming (LP)
lpsolve
lp()
Quadratic Programming (QP)
quadprog
solve.qp()
General Interface
ROI
ROI_Solve()
通常優化問題的內置函數示例:
optimizer(objective, constraints, bounds=NULL, types=NULL, maximum=FALSE)
例:
f <- function(x) 2 * (x[1]-1)^2 + 5 * (x[2]-3)^2 + 10
r < - optim(c(1,1),f)
r $ convergence == 0 ##若是收斂到最小值,則返回TRUE ## [1]是的
R $par ## [1] 1.000168 3.000232
R $value ## [1] 10
線性編程表示爲:
min c T x = min(c 1 x 1 + ... + c n x n)
限制:
A x> = B,x > = 0
線性規劃示例:
上述問題的目標函數是:
max(銷售額)=max(25 x 1 + 20 x 2)
其中,
x 1是產品A的單位產生的
x 2是產品B的單位產生的
x 1和x 2也稱爲決策變量
問題中的約束(資源和時間):
20x 1 + 12 x 2 <= 1800(資源約束)
4x 1 + 4x 2 <= 8 * 60(時間約束)
解決R中的上述問題:
因爲這是一個線性規劃問題,咱們將使用 _lpsolve _ package和 _lp() _函數來找到最優解。_lp() _函數的語法 是:
lp(direction =「min」,objective.in,const.mat,const.dir,const.rhs)
##設置決策變量的係數 objective.in < - c(25,20) ##建立約束martix const.mat < - martix(c(20,12,4,4),nrow = 2,byrow = TRUE) ## define constraints time_constraint < - (8 * 60) resource_constraint < - 1800 ## RHS用於約束 const.rhs < - c(resource_constraint,time_constraint) ##約束方向 const.dir < - c(「<=」,「<=」) ##找到最佳解決方案 最佳< - lp(direction =「max」,objective.in,const.mat,const.dir,const.rhs)
##顯示x1和x2的最佳值 ## [1] 45 75 ##在最佳點檢查目標函數的值 ## [1] 2625
從上面的輸出中,咱們能夠看到該公司應該生產45個產品A和75個產品B單位,以得到2625美圓的銷售額。
在制定目標函數和約束以後,咱們能夠擴展相同的方法來解決R中的其餘LP問題。
還有問題嗎?請在下面留言!