R語言解決最優化問題-線性優化(LP)問題

 原文:http://tecdat.cn/?p=3432

線性優化簡介

優化是一種爲全部可能的解決方案找到給定問題的最佳解決方案的技術。優化使用嚴格的數學模型來找出給定問題的最有效解決方案。html

要從優化問題開始,首先肯定目標很是重要。目標是績效的量化衡量。例如:最大化利潤,最小化時間,最小化成本,最大化銷售。編程

優化問題可分爲兩組

  1. 線性規劃(LP):它也被稱爲線性優化,在這個問題中,目標是在數學模型中得到最佳結果,其中目標和全部約束是決策變量的線性函數。
  2. 二次規劃(QP):在二次規劃中,目標是決策變量和約束的二次函數,它們是變量的線性函數。二次函數也是一種非線性規劃。

對於這篇文章,只解釋了線性規劃問題。函數

R中的線性優化:

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

線性規劃(LP)

線性編程表示爲:

min c T   = min(c 1 x 1 + ... + c n x n)

限制:

x> = B,x  > = 0

線性規劃示例:

  • 一家公司但願最大化兩種產品A和B的利潤,分別以25美圓和20美圓的價格出售。天天有1800個資源單位,產品A須要20個單位,而B須要12個單位。這兩種產品都須要4分鐘的生產時間,而且可用的總工做時間爲天天8小時。每種產品的生產數量應該是什麼才能使利潤最大化。

上述問題的目標函數是:

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)

  • _方向_控制是否最小化或最大化
  • 係數c被編碼爲矢量_objective.in_
  • 約束_A_做爲矩陣_const.mat給出_,方向爲_const.dir_
  • 約束b做爲向量_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問題。

還有問題嗎?請在下面留言!

相關文章
相關標籤/搜索