将求解器GRG非线性函数转换为纸浆

2024-05-29 05:50:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是将Solver中使用的GRG非线性问题转换为python。因为我没有NLP的经验,所以我试图将其转化为LP问题

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

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)))

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

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

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

让我们头疼的一个限制是,1/3的自我消耗必须大于补偿的能量。 如果电网用电量低于太阳能发电量(fv_i),则每月自用电量等于电网用电量,如果电网用电量低于太阳能发电量(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对此约束没有问题,但我们不知道如何将其转换为纸浆约束。欢迎任何帮助。这是我的第一个问题,如果我能提供更多的信息,请让我知道。谢谢


Tags: for方式常数range代表电网纸浆grid
1条回答
网友
1楼 · 发布于 2024-05-29 05:50:24

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

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

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

相关问题 更多 >

    热门问题