1

早上好,我有一个优化问题的问题,我无法在 R 中解决但在 Excel 中:

我想优化以下情况(物资和人员的运输):
航空公司 x1 可以运输 50 吨物资和 500 人
航空公司 x2 可以运输 150 吨物资和 250 人

50x1 + 150x2 >= 900 -> 材料运输最小。900
500x1 + 250x2 >= 2500 -> 人员运输 2500

x1 是一家航空公司,每次航班的航班费用为 2500 x2 是一家航空公司,每次航班的航班费用为 3500 费用应该最小化!

x1>=0
x2>=0

这是我在 R 中的解决方案(来自包“boot”的函数单工):

library("boot")    
a <- c(2500, 3500)
A2 <- matrix(c(50, 150, 500, 250), ncol=2, nrow=2, byrow=TRUE)
b2 <- c(900, 2500)
simplex(a, A2 = A2, b2 = b2, maxi=FALSE)

我收到以下错误:
Fehler in pivot(tableau, prow, pcol) : NAs nicht zugelassen in Teilbereichszuweisungen

Excels Solver 为我提供了精确的解决方案:x1 = 2.4 和 x2 = 5.2

我在 R 中的错​​误在哪里?我必须使用参数 A2 和 b2 因为 >= ...感谢您的帮助!

只是一个简短的扩展:我使用以下语法使用包“linprog”中的函数“solveLP”解决了给定的问题:

solveLP(cvec = a, bvec = b, Amat = A, 
    maximum=FALSE, const.dir=c(">=",">="))

和:

A <- matrix(c(-50,-150,-500,-250),nrow=2,ncol=2,byrow=TRUE)
a <- c(2500, 3500)
b <- c(-900, -2500)
solveLP(a,b,A,maximum=FALSE)

仍然想知道为什么函数 simplex 会给我这个错误?

4

1 回答 1

3

我不知道确切的原因(所以这不是必要的解决方案)。但是我知道当你设置一个上限时错误就解决了A1b1即使b1是一个巨大的值。

例如;
simplex(a, A1 = c(1, 1), b1 = 1.0E+12, A2 = A2, b2 = b2, maxi = FALSE)
于 2016-11-10T21:58:59.160 回答