Pyomo约束未生效导致P_grid变量违反非负界问题求助
Pyomo约束未生效导致P_grid变量违反非负界问题求助
大家好,我遇到一个Pyomo建模的棘手问题,希望能得到各位的帮助:
我明明给P_grid变量明确指定了within=NonNegativeReals的非负约束,但求解后却发现它出现了负数取值(比如P_grid[36] == -302.34367745743657)。更奇怪的是,求解器既没有判定模型不可行,也没有调整其他变量(比如delta或P_used_renew)来规避这个情况,反而像是直接把负数取成0,完全无视了变量的边界设定。
以下是我的核心约束和变量定义代码:
核心平衡约束代码
def grid_power_calculation_with_balance(model, t): if t == 0: return model.P_grid[t] == 0 return model.P_grid[t] == model.PCh[t] - model.PDch[t] + \ sum(model.gamma[i, t] * (cooling_capacity(value(model.T[i, t - 1])) / COP(value(model.T[i, t - 1])) * model.delta[i, t] + P_aux[i]) for i in I) - model.P_used_renew[t] model.grid_power_calculation = Constraint(T,rule=grid_power_calculation_with_balance)
变量定义代码
model.delta = Var(I, T, within=Binary) # Decision variable: 1 if cooling, 0 if heating model.P_used_renew = Var(T, within=NonNegativeReals) def renew_usage_limit(model, t): return model.P_used_renew[t] <= renew[t] model.renew_usage_limit = Constraint(T, rule=renew_usage_limit) # Auxiliary variables for constraints model.T = Var(I, T, bounds=lambda model, i, t: (LB[i], UB[i]), initialize=lambda model, i, t: initial_temperature[i]) model.P_grid = Var(T, within=NonNegativeReals) model.gamma = Var(I, T, within=Binary) model.PCh = Var(T, within=NonNegativeReals) model.PDch = Var(T, within=NonNegativeReals)
我已经确认过,Pyomo里决策变量和辅助变量的定义逻辑是符合规范的。模型里除了cooling_capacity和COP函数带有一些非线性外,其他部分都是线性的,而且之前这些非线性模块也没出过问题。按道理P_grid为负的话模型应该直接返回不可行,但实际情况完全不是这样。我使用的求解器是Gurobi,不知道这会不会是影响因素之一?
有没有朋友遇到过类似的问题?或者能帮我分析下可能的原因?需要更多细节的话我随时补充,谢谢大家!
备注:内容来源于stack exchange,提问作者Rui Rodrigues
相关产品推荐
相关产品推荐

