我是优化新手,请耐心等待。这是我的问题:
A,B,C,D和E是百分比(18%,2%,1%,78%,1%)
最大化总和(A(x)+ B(x)+ C(x)+ D(x)+ E(x)),即最大化x(x <= 499572)
如此
如何在R中解决此问题?
我正在使用LPsolve软件包,但是我有任何建议都可以。
答案 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