14.1 线性规划

clpAPI 线性规划求解器。glpk 的两个 R 接口 – glpkAPIRglpk 提供线性规划和混合整数规划的求解能力。lp_solve 的两个 R 接口 – lpSolveAPIlpSolve 也提供类似的能力。ompr 求解混合整数线性规划问题。

举个例子,如下

\[\begin{equation*} \begin{array}{l} \min_x \quad -6x_1 -5x_2 \\ s.t.\left\{ \begin{array}{l} x_1 + 4x_2 \leq 16\\ 6x_1 + 4x_2 \leq 28\\ 2x_1 - 5x_2 \leq 6 \end{array} \right. \end{array} \end{equation*}\]

写成矩阵形式

\[\begin{equation*} \begin{array}{l} \min_x \quad \begin{bmatrix} -6 \\ -5 \end{bmatrix} ^{T} x \\ s.t.\left\{ \begin{array}{l} \begin{bmatrix} 1 & 4 \\ 6 & 4 \\ 2 & -5 \end{bmatrix} x \leq \begin{bmatrix} 16 \\ 28 \\ 6 \end{bmatrix} \end{array} \right. \end{array} \end{equation*}\]

对应成 R 代码如下

# lpSolve 添加约束条件
library(lpSolve)
# 目标
f.obj <- c(-6, -5)
# 约束
f.con <- matrix(c(1, 4, 6, 4, 2, -5), nrow = 3, byrow = TRUE)
# 方向
f.dir <- c("<=", "<=", "<=")
# 右手边
f.rhs <- c(16, 28, 6)
res <- lp("min", f.obj, f.con, f.dir, f.rhs)
res$objval
## [1] -31.4
res$solution
## [1] 2.4 3.4