我目前正在尝试根据用电量来优化房屋的二氧化碳排放量。它还包括一个电池储存器。但是由于某些原因,能量计算的状态不起作用。我一直收到这个错误:
WARNING: Implicitly replacing the Component attribute soe (type=<class
'pyomo.core.base.var.IndexedVar'>) on block unknown with a new Component
(type=<class 'pyomo.core.base.constraint.IndexedConstraint'>). This is
usually indicative of a modelling error. To avoid this warning, use
block.del_component() and block.add_component().
Restarting kernel...到目前为止,这是我的代码:
model = ConcreteModel()
n = 30
model.t = RangeSet(1, n)
model.consumption = Param(model.t, initialize = df['Consumption'])
model.pv = Param(model.t, initialize = df['PV'])
model.emissionen = Param(model.t, initialize = df['CO2-Emissions'])
model.heatpump = Param(model.t, initialize = df['Heatpump'])
in_out_leistung = bt.iloc[1]['Values']
in_out_efficiency = bt.iloc[2]['Values']
battery_capacity = bt.iloc[0]['Values']
soe_start = 0
elec_import_max = 200
model.soe = Var(model.t, initialize = 0, within = NonNegativeReals)
model.charge = Var(model.t, within = NonNegativeReals, initialize = 0)
model.discharge = Var(model.t, within = NonNegativeReals, initialize = 0)
model.elec_grid = Var(model.t, bounds = (0, elec_import_max), within = NonNegativeReals)
def discharge_capacity_rule(model, t):
return model.discharge[t] <= in_out_leistung
model.discharge_capacity_rule = Constraint(model.t, rule = discharge_capacity_rule)
def charge_capacity_rule(model, t):
return model.charge[t] <= in_out_leistung
model.charge_capacity_rule = Constraint(model.t, rule = charge_capacity_rule)
def max_capacity_rule(model, t):
return model.soe[t] <= battery_capacity
model.max_capacity_rule = Constraint(model.t, rule = max_capacity_rule)
def soe_start_rule(model):
return model.soe[1] == soe_start
model.soe_start_rule = Constraint(rule = soe_start_rule)
def soe(model, t):
if t == 1:
return model.soe[t] == soe_start
else:
return model.soe[t] == model.soe[t-1] + (model.charge[t] * in_out_efficiency) - model.discharge[t] / in_out_efficiency
model.soe = Constraint(model.t, rule = soe)
def soe_end_rule(model):
return model.soe[n] == model.soe[1]
model.soe_end_rule = Constraint(rule = soe_end_rule)
def demand(model, t):
return model.demand[t] == model.heatpump[t] + model.consumption[t] + model.charge[t]
model.demand = Constraint(model.t, rule = demand)
def lastdeckung(model, t):
return model.pv[t] + model.elec_grid[t] + model.discharge[t] == model.demand[t]
model.lastdeckung = Constraint(model.t, rule = lastdeckung)
def emissionsreduzierung(model, t):
return sum(model.elec_grid[t] * model.emissionen[t] for t in model.n)
model.emissionsreduzierung = Objective(rule = emissionsreduzierung, sense = minimize)仓库应该是空的,开头和结尾都是空的。
发布于 2021-11-27 10:36:57
所以我到处都有一些错误。例如,在目标函数中,我忘记了将model.n更改为model.t,因为我在编写代码的过程中重命名了它。我认为最大的错误是忘记为需求创建一个变量。
model.demand = Var(model.t, within = NonNegativeReals)
def demand_rule(model, t):
return model.demand[t] == model.heatpump[t] + model.consumption[t] + model.charge[t]
model.demand_rule = Constraint(model.t, rule = demand_rule)现在它真的起作用了。
发布于 2021-11-21 00:18:37
您使用了两次相同的名称。您将model.soe作为变量和约束。
您必须重命名其中一个,因为模型不能有两个同名…的命名对象
https://stackoverflow.com/questions/70048818
复制相似问题