【问题标题】:Transform Solver GRG Nonlinear function into PuLP将 Solver GRG 非线性函数转换为 PuLP
【发布时间】:2020-06-05 10:33:49
【问题描述】:

我的任务是将 Solver 中使用的 GRG 非线性问题转换为 python。由于我没有使用 NLP 的经验,我正在尝试将其转换为 LP 问题。

我们有 12 个变量代表一年中每月产生的太阳能发电量,还有 12 个常数代表每月的电网消耗。目标是最大化十二个变量的总和。在 PuLP 中,我们用以下方式表示这些变量:

problem = LpProblem("Test_Problem", LpMaximize)
grid_consumption = [190, 409, 273, 424, 351, 412, 360, 509, 280, 241, 263, 175]
total_grid_consumption = sum(consumo_odf)
fv_productions = LpVariable.dicts('fv', list(range(12)))

有五个约束,一些显式依赖变量,一些隐式依赖。

例如,其中一个约束条件是太阳能发电量不能大于电网消耗量,这是一个常数。在 PuLP 中,我们以这种方式表示此约束:

for i in range(12):
    fv_i - grid_consumption[i] <= 0

让我们头疼的约束之一是,1/3 的自我消耗必须大于补偿能量。 每月自用电量低于太阳能发电量(fv_i)时等于电网用电量,否则等于太阳能发电量:

for i in range(12):
    if(fv_i>grid_consumption[i]):
        self_consumption[i] = grid_consumption[i]
    else:
        self_consumption[i] = fv_i

Excel Solver 对此约束没有任何问题,但我们不知道如何将其转换为 PuLP 约束。欢迎任何帮助。这是我的第一个问题,所以如果我可以提供更多信息,请告诉我。谢谢。

【问题讨论】:

  • 您应该提供有关您的问题的更多背景信息。你的输入数据是什么?预期的结果是什么?你试过什么了?请检查此stackoverflow.com/help/how-to-ask,尤其是此stackoverflow.com/help/minimal-reproducible-example,并相应地编辑您的问题。
  • PuLP 仅适用于线性模型,所以我怀疑这是正确的工具。
  • x=max(a,b)的正确表述取决于细节。
  • @alec_djinn 我添加了更多信息。对LP了解不多所以不知道够不够

标签: python excel linear-programming solver pulp


【解决方案1】:

好的,所以我设法解决了它。结果我不得不再添加两个约束:

for i in range(12):
    self_consumption[i] <= grid_consumption[i]
    self_consumption[i] <= fv_i

由于是最大化类型的问题,每个变量的值都会低于电网消耗和太阳能发电量之间的最小值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多