14.1 线性规划
clpAPI 线性规划求解器。glpk 的两个 R 接口 – glpkAPI 和 Rglpk 提供线性规划和混合整数规划的求解能力。lp_solve 的两个 R 接口 – lpSolveAPI 和 lpSolve 也提供类似的能力。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)
# 目标
<- c(-6, -5)
f.obj # 约束
<- matrix(c(1, 4, 6, 4, 2, -5), nrow = 3, byrow = TRUE)
f.con # 方向
<- c("<=", "<=", "<=")
f.dir # 右手边
<- c(16, 28, 6)
f.rhs <- lp("min", f.obj, f.con, f.dir, f.rhs)
res $objval res
## [1] -31.4
$solution res
## [1] 2.4 3.4