R lpSolve程序包找不到最佳解决方案 [英] R lpSolve package does not find optimal solution

查看:67
本文介绍了R lpSolve程序包找不到最佳解决方案的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用R lpSolve软件包解决以下优化问题:

I'm trying to solve the following optimization problem with R lpSolve package:

1.007825*x1 +12.000000*x2 +15.99492*x3 +14.00307*x4 +31.97207*x5 +30.97376*x6 >= 10
1.007825*x1 +12.000000*x2 +15.99492*x3 +14.00307*x4 +31.97207*x5 +30.97376*x6 <= 15
       1*x1        - 2*x2       + 0*x3        -1*x4        +0*x5        -3*x6 <=  2
         xi >= 0, where i = [1,2,3,4,5,6]

我的目标函数是:

1.007825*x1 +12.000000*x2 +15.99492*x3 +14.00307*x4 +31.97207*x5 +30.97376*x6

我以标准形式(A)创建约束矩阵:

I create the matrix of constraints in the standard form (A):

           [,1] [,2]      [,3]      [,4]      [,5]      [,6]
 [1,] -1.007825  -12 -15.99492 -14.00307 -31.97207 -30.97376
 [2,]  1.007825   12  15.99492  14.00307  31.97207  30.97376
 [3,]  1.000000   -2   0.00000  -1.00000   0.00000  -3.00000
 [4,] -1.000000    0   0.00000   0.00000   0.00000   0.00000
 [5,]  0.000000   -1   0.00000   0.00000   0.00000   0.00000
 [6,]  0.000000    0  -1.00000   0.00000   0.00000   0.00000
 [7,]  0.000000    0   0.00000  -1.00000   0.00000   0.00000
 [8,]  0.000000    0   0.00000   0.00000  -1.00000   0.00000
 [9,]  0.000000    0   0.00000   0.00000   0.00000  -1.00000

我创建边界矩阵(b):

I create the matrix of borders (b):

      [,1]
 [1,]  -10
 [2,]   15
 [3,]    2
 [4,]    0
 [5,]    0
 [6,]    0
 [7,]    0
 [8,]    0
 [9,]    0

和目标函数(f):

f = c(1.007825, 12.000000, 15.99492, 14.00307, 31.97207, 30.97376)

当我将其放入代码中时:

When I put it into the code:

out = lp("min",f,A,rep("<=",9),b,all.int=TRUE),

我得到解c(0,0,0,1,0,0),尽管我知道解为c(0,1,0,0,0,0).如果我更改右边框(而不是15,我改为13),则一切正常.可能是什么问题?

I get the solution c(0,0,0,1,0,0), although I know that the solution is c(0,1,0,0,0,0). If I change the right border (instead of 15 I make 13), everything works. What could be the problem?

推荐答案

使用 lpSolveAPI ,该问题可以很好地解决:

With lpSolveAPI, the problem solves fine:

library(lpSolveAPI)
lprec <- make.lp(0, ncol=6)
set.type(lprec, columns=seq(1,6), type="integer")
set.objfn(lprec, obj=c(1.007825, 12, 15.99492, 14.00307, 31.97207, 30.97376))

add.constraint(lprec, xt=c(1.007825, 12, 15.99492, 14.0030, 31.97207, 30.97376), type=">=", rhs=10)
add.constraint(lprec, xt=c(1.007825, 12, 15.99492, 14.0030, 31.97207, 30.97376), type="<=", rhs=15)
add.constraint(lprec, xt=c(1, -2, 0, -1, 0, -3), type="<=", rhs=2)

solve(lprec)
get.variables(lprec)

返回

[1] 0 1 0 0 0 0

这篇关于R lpSolve程序包找不到最佳解决方案的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆