R 中的 lpsolve API:编辑列
lpsolve API in R: Edit column
我在 R 中使用 lpsolveAPI 并想为指定的列和行设置系数(指定约束数和决策变量数的系数)。
但是,虽然我可以添加新列(新决策变量)或设置现有列,但我无法编辑该列,因为该选项将删除该列中所有先前的系数。
例如,设5个约束和2个决策变量。那么:
lps.model <- make.lp(5, 2) #create lp model
#set coefficients for the first 3 constraint for both variables
for (i in seq(1,2)) set.column(lps.model, i, c(1,2,3), indices = c(1,2,3))
模型看起来像这样:
Model name:
C1 C2 C3 C4
Minimize 0 0 0 0
R1 1 1 0 0 free 0
R2 2 2 0 0 free 0
R3 3 3 0 0 free 0
R4 0 0 0 0 free 0
R5 0 0 0 0 free 0
Kind Std Std Std Std
Type Real Real Real Real
Upper Inf Inf Inf Inf
Lower 0 0 0 0
现在我想为第 4 和第 5 个约束添加系数。
for (i in seq(1,2)) set.column(lps.model, i, c(4,5), indices = c(4,5))
代码将重写模型,因为 set.column 函数将函数参数中未列出的所有系数设置为 0。
Model name:
C1 C2
Minimize 0 0
R1 0 0 free 0
R2 0 0 free 0
R3 0 0 free 0
R4 4 4 free 0
R5 5 5 free 0
Kind Std Std
Type Real Real
Upper Inf Inf
Lower 0 0
我有一个很大的约束和决策变量矩阵,需要 运行 对不同的变量集进行类似的循环。有什么方法可以在不重写现有列的情况下编辑它们吗?
您可以为此使用 set.mat
一次在 A 矩阵中设置一个值。请参阅此处的 help。
例如:
> set.mat(lps.model, 4,5,3)
将使第 4 行第 5 列的值为 3,而不会覆盖任何其他内容。因此,您可以在双循环中调用 set.mat
并更改各个值。
但是,如果您可以一次创建整个列(预处理以创建系数列表),然后使用 [=14= 一次性将它们添加到 lps.model
中,效率会更高] 特别是因为你说你有一个很大的决策变量矩阵。
我在 R 中使用 lpsolveAPI 并想为指定的列和行设置系数(指定约束数和决策变量数的系数)。
但是,虽然我可以添加新列(新决策变量)或设置现有列,但我无法编辑该列,因为该选项将删除该列中所有先前的系数。
例如,设5个约束和2个决策变量。那么:
lps.model <- make.lp(5, 2) #create lp model
#set coefficients for the first 3 constraint for both variables
for (i in seq(1,2)) set.column(lps.model, i, c(1,2,3), indices = c(1,2,3))
模型看起来像这样:
Model name:
C1 C2 C3 C4
Minimize 0 0 0 0
R1 1 1 0 0 free 0
R2 2 2 0 0 free 0
R3 3 3 0 0 free 0
R4 0 0 0 0 free 0
R5 0 0 0 0 free 0
Kind Std Std Std Std
Type Real Real Real Real
Upper Inf Inf Inf Inf
Lower 0 0 0 0
现在我想为第 4 和第 5 个约束添加系数。
for (i in seq(1,2)) set.column(lps.model, i, c(4,5), indices = c(4,5))
代码将重写模型,因为 set.column 函数将函数参数中未列出的所有系数设置为 0。
Model name:
C1 C2
Minimize 0 0
R1 0 0 free 0
R2 0 0 free 0
R3 0 0 free 0
R4 4 4 free 0
R5 5 5 free 0
Kind Std Std
Type Real Real
Upper Inf Inf
Lower 0 0
我有一个很大的约束和决策变量矩阵,需要 运行 对不同的变量集进行类似的循环。有什么方法可以在不重写现有列的情况下编辑它们吗?
您可以为此使用 set.mat
一次在 A 矩阵中设置一个值。请参阅此处的 help。
例如:
> set.mat(lps.model, 4,5,3)
将使第 4 行第 5 列的值为 3,而不会覆盖任何其他内容。因此,您可以在双循环中调用 set.mat
并更改各个值。
但是,如果您可以一次创建整个列(预处理以创建系数列表),然后使用 [=14= 一次性将它们添加到 lps.model
中,效率会更高] 特别是因为你说你有一个很大的决策变量矩阵。