线性规划问题:
min c T x s . t . A x ≤ b , x ≥ 0 \min c^\mathrm{T}x \quad s.t. \quad Ax \leq b,x\geq 0 mincTxs.t.Ax≤b,x≥0
可使用R语言linprog包中的solveLP()对上述问题进行求解。
语法:
solveLP( c, b, A, maximum = FALSE,
const.dir = rep( "<=", length(b) ),
maxiter = 1000, zero = 1e-9, tol = 1e-6, dualtol = tol,
lpSolve = FALSE, solve.dual = FALSE, verbose = 0 )
参数说明:
参数 | 类型 | 含义 | 默认值 |
---|---|---|---|
c | n维向量 | 见公式 | |
b | m维向量 | 见公式 | |
A | m × \times ×n维矩阵 | 见公式 | |
maximum | 布尔值 | 优化问题是最大化(TRUE)还是最小化(FALSE) | FALSE |
const.dir | 长度为m的字符串向量 | m个约束条件中的不等号 | rep( “<=”, length(n) ) |
maxiter | 整数 | 最大循环次数 | 1000 |
zero | 小数 | 当一个数的绝对值比zero小时,该数可视为0 | 1e-9 |
tol | 小数 | 可容忍的不满足的约束条件的数量,超过后返回3 | 1e-6 |
dualtol | 小数 | 对偶问题可容忍的不满足的约束条件的数量,超过后返回非零的数 | tol |
lpSolve | 布尔值 | 是否使用lpSolve包 | FALSE |
solve.dual | 布尔值 | 对偶问题是否需要同时求解 | FALSE |
verbose | 整数 | 指示应打印多少中间结果(0 = 无输出;4 = 最大输出) | 0 |
例子:
library(linprog)
c<-c(1800,600,600)
b<-c(40,90,2500)
A<-rbind(c(0.7,0.35,0),
c(1.5,1,3),
c(50,12.5,20))
x<-solveLP(c,b,A,TRUE) #求解最大化问题
x$solution
输出结果:
>x$solution
1 2 3
44 24 0