pandas 如何编写一个pyomo约束/规则,并根据模型数据中的布尔值检查条件?

kkbh8khc  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(140)

我正在尝试使用Pyomo解决电池问题。我试图告诉模型,电池只能在一年中的特定时间放电。我已经实现了这一点,在我的初始 Dataframe 中创建了一个名为“Discharge”的布尔列,然后将其导入到我的Pyomo模型数据中。
如果我只是让求解器优化一年中的每一个小时,一切都工作得很好。然而,当尝试实现此规则时,我收到的解决方案与没有规则时完全相同,并且我可以在结果数据中看到“可放电”数据被忽略。这让我相信问题只在于我如何编写规则。
规则实施如下:

model.p_BAT_discharge = pyo.Var(model.t, within=pyo.NonNegativeReals)

    # whether or not the battery can discharge as per market rules
    model.dischargeable = pyo.Param(model.t,
                                    within = pyo.Boolean,
                                    initialize=dict(df_model['Dischargeable'])
                                    )
    def discharge_time_rule(model, t):
        if model.dischargeable[t] == False:
            return model.p_BAT_discharge[t] == 0
        else:
            return pyo.Constraint.Skip
        model.discharge_time_constraint = pyo.Constraint(model.t,rule=discharge_time_rule)

我也试过类似的东西:

def discharge_time_rule(model, t):
        if pyo.Value(model.dischargeable[t] == False) == True:
            return model.p_BAT_discharge[t] == 0
        else:
            return pyo.Constraint.Skip
        model.discharge_time_constraint = pyo.Constraint(model.t,rule=discharge_time_rule)

谢谢你!

yzuktlbb

yzuktlbb1#

你怀念那糟糕的缩进吗?

def discharge_time_rule(model, t):
    if pyo.Value(model.dischargeable[t] == False) == True:
        return model.p_BAT_discharge[t] == 0
    else:
        return pyo.Constraint.Skip

# The following line should be outside the function
model.discharge_time_constraint = pyo.Constraint(model.t,rule=discharge_time_rule)

相关问题