R語言解決最優(yōu)化問題-線性優(yōu)化(LP)問題
?原文:http://tecdat.cn/?p=3432
?

線性優(yōu)化簡(jiǎn)介
優(yōu)化是一種為所有可能的解決方案找到給定問題的最佳解決方案的技術(shù)。優(yōu)化使用嚴(yán)格的數(shù)學(xué)模型來找出給定問題的最有效解決方案。
要從優(yōu)化問題開始,首先確定目標(biāo)非常重要。目標(biāo)是績(jī)效的量化衡量。例如:最大化利潤(rùn),最小化時(shí)間,最小化成本,最大化銷售。
優(yōu)化問題可分為兩組
線性規(guī)劃(LP):它也被稱為線性優(yōu)化,在這個(gè)問題中,目標(biāo)是在數(shù)學(xué)模型中獲得最佳結(jié)果,其中目標(biāo)和所有約束是決策變量的線性函數(shù)。
二次規(guī)劃(QP):在二次規(guī)劃中,目標(biāo)是決策變量和約束的二次函數(shù),它們是變量的線性函數(shù)。二次函數(shù)也是一種非線性規(guī)劃。
對(duì)于這篇文章,只解釋了線性規(guī)劃問題。
R中的線性優(yōu)化:
R中可用于優(yōu)化的常用包包括:
Problem TypePackageFunctionGeneral (1-dimensional)Built-in
optimize()
General (n-dimensional)Built-in
optim()
Linear Programming (LP)
lpsolve
lp()
Quadratic Programming (QP)
quadprog
solve.qp()
General Interface
ROI
ROI_Solve()
?一般優(yōu)化問題的內(nèi)置函數(shù)示例:
這些程序的一般參數(shù)結(jié)構(gòu)是:
optimizer(objective, constraints, bounds=NULL, types=NULL, maximum=FALSE)
例:
定義目標(biāo)函數(shù)
f <- function(x) 2 * (x[1]-1)^2 + 5 * (x[2]-3)^2 + 10
呼叫優(yōu)化功能
r < - ?optim(c(1,1),f)
檢查優(yōu)化是否收斂到最小
r $ convergence == 0 ##如果收斂到最小值,則返回TRUE
## [1]是的
最佳輸入?yún)?shù)
R $par
## [1] 1.000168 3.000232
目標(biāo)函數(shù)的價(jià)值至少
R $value
## [1] 10
線性規(guī)劃(LP)
線性編程表示為:
min c?T??x??= min(c?1?x?1?+ ... + c?n?x?n)
限制:
A?x> = B,x??> = 0
線性規(guī)劃示例:
一家公司希望最大化兩種產(chǎn)品A和B的利潤(rùn),分別以25美元和20美元的價(jià)格出售。每天有1800個(gè)資源單位,產(chǎn)品A需要20個(gè)單位,而B需要12個(gè)單位。這兩種產(chǎn)品都需要4分鐘的生產(chǎn)時(shí)間,并且可用的總工作時(shí)間為每天8小時(shí)。每種產(chǎn)品的生產(chǎn)數(shù)量應(yīng)該是什么才能使利潤(rùn)最大化。
上述問題的目標(biāo)函數(shù)是:
max(銷售額)=max(25 x 1?+ 20 x 2)
其中,
x?1是產(chǎn)品A的單位產(chǎn)生的
x?2是產(chǎn)品B的單位產(chǎn)生的
x?1和x?2也稱為決策變量
問題中的約束(資源和時(shí)間):
20x?1?+ 12 x?2?<= 1800(資源約束)
4x?1?+ 4x?2?<= 8 * 60(時(shí)間約束)
解決R中的上述問題:
由于這是一個(gè)線性規(guī)劃問題,我們將使用??lpsolve??package和??lp()?函數(shù)來找到最優(yōu)解。lp()?函數(shù)的語法??是:
lp(direction =“min”,objective.in,const.mat,const.dir,const.rhs)
方向控制是否最小化或最大化
系數(shù)c被編碼為矢量objective.in
約束A作為矩陣const.mat給出,方向?yàn)閏onst.dir
約束b作為向量const.rhs插入
?
##設(shè)置決策變量的系數(shù)
objective.in < - c(25,20)
##創(chuàng)建約束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
##在最佳點(diǎn)檢查目標(biāo)函數(shù)的值
## [1] 2625
從上面的輸出中,我們可以看到該公司應(yīng)該生產(chǎn)45個(gè)產(chǎn)品A和75個(gè)產(chǎn)品B單位,以獲得2625美元的銷售額。
在制定目標(biāo)函數(shù)和約束之后,我們可以擴(kuò)展相同的方法來解決R中的其他LP問題。
?
還有問題嗎?請(qǐng)?jiān)谙旅媪粞裕?/strong>
?