作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 linprog R 包中的solveLP 来解决一个简单的线性规划问题:
minimize -x1-x2
subject to 2*x1+x2+x3 =12
x1+2*x2 +x4 = 9
x1,x2,x3,x4 >=0
具有双重等价:
maximize 12*y1+9*y2
subject to 2*y1+y2 <= -1
y1+2*y2 <= -1
y1,y2 <=0
如果我以原始形式陈述问题,我会得到正确的结果 (5,2,0,0)。但是,当以对偶形式陈述问题时,前两个约束就被忽略了。我得到的结果 (0,0) 明显违反了 (2*y1+y2 <= -1 和 y1+2*y2 <= -1),是否有我缺少的额外设置或参数?请查看下面的代码并告诉我您的想法:
require(linprog)
objVec <- c(-1,-1,0,0)
rhsConstr <- c(12, 9,0,0,0,0)
Amat <- rbind( c( 2, 1, 1, 0 ),
c( 1, 2, 0, 1 ),
c( 1, 0, 0, 0 ),
c( 0, 1, 0, 0 ),
c( 0, 0, 1, 0 ),
c( 0, 0, 0, 1 ))
res <- solveLP( objVec, rhsConstr, Amat, maximum=FALSE, const.dir = c("==","==",">=",">=",">=",">=") , lpSolve=TRUE)
res$solution
# dual problem - this is where the problem is
objVec <- c(12,9)
rhsConstr <- c(-1.0,-1.0,0,0)
Amat <- rbind( c( 2, 1),
c( 1, 2),
c( 1, 0),
c( 0, 1))
res <- solveLP( objVec, rhsConstr, Amat, maximum=TRUE, const.dir = rep("<=",length(rhsConstr)))
res$solution
在正空间中,对偶问题确实给出了正确的答案(1/3,1/3):
objVec <- c(12,9);
rhsConstr <- c(1,1,0,0);
Amat <- rbind( c( 2, 1), c( 1, 2), c( 1, 0), c( 0, 1));
res <- solveLP( objVec, rhsConstr, Amat, maximum=FALSE, const.dir = rep(">=",length(rhsConstr)) , lpSolve=TRUE);
res$solution;
最佳答案
与许多线性编程库一样,有隐式非负约束,y>=0
:没有可行的解决方案(但我希望 res$status
能够表明这一点)。
solveLP
似乎不允许负解:您可以将问题转换为仅具有非负值(将 y1
替换为 u1-v1
,将 y2
替换为 u2-v2
)或使用另一个允许负值的包。
library(Rglpk)
objVec <- c(12,9)
rhsConstr <- c(-1.0,-1.0,0,0)
Amat <- rbind( c( 2, 1),
c( 1, 2),
c( 1, 0),
c( 0, 1))
Rglpk_solve_LP(
objVec, Amat, rep("<=",4), rhsConstr,
bounds = list( lower = list( ind=c(1L,2L), val=c(-Inf,-Inf) ),
upper = list( ind=c(1L,2L), val=c( Inf, Inf) ) ),
max=TRUE
)
关于linprog 包中设置的 R 线性规划使用solveLP忽略约束(小于或等于),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20819743/
我正在使用 linprog R 包中的 solveLP 来解决一个简单的线性规划问题: minimize -x1-x2 subject to 2*x1+x2+x3 =12
我是一名优秀的程序员,十分优秀!