线性优化R

时间:2018-09-20 11:01:46

标签: r linear-programming

我是优化新手,请耐心等待。这是我的问题:

A,B,C,D和E是百分比(18%,2%,1%,78%,1%)

最大化总和(A(x)+ B(x)+ C(x)+ D(x)+ E(x)),即最大化x(x <= 499572)

如此

  1. A(x)<= 20076
  2. B(x)<= 8619
  3. C(x)<= 145
  4. D(x)<= 465527
  5. E(x)<= 5205

如何在R中解决此问题?

我正在使用LPsolve软件包,但是我有任何建议都可以。

1 个答案:

答案 0 :(得分:4)

我们重新陈述该问题,省略单个标量变量x上的正约束,例如:

maximize 1 * x
such that
 0.18 * x <= 20076 
 0.02 * x <= 8619 
 0.01 * x <= 145 
 0.78 * x <= 465527 
 0.01 * x <= 5205 

因此,作为线性程序,我们具有以下最佳值x

library(lpSolve)

constr.mat <- c(.18, .02, .01, .78, .01)
RHS <- c(20076, 8619, 145, 465527, 5205)
soln <- lp("max", 1, constr.mat, "<=", RHS)
soln$solution
## [1] 14500

当然,正如下面的评论所指出,通过采用x的最小上限,可以在不进行线性编程的情况下轻松解决此问题:

min(RHS / constr.mat)
## [1] 14500

注意

如果您的意思不是问题中陈述的问题,而是这个5个变量的问题:

max 0.18 * x1 + 0.02 * x2 + 0.01 * x3 + 0.78 * x4 + 0.01 * x5
such that
 0.18 * x1 <= 20076 
 0.02 * x2 <= 8619 
 0.01 * x3 <= 145 
 0.78 * x4 <= 465527 
 0.01 * x5 <= 5205 

那么我们有

soln2 <- lp("max", constr.mat, diag(constr.mat), "<=", RHS)
soln2$solution
## [1] 111533.3 430950.0  14500.0 596829.5 520500.0

同样,在没有线性编程的情况下计算起来很简单:

RHS / constr.mat
## [1] 111533.3 430950.0  14500.0 596829.5 520500.0