【问题标题】:Using lpSolve in R to Minimize Absolute Values in an Objective Function在 R 中使用 lpSolve 最小化目标函数中的绝对值
【发布时间】:2021-01-16 04:16:43
【问题描述】:

我想建立一个线性程序(如果可能,我不确定)来解决 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。决策变量是连续的,可以是正的也可以是负的。

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

【问题讨论】:

    标签: r linear-programming lpsolve


    【解决方案1】:

    我将回答这个问题,如何正确地使用绝对值对线性程序进行建模,以便任何 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)。因此,您只需在目标函数中替换它并添加这些约束(对于每个索引 1、...、4)。

    【讨论】:

    • 你的解释真的很有帮助!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2014-12-04
    • 1970-01-01
    相关资源
    最近更新 更多