【问题标题】:Mathematical operation of ABS() in objective function of PuLPPuLP目标函数中ABS()的数学运算
【发布时间】:2019-12-08 08:29:34
【问题描述】:

我正在尝试在 PuLP 中构建一个 LP 问题,由于我是 python 新手,想知道如何编写具有绝对值运算的目标函数。

到目前为止,我一直在使用 AMPL 来制定问题,现在想将整个模型转换为 Python。谁能帮我理解如何编码

SUM(ABS(x)) in objective function of PulP
x is the decision variable which is output of the model and objective function of the model is SUM(ABS(x))

【问题讨论】:

  • 欢迎来到 SO!你试过什么了?你能分享你的代码吗?你想让它做什么,以及它目前不工作的方式。有关编写好问题的更多建议(可能会得到好的答案),请参阅minimal reproducible example
  • min sum(abs(x)) 很简单。可以应用标准公式(参见任何关于线性规划的书)。 max sum(abs(x)) 更难:它需要二进制变量。
  • 嗨@kabdulla:我不能分享代码,因为它包含我雇主的专有信息。但是,我正在构建一个模型,该模型根据看到的短缺优化生产计划。因此,如果特定产品出现短缺,那么库存水平将为 -ve,而对于某些产品,库存水平将为正。为了优化库存水平,我需要目标函数为 min sum(abs(x))。我之前使用过 AMPL,它工作正常,但我没有任何好的资源来理解 PuLP 的语法
  • 嗨@ErwinKalvelagen:感谢您提供的信息。我得到了它。我使用下面的链接来解决问题。

标签: python-3.x linear-programming pulp


【解决方案1】:
from pulp import *

N = 3
x_vars = LpVariable.dicts("x",range(N))
x_vars_abs = LpVariable.dicts("x_abs",range(N))
prob = LpProblem("min_sum_abs", LpMinimize)

# OBJECTIVE
prob += lpSum(x_vars_abs)

# ABS CONSTRAINTS
for i in range(N):
    prob += x_vars_abs[i] >= x_vars[i]
    prob += x_vars_abs[i] >= -x_vars[i]

# OTHER MODEL CONSTRAINTS
prob += lpSum(x_vars) >= 2.0
prob += x_vars[0] >= x_vars[1] + 1.0
prob += x_vars[1] <= x_vars[2] - 2.0

prob.solve()

print ("Status: " + str(LpStatus[prob.status]))
print ("Objective: " + str(value(prob.objective)))

for v in prob.variables():
    print (v.name + " = " + str(v.varValue))

返回:

Status: Optimal
Objective: 2.6666667
x_0 = 0.66666667
x_1 = -0.33333333
x_2 = 1.6666667
x_abs_0 = 0.66666667
x_abs_1 = 0.33333333
x_abs_2 = 1.6666667

【讨论】:

  • 谢谢!我做了同样的事情并得到了想要的结果。感谢您的帮助。
  • 太棒了。供将来参考,以上将是minimal reproducible example 的示例。 - 最少的代码,以工作形式,允许其他人很容易地向您展示缺少的步骤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多