在 R 中使用 lpSolve 最小化 Objective 函数中的绝对值

Using lpSolve in R to Minimize Absolute Values in an Objective Function

我想设置一个线性程序(如果可能的话,我不确定)来解决R中的这个问题:

我要最小化函数:
abs(x1) + abs(x2) + abs(x3) + abs(x4)

限制条件:
x1 + x2 + x3 + x4 = 0
0.2x1 + 0.3x2 + 0.5x3 + 0.1x4 = 0.2

约束通常写成不等式,所以我假设我可以有两个等式,一个 <= 0 和 <= 0.2,另外两个 >= 0 和 >= 0.2。决策变量是连续的,可以是正的也可以是负的。

我可以为使用 lpSolve 的约束设置矩阵,但我最困惑的是如何在 objective 函数中实现绝对值函数。这个网站 (http://lpsolve.sourceforge.net/5.1/absolute.htm) 读得很好,但我不确定如何将其转化为 R 中 lpSolve 的输入。非常感谢任何帮助或指导!

我将回答这个关于如何使用绝对值正确建模线性程序以便任何 LP 求解器轻松求解的问题。诀窍是为每个具有绝对值的变量引入两个辅助变量。例如:

引入变量 z(1,p) 和 z(1,n),其中括号中的值是变量 z 的索引。 1表示对应x1,p代表正数,n代表负数。添加这些约束:

z(1,p) - z(1,n) = x1

z(1,p) >= 0

z(1,n) >= 0

看看这是做什么的,当 x1 为正时,则 z(1,p) = x1 且 z(1,n) = 0。当 x1 为负时,则 -z(1,n) = x1 且z(1,p) = 0。因此很明显 abs(x1) = z(1,p) + z(1,n)。所以你只需要在你的 objective 函数中替换它并添加这些约束(对于每个索引 1,...,4)。